* mipsread.c (fixup_sigtramp): Initialize pdr.adr, it is used by
[binutils-gdb.git] / gdb / mipsread.c
index 22f093c5ad04bafdd08d4be874f85780cfa38d97..da6f071e0bbaf23d269e9d656f7a6bfe28ad8395 100644 (file)
@@ -95,9 +95,6 @@ typedef struct mips_extra_func_info {
 /* FIXME: coff/internal.h and aout/aout64.h both define N_ABS.  We
    want the definition from aout/aout64.h.  */
 #undef N_ABS
-/* FIXME: coff/mips.h and aout/aout64.h both define ZMAGIC.  We don't
-   use it.  */
-#undef ZMAGIC
 
 #include "libaout.h"           /* Private BFD a.out information.  */
 #include "aout/aout64.h"
@@ -1518,12 +1515,16 @@ upgrade_type (tpp, tq, ax, bigend)
    images that have been partially stripped (ld -x) have been deprived
    of local symbols, and we have to cope with them here.  FIRST_OFF is
    the offset of the first procedure for this FDR; we adjust the
-   address by this amount, but I don't know why.  */
+   address by this amount, but I don't know why.  SEARCH_SYMTAB is the symtab
+   to look for the function which contains the MIPS_EFI_SYMBOL_NAME symbol
+   in question, or NULL to use top_stack->cur_block.  */
+
+static void parse_procedure PARAMS ((PDR *, struct symtab *, unsigned long));
 
 static void
-parse_procedure (pr, have_stabs, first_off)
+parse_procedure (pr, search_symtab, first_off)
      PDR *pr;
-     int have_stabs;
+     struct symtab *search_symtab;
      unsigned long first_off;
 {
   struct symbol *s, *i;
@@ -1564,8 +1565,12 @@ parse_procedure (pr, have_stabs, first_off)
       sh_name = ecoff_data (cur_bfd)->ss + cur_fdr->issBase + sh.iss;
     }
 
-  if (have_stabs)
+  if (search_symtab != NULL)
     {
+#if 0
+      /* This loses both in the case mentioned (want a static, find a global),
+        but also if we are looking up a non-mangled name which happens to
+        match the name of a mangled function.  */
       /* We have to save the cur_fdr across the call to lookup_symbol.
         If the pdr is for a static function and if a global function with
         the same name exists, lookup_symbol will eventually read in the symtab
@@ -1573,6 +1578,13 @@ parse_procedure (pr, have_stabs, first_off)
       FDR *save_cur_fdr = cur_fdr;
       s = lookup_symbol (sh_name, NULL, VAR_NAMESPACE, 0, NULL);
       cur_fdr = save_cur_fdr;
+#else
+      s = mylookup_symbol
+       (sh_name,
+        BLOCKVECTOR_BLOCK (BLOCKVECTOR (search_symtab), STATIC_BLOCK),
+        VAR_NAMESPACE,
+        LOC_BLOCK);
+#endif
     }
   else
     s = mylookup_symbol (sh_name, top_stack->cur_block,
@@ -2541,7 +2553,7 @@ psymtab_to_symtab_1 (pst, filename)
              first_off = pr.adr;
              first_pdr = 0;
            }
-         parse_procedure (&pr, 1, first_off);
+         parse_procedure (&pr, st, first_off);
        }
     }
   else
@@ -2811,7 +2823,7 @@ mylookup_symbol (name, block, namespace, class)
       if (SYMBOL_NAME (sym)[0] == inc
          && SYMBOL_NAMESPACE (sym) == namespace
          && SYMBOL_CLASS (sym) == class
-         && STREQ (SYMBOL_NAME (sym), name))
+         && strcmp (SYMBOL_NAME (sym), name) == 0)
        return sym;
       bot++;
     }
@@ -3246,6 +3258,7 @@ fixup_sigtramp ()
     e->pdr.fregmask = -1;
     e->pdr.fregoffset = -(7 * sizeof (int));
     e->pdr.isym = (long) s;
+    e->pdr.adr = sigtramp_address;
 
     current_objfile = st->objfile;     /* Keep new_symbol happy */
     s = new_symbol (MIPS_EFI_SYMBOL_NAME);