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.
This commit is contained in:
Ian Lance Taylor 1996-07-03 20:15:38 +00:00
parent a31e14f44c
commit 5af96dce32
2 changed files with 28 additions and 4 deletions

View File

@ -1,3 +1,15 @@
Wed Jul 3 16:05:50 1996 Ian Lance Taylor <ian@cygnus.com>
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.
Tue Jul 2 23:02:12 1996 Jeffrey A Law (law@cygnus.com)
* config/tc-h8300.c (build_bytes): If an operand type is

View File

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