diff options
author | Ian Lance Taylor <ian@airs.com> | 1993-12-01 17:13:12 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@airs.com> | 1993-12-01 17:13:12 +0000 |
commit | 777ad64d69839022ebf7b5988aa6de888fa6915b (patch) | |
tree | f5b6732ea5b2f3c8fe0f52bd1f6bd3770e338e59 | |
parent | 7f0e0b1b4e20d44d46626f203e1d0e1f8a45d08b (diff) | |
download | gdb-777ad64d69839022ebf7b5988aa6de888fa6915b.zip gdb-777ad64d69839022ebf7b5988aa6de888fa6915b.tar.gz gdb-777ad64d69839022ebf7b5988aa6de888fa6915b.tar.bz2 |
* config/tc-mips.c (macro): Subtract 8 from offset in non PIC l.d
case. See comment.
-rw-r--r-- | gas/ChangeLog | 5 | ||||
-rw-r--r-- | gas/config/tc-mips.c | 14 |
2 files changed, 18 insertions, 1 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index 22dd3cb..da4e80b 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,8 @@ +Wed Dec 1 12:10:41 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) + + * config/tc-mips.c (macro): Subtract 8 from offset in non PIC l.d + case. See comment. + Tue Nov 30 13:40:30 1993 Jeffrey A. Law (law@snake.cs.utah.edu) * write.c (TC_FORCE_RELOCATION): Provide a default definition. diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c index a826256..a39f6d6 100644 --- a/gas/config/tc-mips.c +++ b/gas/config/tc-mips.c @@ -924,6 +924,9 @@ append_insn (place, ip, address_expr, reloc_type) there are any branches to anything other than a label, users must use .set noreorder. */ || insn_label != NULL + /* If the previous instruction is in a variant frag, we + can not do the swap. */ + || prev_insn_frag->fr_type == rs_machine_dependent /* If the branch reads the condition codes, we don't even try to swap, because in the sequence ctc1 $X,$31 @@ -3009,7 +3012,16 @@ macro (ip) ! used_at && mips_noat), offset_expr.X_add_symbol, (long) 0, (char *) NULL); - offset_expr.X_add_number -= 4; + + /* We just generated two relocs. When tc_gen_reloc + handles this case, it will skip the first reloc and + handle the second. The second reloc already has an + extra addend of 4, which we added above. We must + 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; } macro_build_lui (p, &icnt, &offset_expr, AT); |