Don't call section_symbol() with expr_section.
authorH.J. Lu <hjl.tools@gmail.com>
Sat, 3 Jul 2010 22:15:58 +0000 (22:15 +0000)
committerH.J. Lu <hjl.tools@gmail.com>
Sat, 3 Jul 2010 22:15:58 +0000 (22:15 +0000)
gas/

2010-07-03  Jan Beulich  <jbeulich@novell.com>

PR gas/11732
* config/tc-i386.c (i386_finalize_displacement): Don't call
section_symbol() with expr_section.

gas/testsuite/

2010-07-03  Jan Beulich  <jbeulich@novell.com>

PR gas/11732
* gas/i386/i386.exp: Run new tests.
* gas/i386/intel-got{32,64}.{s,d}: New.

gas/ChangeLog
gas/config/tc-i386.c
gas/testsuite/ChangeLog
gas/testsuite/gas/i386/i386.exp
gas/testsuite/gas/i386/intel-got32.d [new file with mode: 0644]
gas/testsuite/gas/i386/intel-got32.s [new file with mode: 0644]
gas/testsuite/gas/i386/intel-got64.d [new file with mode: 0644]
gas/testsuite/gas/i386/intel-got64.s [new file with mode: 0644]

index 50dd6c1c895b31cfb003ced662f996d76388ca6f..32769f71d5d0b080e1d15b6ed313ed3941875f4c 100644 (file)
@@ -1,3 +1,9 @@
+2010-07-03  Jan Beulich  <jbeulich@novell.com>
+
+       PR gas/11732
+       * config/tc-i386.c (i386_finalize_displacement): Don't call
+       section_symbol() with expr_section.
+
 2010-07-03  Cary Coutant  <ccoutant@google.com>
 
        * Makefile.am: Add compress-debug.c and compress-debug.h.
index d065b90fff764d080321c1018b4f8e9fba1c582b..281faaaf193bb6e5a35b2b5a4a1b852a821ea89c 100644 (file)
@@ -6878,7 +6878,8 @@ i386_finalize_displacement (segT exp_seg ATTRIBUTE_UNUSED, expressionS *exp,
        goto inv_disp;
 
       if (S_IS_LOCAL (exp->X_add_symbol)
-         && S_GET_SEGMENT (exp->X_add_symbol) != undefined_section)
+         && S_GET_SEGMENT (exp->X_add_symbol) != undefined_section
+         && S_GET_SEGMENT (exp->X_add_symbol) != expr_section)
        section_symbol (S_GET_SEGMENT (exp->X_add_symbol));
       exp->X_op = O_subtract;
       exp->X_op_symbol = GOT_symbol;
index c5f4325f35c1e6989f1570759101fe9ed5dc51b6..c8c5e2b82bb5089933a20a3aad9c58e4715f438b 100644 (file)
@@ -1,3 +1,9 @@
+2010-07-03  Jan Beulich  <jbeulich@novell.com>
+
+       PR gas/11732
+       * gas/i386/i386.exp: Run new tests.
+       * gas/i386/intel-got{32,64}.{s,d}: New.
+
 2010-07-01  H.J. Lu  <hongjiu.lu@intel.com>
 
        AVX Programming Reference (June, 2010)
index ccda6f5ac76109f4d86aa5d7139d8fd4db13497d..ecddc387f7f26d8ffa8a62ca1577c201b329d0c0 100644 (file)
@@ -37,6 +37,7 @@ if [expr ([istarget "i*86-*-*"] ||  [istarget "x86_64-*-*"]) && [gas_32_check]]
     run_dump_test "intel16"
     run_list_test "intelbad" ""
     run_dump_test "intelok"
+    run_dump_test "intel-got32"
     run_dump_test "prefix"
     run_dump_test "amd"
     run_dump_test "katmai"
@@ -321,6 +322,7 @@ if [expr ([istarget "i*86-*-*"] || [istarget "x86_64-*-*"]) && [gas_64_check]] t
       run_dump_test "x86-64-opcode-inval-intel"
     }
     run_dump_test "rexw"
+    run_dump_test "intel-got64"
     run_dump_test "x86-64-fxsave"
     run_dump_test "x86-64-fxsave-intel"
     run_dump_test "x86-64-arch-1"
diff --git a/gas/testsuite/gas/i386/intel-got32.d b/gas/testsuite/gas/i386/intel-got32.d
new file mode 100644 (file)
index 0000000..8e5c797
--- /dev/null
@@ -0,0 +1,11 @@
+#objdump: -dwMintel
+#name: i386 intel-got
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+0+000 <_start>:
+[      ]*[0-9a-f]+:[   ]+8b 15 04 00 00 00[    ]+mov[  ]+edx,(DWORD PTR )?(ds:)?0x4
+[      ]*[0-9a-f]+:[   ]+c3[   ]+ret[  ]*
+#pass
diff --git a/gas/testsuite/gas/i386/intel-got32.s b/gas/testsuite/gas/i386/intel-got32.s
new file mode 100644 (file)
index 0000000..af1caa9
--- /dev/null
@@ -0,0 +1,7 @@
+.text
+.intel_syntax noprefix
+_start:
+       mov     edx, [x1@GOTOFF + x2]
+       ret
+
+.equ x2, 4
diff --git a/gas/testsuite/gas/i386/intel-got64.d b/gas/testsuite/gas/i386/intel-got64.d
new file mode 100644 (file)
index 0000000..e16f552
--- /dev/null
@@ -0,0 +1,12 @@
+#objdump: -dwMintel
+#name: x86-64 intel-got
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+0+000 <_start>:
+[      ]*[0-9a-f]+:[   ]+a1 00 00 00 00 00 00 00 00[   ]+movabs[       ]+eax,(ds:)?0x0
+[      ]*[0-9a-f]+:[   ]+ff 35 00 00 00 00[    ]+push[         ]+(QWORD PTR )?\[rip(\+(0x)?0)?\]([     ]+#.*)?
+[      ]*[0-9a-f]+:[   ]+c3[   ]+ret[  ]*
+#pass
diff --git a/gas/testsuite/gas/i386/intel-got64.s b/gas/testsuite/gas/i386/intel-got64.s
new file mode 100644 (file)
index 0000000..82988c9
--- /dev/null
@@ -0,0 +1,8 @@
+.text
+.intel_syntax noprefix
+_start:
+       movabs  eax, [x1@GOTOFF + x2]
+       push    [rip + x1@GOTPCREL + x2]
+       ret
+
+.equ x2, 8