This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
[PATCH] TILE gas fixes for relocations with aliases.
- From: Walter Lee <walt at tilera dot com>
- To: binutils at sourceware dot org
- Date: Fri, 28 Oct 2011 03:50:52 -0400
- Subject: [PATCH] TILE gas fixes for relocations with aliases.
- Reply-to: Walter Lee <walt at tilera dot com>
[Sorry I sent this earlier with the wrong subject.]
This patch fixes the TILE-Gx/TILEPro port of gas to deal with
relocations of aliases, and is needed to compile glibc and the latest
gcc. OK to commit? Since I'm the maintainers for these ports can I
commit without approval ahead of time?
gas/ChangeLog
2011-10-28 Walter Lee <walt@tilera.com>
* config/tc-tilegx.c (emit_tilegx_instruction) Handle
relocations of aliases.
* config/tc-tilepro.c: (emit_tilepro_instruction) Likewise.
Index: gas/config/tc-tilegx.c
===================================================================
RCS file: /cvs/src/src/gas/config/tc-tilegx.c,v
retrieving revision 1.1
diff -u -p -r1.1 tc-tilegx.c
--- gas/config/tc-tilegx.c 13 Jun 2011 15:18:48 -0000 1.1
+++ gas/config/tc-tilegx.c 28 Oct 2011 06:30:50 -0000
@@ -691,15 +691,19 @@ emit_tilegx_instruction (tilegx_bundle_b
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: gas/config/tc-tilepro.c
===================================================================
RCS file: /cvs/src/src/gas/config/tc-tilepro.c,v
retrieving revision 1.1
diff -u -p -r1.1 tc-tilepro.c
--- gas/config/tc-tilepro.c 13 Jun 2011 15:18:48 -0000 1.1
+++ gas/config/tc-tilepro.c 28 Oct 2011 06:30:50 -0000
@@ -560,15 +560,19 @@ emit_tilepro_instruction (tilepro_bundle
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
{