On Fri, Sep 15, 2006 at 05:56:38PM -0700, David Daney wrote:
The FDE data is unchanged, however its interpretation has changed due to
the added PC relative augmentation data in the CIE. Note that the
DW_CFA_set_loc in the first instruction pushes the PC out of the range
of the function so that the unwinder completly ignores the rest of the
FDE program causing a crash at runtime.
I used to be able to build (and run) libgcj with slightly older versions
of binutils, and gcc.
Does this seem like a problem with ld? Or is gcc creating something
inconsistent here?
I think that:
- What GCC is doing is legitimate.
- The linker is at fault for ignoring that some operations would
need to be changed.
- You can restore GCC to a less broken state by supressing this
change for the very first instruction in an FDE, and then the
linker bug will only trigger with hot/cold sections.