Call symbol_same_p to check to if 2 symbols are the same.
authorH.J. Lu <hjl.tools@gmail.com>
Tue, 8 Dec 2009 03:14:29 +0000 (03:14 +0000)
committerH.J. Lu <hjl.tools@gmail.com>
Tue, 8 Dec 2009 03:14:29 +0000 (03:14 +0000)
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.

gas/ChangeLog
gas/expr.c
gas/symbols.c
gas/symbols.h
gas/testsuite/ChangeLog
gas/testsuite/gas/i386/intelpic.d
gas/testsuite/gas/i386/intelpic.s

index f941c9f7a9301d454b564c261a7033121a8a6c39..f7d9c083706a1c37aa6685dbc93deb4cd60e3257 100644 (file)
@@ -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>
 
index 094141f6e3bbf2cfacf841f9bacef4074c1d538f..fbfdffc675830a62b99478efda1435b6d49a16d2 100644 (file)
@@ -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;
     }
index 4cfa85b103b0302879d5b2a948e1761442c66bee..5eda2cbbd2101ee6594b00884890d89767892015 100644 (file)
@@ -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 *
index 19f58c6f8f661e536f44f7fdc38de62f02601432..377a130074bd69a39f5220b72d3e3672ace392b7 100644 (file)
@@ -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 *);
index 449a1834a2d934546613e9549ee68967b37c4cda..ea8c2b52573d944904bceba6d88599eefcd65903 100644 (file)
@@ -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.
index 5af73894d90a31b308215f7632260c5daaa52279..d78894a88155d0fee9a1f968e3eb170c7bc47ffa 100644 (file)
@@ -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
index 9bca76fc931bfd4485fd38fd1f6b7c3b45668078..b8db43db20050c64c63b729c4e544898fb8dd3dd 100644 (file)
@@ -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