From 6317c78eaa2744a9e8c1e521074ad26ada758a5f Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Wed, 16 Mar 2005 21:52:41 +0000 Subject: [PATCH] bfd/ 2005-03-16 H.J. Lu * elflink.c (elf_mark_used_section): New. (bfd_elf_gc_sections): Call elf_gc_mark_section for non-relocatable link if we don't do GC. include/ 2005-03-16 H.J. Lu * bfdlink.h (bfd_link_info): Add gc_sections. ld/ 2005-03-16 H.J. Lu * emultempl/elf32.em (gld${EMULATION_NAME}_finish): Remove unused empty output sections for non-relocatable link. * ld.h (args_type): Remove gc_sections. * ldlang.c (lang_mark_used_section): New. (lang_gc_sections): Use link_info.gc_sections instead of command_line.gc_sections. * ldmain.c (main): Likewise. * lexsup.c (parse_args): Likewise. * ldlang.c (lang_process): Call lang_mark_used_section. * ldmain.c (main): Initialize link_info.gc_sections to FALSE. ld/testsuite/ 2005-03-16 H.J. Lu * ld-alpha/tlsbin.rd: Updated for empty section removal. * ld-alpha/tlsbinr.rd: Likewise. * ld-alpha/tlspic.rd: Likewise. * ld-arm/mixed-lib.sym: Likewise. * ld-i386/tlsbin.rd: Likewise. * ld-i386/tlsnopic.rd: Likewise. * ld-i386/tlspic.rd: Likewise. * ld-ia64/tlsbin.rd: Likewise. * ld-ia64/tlspic.rd: Likewise. * ld-powerpc/apuinfo.rd: Likewise. * ld-powerpc/powerpc.exp: Likewise. * ld-powerpc/tlsexe32.r: Likewise. * ld-s390/tlsbin.rd: Likewise. * ld-s390/tlsbin_64.rd: Likewise. * ld-s390/tlspic.rd: Likewise. * ld-s390/tlspic_64.rd: Likewise. * ld-sh/tlsbin-2.d: Likewise. * ld-sh/tlspic-2.d: Likewise. * ld-sparc/tlssunbin32.rd: Likewise. * ld-sparc/tlssunnopic32.rd: Likewise. * ld-sparc/tlssunpic32.rd: Likewise. * ld-x86-64/tlsbin.rd: Likewise. * ld-x86-64/tlspic.rd: Likewise. --- bfd/ChangeLog | 6 ++++++ bfd/elflink.c | 32 ++++++++++++++++++++++++++++++++ include/ChangeLog | 4 ++++ include/bfdlink.h | 3 +++ 4 files changed, 45 insertions(+) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 9aa67e9649..606bb599a5 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2005-03-16 H.J. Lu + + * elflink.c (elf_mark_used_section): New. + (bfd_elf_gc_sections): Call elf_gc_mark_section for + non-relocatable link if we don't do GC. + 2005-03-16 Nick Clifton Ben Elliston diff --git a/bfd/elflink.c b/bfd/elflink.c index 1721f3f8a3..9f1be5f4a3 100644 --- a/bfd/elflink.c +++ b/bfd/elflink.c @@ -8996,7 +8996,28 @@ elf_gc_mark_dynamic_ref_symbol (struct elf_link_hash_entry *h, return TRUE; } + +/* Mark sections containing global symbols. This is called through + elf_link_hash_traverse. */ +static bfd_boolean +elf_mark_used_section (struct elf_link_hash_entry *h, + void *global ATTRIBUTE_UNUSED) +{ + if (h->root.type == bfd_link_hash_warning) + h = (struct elf_link_hash_entry *) h->root.u.i.link; + + if ((h->root.type == bfd_link_hash_defined + || h->root.type == bfd_link_hash_defweak)) + { + asection *s = h->root.u.def.section->output_section; + if (s) + s->flags |= SEC_KEEP; + } + + return TRUE; +} + /* Do mark and sweep of unused sections. */ bfd_boolean @@ -9008,6 +9029,17 @@ bfd_elf_gc_sections (bfd *abfd, struct bfd_link_info *info) (asection *, struct bfd_link_info *, Elf_Internal_Rela *, struct elf_link_hash_entry *h, Elf_Internal_Sym *); + if (!info->gc_sections) + { + /* If we are called when info->gc_sections is 0, we will mark + all sections containing global symbols for non-relocable + link. */ + if (!info->relocatable) + elf_link_hash_traverse (elf_hash_table (info), + elf_mark_used_section, NULL); + return TRUE; + } + if (!get_elf_backend_data (abfd)->can_gc_sections || info->relocatable || info->emitrelocations diff --git a/include/ChangeLog b/include/ChangeLog index 9dee8dd2a7..92c170ec32 100644 --- a/include/ChangeLog +++ b/include/ChangeLog @@ -1,3 +1,7 @@ +2005-03-16 H.J. Lu + + * bfdlink.h (bfd_link_info): Add gc_sections. + 2005-03-12 Zack Weinberg * opcode/arm.h: Adjust comments for ARM_EXT_V4T and ARM_EXT_V5T. diff --git a/include/bfdlink.h b/include/bfdlink.h index 9d93154378..ad32906446 100644 --- a/include/bfdlink.h +++ b/include/bfdlink.h @@ -324,6 +324,9 @@ struct bfd_link_info /* TRUE if we should warn when adding a DT_TEXTREL to a shared object. */ unsigned int warn_shared_textrel: 1; + /* TRUE if unreferenced sections should be removed. */ + unsigned int gc_sections: 1; + /* What to do with unresolved symbols in an object file. When producing executables the default is GENERATE_ERROR. When producing shared libraries the default is IGNORE. The -- 2.11.0