[914669c] | 1 | http://sourceware.org/bugzilla/show_bug.cgi?id=9945
|
---|
| 2 |
|
---|
| 3 | 2009-03-13 H.J. Lu <hongjiu.lu@intel.com>
|
---|
| 4 |
|
---|
| 5 | PR binutils/9945
|
---|
| 6 | * elf.c (assign_section_numbers): Generate symbol table if there
|
---|
| 7 | is any relocation in output.
|
---|
| 8 | (_bfd_elf_compute_section_file_positions): Likewise.
|
---|
| 9 |
|
---|
| 10 | 2009-03-13 H.J. Lu <hongjiu.lu@intel.com>
|
---|
| 11 |
|
---|
| 12 | PR binutils/9945
|
---|
| 13 | * objcopy.c (copy_object): Clear HAS_RELOC when stripping all.
|
---|
| 14 |
|
---|
| 15 | ===================================================================
|
---|
| 16 | RCS file: /cvs/src/src/bfd/elf.c,v
|
---|
| 17 | retrieving revision 1.477
|
---|
| 18 | retrieving revision 1.478
|
---|
| 19 | diff -u -r1.477 -r1.478
|
---|
| 20 | --- src/bfd/elf.c 2009/02/25 14:39:35 1.477
|
---|
| 21 | +++ src/bfd/elf.c 2009/03/13 13:39:56 1.478
|
---|
| 22 | @@ -2774,6 +2774,7 @@
|
---|
| 23 | unsigned int section_number, secn;
|
---|
| 24 | Elf_Internal_Shdr **i_shdrp;
|
---|
| 25 | struct bfd_elf_section_data *d;
|
---|
| 26 | + bfd_boolean need_symtab;
|
---|
| 27 |
|
---|
| 28 | section_number = 1;
|
---|
| 29 |
|
---|
| 30 | @@ -2829,7 +2830,11 @@
|
---|
| 31 | _bfd_elf_strtab_addref (elf_shstrtab (abfd), t->shstrtab_hdr.sh_name);
|
---|
| 32 | elf_elfheader (abfd)->e_shstrndx = t->shstrtab_section;
|
---|
| 33 |
|
---|
| 34 | - if (bfd_get_symcount (abfd) > 0)
|
---|
| 35 | + need_symtab = (bfd_get_symcount (abfd) > 0
|
---|
| 36 | + || (link_info == NULL
|
---|
| 37 | + && ((abfd->flags & (EXEC_P | DYNAMIC | HAS_RELOC))
|
---|
| 38 | + == HAS_RELOC)));
|
---|
| 39 | + if (need_symtab)
|
---|
| 40 | {
|
---|
| 41 | t->symtab_section = section_number++;
|
---|
| 42 | _bfd_elf_strtab_addref (elf_shstrtab (abfd), t->symtab_hdr.sh_name);
|
---|
| 43 | @@ -2868,7 +2873,7 @@
|
---|
| 44 | elf_elfsections (abfd) = i_shdrp;
|
---|
| 45 |
|
---|
| 46 | i_shdrp[t->shstrtab_section] = &t->shstrtab_hdr;
|
---|
| 47 | - if (bfd_get_symcount (abfd) > 0)
|
---|
| 48 | + if (need_symtab)
|
---|
| 49 | {
|
---|
| 50 | i_shdrp[t->symtab_section] = &t->symtab_hdr;
|
---|
| 51 | if (elf_numsections (abfd) > (SHN_LORESERVE & 0xFFFF))
|
---|
| 52 | @@ -3261,6 +3266,7 @@
|
---|
| 53 | bfd_boolean failed;
|
---|
| 54 | struct bfd_strtab_hash *strtab = NULL;
|
---|
| 55 | Elf_Internal_Shdr *shstrtab_hdr;
|
---|
| 56 | + bfd_boolean need_symtab;
|
---|
| 57 |
|
---|
| 58 | if (abfd->output_has_begun)
|
---|
| 59 | return TRUE;
|
---|
| 60 | @@ -3285,7 +3291,11 @@
|
---|
| 61 | return FALSE;
|
---|
| 62 |
|
---|
| 63 | /* The backend linker builds symbol table information itself. */
|
---|
| 64 | - if (link_info == NULL && bfd_get_symcount (abfd) > 0)
|
---|
| 65 | + need_symtab = (link_info == NULL
|
---|
| 66 | + && (bfd_get_symcount (abfd) > 0
|
---|
| 67 | + || ((abfd->flags & (EXEC_P | DYNAMIC | HAS_RELOC))
|
---|
| 68 | + == HAS_RELOC)));
|
---|
| 69 | + if (need_symtab)
|
---|
| 70 | {
|
---|
| 71 | /* Non-zero if doing a relocatable link. */
|
---|
| 72 | int relocatable_p = ! (abfd->flags & (EXEC_P | DYNAMIC));
|
---|
| 73 | @@ -3316,7 +3326,7 @@
|
---|
| 74 | if (!assign_file_positions_except_relocs (abfd, link_info))
|
---|
| 75 | return FALSE;
|
---|
| 76 |
|
---|
| 77 | - if (link_info == NULL && bfd_get_symcount (abfd) > 0)
|
---|
| 78 | + if (need_symtab)
|
---|
| 79 | {
|
---|
| 80 | file_ptr off;
|
---|
| 81 | Elf_Internal_Shdr *hdr;
|
---|
| 82 | ===================================================================
|
---|
| 83 | RCS file: /cvs/src/src/binutils/objcopy.c,v
|
---|
| 84 | retrieving revision 1.126
|
---|
| 85 | retrieving revision 1.127
|
---|
| 86 | diff -u -r1.126 -r1.127
|
---|
| 87 | --- src/binutils/objcopy.c 2009/03/10 00:48:09 1.126
|
---|
| 88 | +++ src/binutils/objcopy.c 2009/03/13 13:39:57 1.127
|
---|
| 89 | @@ -1396,6 +1396,9 @@
|
---|
| 90 | flags &= ~bfd_flags_to_clear;
|
---|
| 91 | flags &= bfd_applicable_file_flags (obfd);
|
---|
| 92 |
|
---|
| 93 | + if (strip_symbols == STRIP_ALL)
|
---|
| 94 | + flags &= ~HAS_RELOC;
|
---|
| 95 | +
|
---|
| 96 | if (!bfd_set_start_address (obfd, start)
|
---|
| 97 | || !bfd_set_file_flags (obfd, flags))
|
---|
| 98 | {
|
---|
| 99 |
|
---|