summaryrefslogtreecommitdiff
path: root/libjava
diff options
context:
space:
mode:
authordoko <doko@138bc75d-0d04-0410-961f-82ee72b054a4>2011-10-20 13:56:12 +0000
committerdoko <doko@138bc75d-0d04-0410-961f-82ee72b054a4>2011-10-20 13:56:12 +0000
commit619575374091d3aba991b90f20b210df59a7a80d (patch)
tree1930855e20b442b11112e68a4046d974d71f6320 /libjava
parent08810c7497e49fdb42b4009d185e87a9f6c85ffd (diff)
downloadgcc-619575374091d3aba991b90f20b210df59a7a80d.tar.gz
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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@180254 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava')
-rw-r--r--libjava/ChangeLog6
-rw-r--r--libjava/exception.cc22
2 files changed, 11 insertions, 17 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index efbf85573ff..7ff941e459f 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -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>
diff --git a/libjava/exception.cc b/libjava/exception.cc
index 5a8a9e21cfa..56f25ad44be 100644
--- a/libjava/exception.cc
+++ b/libjava/exception.cc
@@ -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