bug-binutils
[Top][All Lists]
Advanced

[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.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]