ld: Don't define __start_SECNAME/__stop_SECNAME for -r

__start_SECNAME and __stop_SECNAME shouldn't be defined for "ld -r".

	* ldlang.c (lang_set_startof): Skip if config.build_constructors
	is FALSE.
	* testsuite/ld-elf/sizeofc.d: New file.
	* testsuite/ld-elf/startofc.d: Likewise.
This commit is contained in:
H.J. Lu
2017-06-13 13:04:56 -07:00
parent 01ec7a2722
commit b27685f201
4 changed files with 41 additions and 4 deletions

View File

@ -5892,9 +5892,15 @@ lang_set_startof (void)
{
asection *s;
char leading_char;
bfd_boolean is_elf = (bfd_get_flavour (link_info.output_bfd)
== bfd_target_elf_flavour);
bfd_boolean is_elocatable = bfd_link_relocatable (&link_info);
bfd_boolean is_elf;
bfd_boolean is_relocatable;
if (!config.build_constructors)
return;
is_elf = (bfd_get_flavour (link_info.output_bfd)
== bfd_target_elf_flavour);
is_relocatable = bfd_link_relocatable (&link_info);
leading_char = bfd_get_symbol_leading_char (link_info.output_bfd);
@ -5907,7 +5913,7 @@ lang_set_startof (void)
secname = bfd_get_section_name (link_info.output_bfd, s);
buf = (char *) xmalloc (10 + strlen (secname));
if (!is_elocatable)
if (!is_relocatable)
{
sprintf (buf, ".startof.%s", secname);
h = bfd_link_hash_lookup (link_info.hash, buf, FALSE, FALSE,