OSDN Git Service

2011-10-17 Paul Brook <paul@codesourcery.com>
authordoko <doko@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 20 Oct 2011 13:57:21 +0000 (13:57 +0000)
committerdoko <doko@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 20 Oct 2011 13:57:21 +0000 (13:57 +0000)
            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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@180255 138bc75d-0d04-0410-961f-82ee72b054a4

libobjc/ChangeLog
libobjc/exception.c

index dbc70f1..86e8c13 100644 (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
index 37daed8..04308ce 100644 (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.  */