https://sourceware.org/bugzilla/show_bug.cgi?id=17099
Toni Spets <toni.spets at iki dot fi> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |toni.spets at iki dot fi
--- Comment #1 from Toni Spets <toni.spets at iki dot fi> ---
Created attachment 8262
--> https://sourceware.org/bugzilla/attachment.cgi?id=8262&action=edit
Add support for absolute relocations
I've also encountered this issue and it makes some interesting absolute
jump/call tricks impossible with assembly. The workaround I've been using is to
use ELF32 object files for ld so they are relocated properly. The only downside
is that it seems to be impossible to get GCC/AS to output in non-default object
format so I had to use NASM with -f elf.
This patch takes absolute R_PCRLONG type relocations into account and adjusts
the relative address.
I don't know if this is the correct fix, but it provides me correct results. In
addition because this edge case throws assertion error without this change, at
worst it would produce incorrect results rather than asserts.
The simple test case would be something like (in GNU as):
-- test.s --
_main:
nop
nop
jmp 0x12345678
call 0x12345678
-- /test.s --
i686-w64-mingw32-gcc -c test.s
./ld-new test.o
i686-w64-mingw32-objdump -d a.exe
...
00401000 <_start>:
401000: 90 nop
401001: 90 nop
401002: e9 71 46 f4 11 jmp 12345678
<___crt_xc_end__+0x11f42678>
401007: e8 6c 46 f4 11 call 12345678
<___crt_xc_end__+0x11f42678>
40100c: c3 ret
...
--
You are receiving this mail because:
You are on the CC list for the bug.
_______________________________________________
bug-binutils mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/bug-binutils