Bug 13839 - Linker fails to build x86-64 Linux 3.3-rc2 kernel
Summary: Linker fails to build x86-64 Linux 3.3-rc2 kernel
Status: RESOLVED FIXED
Alias: None
Product: binutils
Classification: Unclassified
Component: ld (show other bugs)
Version: 2.24
: P2 normal
Target Milestone: ---
Assignee: Alan Modra
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2012-03-13 17:20 UTC by H.J. Lu
Modified: 2012-03-14 15:56 UTC (History)
1 user (show)

See Also:
Host:
Target:
Build:
Last reconfirmed:
Project(s) to access:
ssh public key:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description H.J. Lu 2012-03-13 17:20:28 UTC
I got

# make bzImage
...
  LD      init/built-in.o
  LD      .tmp_vmlinux1
arch/x86/kernel/vmlinux.lds:692: undefined symbol `_text' referenced in expression
Comment 1 H.J. Lu 2012-03-13 18:17:40 UTC
It is caused by

http://sourceware.org/ml/binutils-cvs/2012-02/msg00106.html
Comment 2 H.J. Lu 2012-03-13 18:32:16 UTC
A testcase:

[hjl@gnu-6 pr13839]$ cat defined5.s
	.text
	.byte 0
[hjl@gnu-6 pr13839]$ cat defined5.t
SECTIONS {
	.text : {
	  *(.text)
	_text = .;
	}
	_end = .;
}
. = ASSERT((_end - _text <= (512 * 1024 * 1024)), "foo");
[hjl@gnu-6 pr13839]$ make
as   -o defined5.o defined5.s
./ld -T defined5.t  -o defined5 defined5.o
defined5.t:8: undefined symbol `_text' referenced in expression
make: *** [defined5] Error 1
[hjl@gnu-6 pr13839]$
Comment 3 H.J. Lu 2012-03-14 00:19:03 UTC
This patch seems to work:

diff --git a/ld/ldexp.c b/ld/ldexp.c
index bf0e00b..3b0f4bb 100644
--- a/ld/ldexp.c
+++ b/ld/ldexp.c
@@ -606,7 +606,8 @@ fold_name (etree_type *tree)
 			 output_section);
 	    }
 	  else if (expld.phase == lang_final_phase_enum
-		   || expld.assigning_to_dot)
+		   || (expld.phase != lang_mark_phase_enum
+		       && expld.assigning_to_dot))
 	    einfo (_("%F%S: undefined symbol `%s'"
 		     " referenced in expression\n"),
 		   tree, tree->name.name);
Comment 4 Alan Modra 2012-03-14 00:57:33 UTC
testing a slightly larger patch (comment #3 patch plus making exp_fold_tree_1 always evaluate assignment expressions when not first phase to see side effects like asserts).
Comment 5 Sourceware Commits 2012-03-14 05:24:09 UTC
CVSROOT:	/cvs/src
Module name:	src
Changes by:	amodra@sourceware.org	2012-03-14 05:24:03

Modified files:
	ld             : ChangeLog ldexp.c 

Log message:
	PR ld/13839
	* ldexp.c (fold_name): Ignore undefined symbols when assigning to
	dot in mark phase.
	(exp_fold_tree_1): Evaluate assignment to dot expressions even when
	discarding result, for side effects.  Fix typo in error message.

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/src/ld/ChangeLog.diff?cvsroot=src&r1=1.2418&r2=1.2419
http://sourceware.org/cgi-bin/cvsweb.cgi/src/ld/ldexp.c.diff?cvsroot=src&r1=1.98&r2=1.99
Comment 6 Alan Modra 2012-03-14 05:25:20 UTC
tests passed
Comment 7 Sourceware Commits 2012-03-14 15:56:16 UTC
CVSROOT:	/cvs/src
Module name:	src
Changes by:	hjl@sourceware.org	2012-03-14 15:56:13

Modified files:
	ld/testsuite   : ChangeLog 
Added files:
	ld/testsuite/ld-elf: pr13839.d pr13839.s pr13839.t 

Log message:
	Add a testcase for PR ld/13839
	
	2012-03-14  H.J. Lu  <hongjiu.lu@intel.com>
	
	PR ld/13839
	* ld-elf/pr13839.d: New.
	* ld-elf/pr13839.s: Likewise.
	* ld-elf/pr13839.t: Likewise.

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/src/ld/testsuite/ChangeLog.diff?cvsroot=src&r1=1.1500&r2=1.1501
http://sourceware.org/cgi-bin/cvsweb.cgi/src/ld/testsuite/ld-elf/pr13839.d.diff?cvsroot=src&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/src/ld/testsuite/ld-elf/pr13839.s.diff?cvsroot=src&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/src/ld/testsuite/ld-elf/pr13839.t.diff?cvsroot=src&r1=NONE&r2=1.1