summaryrefslogtreecommitdiff
path: root/libobjc
diff options
context:
space:
mode:
Diffstat (limited to 'libobjc')
-rw-r--r--libobjc/ChangeLog7
-rw-r--r--libobjc/exception.c27
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. */