OSDN Git Service

Properly fold _GLOBAL_OFFSET_TABLE_ in Intel syntax.
authorhjl <hjl>
Wed, 3 Nov 2010 23:18:40 +0000 (23:18 +0000)
committerhjl <hjl>
Wed, 3 Nov 2010 23:18:40 +0000 (23:18 +0000)
gas/

2010-11-03  H.J. Lu  <hongjiu.lu@intel.com>

PR gas/12186
* config/tc-i386-intel.c (i386_intel_fold): Properly fold
_GLOBAL_OFFSET_TABLE_.

gas/testsuite/

2010-11-03  H.J. Lu  <hongjiu.lu@intel.com>

PR gas/12186
* gas/i386/gotpc.s: Add more _GLOBAL_OFFSET_TABLE_ test.
* gas/i386/gotpc.d: Updated.

gas/ChangeLog
gas/config/tc-i386-intel.c
gas/testsuite/ChangeLog
gas/testsuite/gas/i386/gotpc.d
gas/testsuite/gas/i386/gotpc.s

index 17ce85a..5cb95f8 100644 (file)
@@ -1,3 +1,9 @@
+2010-11-03  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR gas/12186
+       * config/tc-i386-intel.c (i386_intel_fold): Properly fold
+       _GLOBAL_OFFSET_TABLE_.
+
 2010-11-02  Joseph Myers  <joseph@codesourcery.com>
 
        * config/tc-tic6x.c (OPTION_MPID, OPTION_MPIC, OPTION_MNO_PIC):
index 64d6824..1e563b2 100644 (file)
@@ -227,15 +227,20 @@ static INLINE int i386_intel_check (const reg_entry *rreg,
 
 static INLINE void i386_intel_fold (expressionS *e, symbolS *sym)
 {
+  expressionS *exp = symbol_get_value_expression (sym);
   if (S_GET_SEGMENT (sym) == absolute_section)
     {
       offsetT val = e->X_add_number;
 
-      *e = *symbol_get_value_expression (sym);
+      *e = *exp;
       e->X_add_number += val;
     }
   else
     {
+      if (exp->X_op == O_symbol
+         && strcmp (S_GET_NAME (exp->X_add_symbol),
+                    GLOBAL_OFFSET_TABLE_NAME) == 0)
+       sym = exp->X_add_symbol;
       e->X_add_symbol = sym;
       e->X_op_symbol = NULL;
       e->X_op = O_symbol;
index e7936f6..07689b6 100644 (file)
@@ -1,3 +1,9 @@
+2010-11-03  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR gas/12186
+       * gas/i386/gotpc.s: Add more _GLOBAL_OFFSET_TABLE_ test.
+       * gas/i386/gotpc.d: Updated.
+
 2010-11-02  Joseph Myers  <joseph@codesourcery.com>
 
        * gas/tic6x/attr-array-directive-1.d,
index ef79cbd..30faabd 100644 (file)
@@ -51,4 +51,5 @@ Disassembly of section .text:
   e4:  00 00 [         ]*add    %al,\(%eax\)   e4: (R_386_)?GOTOFF     _GLOBAL_OFFSET_TABLE_
   e6:  00 00 [         ]*add    %al,\(%eax\)
   e8:  8b 83 00 00 00 00 [     ]*mov    0x0\(%ebx\),%eax       ea: (R_386_)?GOTOFF     _GLOBAL_OFFSET_TABLE_
+  ee:  81 c3 02 00 00 00 [     ]*add    \$0x2,%ebx     f0: (R_386_)GOTPC       _GLOBAL_OFFSET_TABLE_
 #pass
index fc771f6..150bd16 100644 (file)
@@ -39,3 +39,6 @@ test:
        .long _GLOBAL_OFFSET_TABLE_+[.-test]
        .long _GLOBAL_OFFSET_TABLE_@GOTOFF
        movl _GLOBAL_OFFSET_TABLE_@GOTOFF (%ebx), %eax
+
+       .intel_syntax noprefix
+       add     ebx, OFFSET FLAT:_GLOBAL_OFFSET_TABLE_