1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
|
Upstream-Status: Backport
From fee27086a7592c1812253e9c1c26f412dd87f3a2 Mon Sep 17 00:00:00 2001
From: "H.J. Lu" <hjl.tools@gmail.com>
Date: Tue, 10 Jan 2012 20:34:56 +0000
Subject: [PATCH 055/262] Remove ABI_64_P check on R_X86_64_PCXX
bfd/
2012-01-10 H.J. Lu <hongjiu.lu@intel.com>
PR ld/13581
* elf64-x86-64.c (elf_x86_64_relocate_section): Remove ABI_64_P
check on R_X86_64_PCXX.
ld/testsuite/
2012-01-10 H.J. Lu <hongjiu.lu@intel.com>
PR ld/13581
* ld-x86-64/ilp32-4.s: New.
* ld-x86-64/ilp32-10.d: Likewise.
* ld-x86-64/ilp32-10.s: Likewise.
* ld-x86-64/ilp32-4.d: Adjusted.
* ld-x86-64/ilp32-5.d: Likewise.
* ld-x86-64/ilp32-5.s: Likewise.
* ld-x86-64/x86-64.exp: Run ilp32-10.
---
bfd/ChangeLog | 7 +++++++
bfd/elf64-x86-64.c | 1 -
ld/testsuite/ChangeLog | 14 ++++++++++++++
ld/testsuite/ld-x86-64/ilp32-10.d | 3 +++
ld/testsuite/ld-x86-64/ilp32-10.s | 3 +++
ld/testsuite/ld-x86-64/ilp32-4.d | 32 +++++++++++++-------------------
ld/testsuite/ld-x86-64/ilp32-4.s | 3 +++
ld/testsuite/ld-x86-64/ilp32-5.d | 2 +-
ld/testsuite/ld-x86-64/ilp32-5.s | 2 +-
ld/testsuite/ld-x86-64/x86-64.exp | 1 +
10 files changed, 46 insertions(+), 22 deletions(-)
create mode 100644 ld/testsuite/ld-x86-64/ilp32-10.d
create mode 100644 ld/testsuite/ld-x86-64/ilp32-10.s
create mode 100644 ld/testsuite/ld-x86-64/ilp32-4.s
diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c
index 3a2444b..bdb3ae6 100644
--- a/bfd/elf64-x86-64.c
+++ b/bfd/elf64-x86-64.c
@@ -3460,7 +3460,6 @@ elf_x86_64_relocate_section (bfd *output_bfd,
case R_X86_64_PC16:
case R_X86_64_PC32:
if (info->shared
- && ABI_64_P (output_bfd)
&& (input_section->flags & SEC_ALLOC) != 0
&& (input_section->flags & SEC_READONLY) != 0
&& h != NULL)
diff --git a/ld/testsuite/ld-x86-64/ilp32-10.d b/ld/testsuite/ld-x86-64/ilp32-10.d
new file mode 100644
index 0000000..43d9fbd
--- /dev/null
+++ b/ld/testsuite/ld-x86-64/ilp32-10.d
@@ -0,0 +1,3 @@
+#as: --x32
+#ld: -shared -melf32_x86_64
+#error: .*relocation R_X86_64_PC32 against undefined symbol `bar' can not be used when making a shared object; recompile with -fPIC
diff --git a/ld/testsuite/ld-x86-64/ilp32-10.s b/ld/testsuite/ld-x86-64/ilp32-10.s
new file mode 100644
index 0000000..70e4a90
--- /dev/null
+++ b/ld/testsuite/ld-x86-64/ilp32-10.s
@@ -0,0 +1,3 @@
+ .globl foo
+foo:
+ mov bar(%rip), %rax
diff --git a/ld/testsuite/ld-x86-64/ilp32-4.d b/ld/testsuite/ld-x86-64/ilp32-4.d
index 84dc7b2..92d8a67 100644
--- a/ld/testsuite/ld-x86-64/ilp32-4.d
+++ b/ld/testsuite/ld-x86-64/ilp32-4.d
@@ -1,36 +1,30 @@
-#source: start.s
#as: --x32
#ld: -m elf32_x86_64 -shared --no-ld-generated-unwind-info
#readelf: -d -S --wide
-There are 10 section headers, starting at offset 0x22c:
+There are 9 section headers, starting at offset 0x1d8:
Section Headers:
\[Nr\] Name Type Addr Off Size ES Flg Lk Inf Al
\[ 0\] NULL 00000000 000000 000000 00 0 0 0
- \[ 1\] .hash HASH 00000094 000094 000030 04 A 2 0 4
- \[ 2\] .dynsym DYNSYM 000000c4 0000c4 000070 10 A 3 2 4
- \[ 3\] .dynstr STRTAB 00000134 000134 00001d 00 A 0 0 1
- \[ 4\] .rela.dyn RELA 00000154 000154 00000c 0c A 2 0 4
- \[ 5\] .text PROGBITS 00000160 000160 000005 00 AX 0 0 4
- \[ 6\] .dynamic DYNAMIC 00200168 000168 000078 08 WA 3 0 4
- \[ 7\] .shstrtab STRTAB 00000000 0001e0 00004a 00 0 0 1
- \[ 8\] .symtab SYMTAB 00000000 0003bc 0000e0 10 9 9 4
- \[ 9\] .strtab STRTAB 00000000 00049c 000043 00 0 0 1
+ \[ 1\] .hash HASH 00000094 000094 00002c 04 A 2 0 4
+ \[ 2\] .dynsym DYNSYM 000000c0 0000c0 000060 10 A 3 2 4
+ \[ 3\] .dynstr STRTAB 00000120 000120 000019 00 A 0 0 1
+ \[ 4\] .text PROGBITS 0000013c 00013c 000001 00 AX 0 0 4
+ \[ 5\] .dynamic DYNAMIC 00200140 000140 000058 08 WA 3 0 4
+ \[ 6\] .shstrtab STRTAB 00000000 000198 000040 00 0 0 1
+ \[ 7\] .symtab SYMTAB 00000000 000340 0000c0 10 8 8 4
+ \[ 8\] .strtab STRTAB 00000000 000400 00003f 00 0 0 1
Key to Flags:
W \(write\), A \(alloc\), X \(execute\), M \(merge\), S \(strings\), l \(large\)
I \(info\), L \(link order\), G \(group\), T \(TLS\), E \(exclude\), x \(unknown\)
O \(extra OS processing required\) o \(OS specific\), p \(processor specific\)
-Dynamic section at offset 0x168 contains 10 entries:
+Dynamic section at offset 0x140 contains 6 entries:
Tag Type Name/Value
0x00000004 \(HASH\) 0x94
- 0x00000005 \(STRTAB\) 0x134
- 0x00000006 \(SYMTAB\) 0xc4
- 0x0000000a \(STRSZ\) 29 \(bytes\)
+ 0x00000005 \(STRTAB\) 0x120
+ 0x00000006 \(SYMTAB\) 0xc0
+ 0x0000000a \(STRSZ\) 25 \(bytes\)
0x0000000b \(SYMENT\) 16 \(bytes\)
- 0x00000007 \(RELA\) 0x154
- 0x00000008 \(RELASZ\) 12 \(bytes\)
- 0x00000009 \(RELAENT\) 12 \(bytes\)
- 0x00000016 \(TEXTREL\) 0x0
0x00000000 \(NULL\) 0x0
diff --git a/ld/testsuite/ld-x86-64/ilp32-4.s b/ld/testsuite/ld-x86-64/ilp32-4.s
new file mode 100644
index 0000000..5f270c7
--- /dev/null
+++ b/ld/testsuite/ld-x86-64/ilp32-4.s
@@ -0,0 +1,3 @@
+ .globl _start
+_start:
+ ret
diff --git a/ld/testsuite/ld-x86-64/ilp32-5.d b/ld/testsuite/ld-x86-64/ilp32-5.d
index e4673e5..4870c2b 100644
--- a/ld/testsuite/ld-x86-64/ilp32-5.d
+++ b/ld/testsuite/ld-x86-64/ilp32-5.d
@@ -4,5 +4,5 @@
#...
[0-9a-f]+ +[0-9a-f]+ +R_X86_64_RELATIVE +[0-9a-f]+
-[0-9a-f]+ +[0-9a-f]+ +R_X86_64_PC32 +[0-9a-f]+ +foo - 4
+[0-9a-f]+ +[0-9a-f]+ +R_X86_64_GLOB_DAT +[0-9a-f]+ +foo \+ 0
[0-9a-f]+ +[0-9a-f]+ +R_X86_64_32 +[0-9a-f]+ +foo \+ 0
diff --git a/ld/testsuite/ld-x86-64/ilp32-5.s b/ld/testsuite/ld-x86-64/ilp32-5.s
index 0d97807..ef0c60e 100644
--- a/ld/testsuite/ld-x86-64/ilp32-5.s
+++ b/ld/testsuite/ld-x86-64/ilp32-5.s
@@ -1,6 +1,6 @@
.globl bar
bar:
- mov foo(%rip), %rax
+ mov foo@GOTPCREL(%rip), %rax
.data
xxx:
diff --git a/ld/testsuite/ld-x86-64/x86-64.exp b/ld/testsuite/ld-x86-64/x86-64.exp
index 77b081b..44d3e07 100644
--- a/ld/testsuite/ld-x86-64/x86-64.exp
+++ b/ld/testsuite/ld-x86-64/x86-64.exp
@@ -207,6 +207,7 @@ run_dump_test "ilp32-6"
run_dump_test "ilp32-7"
run_dump_test "ilp32-8"
run_dump_test "ilp32-9"
+run_dump_test "ilp32-10"
run_dump_test "ia32-1"
run_dump_test "ia32-2"
run_dump_test "ia32-3"
--
1.7.9.5
|