diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2009-06-17 18:08:35 +0000 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2009-06-17 18:08:35 +0000 |
commit | 64e77c6d5fe85b9f3d20579b496f31c329b1e62b (patch) | |
tree | a0315f63d78e86772a2102497a1c47e2872b35b2 /bfd | |
parent | 6bfb4e30b89061e341dad3625360564ab75b1582 (diff) | |
download | gdb-64e77c6d5fe85b9f3d20579b496f31c329b1e62b.zip gdb-64e77c6d5fe85b9f3d20579b496f31c329b1e62b.tar.gz gdb-64e77c6d5fe85b9f3d20579b496f31c329b1e62b.tar.bz2 |
2009-06-17 H.J. Lu <hongjiu.lu@intel.com>
* elf32-arm.c (create_got_section): Get existing .rela.got
section.
* elf32-hppa.c (elf32_hppa_create_dynamic_sections): Likewise.
* elf32-lm32.c (create_got_section): Likewise.
* elf32-m32r.c (create_got_section): Likewise.
* elf32-ppc.c (ppc_elf_create_got): Likewise.
* elf32-s390.c (create_got_section): Likewise.
* elf32-sh.c (create_got_section): Likewise.
* elf32-xtensa.c (elf_xtensa_create_dynamic_sections): Likewise.
* elf64-s390.c (create_got_section): Likewise.
* elfxx-sparc.c (create_got_section): Likewise.
* elflink.c (_bfd_elf_create_got_section): Properly initialize
the GOT size.
Diffstat (limited to 'bfd')
-rw-r--r-- | bfd/ChangeLog | 17 | ||||
-rw-r--r-- | bfd/elf32-arm.c | 12 | ||||
-rw-r--r-- | bfd/elf32-hppa.c | 11 | ||||
-rw-r--r-- | bfd/elf32-lm32.c | 14 | ||||
-rw-r--r-- | bfd/elf32-m32r.c | 14 | ||||
-rw-r--r-- | bfd/elf32-ppc.c | 9 | ||||
-rw-r--r-- | bfd/elf32-s390.c | 12 | ||||
-rw-r--r-- | bfd/elf32-sh.c | 13 | ||||
-rw-r--r-- | bfd/elf32-xtensa.c | 7 | ||||
-rw-r--r-- | bfd/elf64-s390.c | 13 | ||||
-rw-r--r-- | bfd/elflink.c | 18 | ||||
-rw-r--r-- | bfd/elfxx-sparc.c | 8 |
12 files changed, 45 insertions, 103 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index ad5fd4f..15e73e9 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,20 @@ +2009-06-17 H.J. Lu <hongjiu.lu@intel.com> + + * elf32-arm.c (create_got_section): Get existing .rela.got + section. + * elf32-hppa.c (elf32_hppa_create_dynamic_sections): Likewise. + * elf32-lm32.c (create_got_section): Likewise. + * elf32-m32r.c (create_got_section): Likewise. + * elf32-ppc.c (ppc_elf_create_got): Likewise. + * elf32-s390.c (create_got_section): Likewise. + * elf32-sh.c (create_got_section): Likewise. + * elf32-xtensa.c (elf_xtensa_create_dynamic_sections): Likewise. + * elf64-s390.c (create_got_section): Likewise. + * elfxx-sparc.c (create_got_section): Likewise. + + * elflink.c (_bfd_elf_create_got_section): Properly initialize + the GOT size. + 2009-06-16 H.J. Lu <hongjiu.lu@intel.com> * elf-bfd.h (ELF_LOCAL_SYMBOL_HASH): New. diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c index e1f569b..45a94c7 100644 --- a/bfd/elf32-arm.c +++ b/bfd/elf32-arm.c @@ -2748,15 +2748,9 @@ create_got_section (bfd *dynobj, struct bfd_link_info *info) if (!htab->sgot || !htab->sgotplt) abort (); - htab->srelgot = bfd_make_section_with_flags (dynobj, - RELOC_SECTION (htab, ".got"), - (SEC_ALLOC | SEC_LOAD - | SEC_HAS_CONTENTS - | SEC_IN_MEMORY - | SEC_LINKER_CREATED - | SEC_READONLY)); - if (htab->srelgot == NULL - || ! bfd_set_section_alignment (dynobj, htab->srelgot, 2)) + htab->srelgot = bfd_get_section_by_name (dynobj, + RELOC_SECTION (htab, ".got")); + if (htab->srelgot == NULL) return FALSE; return TRUE; } diff --git a/bfd/elf32-hppa.c b/bfd/elf32-hppa.c index a83c4fd..20be2e7 100644 --- a/bfd/elf32-hppa.c +++ b/bfd/elf32-hppa.c @@ -1011,16 +1011,7 @@ elf32_hppa_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info) htab->srelplt = bfd_get_section_by_name (abfd, ".rela.plt"); htab->sgot = bfd_get_section_by_name (abfd, ".got"); - htab->srelgot = bfd_make_section_with_flags (abfd, ".rela.got", - (SEC_ALLOC - | SEC_LOAD - | SEC_HAS_CONTENTS - | SEC_IN_MEMORY - | SEC_LINKER_CREATED - | SEC_READONLY)); - if (htab->srelgot == NULL - || ! bfd_set_section_alignment (abfd, htab->srelgot, 2)) - return FALSE; + htab->srelgot = bfd_get_section_by_name (abfd, ".rela.got"); htab->sdynbss = bfd_get_section_by_name (abfd, ".dynbss"); htab->srelbss = bfd_get_section_by_name (abfd, ".rela.bss"); diff --git a/bfd/elf32-lm32.c b/bfd/elf32-lm32.c index 620dc50..bad0a7b 100644 --- a/bfd/elf32-lm32.c +++ b/bfd/elf32-lm32.c @@ -225,20 +225,10 @@ create_got_section (bfd *dynobj, struct bfd_link_info *info) htab = lm32_elf_hash_table (info); htab->sgot = bfd_get_section_by_name (dynobj, ".got"); htab->sgotplt = bfd_get_section_by_name (dynobj, ".got.plt"); - if (! htab->sgot || ! htab->sgotplt) + htab->srelgot = bfd_get_section_by_name (dynobj, ".rela.got"); + if (! htab->sgot || ! htab->sgotplt || ! htab->srelgot) abort (); - htab->srelgot = bfd_make_section_with_flags (dynobj, ".rela.got", - (SEC_ALLOC - | SEC_LOAD - | SEC_HAS_CONTENTS - | SEC_IN_MEMORY - | SEC_LINKER_CREATED - | SEC_READONLY)); - if (htab->srelgot == NULL - || ! bfd_set_section_alignment (dynobj, htab->srelgot, 2)) - return FALSE; - return TRUE; } diff --git a/bfd/elf32-m32r.c b/bfd/elf32-m32r.c index 96db6cb..fd67e05 100644 --- a/bfd/elf32-m32r.c +++ b/bfd/elf32-m32r.c @@ -1623,20 +1623,10 @@ create_got_section (bfd *dynobj, struct bfd_link_info *info) htab = m32r_elf_hash_table (info); htab->sgot = bfd_get_section_by_name (dynobj, ".got"); htab->sgotplt = bfd_get_section_by_name (dynobj, ".got.plt"); - if (! htab->sgot || ! htab->sgotplt) + htab->srelgot = bfd_get_section_by_name (dynobj, ".rela.got"); + if (! htab->sgot || ! htab->sgotplt || ! htab->srelgot) abort (); - htab->srelgot = bfd_make_section_with_flags (dynobj, ".rela.got", - (SEC_ALLOC - | SEC_LOAD - | SEC_HAS_CONTENTS - | SEC_IN_MEMORY - | SEC_LINKER_CREATED - | SEC_READONLY)); - if (htab->srelgot == NULL - || ! bfd_set_section_alignment (dynobj, htab->srelgot, 2)) - return FALSE; - return TRUE; } diff --git a/bfd/elf32-ppc.c b/bfd/elf32-ppc.c index dcf33cc..c7ac2a1 100644 --- a/bfd/elf32-ppc.c +++ b/bfd/elf32-ppc.c @@ -2845,12 +2845,9 @@ ppc_elf_create_got (bfd *abfd, struct bfd_link_info *info) return FALSE; } - flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY - | SEC_LINKER_CREATED | SEC_READONLY); - htab->relgot = bfd_make_section_with_flags (abfd, ".rela.got", flags); - if (!htab->relgot - || ! bfd_set_section_alignment (abfd, htab->relgot, 2)) - return FALSE; + htab->relgot = bfd_get_section_by_name (abfd, ".rela.got"); + if (!htab->relgot) + abort (); return TRUE; } diff --git a/bfd/elf32-s390.c b/bfd/elf32-s390.c index 14c4cb0..531f9e6 100644 --- a/bfd/elf32-s390.c +++ b/bfd/elf32-s390.c @@ -821,18 +821,10 @@ create_got_section (dynobj, info) htab = elf_s390_hash_table (info); htab->sgot = bfd_get_section_by_name (dynobj, ".got"); htab->sgotplt = bfd_get_section_by_name (dynobj, ".got.plt"); - if (!htab->sgot || !htab->sgotplt) + htab->srelgot = bfd_get_section_by_name (dynobj, ".rela.got"); + if (!htab->sgot || !htab->sgotplt || !htab->srelgot) abort (); - htab->srelgot = bfd_make_section_with_flags (dynobj, ".rela.got", - (SEC_ALLOC | SEC_LOAD - | SEC_HAS_CONTENTS - | SEC_IN_MEMORY - | SEC_LINKER_CREATED - | SEC_READONLY)); - if (htab->srelgot == NULL - || ! bfd_set_section_alignment (dynobj, htab->srelgot, 2)) - return FALSE; return TRUE; } diff --git a/bfd/elf32-sh.c b/bfd/elf32-sh.c index 89cef67..555d900 100644 --- a/bfd/elf32-sh.c +++ b/bfd/elf32-sh.c @@ -2303,18 +2303,9 @@ create_got_section (bfd *dynobj, struct bfd_link_info *info) htab = sh_elf_hash_table (info); htab->sgot = bfd_get_section_by_name (dynobj, ".got"); htab->sgotplt = bfd_get_section_by_name (dynobj, ".got.plt"); - if (! htab->sgot || ! htab->sgotplt) + htab->srelgot = bfd_get_section_by_name (dynobj, ".rela.got"); + if (! htab->sgot || ! htab->sgotplt || ! htab->srelgot) abort (); - - htab->srelgot = bfd_make_section_with_flags (dynobj, ".rela.got", - (SEC_ALLOC | SEC_LOAD - | SEC_HAS_CONTENTS - | SEC_IN_MEMORY - | SEC_LINKER_CREATED - | SEC_READONLY)); - if (htab->srelgot == NULL - || ! bfd_set_section_alignment (dynobj, htab->srelgot, 2)) - return FALSE; return TRUE; } diff --git a/bfd/elf32-xtensa.c b/bfd/elf32-xtensa.c index 09e81ad..4200f6f 100644 --- a/bfd/elf32-xtensa.c +++ b/bfd/elf32-xtensa.c @@ -1404,6 +1404,7 @@ elf_xtensa_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info) htab->srelplt = bfd_get_section_by_name (dynobj, ".rela.plt"); htab->sgot = bfd_get_section_by_name (dynobj, ".got"); htab->sgotplt = bfd_get_section_by_name (dynobj, ".got.plt"); + htab->srelgot = bfd_get_section_by_name (dynobj, ".rela.got"); /* Create any extra PLT sections in case check_relocs has already been called on all the non-dynamic input files. */ @@ -1419,12 +1420,6 @@ elf_xtensa_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info) || ! bfd_set_section_flags (dynobj, htab->sgotplt, flags)) return FALSE; - /* Create ".rela.got". */ - htab->srelgot = bfd_make_section_with_flags (dynobj, ".rela.got", flags); - if (htab->srelgot == NULL - || ! bfd_set_section_alignment (dynobj, htab->srelgot, 2)) - return FALSE; - /* Create ".got.loc" (literal tables for use by dynamic linker). */ htab->sgotloc = bfd_make_section_with_flags (dynobj, ".got.loc", flags); if (htab->sgotloc == NULL diff --git a/bfd/elf64-s390.c b/bfd/elf64-s390.c index 21a5864..c9bd764 100644 --- a/bfd/elf64-s390.c +++ b/bfd/elf64-s390.c @@ -776,18 +776,9 @@ create_got_section (dynobj, info) htab = elf_s390_hash_table (info); htab->sgot = bfd_get_section_by_name (dynobj, ".got"); htab->sgotplt = bfd_get_section_by_name (dynobj, ".got.plt"); - if (!htab->sgot || !htab->sgotplt) + htab->srelgot = bfd_get_section_by_name (dynobj, ".rela.got"); + if (!htab->sgot || !htab->sgotplt || !htab->srelgot) abort (); - - htab->srelgot = bfd_make_section_with_flags (dynobj, ".rela.got", - (SEC_ALLOC | SEC_LOAD - | SEC_HAS_CONTENTS - | SEC_IN_MEMORY - | SEC_LINKER_CREATED - | SEC_READONLY)); - if (htab->srelgot == NULL - || ! bfd_set_section_alignment (dynobj, htab->srelgot, 3)) - return FALSE; return TRUE; } diff --git a/bfd/elflink.c b/bfd/elflink.c index f1bceae..70bca46 100644 --- a/bfd/elflink.c +++ b/bfd/elflink.c @@ -110,12 +110,6 @@ _bfd_elf_create_got_section (bfd *abfd, struct bfd_link_info *info) flags = bed->dynamic_sec_flags; - s = bfd_make_section_with_flags (abfd, ".got", flags); - if (s == NULL - || !bfd_set_section_alignment (abfd, s, bed->s->log_file_align)) - return FALSE; - htab->sgot = s; - s = bfd_make_section_with_flags (abfd, (bed->rela_plts_and_copies_p ? ".rela.got" : ".rel.got"), @@ -126,6 +120,12 @@ _bfd_elf_create_got_section (bfd *abfd, struct bfd_link_info *info) return FALSE; htab->srelgot = s; + s = bfd_make_section_with_flags (abfd, ".got", flags); + if (s == NULL + || !bfd_set_section_alignment (abfd, s, bed->s->log_file_align)) + return FALSE; + htab->sgot = s; + if (bed->want_got_plt) { s = bfd_make_section_with_flags (abfd, ".got.plt", flags); @@ -136,6 +136,9 @@ _bfd_elf_create_got_section (bfd *abfd, struct bfd_link_info *info) htab->sgotplt = s; } + /* The first bit of the global offset table is the header. */ + s->size += bed->got_header_size; + if (bed->want_got_sym) { /* Define the symbol _GLOBAL_OFFSET_TABLE_ at the start of the .got @@ -149,9 +152,6 @@ _bfd_elf_create_got_section (bfd *abfd, struct bfd_link_info *info) return FALSE; } - /* The first bit of the global offset table is the header. */ - s->size += bed->got_header_size; - return TRUE; } diff --git a/bfd/elfxx-sparc.c b/bfd/elfxx-sparc.c index 9acdfc4..9ec4617 100644 --- a/bfd/elfxx-sparc.c +++ b/bfd/elfxx-sparc.c @@ -899,13 +899,7 @@ create_got_section (bfd *dynobj, struct bfd_link_info *info) htab->sgot = bfd_get_section_by_name (dynobj, ".got"); BFD_ASSERT (htab->sgot != NULL); - htab->srelgot = bfd_make_section_with_flags (dynobj, ".rela.got", - SEC_ALLOC - | SEC_LOAD - | SEC_HAS_CONTENTS - | SEC_IN_MEMORY - | SEC_LINKER_CREATED - | SEC_READONLY); + htab->srelgot = bfd_get_section_by_name (dynobj, ".rela.got"); if (htab->srelgot == NULL || ! bfd_set_section_alignment (dynobj, htab->srelgot, htab->word_align_power)) |