From b27685f2016c510d03ac9a64f7b04ce8efcf95c4 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Tue, 13 Jun 2017 13:04:56 -0700 Subject: [PATCH] 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. --- ld/ChangeLog | 7 +++++++ ld/ldlang.c | 14 ++++++++++---- ld/testsuite/ld-elf/sizeofc.d | 12 ++++++++++++ ld/testsuite/ld-elf/startofc.d | 12 ++++++++++++ 4 files changed, 41 insertions(+), 4 deletions(-) create mode 100644 ld/testsuite/ld-elf/sizeofc.d create mode 100644 ld/testsuite/ld-elf/startofc.d diff --git a/ld/ChangeLog b/ld/ChangeLog index 59c99ae1ff1..7995de833d3 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,10 @@ +2017-06-13 H.J. Lu + + * 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. + 2017-06-13 H.J. Lu * testsuite/ld-elf/sizeof.d: Renamed to ... diff --git a/ld/ldlang.c b/ld/ldlang.c index f8e4f528799..eb4ba9eee46 100644 --- a/ld/ldlang.c +++ b/ld/ldlang.c @@ -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, diff --git a/ld/testsuite/ld-elf/sizeofc.d b/ld/testsuite/ld-elf/sizeofc.d new file mode 100644 index 00000000000..1cff854b439 --- /dev/null +++ b/ld/testsuite/ld-elf/sizeofc.d @@ -0,0 +1,12 @@ +#source: sizeof.s +#ld: -r +#readelf: -sW + +Symbol table '\.symtab' contains [0-9]+ entries: + +Num: +Value +Size Type +Bind +Vis +Ndx Name + +0: 0+ +0 +NOTYPE +LOCAL +DEFAULT +UND + +#... + +[0-9]+: +[a-f0-9]+ +0 +NOTYPE +GLOBAL +DEFAULT +UND +__stop_scnfoo +#... + +[0-9]+: +[a-f0-9]+ +0 +NOTYPE +GLOBAL +DEFAULT +UND +.sizeof.scnfoo +#pass diff --git a/ld/testsuite/ld-elf/startofc.d b/ld/testsuite/ld-elf/startofc.d new file mode 100644 index 00000000000..4005625a0b8 --- /dev/null +++ b/ld/testsuite/ld-elf/startofc.d @@ -0,0 +1,12 @@ +#source: startof.s +#ld: -r +#readelf: -sW + +Symbol table '\.symtab' contains [0-9]+ entries: + +Num: +Value +Size Type +Bind +Vis +Ndx Name + +0: 0+ +0 +NOTYPE +LOCAL +DEFAULT +UND + +#... + +[0-9]+: +[a-f0-9]+ +0 +NOTYPE +GLOBAL +DEFAULT +UND +.startof.scnfoo +#... + +[0-9]+: +[a-f0-9]+ +0 +NOTYPE +GLOBAL +DEFAULT +UND +__start_scnfoo +#pass -- 2.30.2