aboutsummaryrefslogtreecommitdiff
path: root/gas/config/tc-mips.c
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@airs.com>1996-07-03 20:15:38 +0000
committerIan Lance Taylor <ian@airs.com>1996-07-03 20:15:38 +0000
commit5af96dce32e08b589d845b970ce612926ac3ae80 (patch)
treed61579861a31df402c2092bd0b30279833f6fcba /gas/config/tc-mips.c
parenta31e14f44c7b05fc527d83abd6e4738481add056 (diff)
downloadgdb-5af96dce32e08b589d845b970ce612926ac3ae80.zip
gdb-5af96dce32e08b589d845b970ce612926ac3ae80.tar.gz
gdb-5af96dce32e08b589d845b970ce612926ac3ae80.tar.bz2
Based on patches from Tom Quiggle <quiggle@sgi.com>:
* ecoff.c (last_lineno): New static variable. (add_procedure): Set last_lineno. (ecoff_directive_loc): Likewise. (ecoff_generate_asm_lineno): Likewise. (ecoff_fix_loc): New function. * ecoff.h (ecoff_fix_loc): Declare. * config/tc-mips.c (append_insn): When inserting nops, and using ECOFF debugging, call ecoff_fix_loc.
Diffstat (limited to 'gas/config/tc-mips.c')
-rw-r--r--gas/config/tc-mips.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c
index be81790..dbb3a1c 100644
--- a/gas/config/tc-mips.c
+++ b/gas/config/tc-mips.c
@@ -1007,8 +1007,8 @@ append_insn (place, ip, address_expr, reloc_type, unmatched_hi)
/* The previous insn might require a delay slot, depending upon
the contents of the current insn. */
if (mips_isa < 4
- && ((prev_pinfo & INSN_LOAD_COPROC_DELAY)
- && ! cop_interlocks
+ && (((prev_pinfo & INSN_LOAD_COPROC_DELAY)
+ && ! cop_interlocks)
|| (mips_isa < 2
&& (prev_pinfo & INSN_LOAD_MEMORY_DELAY))))
{
@@ -1025,8 +1025,8 @@ append_insn (place, ip, address_expr, reloc_type, unmatched_hi)
++nops;
}
else if (mips_isa < 4
- && ((prev_pinfo & INSN_COPROC_MOVE_DELAY)
- && ! cop_interlocks
+ && (((prev_pinfo & INSN_COPROC_MOVE_DELAY)
+ && ! cop_interlocks)
|| (mips_isa < 2
&& (prev_pinfo & INSN_COPROC_MEMORY_DELAY))))
{
@@ -1147,10 +1147,16 @@ append_insn (place, ip, address_expr, reloc_type, unmatched_hi)
/* Now emit the right number of NOP instructions. */
if (nops > 0)
{
+ fragS *old_frag;
+ unsigned long old_frag_offset;
int i;
+ old_frag = frag_now;
+ old_frag_offset = frag_now_fix ();
+
for (i = 0; i < nops; i++)
emit_nop ();
+
if (listing)
{
listing_prev_line ();
@@ -1164,12 +1170,18 @@ append_insn (place, ip, address_expr, reloc_type, unmatched_hi)
all needed nop instructions themselves. */
frag_grow (40);
}
+
if (insn_label != NULL)
{
assert (S_GET_SEGMENT (insn_label) == now_seg);
insn_label->sy_frag = frag_now;
S_SET_VALUE (insn_label, (valueT) frag_now_fix ());
}
+
+#ifndef NO_ECOFF_DEBUGGING
+ if (ECOFF_DEBUGGING)
+ ecoff_fix_loc (old_frag, old_frag_offset);
+#endif
}
}