aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@airs.com>1995-07-03 17:57:25 +0000
committerIan Lance Taylor <ian@airs.com>1995-07-03 17:57:25 +0000
commit3004a68c469b847122e497e90d0d73dc8422e427 (patch)
treec7c1d610ab0773c8e46b4cdf27fb918185396091
parent6ff9c0519cc77f9007db0ecfea11a5c558b35f3a (diff)
downloadgdb-3004a68c469b847122e497e90d0d73dc8422e427.zip
gdb-3004a68c469b847122e497e90d0d73dc8422e427.tar.gz
gdb-3004a68c469b847122e497e90d0d73dc8422e427.tar.bz2
* elfcode.h (elf_link_add_object_symbols): Permit common and
indirect symbols in weakdefs BFD_ASSERT. * elf32-i386.c (elf_i386_adjust_dynamic_symbol): Simplify BFD_ASSERT to permit some legal, but odd, cases. * elf32-sparc.c (elf32_sparc_adjust_dynamic_symbol): Likewise. * elf32-m68k.c (elf_m68k_adjust_dynamic_symbol): Likewise.
-rw-r--r--bfd/ChangeLog9
-rw-r--r--bfd/elf32-i386.c24
-rw-r--r--bfd/elf32-m68k.c24
-rw-r--r--bfd/elf32-sparc.c24
-rw-r--r--bfd/elfcode.h43
5 files changed, 52 insertions, 72 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 6cb306e..86de90a 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,8 +1,9 @@
Mon Jul 3 11:30:45 1995 Ian Lance Taylor <ian@cygnus.com>
- * elf32-i386.c (elf_i386_adjust_dynamic_symbol): Correct
- BFD_ASSERT to handle __start_SECNAME symbols automatically defined
- by the linker.
+ * elfcode.h (elf_link_add_object_symbols): Permit common and
+ indirect symbols in weakdefs BFD_ASSERT.
+ * elf32-i386.c (elf_i386_adjust_dynamic_symbol): Simplify
+ BFD_ASSERT to permit some legal, but odd, cases.
* elf32-sparc.c (elf32_sparc_adjust_dynamic_symbol): Likewise.
* elf32-m68k.c (elf_m68k_adjust_dynamic_symbol): Likewise.
@@ -242,8 +243,6 @@ Wed May 24 10:52:01 1995 Steve Chamberlain <sac@slash.cygnus.com>
* linker.c (_bfd_generic_link_output_symbols): Cope with
indirect symbols.
- pr ld/6997
-
* elf32-i386.c (elf_i386_relocate_section): Give error
message when linking to a shared reloc which isn't there.
diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c
index 3d56995..1f8d4e9 100644
--- a/bfd/elf32-i386.c
+++ b/bfd/elf32-i386.c
@@ -607,22 +607,14 @@ elf_i386_adjust_dynamic_symbol (info, h)
dynobj = elf_hash_table (info)->dynobj;
/* Make sure we know what is going on here. */
- BFD_ASSERT (dynobj != NULL);
- BFD_ASSERT ((h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT)
- || ((h->elf_link_hash_flags
- & ELF_LINK_HASH_DEF_DYNAMIC) != 0
- && (h->elf_link_hash_flags
- & ELF_LINK_HASH_REF_REGULAR) != 0
- && (h->elf_link_hash_flags
- & ELF_LINK_HASH_DEF_REGULAR) == 0
- && (h->root.type == bfd_link_hash_defined
- || h->root.type == bfd_link_hash_defweak)
- && (h->root.u.def.section->owner == NULL
- || ((elf_elfheader (h->root.u.def.section->owner)->e_type
- == ET_DYN)
- && (bfd_get_flavour (h->root.u.def.section->owner)
- == bfd_target_elf_flavour)
- && h->root.u.def.section->output_section == NULL))));
+ BFD_ASSERT (dynobj != NULL
+ && ((h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT)
+ || ((h->elf_link_hash_flags
+ & ELF_LINK_HASH_DEF_DYNAMIC) != 0
+ && (h->elf_link_hash_flags
+ & ELF_LINK_HASH_REF_REGULAR) != 0
+ && (h->elf_link_hash_flags
+ & ELF_LINK_HASH_DEF_REGULAR) == 0)));
/* If this is a function, put it in the procedure linkage table. We
will fill in the contents of the procedure linkage table later,
diff --git a/bfd/elf32-m68k.c b/bfd/elf32-m68k.c
index 5ba6527..ed15b01 100644
--- a/bfd/elf32-m68k.c
+++ b/bfd/elf32-m68k.c
@@ -581,22 +581,14 @@ elf_m68k_adjust_dynamic_symbol (info, h)
dynobj = elf_hash_table (info)->dynobj;
/* Make sure we know what is going on here. */
- BFD_ASSERT (dynobj != NULL);
- BFD_ASSERT ((h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT)
- || ((h->elf_link_hash_flags
- & ELF_LINK_HASH_DEF_DYNAMIC) != 0
- && (h->elf_link_hash_flags
- & ELF_LINK_HASH_REF_REGULAR) != 0
- && (h->elf_link_hash_flags
- & ELF_LINK_HASH_DEF_REGULAR) == 0
- && (h->root.type == bfd_link_hash_defined
- || h->root.type == bfd_link_hash_defweak)
- && (h->root.u.def.section->owner == NULL
- || ((elf_elfheader (h->root.u.def.section->owner)->e_type
- == ET_DYN)
- && (bfd_get_flavour (h->root.u.def.section->owner)
- == bfd_target_elf_flavour)
- && h->root.u.def.section->output_section == NULL))));
+ BFD_ASSERT (dynobj != NULL
+ && ((h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT)
+ || ((h->elf_link_hash_flags
+ & ELF_LINK_HASH_DEF_DYNAMIC) != 0
+ && (h->elf_link_hash_flags
+ & ELF_LINK_HASH_REF_REGULAR) != 0
+ && (h->elf_link_hash_flags
+ & ELF_LINK_HASH_DEF_REGULAR) == 0)));
/* If this is a function, put it in the procedure linkage table. We
will fill in the contents of the procedure linkage table later,
diff --git a/bfd/elf32-sparc.c b/bfd/elf32-sparc.c
index 9bf032f..e44922c 100644
--- a/bfd/elf32-sparc.c
+++ b/bfd/elf32-sparc.c
@@ -573,22 +573,14 @@ elf32_sparc_adjust_dynamic_symbol (info, h)
dynobj = elf_hash_table (info)->dynobj;
/* Make sure we know what is going on here. */
- BFD_ASSERT (dynobj != NULL);
- BFD_ASSERT ((h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT)
- || ((h->elf_link_hash_flags
- & ELF_LINK_HASH_DEF_DYNAMIC) != 0
- && (h->elf_link_hash_flags
- & ELF_LINK_HASH_REF_REGULAR) != 0
- && (h->elf_link_hash_flags
- & ELF_LINK_HASH_DEF_REGULAR) == 0
- && (h->root.type == bfd_link_hash_defined
- || h->root.type == bfd_link_hash_defweak)
- && (h->root.u.def.section->owner == NULL
- || ((elf_elfheader (h->root.u.def.section->owner)->e_type
- == ET_DYN)
- && (bfd_get_flavour (h->root.u.def.section->owner)
- == bfd_target_elf_flavour)
- && h->root.u.def.section->output_section == NULL))));
+ BFD_ASSERT (dynobj != NULL
+ && ((h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT)
+ || ((h->elf_link_hash_flags
+ & ELF_LINK_HASH_DEF_DYNAMIC) != 0
+ && (h->elf_link_hash_flags
+ & ELF_LINK_HASH_REF_REGULAR) != 0
+ && (h->elf_link_hash_flags
+ & ELF_LINK_HASH_DEF_REGULAR) == 0)));
/* If this is a function, put it in the procedure linkage table. We
will fill in the contents of the procedure linkage table later
diff --git a/bfd/elfcode.h b/bfd/elfcode.h
index 63b55f4..4c73825 100644
--- a/bfd/elfcode.h
+++ b/bfd/elfcode.h
@@ -2261,32 +2261,35 @@ elf_sort_hdrs (arg1, arg2)
const Elf_Internal_Shdr *hdr1 = *(const Elf_Internal_Shdr **) arg1;
const Elf_Internal_Shdr *hdr2 = *(const Elf_Internal_Shdr **) arg2;
-#define TOEND(x) (((x)->sh_flags & SHF_ALLOC)==0)
+#define TOEND(x) (((x)->sh_flags & SHF_ALLOC)==0)
- if (TOEND(hdr1))
- if (TOEND(hdr2))
+ if (TOEND (hdr1))
+ if (TOEND (hdr2))
return 0;
else
return 1;
- if (TOEND(hdr2))
- return -1;
+ if (TOEND (hdr2))
+ return -1;
- if (hdr1->sh_addr < hdr2->sh_addr)
- return -1;
- else if (hdr1->sh_addr > hdr2->sh_addr)
- return 1;
- /* Put !SHT_NOBITS sections before SHT_NOBITS ones.
- The main loop in map_program_segments requires this. */
- ret = (hdr1->sh_type == SHT_NOBITS) - (hdr2->sh_type == SHT_NOBITS);
- if (ret != 0)
- return ret;
+ if (hdr1->sh_addr < hdr2->sh_addr)
+ return -1;
+ else if (hdr1->sh_addr > hdr2->sh_addr)
+ return 1;
+
+ /* Put !SHT_NOBITS sections before SHT_NOBITS ones.
+ The main loop in map_program_segments requires this. */
+
+ ret = (hdr1->sh_type == SHT_NOBITS) - (hdr2->sh_type == SHT_NOBITS);
+
+ if (ret != 0)
+ return ret;
if (hdr1->sh_size < hdr2->sh_size)
- return -1;
+ return -1;
if (hdr1->sh_size > hdr2->sh_size)
- return 1;
- return 0;
- }
+ return 1;
+ return 0;
+}
@@ -4696,7 +4699,9 @@ elf_link_add_object_symbols (abfd, info)
hlook->weakdef = NULL;
BFD_ASSERT (hlook->root.type == bfd_link_hash_defined
- || hlook->root.type == bfd_link_hash_defweak);
+ || hlook->root.type == bfd_link_hash_defweak
+ || hlook->root.type == bfd_link_hash_common
+ || hlook->root.type == bfd_link_hash_indirect);
slook = hlook->root.u.def.section;
vlook = hlook->root.u.def.value;