diff options
Diffstat (limited to 'gas/config')
-rw-r--r-- | gas/config/tc-mips.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c index 64c7350..790a886 100644 --- a/gas/config/tc-mips.c +++ b/gas/config/tc-mips.c @@ -5295,9 +5295,19 @@ macro (ip) subtract it out, and then subtract another 4 to make the first reloc come out right. The second reloc will come out right because we are going to add 4 to - offset_expr when we build its instruction below. */ - offset_expr.X_add_number -= 8; - offset_expr.X_op = O_constant; + offset_expr when we build its instruction below. + + If we have a symbol, then we don't want to include + the offset, because it will wind up being included + when we generate the reloc. */ + + if (offset_expr.X_op == O_constant) + offset_expr.X_add_number -= 8; + else + { + offset_expr.X_add_number = -4; + offset_expr.X_op = O_constant; + } } macro_build_lui (p, &icnt, &offset_expr, AT); if (p != NULL) |