runtime: on ARM32 EABI, don't get LSDA if compact model is used

On ARM32 EABI, when the "compact" unwinding model is used, it
    does not have standard LSDA and _Unwind_GetLanguageSpecificData
    will not return data that is parseable by us. Check this
    conditon before calling _Unwind_GetLanguageSpecificData.
    
    Fix ARM32 build.
    
    Reviewed-on: https://go-review.googlesource.com/c/155758

From-SVN: r267428
This commit is contained in:
Ian Lance Taylor 2018-12-27 03:13:11 +00:00
parent 257992db89
commit 75e479a8b5
2 changed files with 12 additions and 1 deletions

View File

@ -1,4 +1,4 @@
16a48dbc1c69075321b388d235651b59abcb58ce 785414705628bf9d1279a8042e1886440424aade
The first line of this file holds the git revision number of the last The first line of this file holds the git revision number of the last
merge done from the gofrontend repository. merge done from the gofrontend repository.

View File

@ -646,6 +646,17 @@ findstackmaps (struct _Unwind_Context *context, _Unwind_Ptr *ip, _Unwind_Ptr *sp
_sleb128_t index; _sleb128_t index;
int size; int size;
#ifdef __ARM_EABI_UNWINDER__
{
_Unwind_Control_Block *ucbp;
ucbp = (_Unwind_Control_Block *) _Unwind_GetGR (context, 12);
if (*ucbp->pr_cache.ehtp & (1u << 31))
// The "compact" model is used, with one of the predefined
// personality functions. It doesn't have standard LSDA.
return NOTFOUND_OK;
}
#endif
language_specific_data = (const unsigned char *) language_specific_data = (const unsigned char *)
_Unwind_GetLanguageSpecificData (context); _Unwind_GetLanguageSpecificData (context);