Better indirect and warning symbol handling inspired by Stuart
authorIan Lance Taylor <ian@airs.com>
Mon, 6 Jun 1994 21:54:54 +0000 (21:54 +0000)
committerIan Lance Taylor <ian@airs.com>
Mon, 6 Jun 1994 21:54:54 +0000 (21:54 +0000)
Quick <stuck@cs.man.ac.uk>.
* linker.c (enum link_action): Add REF, MIND, CWARN, REFC.
(link_action): Change UNDEF_ROW/def and UNDEFW_ROW/def from NOACT
to REF.  Change UNDEF_ROW/indr and UNDEFW_ROW/indr from CYCLE to
REFC.  Change DEF_ROW/indr and COMMON_ROW/indr from CYCLE to MDEF.
Change DEFW_ROW/indr from CYCLE to NOACT.  Change INDR_ROW/indr
from MDEF to MIND.  Change INDR_ROW/warn from WARNC to CYCLE.
Change WARN_ROW/def and WARN_ROW/indr from MWARN to CWARN.  Change
WARN_ROW/com from MWARN to WARN.  Change WARN_ROW/warn from NOACT
to CYCLE.  Change SET_ROW/warn from WARNC to CYCLE>
(_bfd_generic_link_add_one_symbol): Handle REF, MIND, CWARN and
REFC.  If a new indirect symbol has been referenced, push the
reference down to the symbol it points to.  FIx handling of WARN.
* aoutx.h (translate_from_native_sym_flags): If N_WARNING, don't
clobber e_type of next symbol.
(translate_to_native_sym_flags): Likewise.
(aout_link_write_symbols): Loop on bfd_link_hash_warning as well
as bfd_link_hash_indirect.

bfd/ChangeLog
bfd/aoutx.h

index 2086cf02e190c121ca47932e6fc5043dadca8b5f..0969b768343be4de78071713e0c53a50cfd9fa25 100644 (file)
@@ -1,5 +1,25 @@
 Mon Jun  6 10:57:28 1994  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)
 
+       Better indirect and warning symbol handling inspired by Stuart
+       Quick <stuck@cs.man.ac.uk>.
+       * linker.c (enum link_action): Add REF, MIND, CWARN, REFC.
+       (link_action): Change UNDEF_ROW/def and UNDEFW_ROW/def from NOACT
+       to REF.  Change UNDEF_ROW/indr and UNDEFW_ROW/indr from CYCLE to
+       REFC.  Change DEF_ROW/indr and COMMON_ROW/indr from CYCLE to MDEF.
+       Change DEFW_ROW/indr from CYCLE to NOACT.  Change INDR_ROW/indr
+       from MDEF to MIND.  Change INDR_ROW/warn from WARNC to CYCLE.
+       Change WARN_ROW/def and WARN_ROW/indr from MWARN to CWARN.  Change
+       WARN_ROW/com from MWARN to WARN.  Change WARN_ROW/warn from NOACT
+       to CYCLE.  Change SET_ROW/warn from WARNC to CYCLE>
+       (_bfd_generic_link_add_one_symbol): Handle REF, MIND, CWARN and
+       REFC.  If a new indirect symbol has been referenced, push the
+       reference down to the symbol it points to.  FIx handling of WARN.
+       * aoutx.h (translate_from_native_sym_flags): If N_WARNING, don't
+       clobber e_type of next symbol.
+       (translate_to_native_sym_flags): Likewise.
+       (aout_link_write_symbols): Loop on bfd_link_hash_warning as well
+       as bfd_link_hash_indirect.
+
        * libaout.h (struct aout_link_hash_entry): New field written.
        * aoutx.h (NAME(aout,link_hash_newfunc)): Initialize written.
        (aout_link_write_symbols): Use written, not root.written.
index 2af2d1962336a00e041a357f7ec7b9741e591d6c..68368c66c1203737f49290520c8218242a92df8e 100644 (file)
@@ -1288,9 +1288,6 @@ translate_from_native_sym_flags (sym_pointer, cache_ptr, abfd)
             pick one arbitrarily.  */
          cache_ptr->symbol.section = &bfd_abs_section;
 
-         /* We furgle with the next symbol in place.
-            We don't want it to be undefined, we'll trample the type */
-         (sym_pointer + 1)->e_type[0] = 0xff;
          break;
        }
       if ((cache_ptr->type | N_EXT) == (N_INDR | N_EXT))
@@ -1453,7 +1450,6 @@ translate_to_native_sym_flags (sym_pointer, cache_ptr, abfd)
 
   if (cache_ptr->flags & (BSF_WARNING)) {
     sym_pointer->e_type[0] = N_WARNING;
-    (sym_pointer+1)->e_type[0] = 1;
   }
 
   if (cache_ptr->flags & BSF_DEBUGGING) {
@@ -3720,7 +3716,8 @@ aout_link_write_symbols (finfo, input_bfd, symbol_map)
                  || h->root.type == bfd_link_hash_warning))
            {
              hresolve = (struct aout_link_hash_entry *) h->root.u.i.link;
-             while (hresolve->root.type == bfd_link_hash_indirect)
+             while (hresolve->root.type == bfd_link_hash_indirect
+                    || hresolve->root.type == bfd_link_hash_warning)
                hresolve = ((struct aout_link_hash_entry *)
                            hresolve->root.u.i.link);
              *sym_hash = hresolve;