diff options
author | Ian Lance Taylor <ian@airs.com> | 1996-04-01 17:42:59 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@airs.com> | 1996-04-01 17:42:59 +0000 |
commit | ce6a77318320c19cc5014c9cef0fdfa1289d1649 (patch) | |
tree | 26bd29fc95431c0f96ed43ac8d72c34254b1eedf | |
parent | 251b8ab932e847dcc51e29ec62399992f67f6fe8 (diff) | |
download | gdb-ce6a77318320c19cc5014c9cef0fdfa1289d1649.zip gdb-ce6a77318320c19cc5014c9cef0fdfa1289d1649.tar.gz gdb-ce6a77318320c19cc5014c9cef0fdfa1289d1649.tar.bz2 |
* elflink.h (elf_adjust_dynamic_symbol): If a common symbol got
defined in a regular file, set ELF_LINK_HASH_DEF_REGULAR.
-rw-r--r-- | bfd/ChangeLog | 5 | ||||
-rw-r--r-- | bfd/elflink.h | 12 |
2 files changed, 17 insertions, 0 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 21fa350..317e221 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +Mon Apr 1 12:35:36 1996 Ian Lance Taylor <ian@cygnus.com> + + * elflink.h (elf_adjust_dynamic_symbol): If a common symbol got + defined in a regular file, set ELF_LINK_HASH_DEF_REGULAR. + Sun Mar 31 01:58:41 1996 steve chamberlain <sac@slash.cygnus.com> * peicode.h (coff_swap_aouthdr_out): Delete test for .junk. diff --git a/bfd/elflink.h b/bfd/elflink.h index a27f930..32da750 100644 --- a/bfd/elflink.h +++ b/bfd/elflink.h @@ -1554,6 +1554,18 @@ elf_adjust_dynamic_symbol (h, data) } } + /* If this is a final link, and the symbol was defined as a common + symbol in a regular object file, and there was no definition in + any dynamic object, then the linker will have allocated space for + the symbol in a common section but the ELF_LINK_HASH_DEF_REGULAR + flag will not have been set. */ + if (h->root.type == bfd_link_hash_defined + && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0 + && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) != 0 + && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) == 0 + && (h->root.u.def.section->owner->flags & DYNAMIC) == 0) + h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR; + /* If -Bsymbolic was used (which means to bind references to global symbols to the definition within the shared object), and this symbol was defined in a regular object, then it actually doesn't |