[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.
- [Bug gold/19177] New: gold doesn't handle R_386_GOT32X relocation without base register,
hjl.tools at gmail dot com <=