This is the mail archive of the
binutils@sources.redhat.com
mailing list for the binutils project.
Dynamic PLABELS in .eh_frame don't work as expected on hppa-linux
- From: "John David Anglin" <dave at hiauly1 dot hia dot nrc dot ca>
- To: amodra at bigpond dot net dot au
- Cc: binutils at sources dot redhat dot com
- Date: Mon, 25 Feb 2002 14:28:54 -0500 (EST)
- Subject: Dynamic PLABELS in .eh_frame don't work as expected on hppa-linux
I have been working trying to get frame notes and exceptions working
on hppa-linux usings the dwarf2 unwinding mechanism. Issues have
arisen with function pointers and code labels. The specific problem
at hand is the indirect call from _Unwind_RaiseException to the
personality function __gxx_personality_v0 in eh_personality.cc fails
when the application is linked with one or more shared libraries
because a function descriptor isn't used for the call.
I have ASM_PREFERRED_EH_DATA_FORMAT(CODE,GLOBAL) and
ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX defined as follows:
#define ASM_PREFERRED_EH_DATA_FORMAT(CODE,GLOBAL) \
(CODE != 0 \
? DW_EH_PE_aligned \
: DW_EH_PE_absptr)
#define ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX(FILE, ENCODING, SIZE, ADDR, DONE) \
do { \
if (((ENCODING) & 0x0F) == DW_EH_PE_aligned) \
{ \
fputs (integer_asm_op (SIZE, FALSE), FILE); \
fputs ("P%", FILE); \
assemble_name (FILE, XSTR (ADDR, 0)); \
goto DONE; \
} \
} while (0)
Ideally, it would be nice to use an indirect data relative relocation
but I haven't been able to resolve the issues with specifying the base
for the relocation, etc. The above ouputs an aligned plabel for
code labels and function pointers in the .eh_frame section.
The above defines seem to work with shared code under hpux and static
linked code under hppa-linux. However, the dynamic loader doesn't
do the right thing under hppa-linux and I don't know why. Any clues
as to why plabels don't work in .eh_frame? It's read/write.
Dave
--
J. David Anglin dave.anglin@nrc.ca
National Research Council of Canada (613) 990-0752 (FAX: 952-6605)