]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
exception.cc (parse_lsda_header): hardcode ttype_encoding for older ARM EABI toolchains.
authorPaul Brook <paul@codesourcery.com>
Thu, 20 Oct 2011 13:56:12 +0000 (13:56 +0000)
committerMatthias Klose <doko@gcc.gnu.org>
Thu, 20 Oct 2011 13:56:12 +0000 (13:56 +0000)
2011-10-17  Paul Brook  <paul@codesourcery.com>

        * exception.cc (parse_lsda_header): hardcode ttype_encoding for older
        ARM EABI toolchains.
        (get_ttype_entry) Remove __ARM_EABI_UNWINDER__ variant.

From-SVN: r180254

libjava/ChangeLog
libjava/exception.cc

index efbf85573ff9dd9044559e6e29008944b6452c8c..7ff941e459f9e7142f83c4a5ef0362eeab48bf2b 100644 (file)
@@ -1,3 +1,9 @@
+2011-10-17  Paul Brook  <paul@codesourcery.com>
+
+       * exception.cc (parse_lsda_header): hardcode ttype_encoding for older
+       ARM EABI toolchains.
+       (get_ttype_entry) Remove __ARM_EABI_UNWINDER__ variant.
+
 2011-10-16  Uros Bizjak  <ubizjak@gmail.com>
            Eric Botcazou  <ebotcazou@adacore.com>
 
index 5a8a9e21cfa4725383ef9dc64424e2e9280c1b7e..56f25ad44be5adb6198676bfa6c9743e4981fc07 100644 (file)
@@ -161,6 +161,11 @@ parse_lsda_header (_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;
     }
@@ -176,21 +181,6 @@ parse_lsda_header (_Unwind_Context *context, const unsigned char *p,
   return p;
 }
 
-#ifdef __ARM_EABI_UNWINDER__
-
-static void **
-get_ttype_entry(_Unwind_Context *, lsda_header_info* info, _uleb128_t i)
-{
-  _Unwind_Ptr ptr;
-
-  ptr = (_Unwind_Ptr) (info->TType - (i * 4));
-  ptr = _Unwind_decode_target2(ptr);
-  
-  return reinterpret_cast<void **>(ptr);
-}
-
-#else
-
 static void **
 get_ttype_entry (_Unwind_Context *context, lsda_header_info *info, long i)
 {
@@ -202,8 +192,6 @@ get_ttype_entry (_Unwind_Context *context, lsda_header_info *info, long i)
   return reinterpret_cast<void **>(ptr);
 }
 
-#endif
-
 // Using a different personality function name causes link failures
 // when trying to mix code using different exception handling models.
 #ifdef SJLJ_EXCEPTIONS