Implement and document --gc-keep-exported
include/ * bfdlink.h (struct bfd_link_info): Add gc_keep_exported. bfd/ * elflink.c (bfd_elf_gc_mark_dynamic_ref_symbol): Add handling for info->gc_keep_exported. (bfd_elf_gc_sections): Likewise. ld/ * ld.texinfo: Document --gc-keep-exported. * ldlex.h (enum option_values): Add OPTION_GC_KEEP_EXPORTED. * lexsup.c (parse_args): Add handling for --gc-keep-exported.
This commit is contained in:
parent
4c4067e410
commit
221855059a
@ -1,3 +1,9 @@
|
|||||||
|
2016-12-16 fincs <fincs.alt1@gmail.com>
|
||||||
|
|
||||||
|
* elflink.c (bfd_elf_gc_mark_dynamic_ref_symbol): Add handling
|
||||||
|
for info->gc_keep_exported.
|
||||||
|
(bfd_elf_gc_sections): Likewise.
|
||||||
|
|
||||||
2016-12-15 Alan Modra <amodra@gmail.com>
|
2016-12-15 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
PR ld/20968
|
PR ld/20968
|
||||||
|
@ -13051,6 +13051,7 @@ bfd_elf_gc_mark_dynamic_ref_symbol (struct elf_link_hash_entry *h, void *inf)
|
|||||||
&& ELF_ST_VISIBILITY (h->other) != STV_INTERNAL
|
&& ELF_ST_VISIBILITY (h->other) != STV_INTERNAL
|
||||||
&& ELF_ST_VISIBILITY (h->other) != STV_HIDDEN
|
&& ELF_ST_VISIBILITY (h->other) != STV_HIDDEN
|
||||||
&& (!bfd_link_executable (info)
|
&& (!bfd_link_executable (info)
|
||||||
|
|| info->gc_keep_exported
|
||||||
|| info->export_dynamic
|
|| info->export_dynamic
|
||||||
|| (h->dynamic
|
|| (h->dynamic
|
||||||
&& d != NULL
|
&& d != NULL
|
||||||
@ -13170,7 +13171,7 @@ bfd_elf_gc_sections (bfd *abfd, struct bfd_link_info *info)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
/* Mark dynamically referenced symbols. */
|
/* Mark dynamically referenced symbols. */
|
||||||
if (htab->dynamic_sections_created)
|
if (htab->dynamic_sections_created || info->gc_keep_exported)
|
||||||
elf_link_hash_traverse (htab, bed->gc_mark_dynamic_ref, info);
|
elf_link_hash_traverse (htab, bed->gc_mark_dynamic_ref, info);
|
||||||
|
|
||||||
/* Grovel through relocs to find out who stays ... */
|
/* Grovel through relocs to find out who stays ... */
|
||||||
|
@ -1,3 +1,7 @@
|
|||||||
|
2016-12-16 fincs <fincs.alt1@gmail.com>
|
||||||
|
|
||||||
|
* bfdlink.h (struct bfd_link_info): Add gc_keep_exported.
|
||||||
|
|
||||||
2016-12-14 Maciej W. Rozycki <macro@imgtec.com>
|
2016-12-14 Maciej W. Rozycki <macro@imgtec.com>
|
||||||
|
|
||||||
* elf/mips.h (Elf_Internal_ABIFlags_v0): Also declare struct
|
* elf/mips.h (Elf_Internal_ABIFlags_v0): Also declare struct
|
||||||
|
@ -328,6 +328,9 @@ struct bfd_link_info
|
|||||||
/* TRUE if unreferenced sections should be removed. */
|
/* TRUE if unreferenced sections should be removed. */
|
||||||
unsigned int gc_sections: 1;
|
unsigned int gc_sections: 1;
|
||||||
|
|
||||||
|
/* TRUE if exported symbols should be kept during section gc. */
|
||||||
|
unsigned int gc_keep_exported: 1;
|
||||||
|
|
||||||
/* TRUE if every symbol should be reported back via the notice
|
/* TRUE if every symbol should be reported back via the notice
|
||||||
callback. */
|
callback. */
|
||||||
unsigned int notice_all: 1;
|
unsigned int notice_all: 1;
|
||||||
|
@ -1,3 +1,9 @@
|
|||||||
|
2016-12-16 fincs <fincs.alt1@gmail.com>
|
||||||
|
|
||||||
|
* ld.texinfo: Document --gc-keep-exported.
|
||||||
|
* ldlex.h (enum option_values): Add OPTION_GC_KEEP_EXPORTED.
|
||||||
|
* lexsup.c (parse_args): Add handling for --gc-keep-exported.
|
||||||
|
|
||||||
2016-12-14 Yury Norov <ynorov@caviumnetworks.com>
|
2016-12-14 Yury Norov <ynorov@caviumnetworks.com>
|
||||||
|
|
||||||
* ld/testsuite/ld-aarch64/aarch64-elf.exp: Add tests for tiny and
|
* ld/testsuite/ld-aarch64/aarch64-elf.exp: Add tests for tiny and
|
||||||
|
@ -1558,6 +1558,18 @@ default behaviour (of not listing the sections that are removed) can
|
|||||||
be restored by specifying @samp{--no-print-gc-sections} on the command
|
be restored by specifying @samp{--no-print-gc-sections} on the command
|
||||||
line.
|
line.
|
||||||
|
|
||||||
|
@kindex --gc-keep-exported
|
||||||
|
@cindex garbage collection
|
||||||
|
@item --gc-keep-exported
|
||||||
|
When @samp{--gc-sections} is enabled, this option prevents garbage
|
||||||
|
collection of unused input sections that contain global symbols having
|
||||||
|
default or protected visibility. This option is intended to be used for
|
||||||
|
executables where unreferenced sections would otherwise be garbage
|
||||||
|
collected regardless of the external visibility of contained symbols.
|
||||||
|
Note that this option has no effect when linking shared objects since
|
||||||
|
it is already the default behaviour. This option is only supported for
|
||||||
|
ELF format targets.
|
||||||
|
|
||||||
@kindex --print-output-format
|
@kindex --print-output-format
|
||||||
@cindex output format
|
@cindex output format
|
||||||
@item --print-output-format
|
@item --print-output-format
|
||||||
|
@ -101,6 +101,7 @@ enum option_values
|
|||||||
OPTION_NO_GC_SECTIONS,
|
OPTION_NO_GC_SECTIONS,
|
||||||
OPTION_PRINT_GC_SECTIONS,
|
OPTION_PRINT_GC_SECTIONS,
|
||||||
OPTION_NO_PRINT_GC_SECTIONS,
|
OPTION_NO_PRINT_GC_SECTIONS,
|
||||||
|
OPTION_GC_KEEP_EXPORTED,
|
||||||
OPTION_HASH_SIZE,
|
OPTION_HASH_SIZE,
|
||||||
OPTION_CHECK_SECTIONS,
|
OPTION_CHECK_SECTIONS,
|
||||||
OPTION_NO_CHECK_SECTIONS,
|
OPTION_NO_CHECK_SECTIONS,
|
||||||
|
@ -335,6 +335,9 @@ static const struct ld_option ld_options[] =
|
|||||||
{ {"no-print-gc-sections", no_argument, NULL, OPTION_NO_PRINT_GC_SECTIONS},
|
{ {"no-print-gc-sections", no_argument, NULL, OPTION_NO_PRINT_GC_SECTIONS},
|
||||||
'\0', NULL, N_("Do not list removed unused sections"),
|
'\0', NULL, N_("Do not list removed unused sections"),
|
||||||
TWO_DASHES },
|
TWO_DASHES },
|
||||||
|
{ {"gc-keep-exported", no_argument, NULL, OPTION_GC_KEEP_EXPORTED},
|
||||||
|
'\0', NULL, N_("Keep exported symbols when removing unused sections"),
|
||||||
|
TWO_DASHES },
|
||||||
{ {"hash-size=<NUMBER>", required_argument, NULL, OPTION_HASH_SIZE},
|
{ {"hash-size=<NUMBER>", required_argument, NULL, OPTION_HASH_SIZE},
|
||||||
'\0', NULL, N_("Set default hash table size close to <NUMBER>"),
|
'\0', NULL, N_("Set default hash table size close to <NUMBER>"),
|
||||||
TWO_DASHES },
|
TWO_DASHES },
|
||||||
@ -861,6 +864,9 @@ parse_args (unsigned argc, char **argv)
|
|||||||
case OPTION_PRINT_GC_SECTIONS:
|
case OPTION_PRINT_GC_SECTIONS:
|
||||||
link_info.print_gc_sections = TRUE;
|
link_info.print_gc_sections = TRUE;
|
||||||
break;
|
break;
|
||||||
|
case OPTION_GC_KEEP_EXPORTED:
|
||||||
|
link_info.gc_keep_exported = TRUE;
|
||||||
|
break;
|
||||||
case OPTION_HELP:
|
case OPTION_HELP:
|
||||||
help ();
|
help ();
|
||||||
xexit (0);
|
xexit (0);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user