* config/tc-mips.c (macro): Subtract 8 from offset in non PIC l.d

case.  See comment.
This commit is contained in:
Ian Lance Taylor 1993-12-01 17:13:12 +00:00
parent 7f0e0b1b4e
commit 777ad64d69
2 changed files with 18 additions and 1 deletions

View File

@ -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.

View File

@ -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);