]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
ld: Don't define __start_SECNAME/__stop_SECNAME for -r
authorH.J. Lu <hjl.tools@gmail.com>
Tue, 13 Jun 2017 20:04:56 +0000 (13:04 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Tue, 13 Jun 2017 20:04:56 +0000 (13:04 -0700)
__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
ld/ldlang.c
ld/testsuite/ld-elf/sizeofc.d [new file with mode: 0644]
ld/testsuite/ld-elf/startofc.d [new file with mode: 0644]

index 59c99ae1ff1732049829d2e80eb8e93ac584651a..7995de833d3e1205e04eac65dcb8662c5f6e881d 100644 (file)
@@ -1,3 +1,10 @@
+2017-06-13  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * 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  <hongjiu.lu@intel.com>
 
        * testsuite/ld-elf/sizeof.d: Renamed to ...
index f8e4f528799a327a415c84d5f99f1f2b6e723447..eb4ba9eee467e6cbc21a5786c5faced538a1df52 100644 (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,
diff --git a/ld/testsuite/ld-elf/sizeofc.d b/ld/testsuite/ld-elf/sizeofc.d
new file mode 100644 (file)
index 0000000..1cff854
--- /dev/null
@@ -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 (file)
index 0000000..4005625
--- /dev/null
@@ -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