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 to fix a bug with version scripts and gc-sections in the GOLD linker.


Hi,

    Gold garbage collection does not do the right thing with this program:

foobar.cc
--------------
extern "C"
int bar()
{
  return 144;
}

extern "C"
int foo()
{
  return 121;
}

sym.ver  (version_script)
-----------
{
	 global:
		 foo;
	 local:
		 bar;
};



$ g++ -fPIC -shared -Wl,--gc-sections foobar.cc -o foobar.so
-Wl,--version-script,sym.ver
$ nm foobar.so | grep bar
00000000000066a t bar

Function bar is not garbage collected even though it is local.

This simple patch fixes it.

	* symtab.cc (Symbol_table::gc_mark_symbol_for_shlib): Check if symbol
	is not forced local before marking it as referenced.
	(Symbol_table::add_from_relobj): Mark symbol as referenced only after
	checking if they cannot be forced local.



Ok to submit?

Thanks,
-Sri.

Attachment: gc_version_script.txt
Description: Text document


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