Re: [patch] C6X unwinding/exception handling

Matthias Klose <[email protected]>
Newsgroups gmane.comp.gcc.patches,gmane.comp.gcc.java.devel
Message-ID <[email protected]>
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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.