On 28.12.2009 20:38, Jonathan Nieder wrote: > In an x86 build with CONFIG_KERNEL_LZMA enabled and dash as sh, > arch/x86/boot/compressed/vmlinux.bin.lzma ends with > '\xf0\x7d\x39\x00' (16 bytes) instead of the 4 bytes intended and > the resulting vmlinuz fails to boot. This improves on the > previous behavior, in which the file contained the characters > '-ne ' as well, but not by much. > > Previous commits replaced "echo -ne" first with "/bin/echo -ne", > then "printf" in the hope of improving portability, but none of > these commands is guaranteed to support hexadecimal escapes on > POSIX systems. So use the shell to convert from hexadecimal to > octal. > > With this change, an LZMA-compressed kernel built with dash as sh > boots correctly again. > > Reported-by: sd@xxxxxxx > Signed-off-by: Jonathan Nieder <jrnieder@xxxxxxxxx> > Cc: Michal Marek <mmarek@xxxxxxx> > Cc: Michael Tokarev <mjt@xxxxxxxxxx> > Cc: Alek Du <alek.du@xxxxxxxxx> > Cc: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> > --- > Andrew Morton wrote: > >> switched to email. > > Thanks. > > sd@xxxxxxx reported through <http://bugzilla.kernel.org/show_bug.cgi?id=14848>: > >>> The kernel fails to boot if compressed with bzip2 or lzma, gzip works. >>> >>> Commit 4a2ff67c88211026afcbdbc190c13f705dae1b59 does: > > Thanks for tracking it down. The change below works here. Worked for me as well, so let's hope this finally fixes the issue with /bin/sh -> dash. I added it to for-linus and will send a pull request soon. Thanks! Michal > > scripts/Makefile.lib | 9 +++++++-- > 1 files changed, 7 insertions(+), 2 deletions(-) > > diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib > index cd815ac..eabedbb 100644 > --- a/scripts/Makefile.lib > +++ b/scripts/Makefile.lib > @@ -219,8 +219,13 @@ for F in $1; do \ > fsize=$$(stat -c "%s" $$F); \ > dec_size=$$(expr $$dec_size + $$fsize); \ > done; \ > -printf "%08x" $$dec_size | \ > - sed 's/\(..\)\(..\)\(..\)\(..\)/\\\\x\4\\\\x\3\\\\x\2\\\\x\1/g' \ > +printf "%08x\n" $$dec_size | \ > + sed 's/\(..\)/\1 /g' | { \ > + read ch0 ch1 ch2 ch3; \ > + for ch in $$ch3 $$ch2 $$ch1 $$ch0; do \ > + printf '%s%03o' '\\' $$((0x$$ch)); \ > + done; \ > + } \ > ) > > quiet_cmd_bzip2 = BZIP2 $@ -- To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html