Bug 10340

Summary: ld doesn't honor sysroot prefix for ldscripts
Product: binutils Reporter: Sven Rebhan <OdinsHorse>
Component: ldAssignee: Alan Modra <amodra>
Status: RESOLVED FIXED    
Severity: normal CC: bug-binutils, toolchain
Priority: P2    
Version: 2.19   
Target Milestone: ---   
URL: http://sourceware.org/ml/binutils/2012-03/msg00076.html
Host: Target: armv4tl-softfloat-linux-gnueabi
Build: Last reconfirmed:
Attachments: ld should search search in sysroot first

Description Sven Rebhan 2009-06-28 06:53:14 UTC
When ld is configured with a sysroot prefix and test is executed:

echo "Testing with absolute linker script (systems libz)..."
echo "GROUP ( /lib/libz.so )" > "${PWD}/libfoo-script.so"
armv4tl-softfloat-linux-gnueabi-gcc test.c -o test libfoo-script.so

the linking process terminates with

Testing with absolute linker script (systems libz)...
/lib/libz.so: file not recognized: File format not recognized
collect2: ld returned 1 exit status

because the Host's library is linked in. For cross-compilation the desired 
behaviour is different. Here, the lib specified in the linker script should be 
searched in the sysroot first! Patch will be attached.
Comment 1 Sven Rebhan 2009-06-28 06:55:03 UTC
Created attachment 4025 [details]
ld should search search in sysroot first

When ld was configured with a sysroot, it should always search for libraries
with absolute filename in this sysroot first.
Comment 2 Sven Rebhan 2009-06-28 06:56:58 UTC
Comment on attachment 4025 [details]
ld should search search in sysroot first

When ld was configured with a sysroot, it should always search for libraries
with absolute filename in this sysroot first. This patch was tested on
x86_64-pc-linux-gnu without sysroot and armv4tl-softfloat-linux-gnueabi with
sysroot and works ffine on both.
Comment 3 Mike Frysinger 2009-06-28 16:43:19 UTC
background discussion can be found here:
http://sourceware.org/ml/binutils/2009-05/msg00480.html
Comment 4 cvs-commit@gcc.gnu.org 2012-03-08 05:29:37 UTC
CVSROOT:	/cvs/src
Module name:	src
Changes by:	amodra@sourceware.org	2012-03-08 05:29:33

Modified files:
	ld             : ChangeLog ldfile.c ldfile.h ldlang.c ldlang.h 
	                 ldlex.h ldlex.l 

Log message:
	PR ld/10340
	* ldfile.c (is_sysrooted_pathname): Remove notsame param.
	(ldfile_add_library_path): Don't set sysrooted flag.
	(ldfile_open_file_search): Likewise, and don't copy them.
	(try_open): Delete exten and code handling such.  Add sysrooted
	param and return whether path is in sysroot.
	(ldfile_find_command_file): Delete extend param.  Add sysrooted
	param.  Rename local var.  Update try_open calls.
	(ldfile_open_command_file_1): Pass sysrooted to lex_push_file.
	* ldfile.h (search_dirs_type): Remove sysrooted field.
	* ldlang.c (new_afile): Always set sysrooted from input_flags.
	(load_symbols): Don't set input_flags.sysrooted.
	* ldlang.h (struct lang_input_statement_flags): Revise sysrooted
	comment.
	* ldlex.h (lex_push_file): Update prototype.
	* ldlex.l (sysrooted_stack): New array.
	(EOF): Pop input_flags.sysrooted.
	(lex_push_file): Add sysrooted param.  Save and set
	input_flags.sysrooted.

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/src/ld/ChangeLog.diff?cvsroot=src&r1=1.2416&r2=1.2417
http://sourceware.org/cgi-bin/cvsweb.cgi/src/ld/ldfile.c.diff?cvsroot=src&r1=1.65&r2=1.66
http://sourceware.org/cgi-bin/cvsweb.cgi/src/ld/ldfile.h.diff?cvsroot=src&r1=1.19&r2=1.20
http://sourceware.org/cgi-bin/cvsweb.cgi/src/ld/ldlang.c.diff?cvsroot=src&r1=1.385&r2=1.386
http://sourceware.org/cgi-bin/cvsweb.cgi/src/ld/ldlang.h.diff?cvsroot=src&r1=1.102&r2=1.103
http://sourceware.org/cgi-bin/cvsweb.cgi/src/ld/ldlex.h.diff?cvsroot=src&r1=1.9&r2=1.10
http://sourceware.org/cgi-bin/cvsweb.cgi/src/ld/ldlex.l.diff?cvsroot=src&r1=1.54&r2=1.55
Comment 5 Alan Modra 2012-03-08 06:00:39 UTC
More background discussion http://sourceware.org/ml/binutils/2003-02/msg00449.html
Comment 6 Alan Modra 2012-10-18 08:07:34 UTC
fixed
Comment 7 Jackie Rosen 2014-02-16 17:44:12 UTC Comment hidden (spam)