OSDN Git Service

Call symbol_same_p to check to if 2 symbols are the same.
authorhjl <hjl>
Tue, 8 Dec 2009 12:14:28 +0000 (12:14 +0000)
committerhjl <hjl>
Tue, 8 Dec 2009 12:14:28 +0000 (12: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 f941c9f..f7d9c08 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 094141f..fbfdffc 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 4cfa85b..5eda2cb 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 19f58c6..377a130 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 449a183..ea8c2b5 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 5af7389..d78894a 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 9bca76f..b8db43d 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