OSDN Git Service

Fixes the TILE-Gx/TILEPro port of gas to deal with relocations of
authorwalt <walt>
Fri, 28 Oct 2011 14:43:53 +0000 (14:43 +0000)
committerwalt <walt>
Fri, 28 Oct 2011 14:43:53 +0000 (14:43 +0000)
aliases.

gas/ChangeLog
gas/config/tc-tilegx.c
gas/config/tc-tilepro.c

index 76d3c12..b06ac94 100644 (file)
@@ -1,6 +1,9 @@
 2011-10-28  Walter Lee  <walt@tilera.com>
 
        * NEWS: Fix TILEPro capitalization.
+       * config/tc-tilegx.c (emit_tilegx_instruction) Handle
+        relocations of aliases.
+       * config/tc-tilepro.c: (emit_tilepro_instruction) Likewise.
 
 2011-10-28  Nick Clifton  <nickc@redhat.com>
 
index 2f4d79c..39e1907 100644 (file)
@@ -691,15 +691,19 @@ emit_tilegx_instruction (tilegx_bundle_bits bits,
 
              if (operand_exp->X_add_symbol->sy_value.X_md)
                {
-                 if (require_symbol)
-                   {
-                     as_bad (_("Operator may only be applied to symbols."));
-                   }
-
                  /* HACK: We used X_md to mark this symbol as a fake wrapper
                     around a real expression. To unwrap it, we just grab its
                     value here.  */
                  operand_exp = &operand_exp->X_add_symbol->sy_value;
+
+                 if (require_symbol)
+                   {
+                     /* Look at the expression, and reject it if it's not a
+                        plain symbol.  */
+                     if (operand_exp->X_op != O_symbol
+                         || operand_exp->X_add_number != 0)
+                       as_bad (_("Operator may only be applied to symbols."));
+                   }
                }
              else
                {
index c198b2c..44e40d1 100644 (file)
@@ -560,15 +560,19 @@ emit_tilepro_instruction (tilepro_bundle_bits bits,
 
              if (operand_exp->X_add_symbol->sy_value.X_md)
                {
-                 if (require_symbol)
-                   {
-                     as_bad (_("Operator may only be applied to symbols."));
-                   }
-
                  /* HACK: We used X_md to mark this symbol as a fake wrapper
                     around a real expression. To unwrap it, we just grab its
                     value here.  */
                  operand_exp = &operand_exp->X_add_symbol->sy_value;
+
+                 if (require_symbol)
+                   {
+                     /* Look at the expression, and reject it if it's not a
+                        plain symbol.  */
+                     if (operand_exp->X_op != O_symbol
+                         || operand_exp->X_add_number != 0)
+                       as_bad (_("Operator may only be applied to symbols."));
+                   }
                }
              else
                {