* hp300hpux.c (MY(callback)): Set lma as well as vma.
authorIan Lance Taylor <ian@airs.com>
Mon, 27 Nov 1995 20:11:40 +0000 (20:11 +0000)
committerIan Lance Taylor <ian@airs.com>
Mon, 27 Nov 1995 20:11:40 +0000 (20:11 +0000)
bfd/ChangeLog
bfd/hp300hpux.c

index 3b52da6c531132671c4439a4ad90fa734b3cd5b5..85f39df729bb14f61a40e6a1e136f66e2c4de8f4 100644 (file)
@@ -1,5 +1,7 @@
 Mon Nov 27 12:27:46 1995  Ian Lance Taylor  <ian@cygnus.com>
 
+       * hp300hpux.c (MY(callback)): Set lma as well as vma.
+
        * configure, config.in: Regenerate with autoconf 2.7.
 
        * elf32-i386.c (elf_backend_plt_readonly): Set correctly, to 1.
index 54e5e505a930fc4a204245c656f40b8231a80d54..ec48fd382429f3d5b22868b752f12d5bd415b59b 100644 (file)
@@ -1,5 +1,5 @@
 /* BFD backend for hp-ux 9000/300
-   Copyright (C) 1990, 1991, 1994 Free Software Foundation, Inc.
+   Copyright (C) 1990, 1991, 1994, 1995 Free Software Foundation, Inc.
    Written by Glenn Engel.
 
 This file is part of BFD, the Binary File Descriptor library.
@@ -215,6 +215,10 @@ MY (callback) (abfd)
   obj_datasec (abfd)->vma = N_DATADDR (*execp);
   obj_bsssec (abfd)->vma = N_BSSADDR (*execp);
 
+  obj_textsec (abfd)->lma = obj_textsec (abfd)->vma;
+  obj_datasec (abfd)->lma = obj_datasec (abfd)->vma;
+  obj_bsssec (abfd)->lma = obj_bsssec (abfd)->vma;
+
   /* The file offsets of the sections */
   obj_textsec (abfd)->filepos = N_TXTOFF (*execp);
   obj_datasec (abfd)->filepos = N_DATOFF (*execp);
@@ -386,7 +390,28 @@ convert_sym_type (sym_pointer, cache_ptr, abfd)
        new_type |= N_EXT;
 
       if (name_type & HP_SECONDARY_SYMBOL)
-       new_type = (new_type & ~N_TYPE) | N_INDR;
+       {
+         switch (new_type)
+           {
+           default:
+             abort ();
+           case N_UNDF | N_EXT:
+             new_type = N_WEAKU;
+             break;
+           case N_ABS | N_EXT:
+             new_type = N_WEAKA;
+             break;
+           case N_TEXT | N_EXT:
+             new_type = N_WEAKT;
+             break;
+           case N_DATA | N_EXT:
+             new_type = N_WEAKD;
+             break;
+           case N_BSS | N_EXT:
+             new_type = N_WEAKB;
+             break;
+           }
+       }
     }
   cache_ptr->type = new_type;
 
@@ -496,7 +521,6 @@ MY (slurp_symbol_table) (abfd)
   char *strings;
   aout_symbol_type *cached;
   unsigned num_syms = 0;
-  unsigned num_secondary = 0;
 
   /* If there's no work to be done, don't do any */
   if (obj_aout_symbols (abfd) != (aout_symbol_type *) NULL)
@@ -524,15 +548,13 @@ MY (slurp_symbol_table) (abfd)
   /* first, march thru the table and figure out how many symbols there are */
   for (sym_pointer = syms; sym_pointer < sym_end; sym_pointer++, num_syms++)
     {
-      if (bfd_get_8 (abfd, sym_pointer->e_type) & HP_SECONDARY_SYMBOL)
-       num_secondary++;
       /* skip over the embedded symbol. */
       sym_pointer = (struct external_nlist *) (((char *) sym_pointer) +
                                               sym_pointer->e_length[0]);
     }
 
   /* now that we know the symbol count, update the bfd header */
-  bfd_get_symcount (abfd) = num_syms + num_secondary;
+  bfd_get_symcount (abfd) = num_syms;
 
   cached = ((aout_symbol_type *)
            bfd_zalloc (abfd,
@@ -547,7 +569,6 @@ MY (slurp_symbol_table) (abfd)
      null terminated strings to hold the symbol names.  Make sure any
      assignment to the strings pointer is done after we're thru using
      the nlist so we don't overwrite anything important. */
-  num_secondary = 0;
 
   /* OK, now walk the new symtable, cacheing symbol properties */
   {
@@ -590,34 +611,6 @@ MY (slurp_symbol_table) (abfd)
        else
          cache_ptr->symbol.name = (char *) NULL;
 
-       /**********************************************************/
-       /* this is a bit of a kludge, but a secondary hp symbol   */
-       /* gets translated into a gnu indirect symbol.  When this */
-       /* happens, we need to create a "dummy" record to which   */
-       /* we can point the indirect symbol to.                   */
-       /**********************************************************/
-       if ((cache_ptr->type | N_EXT) == (N_INDR | N_EXT))
-         {
-           aout_symbol_type *cache_ptr2 = cached + num_syms + num_secondary;
-
-           num_secondary++;
-
-           /* aoutx.h assumes the "next" value is the indirect sym  */
-           /* since we don't want to disturb the order by inserting */
-           /* a new symbol, we tack on the created secondary syms   */
-           /* at the end.                                           */
-           cache_ptr->symbol.value = (bfd_vma) (cache_ptr2);
-           *cache_ptr2 = cache_save;
-           cache_ptr2->symbol.name = strings;
-           memcpy (strings, cache_ptr->symbol.name, length);
-           strcpy (strings + length, ":secondry");     /* 9 max chars + null */
-           strings += length + 10;
-           cache_ptr2->type &= ~HP_SECONDARY_SYMBOL;   /* clear secondary */
-           convert_sym_type (sym_pointer, cache_ptr2, abfd);
-           if (!translate_from_native_sym_flags (abfd, cache_ptr2))
-             return false;
-         }
-
        /* skip over the embedded symbol. */
        sym_pointer = (struct external_nlist *) (((char *) sym_pointer) +
                                                 length);