* 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.
This commit is contained in:
parent
6ff9c0519c
commit
3004a68c46
5 changed files with 52 additions and 72 deletions
|
@ -1,8 +1,9 @@
|
||||||
Mon Jul 3 11:30:45 1995 Ian Lance Taylor <ian@cygnus.com>
|
Mon Jul 3 11:30:45 1995 Ian Lance Taylor <ian@cygnus.com>
|
||||||
|
|
||||||
* elf32-i386.c (elf_i386_adjust_dynamic_symbol): Correct
|
* elfcode.h (elf_link_add_object_symbols): Permit common and
|
||||||
BFD_ASSERT to handle __start_SECNAME symbols automatically defined
|
indirect symbols in weakdefs BFD_ASSERT.
|
||||||
by the linker.
|
* 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-sparc.c (elf32_sparc_adjust_dynamic_symbol): Likewise.
|
||||||
* elf32-m68k.c (elf_m68k_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
|
* linker.c (_bfd_generic_link_output_symbols): Cope with
|
||||||
indirect symbols.
|
indirect symbols.
|
||||||
|
|
||||||
pr ld/6997
|
|
||||||
|
|
||||||
* elf32-i386.c (elf_i386_relocate_section): Give error
|
* elf32-i386.c (elf_i386_relocate_section): Give error
|
||||||
message when linking to a shared reloc which isn't there.
|
message when linking to a shared reloc which isn't there.
|
||||||
|
|
||||||
|
|
|
@ -607,22 +607,14 @@ elf_i386_adjust_dynamic_symbol (info, h)
|
||||||
dynobj = elf_hash_table (info)->dynobj;
|
dynobj = elf_hash_table (info)->dynobj;
|
||||||
|
|
||||||
/* Make sure we know what is going on here. */
|
/* Make sure we know what is going on here. */
|
||||||
BFD_ASSERT (dynobj != NULL);
|
BFD_ASSERT (dynobj != NULL
|
||||||
BFD_ASSERT ((h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT)
|
&& ((h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT)
|
||||||
|| ((h->elf_link_hash_flags
|
|| ((h->elf_link_hash_flags
|
||||||
& ELF_LINK_HASH_DEF_DYNAMIC) != 0
|
& ELF_LINK_HASH_DEF_DYNAMIC) != 0
|
||||||
&& (h->elf_link_hash_flags
|
&& (h->elf_link_hash_flags
|
||||||
& ELF_LINK_HASH_REF_REGULAR) != 0
|
& ELF_LINK_HASH_REF_REGULAR) != 0
|
||||||
&& (h->elf_link_hash_flags
|
&& (h->elf_link_hash_flags
|
||||||
& ELF_LINK_HASH_DEF_REGULAR) == 0
|
& 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))));
|
|
||||||
|
|
||||||
/* If this is a function, put it in the procedure linkage table. We
|
/* If this is a function, put it in the procedure linkage table. We
|
||||||
will fill in the contents of the procedure linkage table later,
|
will fill in the contents of the procedure linkage table later,
|
||||||
|
|
|
@ -581,22 +581,14 @@ elf_m68k_adjust_dynamic_symbol (info, h)
|
||||||
dynobj = elf_hash_table (info)->dynobj;
|
dynobj = elf_hash_table (info)->dynobj;
|
||||||
|
|
||||||
/* Make sure we know what is going on here. */
|
/* Make sure we know what is going on here. */
|
||||||
BFD_ASSERT (dynobj != NULL);
|
BFD_ASSERT (dynobj != NULL
|
||||||
BFD_ASSERT ((h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT)
|
&& ((h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT)
|
||||||
|| ((h->elf_link_hash_flags
|
|| ((h->elf_link_hash_flags
|
||||||
& ELF_LINK_HASH_DEF_DYNAMIC) != 0
|
& ELF_LINK_HASH_DEF_DYNAMIC) != 0
|
||||||
&& (h->elf_link_hash_flags
|
&& (h->elf_link_hash_flags
|
||||||
& ELF_LINK_HASH_REF_REGULAR) != 0
|
& ELF_LINK_HASH_REF_REGULAR) != 0
|
||||||
&& (h->elf_link_hash_flags
|
&& (h->elf_link_hash_flags
|
||||||
& ELF_LINK_HASH_DEF_REGULAR) == 0
|
& 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))));
|
|
||||||
|
|
||||||
/* If this is a function, put it in the procedure linkage table. We
|
/* If this is a function, put it in the procedure linkage table. We
|
||||||
will fill in the contents of the procedure linkage table later,
|
will fill in the contents of the procedure linkage table later,
|
||||||
|
|
|
@ -573,22 +573,14 @@ elf32_sparc_adjust_dynamic_symbol (info, h)
|
||||||
dynobj = elf_hash_table (info)->dynobj;
|
dynobj = elf_hash_table (info)->dynobj;
|
||||||
|
|
||||||
/* Make sure we know what is going on here. */
|
/* Make sure we know what is going on here. */
|
||||||
BFD_ASSERT (dynobj != NULL);
|
BFD_ASSERT (dynobj != NULL
|
||||||
BFD_ASSERT ((h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT)
|
&& ((h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT)
|
||||||
|| ((h->elf_link_hash_flags
|
|| ((h->elf_link_hash_flags
|
||||||
& ELF_LINK_HASH_DEF_DYNAMIC) != 0
|
& ELF_LINK_HASH_DEF_DYNAMIC) != 0
|
||||||
&& (h->elf_link_hash_flags
|
&& (h->elf_link_hash_flags
|
||||||
& ELF_LINK_HASH_REF_REGULAR) != 0
|
& ELF_LINK_HASH_REF_REGULAR) != 0
|
||||||
&& (h->elf_link_hash_flags
|
&& (h->elf_link_hash_flags
|
||||||
& ELF_LINK_HASH_DEF_REGULAR) == 0
|
& 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))));
|
|
||||||
|
|
||||||
/* If this is a function, put it in the procedure linkage table. We
|
/* If this is a function, put it in the procedure linkage table. We
|
||||||
will fill in the contents of the procedure linkage table later
|
will fill in the contents of the procedure linkage table later
|
||||||
|
|
|
@ -2261,32 +2261,35 @@ elf_sort_hdrs (arg1, arg2)
|
||||||
const Elf_Internal_Shdr *hdr1 = *(const Elf_Internal_Shdr **) arg1;
|
const Elf_Internal_Shdr *hdr1 = *(const Elf_Internal_Shdr **) arg1;
|
||||||
const Elf_Internal_Shdr *hdr2 = *(const Elf_Internal_Shdr **) arg2;
|
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 (hdr1))
|
||||||
if (TOEND(hdr2))
|
if (TOEND (hdr2))
|
||||||
return 0;
|
return 0;
|
||||||
else
|
else
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
if (TOEND(hdr2))
|
if (TOEND (hdr2))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (hdr1->sh_addr < hdr2->sh_addr)
|
if (hdr1->sh_addr < hdr2->sh_addr)
|
||||||
return -1;
|
return -1;
|
||||||
else if (hdr1->sh_addr > hdr2->sh_addr)
|
else if (hdr1->sh_addr > hdr2->sh_addr)
|
||||||
return 1;
|
return 1;
|
||||||
/* Put !SHT_NOBITS sections before SHT_NOBITS ones.
|
|
||||||
The main loop in map_program_segments requires this. */
|
/* Put !SHT_NOBITS sections before SHT_NOBITS ones.
|
||||||
ret = (hdr1->sh_type == SHT_NOBITS) - (hdr2->sh_type == SHT_NOBITS);
|
The main loop in map_program_segments requires this. */
|
||||||
if (ret != 0)
|
|
||||||
return ret;
|
ret = (hdr1->sh_type == SHT_NOBITS) - (hdr2->sh_type == SHT_NOBITS);
|
||||||
|
|
||||||
|
if (ret != 0)
|
||||||
|
return ret;
|
||||||
if (hdr1->sh_size < hdr2->sh_size)
|
if (hdr1->sh_size < hdr2->sh_size)
|
||||||
return -1;
|
return -1;
|
||||||
if (hdr1->sh_size > hdr2->sh_size)
|
if (hdr1->sh_size > hdr2->sh_size)
|
||||||
return 1;
|
return 1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -4696,7 +4699,9 @@ elf_link_add_object_symbols (abfd, info)
|
||||||
hlook->weakdef = NULL;
|
hlook->weakdef = NULL;
|
||||||
|
|
||||||
BFD_ASSERT (hlook->root.type == bfd_link_hash_defined
|
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;
|
slook = hlook->root.u.def.section;
|
||||||
vlook = hlook->root.u.def.value;
|
vlook = hlook->root.u.def.value;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue