diff options
author | Paul Brook <paul@codesourcery.com> | 2011-10-20 13:57:21 +0000 |
---|---|---|
committer | Matthias Klose <doko@gcc.gnu.org> | 2011-10-20 13:57:21 +0000 |
commit | eb405c4669307ce3b5026984e010faf78571e8b3 (patch) | |
tree | da52fe8c30c6977caad20b3f25097ca238f65a42 /libobjc | |
parent | 86220f3f94c22f1b52d3406326b797ae9a0ba967 (diff) | |
download | gcc-eb405c4669307ce3b5026984e010faf78571e8b3.tar.gz |
exception.c (parse_lsda_header): hardcode ttype_encoding for older ARM EABI toolchains.
2011-10-17 Paul Brook <paul@codesourcery.com>
Matthias Klose <doko@ubuntu.com>
* exception.c (parse_lsda_header): hardcode ttype_encoding for older
ARM EABI toolchains.
(get_ttype_entry) Remove __ARM_EABI_UNWINDER__ variant.
Co-Authored-By: Matthias Klose <doko@ubuntu.com>
From-SVN: r180255
Diffstat (limited to 'libobjc')
-rw-r--r-- | libobjc/ChangeLog | 7 | ||||
-rw-r--r-- | libobjc/exception.c | 27 |
2 files changed, 12 insertions, 22 deletions
diff --git a/libobjc/ChangeLog b/libobjc/ChangeLog index dbc70f190bb..86e8c139194 100644 --- a/libobjc/ChangeLog +++ b/libobjc/ChangeLog @@ -1,3 +1,10 @@ +2011-10-17 Paul Brook <paul@codesourcery.com> + Matthias Klose <doko@ubuntu.com> + + * exception.c (parse_lsda_header): hardcode ttype_encoding for older + ARM EABI toolchains. + (get_ttype_entry) Remove __ARM_EABI_UNWINDER__ variant. + 2011-10-09 Nicola Pero <nicola.pero@meta-innovation.com> PR libobjc/49883 diff --git a/libobjc/exception.c b/libobjc/exception.c index 37daed8f30c..04308ce13e7 100644 --- a/libobjc/exception.c +++ b/libobjc/exception.c @@ -159,6 +159,11 @@ parse_lsda_header (struct _Unwind_Context *context, const unsigned char *p, info->ttype_encoding = *p++; if (info->ttype_encoding != DW_EH_PE_omit) { +#if _GLIBCXX_OVERRIDE_TTYPE_ENCODING + /* Older ARM EABI toolchains set this value incorrectly, so use a + hardcoded OS-specific format. */ + info->ttype_encoding = _GLIBCXX_OVERRIDE_TTYPE_ENCODING; +#endif p = read_uleb128 (p, &tmp); info->TType = p + tmp; } @@ -174,26 +179,6 @@ parse_lsda_header (struct _Unwind_Context *context, const unsigned char *p, return p; } -#ifdef __ARM_EABI_UNWINDER__ - -static Class -get_ttype_entry (struct lsda_header_info *info, _uleb128_t i) -{ - _Unwind_Ptr ptr; - - ptr = (_Unwind_Ptr) (info->TType - (i * 4)); - ptr = _Unwind_decode_target2 (ptr); - - /* NULL ptr means catch-all. Note that if the class is not found, - this will abort the program. */ - if (ptr) - return objc_getRequiredClass ((const char *) ptr); - else - return 0; -} - -#else - static Class get_ttype_entry (struct lsda_header_info *info, _Unwind_Word i) { @@ -211,8 +196,6 @@ get_ttype_entry (struct lsda_header_info *info, _Unwind_Word i) return 0; } -#endif - /* Using a different personality function name causes link failures when trying to mix code using different exception handling models. */ |