* ecoff.c (ecoff_build_lineno): Don't try to store the address
authorIan Lance Taylor <ian@airs.com>
Wed, 7 Feb 1996 20:20:56 +0000 (20:20 +0000)
committerIan Lance Taylor <ian@airs.com>
Wed, 7 Feb 1996 20:20:56 +0000 (20:20 +0000)
difference if the next address is before the current one.

gas/ChangeLog
gas/ecoff.c

index b7165a73942d867372cb66eddb80e4ae03c13c96..8dd9dbec8bbff29c7a43fe339f53f807e62ae47d 100644 (file)
@@ -1,5 +1,8 @@
 Wed Feb  7 14:12:03 1996  Ian Lance Taylor  <ian@cygnus.com>
 
+       * ecoff.c (ecoff_build_lineno): Don't try to store the address
+       difference if the next address is before the current one.
+
        * config/tc-m68k.c (struct m68k_cpu): Add alias field.
        (archs): Initialize new field.
        (m68k_ip): Don't list alias names when listing CPUs which support
index 0d70ba3b930754405efdcde3e20cfdc0036e0a56..1bec31352d9cc6fb87ea6df4735ea00bb23fb774 100644 (file)
@@ -2134,6 +2134,7 @@ add_procedure (func)
 {
   register varray_t *vp;
   register proc_t *new_proc_ptr;
+  symbolS *sym;
 
 #ifdef ECOFF_DEBUG
   if (debug)
@@ -2160,10 +2161,13 @@ add_procedure (func)
   new_proc_ptr->pdr.lnLow = -1;
   new_proc_ptr->pdr.lnHigh = -1;
 
+  /* Set the BSF_FUNCTION flag for the symbol.  */
+  sym = symbol_find_or_make (func);
+  sym->bsym->flags |= BSF_FUNCTION;
+
   /* Push the start of the function.  */
   new_proc_ptr->sym = add_ecoff_symbol ((const char *) NULL, st_Proc, sc_Text,
-                                       symbol_find_or_make (func),
-                                       (bfd_vma) 0, (symint_t) 0,
+                                       sym, (bfd_vma) 0, (symint_t) 0,
                                        (symint_t) 0);
 
   ++proc_cnt;
@@ -3746,16 +3750,17 @@ ecoff_build_lineno (backend, buf, bufend, offset, linecntptr)
             before it is used.  */
          count = 1;
        }
-      else
+      else if (l->next->frag->fr_address + l->next->paddr
+              > l->frag->fr_address + l->paddr)
        {
          count = ((l->next->frag->fr_address + l->next->paddr
                    - (l->frag->fr_address + l->paddr))
                   >> 2);
-         if (count <= 0)
-           {
-             /* Don't change last, so we still get the right delta.  */
-             continue;
-           }
+       }
+      else
+       {
+         /* Don't change last, so we still get the right delta.  */
+         continue;
        }
 
       if (l->file != file || l->proc != proc)
@@ -4058,6 +4063,9 @@ ecoff_build_symbols (backend, buf, bufend, offset)
                                  sym_ptr->ecoff_sym.asym.value =
                                    as_sym->ecoff_extern_size;
                                }
+#ifdef S_SET_SIZE
+                             S_SET_SIZE (as_sym, as_sym->ecoff_extern_size);
+#endif
                            }
                          else if (S_IS_COMMON (as_sym))
                            {
@@ -4175,6 +4183,10 @@ ecoff_build_symbols (backend, buf, bufend, offset)
                          sym_ptr->ecoff_sym.asym.value =
                            (S_GET_VALUE (as_sym)
                             - S_GET_VALUE (begin_ptr->as_sym));
+#ifdef S_SET_SIZE
+                         S_SET_SIZE (begin_ptr->as_sym,
+                                     sym_ptr->ecoff_sym.asym.value);
+#endif
                        }
                      else if (begin_type == st_Block
                               && sym_ptr->ecoff_sym.asym.sc != (int) sc_Info)