Re: [PATCH] kbuild: really fix bzImage build with non-bash sh

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

[Index of Archives]     [Linux&nblp;USB Development]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite Secrets]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux