On Tue, Mar 8, 2011 at 11:44 AM, Sedat Dilek <sedat.dilek@xxxxxxxxxxxxxx> wrote: > Hi, > > my build of linux-next (next-20110308, the same with the one from > yesterday) is broken. > (I translated the German output.) > > [ build.log ] > ÂAS Â Â Âarch/x86/kernel/entry_32.o > /home/sd/src/linux-2.6/linux-2.6.38-rc7/debian/build/source_i386_none/arch/x86/kernel/entry_32.S: > Assembler messages: > /home/sd/src/linux-2.6/linux-2.6.38-rc7/debian/build/source_i386_none/arch/x86/kernel/entry_32.S:1421: > Error: .size expression does not evaluate to a constant > make[6]: *** [arch/x86/kernel/entry_32.o] Fehler 1 (Error 1) > make[5]: *** [arch/x86/kernel] Fehler 2 (Error 2) > make[4]: *** [arch/x86] Fehler 2 (Error 2) > make[4]: *** Warte auf noch nicht beendete Prozesse... (Waiting for > unfinished jobs...) > > I am not sure if this is a problem of Debian's binutils snapshot from > binutils-2_21-branch (Debian-version: 2.21.0.20110302-1) from sid/i386 > or this is only a problem for x86, but I just want to let you know. > > FYI: The previous binutils (2.21.0.20110216-2) works fine. > > I have tried with reverting the last two changes to > arch/x86/kernel/entry_32.S in linux-next: > > "x86: Use {push,pop}_cfi in more places" (see [1]) > "x86, asm: Cleanup unnecssary macros in asm-offsets.c" (see [2]) > > Reverting both or [1] or [2] breaks with Debians as (2.21.0.20110302-1). > > BTW, [3] has a complete GIT history for the above file. > > So, I am unsure from where the problem exactly aroses. > If this a known issue (and a fix around) or rings a bell to you, let > me and others know. > > Thanks in advance. > > Regards, > - Sedat - > > [1] http://git.kernel.org/?p=linux/kernel/git/next/linux-next.git;a=commit;h=60cf637a13932a4750da6746efd0199e8a4c341b > > [2] http://git.kernel.org/?p=linux/kernel/git/next/linux-next.git;a=commit;h=7bf04be8f48ceeeffa5b5a79734d6d6e0d59e5f8 > > [3] http://git.kernel.org/?p=linux/kernel/git/next/linux-next.git;a=history;f=arch/x86/kernel/entry_32.S;h=2878821cb8c1da1d7147b26271114fa9546afe03;hb=HEAD > Just FYI (for the "dropped" MLs while finding the "brain bug"): Finally, with the help of x86 folks and H.J. Lu a fix for the linux-kernel can now be found in [1]. Commits [2] and [3] from binutils master GIT helped to dig deeper into the right places. So I would appreciated both to be backported to binutils-2_21-branch GIT. @Matthias: If you like you can use the two backported patches (see file attachments) for a next binutils upload to Debian/sid. As usually (and you demanded once from me) I dropped any ChangeLog entries from the code, but kept the history in the commit-text. Also, I documented my changes. So the patches should cleanly apply. Thanks. - Sedat - [1] https://patchwork.kernel.org/patch/621001/ [2] http://sourceware.org/git/?p=binutils.git;a=commit;h=b9521fc0be7945fc842ce1197e241a023378125d [3] http://sourceware.org/git/?p=binutils.git;a=commit;h=cbd141bb69f791de7ea1581abe7afb34f0c61288
From 3708bdd06792e812acd9da711b51482c0b4b2797 Mon Sep 17 00:00:00 2001 From: Sedat Dilek <sedat.dilek@xxxxxxxxx> Date: Tue, 8 Mar 2011 14:59:35 +0100 Subject: [PATCH 1/2] Mention symbol name in non-constant .size expression. gas/ 2011-03-05 H.J. Lu <hongjiu.lu@xxxxxxxxx> * config/obj-elf.c (elf_frob_symbol): Mention symbol name in non-constant .size expression. gas/testsuite/ 2011-03-05 H.J. Lu <hongjiu.lu@xxxxxxxxx> * gas/elf/bad-size.err: Updated. Conflicts: gas/ChangeLog gas/testsuite/ChangeLog gas/testsuite/gas/elf/bad-size.err 2011-03-08 Sedat Dilek <sedat.dilek@xxxxxxxxx> * Cherry-picked from commit b9521fc0be7945fc842ce1197e241a023378125d * Drop changes in gas/ChangeLog and gas/testsuite/ChangeLog --- gas/config/obj-elf.c | 48 ++++++++++++++++++++++++++++++++--- gas/testsuite/gas/elf/bad-size.err | 2 + 2 files changed, 45 insertions(+), 5 deletions(-) create mode 100644 gas/testsuite/gas/elf/bad-size.err diff --git a/gas/config/obj-elf.c b/gas/config/obj-elf.c index 969a509..d43409a 100644 --- a/gas/config/obj-elf.c +++ b/gas/config/obj-elf.c @@ -1879,6 +1879,7 @@ void elf_frob_symbol (symbolS *symp, int *puntp) { struct elf_obj_sy *sy_obj; + expressionS *size; #ifdef NEED_ECOFF_DEBUG if (ECOFF_DEBUGGING) @@ -1887,13 +1888,50 @@ elf_frob_symbol (symbolS *symp, int *puntp) sy_obj = symbol_get_obj (symp); - if (sy_obj->size != NULL) + size = sy_obj->size; + if (size != NULL) { - if (resolve_expression (sy_obj->size) - && sy_obj->size->X_op == O_constant) - S_SET_SIZE (symp, sy_obj->size->X_add_number); + if (resolve_expression (size) + && size->X_op == O_constant) + S_SET_SIZE (symp, size->X_add_number); else - as_bad (_(".size expression does not evaluate to a constant")); + { + const char *op_name = NULL; + const char *add_name = NULL; + + if (size->X_op == O_subtract) + { + op_name = S_GET_NAME (size->X_op_symbol); + add_name = S_GET_NAME (size->X_add_symbol); + if (strcmp (op_name, FAKE_LABEL_NAME) == 0) + op_name = NULL; + if (strcmp (add_name, FAKE_LABEL_NAME) == 0) + add_name = NULL; + + if (op_name && add_name) + as_bad (_(".size expression with symbols `%s' and `%s' " + "does not evaluate to a constant"), + op_name, add_name); + else + { + const char *name; + + if (op_name) + name = op_name; + else if (add_name) + name = add_name; + else + name = NULL; + + if (name) + as_bad (_(".size expression with symbol `%s' " + "does not evaluate to a constant"), name); + } + } + + if (!op_name && !add_name) + as_bad (_(".size expression does not evaluate to a constant")); + } free (sy_obj->size); sy_obj->size = NULL; } diff --git a/gas/testsuite/gas/elf/bad-size.err b/gas/testsuite/gas/elf/bad-size.err new file mode 100644 index 0000000..a5bfc31 --- /dev/null +++ b/gas/testsuite/gas/elf/bad-size.err @@ -0,0 +1,2 @@ +.*bad-size\.s: Assembler messages: +.*bad-size\.s:6: Error:.*`_test_nop'.* -- 1.7.4.1
From eff5315213e5ad4cf255e3ec536f629a015100ee Mon Sep 17 00:00:00 2001 From: Sedat Dilek <sedat.dilek@xxxxxxxxx> Date: Tue, 8 Mar 2011 15:05:45 +0100 Subject: [PATCH 2/2] Revert the last change on gas/elf/bad-size.err. 2011-03-06 H.J. Lu <hongjiu.lu@xxxxxxxxx> * gas/elf/bad-size.err: Revert the last change. Conflicts: gas/testsuite/ChangeLog 2011-03-08 Sedat Dilek <sedat.dilek@xxxxxxxxx> * Cherry-picked from commit cbd141bb69f791de7ea1581abe7afb34f0c61288 * Drop changes in gas/testsuite/ChangeLog --- gas/testsuite/gas/elf/bad-size.err | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/gas/testsuite/gas/elf/bad-size.err b/gas/testsuite/gas/elf/bad-size.err index a5bfc31..5e01ef2 100644 --- a/gas/testsuite/gas/elf/bad-size.err +++ b/gas/testsuite/gas/elf/bad-size.err @@ -1,2 +1,2 @@ .*bad-size\.s: Assembler messages: -.*bad-size\.s:6: Error:.*`_test_nop'.* +.*bad-size\.s:6: Error: .* -- 1.7.4.1