This is the mail archive of the binutils@sources.redhat.com mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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)


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]