bfd/
* elf.c (_bfd_elf_get_dynamic_reloc_upper_bound): Only include loadable reloc sections. (_bfd_elf_canonicalize_dynamic_reloc): Likewise. (_bfd_elf_get_synthetic_symtab): Return 0 if no dynamic syms. binutils/ * nm.c (display_rel_file): Read dynamic syms before calling bfd_get_synthetic_symtab.
This commit is contained in:
parent
7e9f086769
commit
8615f3f213
4 changed files with 51 additions and 24 deletions
|
@ -1,3 +1,10 @@
|
||||||
|
2005-01-25 Alan Modra <amodra@bigpond.net.au>
|
||||||
|
|
||||||
|
* elf.c (_bfd_elf_get_dynamic_reloc_upper_bound): Only include
|
||||||
|
loadable reloc sections.
|
||||||
|
(_bfd_elf_canonicalize_dynamic_reloc): Likewise.
|
||||||
|
(_bfd_elf_get_synthetic_symtab): Return 0 if no dynamic syms.
|
||||||
|
|
||||||
2005-01-25 Alan Modra <amodra@bigpond.net.au>
|
2005-01-25 Alan Modra <amodra@bigpond.net.au>
|
||||||
|
|
||||||
* elflink.c (elf_link_add_object_symbols): Don't create link dynamic
|
* elflink.c (elf_link_add_object_symbols): Don't create link dynamic
|
||||||
|
|
39
bfd/elf.c
39
bfd/elf.c
|
@ -1,7 +1,7 @@
|
||||||
/* ELF executable support for BFD.
|
/* ELF executable support for BFD.
|
||||||
|
|
||||||
Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
|
Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
|
||||||
2002, 2003, 2004 Free Software Foundation, Inc.
|
2002, 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This file is part of BFD, the Binary File Descriptor library.
|
This file is part of BFD, the Binary File Descriptor library.
|
||||||
|
|
||||||
|
@ -5977,10 +5977,10 @@ _bfd_elf_canonicalize_dynamic_symtab (bfd *abfd,
|
||||||
return symcount;
|
return symcount;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return the size required for the dynamic reloc entries. Any
|
/* Return the size required for the dynamic reloc entries. Any loadable
|
||||||
section that was actually installed in the BFD, and has type
|
section that was actually installed in the BFD, and has type SHT_REL
|
||||||
SHT_REL or SHT_RELA, and uses the dynamic symbol table, is
|
or SHT_RELA, and uses the dynamic symbol table, is considered to be a
|
||||||
considered to be a dynamic reloc section. */
|
dynamic reloc section. */
|
||||||
|
|
||||||
long
|
long
|
||||||
_bfd_elf_get_dynamic_reloc_upper_bound (bfd *abfd)
|
_bfd_elf_get_dynamic_reloc_upper_bound (bfd *abfd)
|
||||||
|
@ -5996,7 +5996,8 @@ _bfd_elf_get_dynamic_reloc_upper_bound (bfd *abfd)
|
||||||
|
|
||||||
ret = sizeof (arelent *);
|
ret = sizeof (arelent *);
|
||||||
for (s = abfd->sections; s != NULL; s = s->next)
|
for (s = abfd->sections; s != NULL; s = s->next)
|
||||||
if (elf_section_data (s)->this_hdr.sh_link == elf_dynsymtab (abfd)
|
if ((s->flags & SEC_LOAD) != 0
|
||||||
|
&& elf_section_data (s)->this_hdr.sh_link == elf_dynsymtab (abfd)
|
||||||
&& (elf_section_data (s)->this_hdr.sh_type == SHT_REL
|
&& (elf_section_data (s)->this_hdr.sh_type == SHT_REL
|
||||||
|| elf_section_data (s)->this_hdr.sh_type == SHT_RELA))
|
|| elf_section_data (s)->this_hdr.sh_type == SHT_RELA))
|
||||||
ret += ((s->size / elf_section_data (s)->this_hdr.sh_entsize)
|
ret += ((s->size / elf_section_data (s)->this_hdr.sh_entsize)
|
||||||
|
@ -6005,14 +6006,13 @@ _bfd_elf_get_dynamic_reloc_upper_bound (bfd *abfd)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Canonicalize the dynamic relocation entries. Note that we return
|
/* Canonicalize the dynamic relocation entries. Note that we return the
|
||||||
the dynamic relocations as a single block, although they are
|
dynamic relocations as a single block, although they are actually
|
||||||
actually associated with particular sections; the interface, which
|
associated with particular sections; the interface, which was
|
||||||
was designed for SunOS style shared libraries, expects that there
|
designed for SunOS style shared libraries, expects that there is only
|
||||||
is only one set of dynamic relocs. Any section that was actually
|
one set of dynamic relocs. Any loadable section that was actually
|
||||||
installed in the BFD, and has type SHT_REL or SHT_RELA, and uses
|
installed in the BFD, and has type SHT_REL or SHT_RELA, and uses the
|
||||||
the dynamic symbol table, is considered to be a dynamic reloc
|
dynamic symbol table, is considered to be a dynamic reloc section. */
|
||||||
section. */
|
|
||||||
|
|
||||||
long
|
long
|
||||||
_bfd_elf_canonicalize_dynamic_reloc (bfd *abfd,
|
_bfd_elf_canonicalize_dynamic_reloc (bfd *abfd,
|
||||||
|
@ -6033,7 +6033,8 @@ _bfd_elf_canonicalize_dynamic_reloc (bfd *abfd,
|
||||||
ret = 0;
|
ret = 0;
|
||||||
for (s = abfd->sections; s != NULL; s = s->next)
|
for (s = abfd->sections; s != NULL; s = s->next)
|
||||||
{
|
{
|
||||||
if (elf_section_data (s)->this_hdr.sh_link == elf_dynsymtab (abfd)
|
if ((s->flags & SEC_LOAD) != 0
|
||||||
|
&& elf_section_data (s)->this_hdr.sh_link == elf_dynsymtab (abfd)
|
||||||
&& (elf_section_data (s)->this_hdr.sh_type == SHT_REL
|
&& (elf_section_data (s)->this_hdr.sh_type == SHT_REL
|
||||||
|| elf_section_data (s)->this_hdr.sh_type == SHT_RELA))
|
|| elf_section_data (s)->this_hdr.sh_type == SHT_RELA))
|
||||||
{
|
{
|
||||||
|
@ -7908,7 +7909,7 @@ long
|
||||||
_bfd_elf_get_synthetic_symtab (bfd *abfd,
|
_bfd_elf_get_synthetic_symtab (bfd *abfd,
|
||||||
long symcount ATTRIBUTE_UNUSED,
|
long symcount ATTRIBUTE_UNUSED,
|
||||||
asymbol **syms ATTRIBUTE_UNUSED,
|
asymbol **syms ATTRIBUTE_UNUSED,
|
||||||
long dynsymcount ATTRIBUTE_UNUSED,
|
long dynsymcount,
|
||||||
asymbol **dynsyms,
|
asymbol **dynsyms,
|
||||||
asymbol **ret)
|
asymbol **ret)
|
||||||
{
|
{
|
||||||
|
@ -7924,10 +7925,14 @@ _bfd_elf_get_synthetic_symtab (bfd *abfd,
|
||||||
char *names;
|
char *names;
|
||||||
asection *plt;
|
asection *plt;
|
||||||
|
|
||||||
|
*ret = NULL;
|
||||||
|
|
||||||
if ((abfd->flags & (DYNAMIC | EXEC_P)) == 0)
|
if ((abfd->flags & (DYNAMIC | EXEC_P)) == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
*ret = NULL;
|
if (dynsymcount <= 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
if (!bed->plt_sym_val)
|
if (!bed->plt_sym_val)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
2005-01-25 Alan Modra <amodra@bigpond.net.au>
|
||||||
|
|
||||||
|
* nm.c (display_rel_file): Read dynamic syms before calling
|
||||||
|
bfd_get_synthetic_symtab.
|
||||||
|
|
||||||
2005-01-21 Ben Elliston <bje@au.ibm.com>
|
2005-01-21 Ben Elliston <bje@au.ibm.com>
|
||||||
|
|
||||||
* dlltool.c (dump_iat): Remove unused function.
|
* dlltool.c (dump_iat): Remove unused function.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* nm.c -- Describe symbol table of a rel file.
|
/* nm.c -- Describe symbol table of a rel file.
|
||||||
Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
|
Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
|
||||||
2001, 2002, 2003, 2004
|
2001, 2002, 2003, 2004, 2005
|
||||||
Free Software Foundation, Inc.
|
Free Software Foundation, Inc.
|
||||||
|
|
||||||
This file is part of GNU Binutils.
|
This file is part of GNU Binutils.
|
||||||
|
@ -1026,8 +1026,18 @@ display_rel_file (bfd *abfd, bfd *archive_bfd)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
long storage = bfd_get_dynamic_symtab_upper_bound (abfd);
|
||||||
|
|
||||||
static_count = symcount;
|
static_count = symcount;
|
||||||
static_syms = minisyms;
|
static_syms = minisyms;
|
||||||
|
|
||||||
|
if (storage > 0)
|
||||||
|
{
|
||||||
|
dyn_syms = xmalloc (storage);
|
||||||
|
dyn_count = bfd_canonicalize_dynamic_symtab (abfd, dyn_syms);
|
||||||
|
if (dyn_count < 0)
|
||||||
|
bfd_fatal (bfd_get_filename (abfd));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
synth_count = bfd_get_synthetic_symtab (abfd, static_count, static_syms,
|
synth_count = bfd_get_synthetic_symtab (abfd, static_count, static_syms,
|
||||||
dyn_count, dyn_syms, &synthsyms);
|
dyn_count, dyn_syms, &synthsyms);
|
||||||
|
|
Loading…
Add table
Reference in a new issue