Commit eb405c46 by Paul Brook Committed by Matthias Klose

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
parent 86220f3f
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> 2011-10-09 Nicola Pero <nicola.pero@meta-innovation.com>
PR libobjc/49883 PR libobjc/49883
......
...@@ -159,6 +159,11 @@ parse_lsda_header (struct _Unwind_Context *context, const unsigned char *p, ...@@ -159,6 +159,11 @@ parse_lsda_header (struct _Unwind_Context *context, const unsigned char *p,
info->ttype_encoding = *p++; info->ttype_encoding = *p++;
if (info->ttype_encoding != DW_EH_PE_omit) 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); p = read_uleb128 (p, &tmp);
info->TType = p + tmp; info->TType = p + tmp;
} }
...@@ -174,26 +179,6 @@ parse_lsda_header (struct _Unwind_Context *context, const unsigned char *p, ...@@ -174,26 +179,6 @@ parse_lsda_header (struct _Unwind_Context *context, const unsigned char *p,
return 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 static Class
get_ttype_entry (struct lsda_header_info *info, _Unwind_Word i) 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) ...@@ -211,8 +196,6 @@ get_ttype_entry (struct lsda_header_info *info, _Unwind_Word i)
return 0; return 0;
} }
#endif
/* Using a different personality function name causes link failures /* Using a different personality function name causes link failures
when trying to mix code using different exception handling when trying to mix code using different exception handling
models. */ models. */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment