aboutsummaryrefslogtreecommitdiff
path: root/gas
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2009-12-08 03:14:29 +0000
committerH.J. Lu <hjl.tools@gmail.com>2009-12-08 03:14:29 +0000
commit087d837e042af03a607f1974d32929a129eef806 (patch)
tree485a4e264529fd2cd797e99ccf66acb04158ac97 /gas
parent34207b9e417f37181ff48204e4cbf06403f39329 (diff)
downloadgdb-087d837e042af03a607f1974d32929a129eef806.zip
gdb-087d837e042af03a607f1974d32929a129eef806.tar.gz
gdb-087d837e042af03a607f1974d32929a129eef806.tar.bz2
Call symbol_same_p to check to if 2 symbols are the same.
gas/ 2009-12-07 H.J. Lu <hongjiu.lu@intel.com> PR gas/11037 * expr.c (resolve_expression): Call symbol_same_p to check if 2 symbols are the same. * symbols.c (symbol_same_p): New. * symbols.h (symbol_same_p): Likewise. gas/testsuite/ 2009-12-07 H.J. Lu <hongjiu.lu@intel.com> PR gas/11037 * gas/i386/intelpic.s: Add testcases. * gas/i386/intelpic.d: Updated.
Diffstat (limited to 'gas')
-rw-r--r--gas/ChangeLog9
-rw-r--r--gas/expr.c3
-rw-r--r--gas/symbols.c14
-rw-r--r--gas/symbols.h1
-rw-r--r--gas/testsuite/ChangeLog6
-rw-r--r--gas/testsuite/gas/i386/intelpic.d10
-rw-r--r--gas/testsuite/gas/i386/intelpic.s9
7 files changed, 50 insertions, 2 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index f941c9f..f7d9c08 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,12 @@
+2009-12-07 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR gas/11037
+ * expr.c (resolve_expression): Call symbol_same_p to check
+ if 2 symbols are the same.
+
+ * symbols.c (symbol_same_p): New.
+ * symbols.h (symbol_same_p): Likewise.
+
2009-12-02 Nick Clifton <nickc@redhat.com>
Richard Earnshaw <rearnsha@arm.com>
diff --git a/gas/expr.c b/gas/expr.c
index 094141f..fbfdffc 100644
--- a/gas/expr.c
+++ b/gas/expr.c
@@ -2237,8 +2237,7 @@ resolve_expression (expressionS *expressionP)
op = O_constant;
else if (seg_left == reg_section && final_val == 0)
op = O_register;
- else if (seg_left == undefined_section
- && add_symbol != orig_add_symbol)
+ else if (!symbol_same_p (add_symbol, orig_add_symbol))
final_val += left;
expressionP->X_add_symbol = add_symbol;
}
diff --git a/gas/symbols.c b/gas/symbols.c
index 4cfa85b..5eda2cb 100644
--- a/gas/symbols.c
+++ b/gas/symbols.c
@@ -2385,6 +2385,20 @@ symbol_set_value_expression (symbolS *s, const expressionS *exp)
S_CLEAR_WEAKREFR (s);
}
+/* Return whether 2 symbols are the same. */
+
+int
+symbol_same_p (symbolS *s1, symbolS *s2)
+{
+ if (s1->bsym == NULL
+ && local_symbol_converted_p ((struct local_symbol *) s1))
+ s1 = local_symbol_get_real_symbol ((struct local_symbol *) s1);
+ if (s2->bsym == NULL
+ && local_symbol_converted_p ((struct local_symbol *) s2))
+ s2 = local_symbol_get_real_symbol ((struct local_symbol *) s2);
+ return s1 == s2;
+}
+
/* Return a pointer to the X_add_number component of a symbol. */
offsetT *
diff --git a/gas/symbols.h b/gas/symbols.h
index 19f58c6..377a130 100644
--- a/gas/symbols.h
+++ b/gas/symbols.h
@@ -198,6 +198,7 @@ extern int symbol_constant_p (symbolS *);
extern int symbol_shadow_p (symbolS *);
extern asymbol *symbol_get_bfdsym (symbolS *);
extern void symbol_set_bfdsym (symbolS *, asymbol *);
+extern int symbol_same_p (symbolS *, symbolS *);
#ifdef OBJ_SYMFIELD_TYPE
OBJ_SYMFIELD_TYPE *symbol_get_obj (symbolS *);
diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog
index 449a183..ea8c2b5 100644
--- a/gas/testsuite/ChangeLog
+++ b/gas/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2009-12-07 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR gas/11037
+ * gas/i386/intelpic.s: Add testcases.
+ * gas/i386/intelpic.d: Updated.
+
2009-12-03 H.J. Lu <hongjiu.lu@intel.com>
* gas/i386/i386.exp: Run x86-64-fxsave and x86-64-fxsave-intel.
diff --git a/gas/testsuite/gas/i386/intelpic.d b/gas/testsuite/gas/i386/intelpic.d
index 5af7389..d78894a 100644
--- a/gas/testsuite/gas/i386/intelpic.d
+++ b/gas/testsuite/gas/i386/intelpic.d
@@ -14,4 +14,14 @@ Disassembly of section .text:
[ ]*[a-f0-9]+: 8b 83 00 00 00 00 mov 0x0\(%ebx\),%eax
[ ]*[a-f0-9]+: ff 24 85 0d 00 00 00 jmp \*0xd\(,%eax,4\)
[ ]*[a-f0-9]+: 8d 83 14 00 00 00 lea 0x14\(%ebx\),%eax
+[ ]*[a-f0-9]+: ff 24 85 0d 10 00 00 jmp \*0x100d\(,%eax,4\)
+[ ]*[a-f0-9]+: ff 24 85 28 10 00 00 jmp \*0x1028\(,%eax,4\)
+[ ]*[a-f0-9]+: 90 nop
+
+0+29 <L11>:
+[ ]*[a-f0-9]+: ff 24 85 29 10 00 00 jmp \*0x1029\(,%eax,4\)
+[ ]*[a-f0-9]+: ff 24 85 37 10 00 00 jmp \*0x1037\(,%eax,4\)
+
+0+37 <L12>:
+[ ]*[a-f0-9]+: 90 nop
#pass
diff --git a/gas/testsuite/gas/i386/intelpic.s b/gas/testsuite/gas/i386/intelpic.s
index 9bca76f..b8db43d 100644
--- a/gas/testsuite/gas/i386/intelpic.s
+++ b/gas/testsuite/gas/i386/intelpic.s
@@ -12,3 +12,12 @@ bar:
jmp DWORD PTR[ .L11 + eax * 4 ]
.LC0:
lea eax, DWORD PTR[ .LC0@GOTOFF + ebx ]
+ jmp DWORD PTR[ .L11 + eax * 4 + 0x1000 ]
+ jmp DWORD PTR[ .L12 + eax * 4 + 0x1000 ]
+.L12:
+ nop
+L11:
+ jmp DWORD PTR[ L11 + eax * 4 + 0x1000 ]
+ jmp DWORD PTR[ L12 + eax * 4 + 0x1000 ]
+L12:
+ nop