aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gas/ChangeLog5
-rw-r--r--gas/config/tc-i386.h6
-rw-r--r--gas/testsuite/ChangeLog7
-rw-r--r--gas/testsuite/gas/i386/i386.exp1
-rw-r--r--gas/testsuite/gas/i386/localpic.d6
-rw-r--r--gas/testsuite/gas/i386/localpic.s5
6 files changed, 26 insertions, 4 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 35bda3d..b0f8b85 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,8 @@
+2009-09-23 H.J. Lu <hongjiu.lu@intel.com>
+
+ * config/tc-i386.h (TC_FORCE_RELOCATION_LOCAL): Don't check
+ BFD_RELOC_386_GOT32.
+
2009-09-23 Sterling Augustine <sterling@jaw.hq.tensilica.com>
* config/tc-xtensa.c (md_apply_fix): Remove check for constant with
diff --git a/gas/config/tc-i386.h b/gas/config/tc-i386.h
index 9b9bc61..ab7cbf2 100644
--- a/gas/config/tc-i386.h
+++ b/gas/config/tc-i386.h
@@ -149,14 +149,12 @@ extern int tc_i386_fix_adjustable (struct fix *);
/* This expression evaluates to true if the relocation is for a local
object for which we still want to do the relocation at runtime.
False if we are willing to perform this relocation while building
- the .o file. GOTOFF does not need to be checked here because it is
- not pcrel. I am not sure if some of the others are ever used with
- pcrel, but it is easier to be safe than sorry. */
+ the .o file. GOTOFF and GOT32 do not need to be checked here because
+ they are not pcrel. .*/
#define TC_FORCE_RELOCATION_LOCAL(FIX) \
(!(FIX)->fx_pcrel \
|| (FIX)->fx_r_type == BFD_RELOC_386_PLT32 \
- || (FIX)->fx_r_type == BFD_RELOC_386_GOT32 \
|| (FIX)->fx_r_type == BFD_RELOC_386_GOTPC \
|| TC_FORCE_RELOCATION (FIX))
diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog
index 16036ff..cd0dd74 100644
--- a/gas/testsuite/ChangeLog
+++ b/gas/testsuite/ChangeLog
@@ -1,3 +1,10 @@
+2009-09-23 H.J. Lu <hongjiu.lu@intel.com>
+
+ * gas/i386/i386.exp: Run localpic.
+
+ * gas/i386/localpic.d: New.
+ * gas/i386/localpic.s: Likewise.
+
2009-09-23 Alan Modra <amodra@bigpond.net.au>
* gas/arm/thumbver.d: Tolerate some whitespace differences.
diff --git a/gas/testsuite/gas/i386/i386.exp b/gas/testsuite/gas/i386/i386.exp
index 58e31da..2196575 100644
--- a/gas/testsuite/gas/i386/i386.exp
+++ b/gas/testsuite/gas/i386/i386.exp
@@ -192,6 +192,7 @@ if [expr ([istarget "i*86-*-*"] || [istarget "x86_64-*-*"]) && [gas_32_check]]
run_list_test "inval-equ-2" "-al"
run_dump_test "ifunc"
run_list_test "l1om-inval" "-march=l1om --32"
+ run_dump_test "localpic"
}
# This is a PE specific test.
diff --git a/gas/testsuite/gas/i386/localpic.d b/gas/testsuite/gas/i386/localpic.d
new file mode 100644
index 0000000..bda8665
--- /dev/null
+++ b/gas/testsuite/gas/i386/localpic.d
@@ -0,0 +1,6 @@
+#readelf: -r
+#name: i386 local PIC
+
+Relocation section '.rel.text' at offset 0x[0-9a-f]+ contains 1 entries:
+ Offset Info Type Sym.Value Sym. Name
+[0-9a-f]+ +[0-9a-f]+ R_386_GOT32 +[0-9a-f]+ +foo
diff --git a/gas/testsuite/gas/i386/localpic.s b/gas/testsuite/gas/i386/localpic.s
new file mode 100644
index 0000000..e633944
--- /dev/null
+++ b/gas/testsuite/gas/i386/localpic.s
@@ -0,0 +1,5 @@
+ .data
+foo:
+ .long 0
+ .text
+movl foo@GOT(%ecx), %eax