From 7ab1d000c11675aaea3b078e3e2a6cd3f1beaa08 Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Thu, 9 Jun 2011 10:36:18 +0000 Subject: [PATCH] PR ld/12845 * elf.c (_bfd_elf_init_private_section_data): Add an assertion that the output section has an allocated bfd_elf_section_data structure. * elfxx-mips.c (mips_elf_check_symbols): Do not create a stub for symbols in sections that have been removed by garbage collection. * emultempl/mipself.em (mips_add_stub_section): Do not add stubs for sections that have been removed by garbage collection. --- bfd/ChangeLog | 9 +++++++++ bfd/elf.c | 2 ++ bfd/elfxx-mips.c | 5 +++++ ld/ChangeLog | 6 ++++++ ld/emultempl/mipself.em | 5 +++++ 5 files changed, 27 insertions(+) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 25fa50bf1..40abe4519 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,12 @@ +2011-06-09 Nick Clifton + + PR ld/12845 + * elf.c (_bfd_elf_init_private_section_data): Add an assertion + that the output section has an allocated bfd_elf_section_data + structure. + * elfxx-mips.c (mips_elf_check_symbols): Do not create a stub for + symbols in sections that have been removed by garbage collection. + 2011-06-08 H.J. Lu * elf64-x86-64.c (elf_x86_64_check_relocs): Allow R_X86_64_64 diff --git a/bfd/elf.c b/bfd/elf.c index 3d44ef8d2..4664c583b 100644 --- a/bfd/elf.c +++ b/bfd/elf.c @@ -6272,6 +6272,8 @@ _bfd_elf_init_private_section_data (bfd *ibfd, || obfd->xvec->flavour != bfd_target_elf_flavour) return TRUE; + BFD_ASSERT (elf_section_data (osec) != NULL); + /* For objcopy and relocatable link, don't copy the output ELF section type from input if the output BFD section flags have been set to something different. For a final link allow some flags diff --git a/bfd/elfxx-mips.c b/bfd/elfxx-mips.c index 5c4636a07..d5f677fad 100644 --- a/bfd/elfxx-mips.c +++ b/bfd/elfxx-mips.c @@ -1727,6 +1727,11 @@ mips_elf_check_symbols (struct mips_elf_link_hash_entry *h, void *data) if (mips_elf_local_pic_function_p (h)) { + /* PR 12845: If H is in a section that has been garbage + collected it will have its output section set to *ABS*. */ + if (bfd_is_abs_section (h->root.root.u.def.section->output_section)) + return TRUE; + /* H is a function that might need $25 to be valid on entry. If we're creating a non-PIC relocatable object, mark H as being PIC. If we're creating a non-relocatable object with diff --git a/ld/ChangeLog b/ld/ChangeLog index 6f804b9c6..d5595c604 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,9 @@ +2011-06-09 Nick Clifton + + PR ld/12845 + * emultempl/mipself.em (mips_add_stub_section): Do not add stubs + for sections that have been removed by garbage collection. + 2011-06-08 Alan Modra * ldlang.c (lang_one_common): Handle warning symbols. diff --git a/ld/emultempl/mipself.em b/ld/emultempl/mipself.em index 7a13d4da0..ada078632 100644 --- a/ld/emultempl/mipself.em +++ b/ld/emultempl/mipself.em @@ -138,6 +138,11 @@ mips_add_stub_section (const char *stub_sec_name, asection *input_section, lang_output_section_statement_type *os; struct hook_stub_info info; + /* PR 12845: If the input section has been garbage collected it will + not have its output section set to *ABS*. */ + if (bfd_is_abs_section (output_section)) + return NULL; + /* Create the stub file, if we haven't already. */ if (stub_file == NULL) { -- 2.11.4.GIT