diff options
author | Ian Lance Taylor <ian@gcc.gnu.org> | 2018-12-27 03:13:11 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2018-12-27 03:13:11 +0000 |
commit | 75e479a8b5afc311eafb7312a2f877166309d374 (patch) | |
tree | 4ad7e40b50094b49bec14206412ac794bae1b3fe | |
parent | 257992db897963535d4fdec0ccae4e3f3cb1086c (diff) | |
download | gcc-75e479a8b5afc311eafb7312a2f877166309d374.zip gcc-75e479a8b5afc311eafb7312a2f877166309d374.tar.gz gcc-75e479a8b5afc311eafb7312a2f877166309d374.tar.bz2 |
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
-rw-r--r-- | gcc/go/gofrontend/MERGE | 2 | ||||
-rw-r--r-- | libgo/runtime/go-unwind.c | 11 |
2 files changed, 12 insertions, 1 deletions
diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE index 8b1ca48..2bcf536 100644 --- a/gcc/go/gofrontend/MERGE +++ b/gcc/go/gofrontend/MERGE @@ -1,4 +1,4 @@ -16a48dbc1c69075321b388d235651b59abcb58ce +785414705628bf9d1279a8042e1886440424aade The first line of this file holds the git revision number of the last merge done from the gofrontend repository. diff --git a/libgo/runtime/go-unwind.c b/libgo/runtime/go-unwind.c index f4bbfb6..388d7c7 100644 --- a/libgo/runtime/go-unwind.c +++ b/libgo/runtime/go-unwind.c @@ -646,6 +646,17 @@ findstackmaps (struct _Unwind_Context *context, _Unwind_Ptr *ip, _Unwind_Ptr *sp _sleb128_t index; 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 *) _Unwind_GetLanguageSpecificData (context); |