summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2010-11-03 14:18:43 +0000
committerH.J. Lu <hjl.tools@gmail.com>2010-11-03 14:18:43 +0000
commit27dee630aae66dd61eb20135e7b8384088b1a496 (patch)
tree5d7a65630edd019c3798d373ffafb20c97d9b0a4
parent3f9a327892c097ae5504004c6a11f7468df16c08 (diff)
downloadbinutils-gdb-27dee630aae66dd61eb20135e7b8384088b1a496.tar.gz
Properly fold _GLOBAL_OFFSET_TABLE_ in Intel syntax.
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.
-rw-r--r--gas/ChangeLog6
-rw-r--r--gas/config/tc-i386-intel.c7
-rw-r--r--gas/testsuite/ChangeLog6
-rw-r--r--gas/testsuite/gas/i386/gotpc.d1
-rw-r--r--gas/testsuite/gas/i386/gotpc.s3
5 files changed, 22 insertions, 1 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 17ce85a1da5..5cb95f85ec7 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -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):
diff --git a/gas/config/tc-i386-intel.c b/gas/config/tc-i386-intel.c
index 64d6824da26..1e563b2d81c 100644
--- a/gas/config/tc-i386-intel.c
+++ b/gas/config/tc-i386-intel.c
@@ -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;
diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog
index e7936f6c990..07689b6eb59 100644
--- a/gas/testsuite/ChangeLog
+++ b/gas/testsuite/ChangeLog
@@ -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,
diff --git a/gas/testsuite/gas/i386/gotpc.d b/gas/testsuite/gas/i386/gotpc.d
index ef79cbd7832..30faabd0bf9 100644
--- a/gas/testsuite/gas/i386/gotpc.d
+++ b/gas/testsuite/gas/i386/gotpc.d
@@ -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
diff --git a/gas/testsuite/gas/i386/gotpc.s b/gas/testsuite/gas/i386/gotpc.s
index fc771f6cff5..150bd1645f5 100644
--- a/gas/testsuite/gas/i386/gotpc.s
+++ b/gas/testsuite/gas/i386/gotpc.s
@@ -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_