* 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:
Alan Modra 2005-01-25 10:33:55 +00:00
parent 7e9f086769
commit 8615f3f213
4 changed files with 51 additions and 24 deletions

View file

@ -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>
* elflink.c (elf_link_add_object_symbols): Don't create link dynamic
@ -92,7 +99,7 @@
BFD_HAVE_SYS_PROCFS_TYPE and BFD_HAVE_SYS_PROCFS_TYPE_MEMBER to
the new file bfd.m4. Include ../bfd/bfd.m4.
* configure: Re-generate.
2005-01-12 Alan Modra <amodra@bigpond.net.au>
* elf32-ppc.c (ppc_elf_howto_raw): Delete RELAX32* entries.

View file

@ -1,7 +1,7 @@
/* ELF executable support for BFD.
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.
@ -5977,10 +5977,10 @@ _bfd_elf_canonicalize_dynamic_symtab (bfd *abfd,
return symcount;
}
/* Return the size required for the dynamic reloc entries. Any
section that was actually installed in the BFD, and has type
SHT_REL or SHT_RELA, and uses the dynamic symbol table, is
considered to be a dynamic reloc section. */
/* Return the size required for the dynamic reloc entries. Any loadable
section that was actually installed in the BFD, and has type SHT_REL
or SHT_RELA, and uses the dynamic symbol table, is considered to be a
dynamic reloc section. */
long
_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 *);
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_RELA))
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;
}
/* Canonicalize the dynamic relocation entries. Note that we return
the dynamic relocations as a single block, although they are
actually associated with particular sections; the interface, which
was designed for SunOS style shared libraries, expects that there
is only one set of dynamic relocs. Any section that was actually
installed in the BFD, and has type SHT_REL or SHT_RELA, and uses
the dynamic symbol table, is considered to be a dynamic reloc
section. */
/* Canonicalize the dynamic relocation entries. Note that we return the
dynamic relocations as a single block, although they are actually
associated with particular sections; the interface, which was
designed for SunOS style shared libraries, expects that there is only
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 the
dynamic symbol table, is considered to be a dynamic reloc section. */
long
_bfd_elf_canonicalize_dynamic_reloc (bfd *abfd,
@ -6033,7 +6033,8 @@ _bfd_elf_canonicalize_dynamic_reloc (bfd *abfd,
ret = 0;
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_RELA))
{
@ -7908,7 +7909,7 @@ long
_bfd_elf_get_synthetic_symtab (bfd *abfd,
long symcount ATTRIBUTE_UNUSED,
asymbol **syms ATTRIBUTE_UNUSED,
long dynsymcount ATTRIBUTE_UNUSED,
long dynsymcount,
asymbol **dynsyms,
asymbol **ret)
{
@ -7924,10 +7925,14 @@ _bfd_elf_get_synthetic_symtab (bfd *abfd,
char *names;
asection *plt;
*ret = NULL;
if ((abfd->flags & (DYNAMIC | EXEC_P)) == 0)
return 0;
*ret = NULL;
if (dynsymcount <= 0)
return 0;
if (!bed->plt_sym_val)
return 0;

View file

@ -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>
* dlltool.c (dump_iat): Remove unused function.
@ -47,7 +52,7 @@
* dlltool.c (set_dll_name_from_def): New function. Strip name
to basename, with warning.
(def_name): Use it.
(def_name): Use it.
(def_library): Likwise.
(main): Strip arg of --dllname to basename, with warning.
Only use basename of exp_name when inferring dll_name.
@ -163,7 +168,7 @@
decode_location_expression.
(display_debug_frames): Pass 0 as the comp_unit offset to
decode_location_expression.
2004-12-22 Nick Clifton <nickc@redhat.com>
* readelf.c (last_pointer_size, warned_about_missing_comp_units):
@ -276,7 +281,7 @@
of a 64-bit format .debug_ranges section.
(display_debug_ranges): New function: Displays the contents of a
32-bit .debug_ranges section.
(main): Move cmdline_dump_sects and num_cmdline_dump_sects into the
global scope.
(process_object): Initialise the dump_sects array from the
@ -295,7 +300,7 @@
get_debug_line_pointer_sizes.
(display_debug_lines): Use the new functions.
(display_debug_loc): Likewise.
(disassemble_section): Change return type to int.
(display_debug_lines): Move local variables to their
innermost scope.
@ -306,7 +311,7 @@
(debug_apply_rela_addends): Allow relocations against STT_OBJECT
types as well.
* NEWS: Mention the support for decoding .debug_ranges sections.
* doc/binutils.texi: Document the new command line switch to
readelf.

View file

@ -1,6 +1,6 @@
/* nm.c -- Describe symbol table of a rel file.
Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
2001, 2002, 2003, 2004
2001, 2002, 2003, 2004, 2005
Free Software Foundation, Inc.
This file is part of GNU Binutils.
@ -1026,8 +1026,18 @@ display_rel_file (bfd *abfd, bfd *archive_bfd)
}
else
{
long storage = bfd_get_dynamic_symtab_upper_bound (abfd);
static_count = symcount;
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,
dyn_count, dyn_syms, &synthsyms);