This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] PR ld/18735: Don't change the default symbol for relocatable link


We should change the default symbol for the versioned symbol only when
not performing a relocatable link.

OK for master?

H.J.
---
bfd/

	PR ld/18735
	* elflink.c (_bfd_elf_add_default_symbol): Add the default
	symbol if not performing a relocatable link.
	(elf_link_add_object_symbols): Adjust the default symbol if
	not performing a relocatable link.

ld/testsuite/

	PR ld/18735
	* ld-elf/pr18735.d: New file.
	* ld-elf/pr18735.s: Likewise.
---
 bfd/elflink.c                 | 24 +++++++++++++++---------
 ld/testsuite/ld-elf/pr18735.d | 10 ++++++++++
 ld/testsuite/ld-elf/pr18735.s | 13 +++++++++++++
 3 files changed, 38 insertions(+), 9 deletions(-)
 create mode 100644 ld/testsuite/ld-elf/pr18735.d
 create mode 100644 ld/testsuite/ld-elf/pr18735.s

diff --git a/bfd/elflink.c b/bfd/elflink.c
index fc1fd08..846f35e 100644
--- a/bfd/elflink.c
+++ b/bfd/elflink.c
@@ -1655,12 +1655,17 @@ _bfd_elf_add_default_symbol (bfd *abfd,
 
   if (! override)
     {
-      bh = &hi->root;
-      if (! (_bfd_generic_link_add_one_symbol
-	     (info, abfd, shortname, BSF_INDIRECT, bfd_ind_section_ptr,
-	      0, name, FALSE, collect, &bh)))
-	return FALSE;
-      hi = (struct elf_link_hash_entry *) bh;
+      /* Add the default symbol if not performing a relocatable link.  */
+      if (! info->relocatable)
+	{
+	  bh = &hi->root;
+	  if (! (_bfd_generic_link_add_one_symbol
+		 (info, abfd, shortname, BSF_INDIRECT,
+		  bfd_ind_section_ptr,
+		  0, name, FALSE, collect, &bh)))
+	    return FALSE;
+	  hi = (struct elf_link_hash_entry *) bh;
+	}
     }
   else
     {
@@ -4609,9 +4614,10 @@ error_free_dyn:
       old_tab = NULL;
     }
 
-  /* Now that all the symbols from this input file are created, handle
-     .symver foo, foo@BAR such that any relocs against foo become foo@BAR.  */
-  if (nondeflt_vers != NULL)
+  /* Now that all the symbols from this input file are created, if
+     not performing a relocatable link, handle .symver foo, foo@BAR
+     such that any relocs against foo become foo@BAR.  */
+  if (!info->relocatable && nondeflt_vers != NULL)
     {
       bfd_size_type cnt, symidx;
 
diff --git a/ld/testsuite/ld-elf/pr18735.d b/ld/testsuite/ld-elf/pr18735.d
new file mode 100644
index 0000000..8ec0938
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr18735.d
@@ -0,0 +1,10 @@
+#ld: -r
+#readelf: -s
+
+Symbol table '.symtab' contains .* entries:
+#...
+[ 	]*[0-9]+: [0-9a-fA-F]* +1 +OBJECT +GLOBAL +DEFAULT +[0-9]+ +foo@FOO
+[ 	]*[0-9]+: [0-9a-fA-F]* +1 +OBJECT +GLOBAL +DEFAULT +[0-9]+ +bar@@FOO
+[ 	]*[0-9]+: [0-9a-fA-F]* +1 +OBJECT +GLOBAL +DEFAULT +[0-9]+ +foo
+[ 	]*[0-9]+: [0-9a-fA-F]* +1 +OBJECT +GLOBAL +DEFAULT +[0-9]+ +bar
+#pass
diff --git a/ld/testsuite/ld-elf/pr18735.s b/ld/testsuite/ld-elf/pr18735.s
new file mode 100644
index 0000000..aae609d
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr18735.s
@@ -0,0 +1,13 @@
+	.data
+	.symver	foo, foo@FOO
+	.symver	bar, bar@@FOO
+	.globl	foo
+	.type	foo, %object
+foo:
+	.byte 0
+	.size	foo, .-foo
+	.globl	bar
+	.type	bar, %object
+bar:
+	.byte 0
+	.size	bar, .-bar
-- 
2.4.3


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]