I got # make bzImage ... LD init/built-in.o LD .tmp_vmlinux1 arch/x86/kernel/vmlinux.lds:692: undefined symbol `_text' referenced in expression
It is caused by http://sourceware.org/ml/binutils-cvs/2012-02/msg00106.html
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]$
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);
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).
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
tests passed
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