IA64 HP-UX Unwind patch
Steve Ellcey
sje@cup.hp.com
Wed Aug 14 13:34:00 GMT 2002
> On Wed, Aug 14, 2002 at 12:34:17PM -0700, Steve Ellcey wrote:
> > Actually the modification would only be needed in one place,
> > in eh_throw.cc (__gxx_exception_cleanup) so that should be
> > simple to do.
>
> You keep forgetting about libjava.
I do keep forgetting about libjava but I just looked and I don't see a
use of _URC_FOREIGN_EXCEPTION in it anywhere so I don't think I have to
change anything there for the _URC_NO_REASON problem. The _Unwind_SetIP
part may require libjava work.
> > I am not sure what you mean by "How does the function call ABI work?"
> > so I don't know how to answer that.
>
> Does void* get expanded to DImode in a register for the call?
No, void* would just be SImode (in ILP32 mode) when passed and would not
be expanded.
I am experimenting with the idea of the following change in unwind.h:
#if defined(__ia64__) && defined(__hpux__)
typedef unsigned _Unwind_Ptr __attribute__((__mode__(__word__)));
#else
typedef unsigned _Unwind_Ptr __attribute__((__mode__(__pointer__)));
#endif
The other changes that would be needed to make this work would be to
modify catchTemp in the __cxa_exception in cxx-unwind.h to be
_Unwind_Ptr instead of void* and get rid of the void* casts when
assigning to catchTemp. Does this look like a better approach? I am
still testing it to see if it actually works. This might also make
libjava changes unnecessary since the Java LSDA uses _Unwind_Ptr's in
its LSDA but I don't see any void* types like catchTemp in the Java
code.
Steve Ellcey
sje@cup.hp.com
More information about the Libstdc++
mailing list