From e1e5c0b5eb58ca69f19feca1b13bedc9fc256e84 Mon Sep 17 00:00:00 2001 From: Bob Wilson Date: Thu, 12 Apr 2007 15:52:02 +0000 Subject: [PATCH] bfd/ * elf32-xtensa.c (elf_xtensa_gc_mark_hook): Don't follow references from Xtensa property sections. ld/ * emulparams/elf32xtensa.sh (OTHER_SECTIONS): KEEP property sections. --- bfd/ChangeLog | 5 +++++ bfd/elf32-xtensa.c | 13 +++++++++++++ ld/ChangeLog | 4 ++++ ld/emulparams/elf32xtensa.sh | 6 +++--- 4 files changed, 25 insertions(+), 3 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 26a6f4db0c..6934c30154 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2007-04-12 Bob Wilson + + * elf32-xtensa.c (elf_xtensa_gc_mark_hook): Don't follow references + from Xtensa property sections. + 2007-04-12 Alan Modra * elf32-spu.c (needs_ovl_stub): Test that spu_elf_section_data diff --git a/bfd/elf32-xtensa.c b/bfd/elf32-xtensa.c index 1d6fb42e6a..10e00aa27d 100644 --- a/bfd/elf32-xtensa.c +++ b/bfd/elf32-xtensa.c @@ -969,6 +969,19 @@ elf_xtensa_gc_mark_hook (asection *sec, struct elf_link_hash_entry *h, Elf_Internal_Sym *sym) { + /* Property sections are marked "KEEP" in the linker scripts, but they + should not cause other sections to be marked. (This approach relies + on elf_xtensa_discard_info to remove property table entries that + describe discarded sections. Alternatively, it might be more + efficient to avoid using "KEEP" in the linker scripts and instead use + the gc_mark_extra_sections hook to mark only the property sections + that describe marked sections. That alternative does not work well + with the current property table sections, which do not correspond + one-to-one with the sections they describe, but that should be fixed + someday.) */ + if (xtensa_is_property_section (sec)) + return NULL; + if (h != NULL) switch (ELF32_R_TYPE (rel->r_info)) { diff --git a/ld/ChangeLog b/ld/ChangeLog index e38237f2ac..5ea8cac0cc 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,7 @@ +2007-04-12 Bob Wilson + + * emulparams/elf32xtensa.sh (OTHER_SECTIONS): KEEP property sections. + 2007-04-10 Richard Henderson * ldlang.c (relax_sections): Initialize and increment diff --git a/ld/emulparams/elf32xtensa.sh b/ld/emulparams/elf32xtensa.sh index f3424336bb..216d761804 100644 --- a/ld/emulparams/elf32xtensa.sh +++ b/ld/emulparams/elf32xtensa.sh @@ -36,7 +36,7 @@ OTHER_SDATA_SECTIONS=" } " OTHER_SECTIONS=" - .xt.lit 0 : { *(.xt.lit${RELOCATING+ .xt.lit.* .gnu.linkonce.p.*}) } - .xt.insn 0 : { *(.xt.insn${RELOCATING+ .gnu.linkonce.x.*}) } - .xt.prop 0 : { *(.xt.prop${RELOCATING+ .xt.prop.* .gnu.linkonce.prop.*}) } + .xt.lit 0 : { KEEP (*(.xt.lit${RELOCATING+ .xt.lit.* .gnu.linkonce.p.*})) } + .xt.insn 0 : { KEEP (*(.xt.insn${RELOCATING+ .gnu.linkonce.x.*})) } + .xt.prop 0 : { KEEP (*(.xt.prop${RELOCATING+ .xt.prop.* .gnu.linkonce.prop.*})) } "