bug-binutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Bug gold/19177] New: gold doesn't handle R_386_GOT32X relocation withou


From: hjl.tools at gmail dot com
Subject: [Bug gold/19177] New: gold doesn't handle R_386_GOT32X relocation without base register
Date: Wed, 28 Oct 2015 03:34:05 +0000

https://sourceware.org/bugzilla/show_bug.cgi?id=19177

            Bug ID: 19177
           Summary: gold doesn't handle R_386_GOT32X relocation without
                    base register
           Product: binutils
           Version: 2.26 (HEAD)
            Status: NEW
          Severity: normal
          Priority: P2
         Component: gold
          Assignee: ccoutant at gmail dot com
          Reporter: hjl.tools at gmail dot com
                CC: ian at airs dot com
  Target Milestone: ---

The new R_386_GOT32X relocation can have no base register:

        movl    address@hidden, %eax

Its calculation is G + A, instead of G + A - GOT, and it can
only used to generate non-PIC executable:

https://github.com/hjl-tools/x86-psABI/wiki/intel386-psABI-20151021.pdf

address@hidden gold]$ cat x.S
        .text
        movl    address@hidden, %eax
address@hidden gold]$ cat y.S
        .data
        .globl  bar
        .type   bar, @object
bar:
        .byte   1
address@hidden gold]$ make
gcc -m32 -c -o x.o x.S
gcc -m32 -c -o y.o y.S
ld.bfd -m elf_i386 -o liby.so -shared y.o
ld.bfd -m elf_i386 -o x x.o liby.so
ld.bfd: warning: cannot find entry symbol _start; defaulting to
0000000008048190
objdump -dwr x.o

x.o:     file format elf32-i386


Disassembly of section .text:

00000000 <.text>:
   0:   8b 05 00 00 00 00       mov    0x0,%eax 2: R_386_GOT32X bar
objdump -dwr x

x:     file format elf32-i386


Disassembly of section .text:

08048190 <.text>:
 8048190:       8b 05 18 92 04 08       mov    0x8049218,%eax
readelf -SW x | grep ".\got "
  [ 9] .got              PROGBITS        08049218 000218 000004 04  WA  0   0 
4
address@hidden gold]$ make libx.so
ld.bfd -m elf_i386 -o libx.so -shared x.o
ld.bfd: x.o: direct GOT relocation R_386_GOT32X against `bar' without base
register can not be used when making a shared object
ld.bfd: failed to set dynamic section sizes: File format not recognized
Makefile:18: recipe for target 'libx.so' failed
make: *** [libx.so] Error 1

Gold doesn't handle it properly:

address@hidden gold]$ make LD=ld.gold 
gcc -m32 -c -o x.o x.S
gcc -m32 -c -o y.o y.S
ld.gold -m elf_i386 -o liby.so -shared y.o
ld.gold -m elf_i386 -o x x.o liby.so
objdump -dwr x.o

x.o:     file format elf32-i386


Disassembly of section .text:

00000000 <.text>:
   0:   8b 05 00 00 00 00       mov    0x0,%eax 2: R_386_GOT32X bar
objdump -dwr x

x:     file format elf32-i386


Disassembly of section .text:

08048190 <.text>:
 8048190:       8b 05 fc ff ff ff       mov    0xfffffffc,%eax
readelf -SW x | grep ".\got "
  [ 8] .got              PROGBITS        08049220 000220 000004 00  WA  0   0 
4
address@hidden gold]$ make LD=ld.gold  libx.so
ld.gold -m elf_i386 -o libx.so -shared x.o
address@hidden gold]$

-- 
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]