This is the mail archive of the
java@gcc.gnu.org
mailing list for the Java project.
Re: [patch] C6X unwinding/exception handling
- From: Matthias Klose <doko at ubuntu dot com>
- To: Andrew Haley <aph at redhat dot com>
- Cc: Paul Brook <paul at codesourcery dot com>, gcc-patches at gcc dot gnu dot org, GCC Java <java at gcc dot gnu dot org>, Nicola Pero <nicola dot pero at meta-innovation dot com>
- Date: Mon, 10 Oct 2011 13:27:06 +0200
- Subject: Re: [patch] C6X unwinding/exception handling
- References: <201108041531.58790.paul@codesourcery.com> <201109131348.13087.paul@codesourcery.com> <4E9180F5.3050203@ubuntu.com> <4E92C9D0.10106@redhat.com>
On 10/10/2011 12:32 PM, Andrew Haley wrote:
> On 10/09/2011 12:09 PM, Matthias Klose wrote:
>> This did break libobjc and libjava on arm-linux-gnueabi.
>>
>> libobjc now has an undefined reference to _Unwind_decode_target2, which can be
>> avoided with
with this patch, the libobjc testsuite results looks as before this change.
>>
>> --- libobjc/exception.c.orig 2011-07-21 15:33:57.000000000 +0000
>> +++ libobjc/exception.c 2011-10-09 10:53:12.554940776 +0000
>> @@ -182,7 +182,7 @@
>> _Unwind_Ptr ptr;
>>
>> ptr = (_Unwind_Ptr) (info->TType - (i * 4));
>> - ptr = _Unwind_decode_target2 (ptr);
>> + ptr = _Unwind_decode_typeinfo_ptr (info->ttype_base, (_Unwind_Word) ptr);
>>
>> /* NULL ptr means catch-all. Note that if the class is not found,
>> this will abort the program. */
>>
>> libjava fails to build, the same change doesn't work for libjava/exception.cc,
>> because the struct lsda_header_info in exception.cc is missing the ttype_base
>> member. Any suggestions?
>
> Is this fixable without backing out Paul Brooks' patch?
currently testing
Index: libjava/exception.cc
===================================================================
--- libjava/exception.cc (revision 179739)
+++ libjava/exception.cc (working copy)
@@ -135,6 +135,7 @@
{
_Unwind_Ptr Start;
_Unwind_Ptr LPStart;
+ _Unwind_Ptr ttype_base;
const unsigned char *TType;
const unsigned char *action_table;
unsigned char ttype_encoding;
@@ -184,7 +185,7 @@
_Unwind_Ptr ptr;
ptr = (_Unwind_Ptr) (info->TType - (i * 4));
- ptr = _Unwind_decode_target2(ptr);
+ ptr = _Unwind_decode_typeinfo_ptr (info->ttype_base, (_Unwind_Word) ptr);
return reinterpret_cast<void **>(ptr);
}
@@ -325,6 +326,7 @@
// Parse the LSDA header.
p = parse_lsda_header (context, language_specific_data, &info);
+ info.ttype_base = base_of_encoded_value (info.ttype_encoding, context);
#ifdef HAVE_GETIPINFO
ip = _Unwind_GetIPInfo (context, &ip_before_insn);
#else