mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-03-01 13:26:47 +08:00
PR26265, Spurious 'gc-sections requires ... when --init or --fini
bfd/ * elflink.c (_bfd_elf_gc_keep): Use bfd_is_const_section. ld/ PR 26265 * ldlang.c (undef_from_cmdline): Delete. (ldlang_add_undef): Mark "cmdline" param unused. (lang_end): Traverse gc_sym_list to determine whether a symbol root has been specified. Update error message. * testsuite/ld-gc/noent.d: Adjust for changed error message.
This commit is contained in:
parent
b243ba58e8
commit
2f5541f384
@ -1,3 +1,7 @@
|
||||
2020-07-20 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* elflink.c (_bfd_elf_gc_keep): Use bfd_is_const_section.
|
||||
|
||||
2020-07-19 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* elf64-ppc.c (struct ppc_link_hash_table): Add has_power10_relocs.
|
||||
|
@ -13779,8 +13779,7 @@ _bfd_elf_gc_keep (struct bfd_link_info *info)
|
||||
if (h != NULL
|
||||
&& (h->root.type == bfd_link_hash_defined
|
||||
|| h->root.type == bfd_link_hash_defweak)
|
||||
&& !bfd_is_abs_section (h->root.u.def.section)
|
||||
&& !bfd_is_und_section (h->root.u.def.section))
|
||||
&& !bfd_is_const_section (h->root.u.def.section))
|
||||
h->root.u.def.section->flags |= SEC_KEEP;
|
||||
}
|
||||
}
|
||||
|
@ -1,3 +1,12 @@
|
||||
2020-07-20 Alan Modra <amodra@gmail.com>
|
||||
|
||||
PR 26265
|
||||
* ldlang.c (undef_from_cmdline): Delete.
|
||||
(ldlang_add_undef): Mark "cmdline" param unused.
|
||||
(lang_end): Traverse gc_sym_list to determine whether a symbol root
|
||||
has been specified. Update error message.
|
||||
* testsuite/ld-gc/noent.d: Adjust for changed error message.
|
||||
|
||||
2020-07-20 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR gas/26263
|
||||
|
26
ld/ldlang.c
26
ld/ldlang.c
@ -123,7 +123,6 @@ struct bfd_sym_chain entry_symbol = { NULL, NULL };
|
||||
const char *entry_section = ".text";
|
||||
struct lang_input_statement_flags input_flags;
|
||||
bfd_boolean entry_from_cmdline;
|
||||
bfd_boolean undef_from_cmdline;
|
||||
bfd_boolean lang_has_input_file = FALSE;
|
||||
bfd_boolean had_output_filename = FALSE;
|
||||
bfd_boolean lang_float_flag = FALSE;
|
||||
@ -3895,11 +3894,10 @@ typedef struct bfd_sym_chain ldlang_undef_chain_list_type;
|
||||
#define ldlang_undef_chain_list_head entry_symbol.next
|
||||
|
||||
void
|
||||
ldlang_add_undef (const char *const name, bfd_boolean cmdline)
|
||||
ldlang_add_undef (const char *const name, bfd_boolean cmdline ATTRIBUTE_UNUSED)
|
||||
{
|
||||
ldlang_undef_chain_list_type *new_undef;
|
||||
|
||||
undef_from_cmdline = undef_from_cmdline || cmdline;
|
||||
new_undef = stat_alloc (sizeof (*new_undef));
|
||||
new_undef->next = ldlang_undef_chain_list_head;
|
||||
ldlang_undef_chain_list_head = new_undef;
|
||||
@ -6839,10 +6837,24 @@ lang_end (void)
|
||||
--gc-sections, unless --gc-keep-exported was also given. */
|
||||
if (bfd_link_relocatable (&link_info)
|
||||
&& link_info.gc_sections
|
||||
&& !link_info.gc_keep_exported
|
||||
&& !(entry_from_cmdline || undef_from_cmdline))
|
||||
einfo (_("%F%P: gc-sections requires either an entry or "
|
||||
"an undefined symbol\n"));
|
||||
&& !link_info.gc_keep_exported)
|
||||
{
|
||||
struct bfd_sym_chain *sym;
|
||||
|
||||
for (sym = link_info.gc_sym_list; sym != NULL; sym = sym->next)
|
||||
{
|
||||
h = bfd_link_hash_lookup (link_info.hash, sym->name,
|
||||
FALSE, FALSE, FALSE);
|
||||
if (h != NULL
|
||||
&& (h->type == bfd_link_hash_defined
|
||||
|| h->type == bfd_link_hash_defweak)
|
||||
&& !bfd_is_const_section (h->u.def.section))
|
||||
break;
|
||||
}
|
||||
if (!sym)
|
||||
einfo (_("%F%P: --gc-sections requires a defined symbol root "
|
||||
"specified by -e or -u\n"));
|
||||
}
|
||||
|
||||
if (entry_symbol.name == NULL)
|
||||
{
|
||||
|
@ -1,3 +1,3 @@
|
||||
# name: --gc-sections -r without -e
|
||||
# ld: --gc-sections -r
|
||||
# error: gc-sections requires either an entry or an undefined symbol
|
||||
# error: --gc-sections requires .*
|
||||
|
Loading…
Reference in New Issue
Block a user