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

libjava/ChangeLog
libjava/exception.cc

index efbf855..7ff941e 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 5a8a9e2..56f25ad 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