[committed, PATCH] Remove Disp16|Disp32 from 64-bit direct branches

Michael Matz matz@suse.de
Tue May 12 15:47:00 GMT 2015


Hi,

On Tue, 12 May 2015, H.J. Lu wrote:

> > Actually also that one is correctly printed I think (from a hello world
> > main, where I added a jmprel16 +0):
> >
> > 000000000040055c <main>:
> >   40055c:       55                      push   %rbp
> >   40055d:       48 89 e5                mov    %rsp,%rbp
> >   400560:       48 83 ec 30             sub    $0x30,%rsp
> >   400564:       c6 45 d1 00             movb   $0x0,-0x2f(%rbp)
> >   400568:       c6 45 d0 61             movb   $0x61,-0x30(%rbp)
> >   40056c:       48 8d 45 d0             lea    -0x30(%rbp),%rax
> >   400570:       48 89 c2                mov    %rax,%rdx
> >   400573:       be 44 06 40 00          mov    $0x400644,%esi
> >   400578:       66 e9 00 00             jmpw   57c <_init-0x3ffe8c>
> >
> > 000000000040057c <next>:
> >   40057c:       bf 52 06 40 00          mov    $0x400652,%edi
> >   ...
> >
> > It shows that rip is going to be truncated.
> >
> 
> This is the same issue as
> 
> https://sourceware.org/bugzilla/show_bug.cgi?id=18386
> 
> On Intel processors, 0x66 prefix before direct 32-bit unconditional
> call/jmp is ignored.  Whatever we do is wrong on AMD or Intel
> processors.

Well, in that case I'd say the correct thing to do is to _not_ do any 
change, but rather let bintils work like it always did and resolve the 
above bug report as WONTFIX (or unfixable or something).


Ciao,
Michael.



More information about the Binutils mailing list