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
This commit is contained in:
Paul Brook 2011-10-20 13:57:21 +00:00 committed by Matthias Klose
parent 86220f3f94
commit eb405c4669
2 changed files with 12 additions and 22 deletions

View File

@ -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

View File

@ -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. */