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