summaryrefslogtreecommitdiff
path: root/libobjc
diff options
context:
space:
mode:
authorPaul Brook <paul@codesourcery.com>2011-10-20 13:57:21 +0000
committerMatthias Klose <doko@gcc.gnu.org>2011-10-20 13:57:21 +0000
commiteb405c4669307ce3b5026984e010faf78571e8b3 (patch)
treeda52fe8c30c6977caad20b3f25097ca238f65a42 /libobjc
parent86220f3f94c22f1b52d3406326b797ae9a0ba967 (diff)
downloadgcc-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/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. */