https://sourceware.org/bugzilla/show_bug.cgi?id=16858
Rich Felker <bugdal at aerifal dot cx> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|RESOLVED |REOPENED CC| |bugdal at aerifal dot cx Resolution|FIXED |--- --- Comment #20 from Rich Felker <bugdal at aerifal dot cx> --- The fix that was applied only fixed PC-relative relocations (direct calls). Global data containing a function pointer to a weak function is still broken exactly the same way it was broken before: the value is off by the offset of the definition in the object file's .text section. The proper fix should have been removing the ENTIRE top-level #if block containing the offending code, which is wrong in all cases, not simply disabling it in the case !fixP->fx_pcrel. Minimal test case (use -O0 to ensure non-reordering so the offset of f in .text is not 0): void dummy() {} void f() {} void g() __attribute__((weak,alias("f"))); void *p = (void*)f; void *q = (void*)g; With the offending code/bug present, p contains &f and q contains &dummy. With it removed, both p and q contain &f(==&g). (Observed with objdump.) -- You are receiving this mail because: You are on the CC list for the bug. _______________________________________________ bug-binutils mailing list bug-binutils@gnu.org https://lists.gnu.org/mailman/listinfo/bug-binutils