elf32-mips.c (_bfd_mips_elf_final_write_processing): Handle bfd_mach_mips4300.
authorGavin Romig-Koch <gavin@redhat.com>
Sat, 12 Dec 1998 22:22:11 +0000 (22:22 +0000)
committerGavin Romig-Koch <gavin@redhat.com>
Sat, 12 Dec 1998 22:22:11 +0000 (22:22 +0000)
bfd/ChangeLog
bfd/elf32-mips.c

index b118bde3f5c3789158b0e473f6a7af10b09cbabd..2bb391a4001bb74eb467d9bc340dcf31a6421760 100644 (file)
@@ -1,3 +1,8 @@
+1998-12-12  Gavin Romig-Koch  <gavin@cygnus.com>
+
+       * elf32-mips.c (_bfd_mips_elf_final_write_processing): 
+       Handle bfd_mach_mips4300.
+
 start-sanitize-sky
 Sat Dec 12 08:52:41 1998  Doug Evans  <devans@charmed.cygnus.com>
 
index 906508788f03551da83ce4bb1051a5f44813451f..08f71abe73c8c1ae4af61e7c43b1459a2dee0bb1 100644 (file)
@@ -160,6 +160,11 @@ struct mips_got_info
 #define STUB_LI16 0x34180000   /* ori t8,zero,0 */
 #define MIPS_FUNCTION_STUB_SIZE (16)
 
+#if 0
+/* We no longer try to identify particular sections for the .dynsym
+   section.  When we do, we wind up crashing if there are other random
+   sections with relocations.  */
+
 /* Names of sections which appear in the .dynsym section in an Irix 5
    executable.  */
 
@@ -184,6 +189,8 @@ static const char * const mips_elf_dynsym_sec_names[] =
 
 #define MIPS_TEXT_DYNSYM_SECNO (3)
 
+#endif /* 0 */
+
 /* The names of the runtime procedure table symbols used on Irix 5.  */
 
 static const char * const mips_elf_dynsym_rtproc_names[] =
@@ -841,7 +848,7 @@ static reloc_howto_type elf_mips_gnu_vtentry_howto =
         false,                 /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_dont, /* complain_on_overflow */
-        NULL,                  /* special_function */
+        _bfd_elf_rel_vtable_reloc_fn, /* special_function */
         "R_MIPS_GNU_VTENTRY",  /* name */
         false,                 /* partial_inplace */
         0,                     /* src_mask */
@@ -1580,8 +1587,6 @@ dvp_u15_s3_reloc (abfd, reloc_entry, symbol, data, input_section,
      bfd *output_bfd;
      char **error_message;
 {
-  boolean relocateable;
-  bfd_reloc_status_type ret;
   bfd_vma relocation;
   bfd_vma x;
 
@@ -1671,7 +1676,6 @@ elf_mips_mach (flags)
       return bfd_mach_mips4900;
       /* end-sanitize-tx49 */
       /* start-sanitize-cygnus */
-      /* CYGNUS LOCAL vr5400/raeburn */
 
     case E_MIPS_MACH_5400:
       return bfd_mach_mips5400;
@@ -2089,6 +2093,7 @@ _bfd_mips_elf_final_write_processing (abfd, linker)
       break;
 
     case bfd_mach_mips4000:
+    case bfd_mach_mips4300:
       val = E_MIPS_ARCH_3;
       break;
 
@@ -2116,7 +2121,6 @@ _bfd_mips_elf_final_write_processing (abfd, linker)
       break;
       /* end-sanitize-tx49 */
       /* start-sanitize-cygnus */
-      /* CYGNUS LOCAL vr5400/raeburn */
 
     case bfd_mach_mips5400:
       val = E_MIPS_ARCH_3 | E_MIPS_MACH_5400;
@@ -2638,7 +2642,10 @@ _bfd_mips_elf_fake_sections (abfd, hdr, sec)
               || strcmp (name, ".dynstr") == 0))
     {
       hdr->sh_entsize = 0;
+#if 0
+      /* This isn't how the Irix 6 linker behaves.  */
       hdr->sh_info = SIZEOF_MIPS_DYNSYM_SECNAMES;
+#endif
     }
   else if (strcmp (name, ".got") == 0
           || strcmp (name, ".sdata") == 0
@@ -3354,6 +3361,11 @@ _bfd_mips_elf_find_nearest_line (abfd, section, symbols, offset, filename_ptr,
 {
   asection *msec;
 
+  if (_bfd_dwarf1_find_nearest_line (abfd, section, symbols, offset,
+                                    filename_ptr, functionname_ptr,
+                                    line_ptr))
+    return true;
+
   if (_bfd_dwarf2_find_nearest_line (abfd, section, symbols, offset,
                                     filename_ptr, functionname_ptr,
                                     line_ptr))
@@ -3515,8 +3527,11 @@ struct mips_elf_link_hash_entry
 struct mips_elf_link_hash_table
 {
   struct elf_link_hash_table root;
+#if 0
+  /* We no longer use this.  */
   /* String section indices for the dynamic section symbols.  */
   bfd_size_type dynsym_sec_strindex[SIZEOF_MIPS_DYNSYM_SECNAMES];
+#endif
   /* The number of .rtproc entries.  */
   bfd_size_type procedure_count;
   /* The size of the .compact_rel section (if SGI_COMPAT).  */
@@ -3601,7 +3616,6 @@ mips_elf_link_hash_table_create (abfd)
      bfd *abfd;
 {
   struct mips_elf_link_hash_table *ret;
-  unsigned int i;
 
   ret = ((struct mips_elf_link_hash_table *)
         bfd_alloc (abfd, sizeof (struct mips_elf_link_hash_table)));
@@ -3615,8 +3629,11 @@ mips_elf_link_hash_table_create (abfd)
       return NULL;
     }
 
+#if 0
+  /* We no longer use this.  */
   for (i = 0; i < SIZEOF_MIPS_DYNSYM_SECNAMES; i++)
     ret->dynsym_sec_strindex[i] = (bfd_size_type) -1;
+#endif
   ret->procedure_count = 0;
   ret->compact_rel_size = 0;
   ret->use_rld_obj_head = false;
@@ -6566,6 +6583,9 @@ mips_elf_gc_mark_hook (abfd, info, rel, h, sym)
 
            case bfd_link_hash_common:
              return h->root.u.c.p->section;
+
+           default:
+             break;
            }
        }
     }
@@ -7097,15 +7117,20 @@ mips_elf_size_dynamic_sections (output_bfd, info)
      That means we must increment the dynamic symbol index of every
      other dynamic symbol.  */
   {
-    const char * const *namep;
     unsigned int c, i;
-    bfd_size_type strindex;
-    struct bfd_strtab_hash *dynstr;
     struct mips_got_info *g;
 
     c = 0;
     if (elf_hash_table (info)->dynamic_sections_created)
       {
+#if 0
+       /* We no longer try to restrict the set of sections which get
+           dynamic symbol table entries, since it fails if we have
+           other random sections which need dynamic relocations.  */
+       const char * const *namep;
+       bfd_size_type strindex;
+       struct bfd_strtab_hash *dynstr;
+
        if (SGI_COMPAT (output_bfd))
          {
            c = SIZEOF_MIPS_DYNSYM_SECNAMES - 1;
@@ -7133,6 +7158,7 @@ mips_elf_size_dynamic_sections (output_bfd, info)
              }
          }
        else
+#endif /* 0 */
          {
            c = bfd_count_sections (output_bfd);
            elf_link_hash_traverse (elf_hash_table (info),
@@ -7489,8 +7515,11 @@ mips_elf_finish_dynamic_sections (output_bfd, info)
              break;
 
            case DT_MIPS_UNREFEXTNO:
-             /* XXX FIXME: */
+#if 0
              dyn.d_un.d_val = SIZEOF_MIPS_DYNSYM_SECNAMES;
+#else
+             dyn.d_un.d_val = bfd_count_sections (output_bfd);
+#endif
              bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
              break;
 
@@ -7528,12 +7557,7 @@ mips_elf_finish_dynamic_sections (output_bfd, info)
   {
     asection *sdynsym;
     asection *s;
-    unsigned int i;
-    bfd_vma last;
     Elf_Internal_Sym sym;
-    long dindx;
-    const char *name;
-    const char * const * namep = mips_elf_dynsym_sec_names;
     Elf32_compact_rel cpt;
 
     /* Set up the section symbols for the output sections. SGI sets
@@ -7542,6 +7566,16 @@ mips_elf_finish_dynamic_sections (output_bfd, info)
     sdynsym = bfd_get_section_by_name (dynobj, ".dynsym");
     if (sdynsym != NULL)
       {
+#if 0
+       const char *name;
+       const char * const * namep = mips_elf_dynsym_sec_names;
+       unsigned int i;
+       bfd_vma last;
+       long dindx;
+
+       /* We no longer try to restrict the set of sections which get
+           dynamic symbol table entries, since it fails if we have
+           other random sections which need dynamic relocations.  */
        if (SGI_COMPAT (output_bfd))
          {
            sym.st_size = 0;
@@ -7586,6 +7620,7 @@ mips_elf_finish_dynamic_sections (output_bfd, info)
              SIZEOF_MIPS_DYNSYM_SECNAMES;
          }
        else
+#endif /* 0 */
          {
            sym.st_size = 0;
            sym.st_name = 0;