From 27dee630aae66dd61eb20135e7b8384088b1a496 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Wed, 3 Nov 2010 14:18:43 +0000 Subject: [PATCH] Properly fold _GLOBAL_OFFSET_TABLE_ in Intel syntax. gas/ 2010-11-03 H.J. Lu PR gas/12186 * config/tc-i386-intel.c (i386_intel_fold): Properly fold _GLOBAL_OFFSET_TABLE_. gas/testsuite/ 2010-11-03 H.J. Lu PR gas/12186 * gas/i386/gotpc.s: Add more _GLOBAL_OFFSET_TABLE_ test. * gas/i386/gotpc.d: Updated. --- gas/ChangeLog | 6 ++++++ gas/config/tc-i386-intel.c | 7 ++++++- gas/testsuite/ChangeLog | 6 ++++++ gas/testsuite/gas/i386/gotpc.d | 1 + gas/testsuite/gas/i386/gotpc.s | 3 +++ 5 files changed, 22 insertions(+), 1 deletion(-) 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 + + PR gas/12186 + * config/tc-i386-intel.c (i386_intel_fold): Properly fold + _GLOBAL_OFFSET_TABLE_. + 2010-11-02 Joseph Myers * 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 + + PR gas/12186 + * gas/i386/gotpc.s: Add more _GLOBAL_OFFSET_TABLE_ test. + * gas/i386/gotpc.d: Updated. + 2010-11-02 Joseph Myers * 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_ -- 2.30.2