Based on patches from Tom Quiggle <quiggle@sgi.com>:
authorIan Lance Taylor <ian@airs.com>
Wed, 3 Jul 1996 20:15:38 +0000 (20:15 +0000)
committerIan Lance Taylor <ian@airs.com>
Wed, 3 Jul 1996 20:15:38 +0000 (20:15 +0000)
* 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.

gas/ChangeLog
gas/config/tc-mips.c

index 461b1cbe8bba712c292d15cb07e897b77780b8ab..3ca965064ba40d2c6f0b3705b7cc562519aec8dd 100644 (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 
index be81790fe024ab52bb3aeb72f0e41071cd37c5b1..dbb3a1cc8f56617322bfb27c273428ebe07cbab4 100644 (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
        }
     }