public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
* [PATCH][RFC] link error when DSO is before object files (similar to PR ld/11138)
@ 2011-08-02  5:55 Ryosei Takagi
  0 siblings, 0 replies; only message in thread
From: Ryosei Takagi @ 2011-08-02  5:55 UTC (permalink / raw)
  To: binutils; +Cc: ryosei

Hi all,

I'm using a following toolchain for ARM Linux EABI and met an ld issue,
which is similar to PR ld/11138.

binutils: 2.20.51.0.11
gcc: 4.5.1
glibc: 2.11.2

A symbol exported by DSO, the version of which is 3 or above,
may be defined in non-shared object and forced local. In this case we
meet link error.
I have confirmed that binutils-2.21.1 also has the same issue.

Following is the test case.

* Test Code

[foo.c]
void
bar ()
{
}

int
main ()
{
  bar ();
  return 0;
}

[bar.c]
void
bar ()
{
}


[foo.map]
{
        global: main;
        local: *;
};

[bar.map]
VERS_1 {
  local: *;
};

VERS_2 {
  global: bar;
} VERS_1;

* Build

arm-unknown-linux-gnueabi-dev-gcc    -c -o foo.o foo.c
arm-unknown-linux-gnueabi-dev-gcc    -c -o bar.o bar.c
arm-unknown-linux-gnueabi-dev-ld -o libbar.so -shared --version-script=bar.map bar.o
arm-unknown-linux-gnueabi-dev-ld -e main --version-script=foo.map  -o bar foo.o libbar.so
arm-unknown-linux-gnueabi-dev-ld -e main --version-script=foo.map  -o foo libbar.so foo.o
arm-unknown-linux-gnueabi-dev-ld: foo: local symbol `bar' in foo.o is referenced by DSO
arm-unknown-linux-gnueabi-dev-ld: final link failed: Nonrepresentable section on output
make: *** [foo] Error 1

ld reports an error in case we specify a shared library before an object
file.
If I put the shared library after the object file, ld does not report
this error.

Following is a patch to fix this issue, which I referred PR ld/11138
and prepared.

I have verified that the above test case is PASS after applying this
patch.

binutils makecheck has been done for ARM Linux EABI.
No addtional FAILs are found.

Could you please give me some comments??

Best Regards,
Ryosei Takagi

2011-08-02  Ryosei Takagi  <ryosei@sm.sony.co.jp>

	* elflink.c (elf_link_check_versioned_symbol): Don't handle as
	error if a symbol referenced by DSO, the version of which is 3
	or above, is defined in a non-shared object and forced local.

Index: b/bfd/elflink.c
===================================================================
--- a/bfd/elflink.c
+++ b/bfd/elflink.c
@@ -8613,14 +8613,19 @@ elf_link_check_versioned_symbol (struct 
 
 	  _bfd_elf_swap_versym_in (input, ever, &iver);
 
-	  if ((iver.vs_vers & VERSYM_HIDDEN) == 0
-	      && !(h->def_regular
-		   && h->forced_local))
+	  if ((iver.vs_vers & VERSYM_HIDDEN) == 0)
 	    {
 	      /* If we have a non-hidden versioned sym, then it should
 		 have provided a definition for the undefined sym unless
 		 it is defined in a non-shared object and forced local.
 	       */
+	      if (h->def_regular && h->forced_local)
+		{
+		  free (extversym);
+		  free (isymbuf);
+		  return TRUE;
+		}
+
 	      abort ();
 	    }
 

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2011-08-02  5:55 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-08-02  5:55 [PATCH][RFC] link error when DSO is before object files (similar to PR ld/11138) Ryosei Takagi

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).