[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Bug binutils/17099] BFD (GNU Binutils) 2.24.51.20140628 assertion fail
From: |
toni.spets at iki dot fi |
Subject: |
[Bug binutils/17099] BFD (GNU Binutils) 2.24.51.20140628 assertion fail coff-i386.c:509 |
Date: |
Thu, 23 Apr 2015 06:48:20 +0000 |
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/17099] BFD (GNU Binutils) 2.24.51.20140628 assertion fail coff-i386.c:509,
toni.spets at iki dot fi <=