bfd/
2009-03-13 H.J. Lu <hongjiu.lu@intel.com> PR binutils/9945 * elf.c (assign_section_numbers): Generate symbol table if there is any relocation in output. (_bfd_elf_compute_section_file_positions): Likewise. binutils/ 2009-03-13 H.J. Lu <hongjiu.lu@intel.com> PR binutils/9945 * objcopy.c (copy_object): Clear HAS_RELOC when stripping all.
This commit is contained in:
parent
ce98a316e9
commit
3516e9841c
4 changed files with 29 additions and 4 deletions
|
@ -1,3 +1,10 @@
|
|||
2009-03-13 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR binutils/9945
|
||||
* elf.c (assign_section_numbers): Generate symbol table if there
|
||||
is any relocation in output.
|
||||
(_bfd_elf_compute_section_file_positions): Likewise.
|
||||
|
||||
2009-03-13 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
PR 9934
|
||||
|
|
18
bfd/elf.c
18
bfd/elf.c
|
@ -2774,6 +2774,7 @@ assign_section_numbers (bfd *abfd, struct bfd_link_info *link_info)
|
|||
unsigned int section_number, secn;
|
||||
Elf_Internal_Shdr **i_shdrp;
|
||||
struct bfd_elf_section_data *d;
|
||||
bfd_boolean need_symtab;
|
||||
|
||||
section_number = 1;
|
||||
|
||||
|
@ -2829,7 +2830,11 @@ assign_section_numbers (bfd *abfd, struct bfd_link_info *link_info)
|
|||
_bfd_elf_strtab_addref (elf_shstrtab (abfd), t->shstrtab_hdr.sh_name);
|
||||
elf_elfheader (abfd)->e_shstrndx = t->shstrtab_section;
|
||||
|
||||
if (bfd_get_symcount (abfd) > 0)
|
||||
need_symtab = (bfd_get_symcount (abfd) > 0
|
||||
|| (link_info == NULL
|
||||
&& ((abfd->flags & (EXEC_P | DYNAMIC | HAS_RELOC))
|
||||
== HAS_RELOC)));
|
||||
if (need_symtab)
|
||||
{
|
||||
t->symtab_section = section_number++;
|
||||
_bfd_elf_strtab_addref (elf_shstrtab (abfd), t->symtab_hdr.sh_name);
|
||||
|
@ -2868,7 +2873,7 @@ assign_section_numbers (bfd *abfd, struct bfd_link_info *link_info)
|
|||
elf_elfsections (abfd) = i_shdrp;
|
||||
|
||||
i_shdrp[t->shstrtab_section] = &t->shstrtab_hdr;
|
||||
if (bfd_get_symcount (abfd) > 0)
|
||||
if (need_symtab)
|
||||
{
|
||||
i_shdrp[t->symtab_section] = &t->symtab_hdr;
|
||||
if (elf_numsections (abfd) > (SHN_LORESERVE & 0xFFFF))
|
||||
|
@ -3261,6 +3266,7 @@ _bfd_elf_compute_section_file_positions (bfd *abfd,
|
|||
bfd_boolean failed;
|
||||
struct bfd_strtab_hash *strtab = NULL;
|
||||
Elf_Internal_Shdr *shstrtab_hdr;
|
||||
bfd_boolean need_symtab;
|
||||
|
||||
if (abfd->output_has_begun)
|
||||
return TRUE;
|
||||
|
@ -3285,7 +3291,11 @@ _bfd_elf_compute_section_file_positions (bfd *abfd,
|
|||
return FALSE;
|
||||
|
||||
/* The backend linker builds symbol table information itself. */
|
||||
if (link_info == NULL && bfd_get_symcount (abfd) > 0)
|
||||
need_symtab = (link_info == NULL
|
||||
&& (bfd_get_symcount (abfd) > 0
|
||||
|| ((abfd->flags & (EXEC_P | DYNAMIC | HAS_RELOC))
|
||||
== HAS_RELOC)));
|
||||
if (need_symtab)
|
||||
{
|
||||
/* Non-zero if doing a relocatable link. */
|
||||
int relocatable_p = ! (abfd->flags & (EXEC_P | DYNAMIC));
|
||||
|
@ -3316,7 +3326,7 @@ _bfd_elf_compute_section_file_positions (bfd *abfd,
|
|||
if (!assign_file_positions_except_relocs (abfd, link_info))
|
||||
return FALSE;
|
||||
|
||||
if (link_info == NULL && bfd_get_symcount (abfd) > 0)
|
||||
if (need_symtab)
|
||||
{
|
||||
file_ptr off;
|
||||
Elf_Internal_Shdr *hdr;
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2009-03-13 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR binutils/9945
|
||||
* objcopy.c (copy_object): Clear HAS_RELOC when stripping all.
|
||||
|
||||
2009-03-11 Chris Demetriou <cgd@google.com>
|
||||
|
||||
* ar.c (deterministic): New global variable.
|
||||
|
|
|
@ -1396,6 +1396,9 @@ copy_object (bfd *ibfd, bfd *obfd)
|
|||
flags &= ~bfd_flags_to_clear;
|
||||
flags &= bfd_applicable_file_flags (obfd);
|
||||
|
||||
if (strip_symbols == STRIP_ALL)
|
||||
flags &= ~HAS_RELOC;
|
||||
|
||||
if (!bfd_set_start_address (obfd, start)
|
||||
|| !bfd_set_file_flags (obfd, flags))
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue