diff mbox series

parisc: strip debug information when building compressed images

Message ID 20190731171923.24155-1-svens@stackframe.org (mailing list archive)
State Accepted, archived
Headers show
Series parisc: strip debug information when building compressed images | expand

Commit Message

Sven Schnelle July 31, 2019, 5:19 p.m. UTC
When compiling the kernel with debug information i got the following error:

hppa-linux-gnu-ld: section .text LMA [0000000000e78000,0000000000e7b41f] overlaps section .rodata.compressed LMA [00000000000e0078,00000000015ad43d]
make[3]: *** [/home/svens/parisc-linux/src/arch/parisc/boot/compressed/Makefile:28: arch/parisc/boot/compressed/vmlinux] Error 1
make[2]: *** [/home/svens/parisc-linux/src/arch/parisc/boot/Makefile:17: arch/parisc/boot/compressed/vmlinux] Error 2
make[2]: Target 'arch/parisc/boot/bzImage' not remade because of errors.

While this might also be fixed by adjusting the linker script, i think we
should strip the debug information when generating the compressed image. This
reduces the size of vmlinuz/lifimage from ~69MB to 6.6MB when full debug
information is enabled.

Signed-off-by: Sven Schnelle <svens@stackframe.org>
---
 arch/parisc/boot/compressed/Makefile | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

Comments

Helge Deller July 31, 2019, 7:28 p.m. UTC | #1
* Sven Schnelle <svens@stackframe.org>:
> When compiling the kernel with debug information i got the following error:
>
> hppa-linux-gnu-ld: section .text LMA [0000000000e78000,0000000000e7b41f] overlaps section .rodata.compressed LMA [00000000000e0078,00000000015ad43d]
> make[3]: *** [/home/svens/parisc-linux/src/arch/parisc/boot/compressed/Makefile:28: arch/parisc/boot/compressed/vmlinux] Error 1
> make[2]: *** [/home/svens/parisc-linux/src/arch/parisc/boot/Makefile:17: arch/parisc/boot/compressed/vmlinux] Error 2
> make[2]: Target 'arch/parisc/boot/bzImage' not remade because of errors.
>
> While this might also be fixed by adjusting the linker script, i think we
> should strip the debug information when generating the compressed image. This
> reduces the size of vmlinuz/lifimage from ~69MB to 6.6MB when full debug
> information is enabled.

I think keeping debug info is good.
Can you test this patch instead?
It converts a 141MB vmlinux boot file (with debug info) to a 32M vmlinuz for me.

Ideally I would prefer something like
  . = MIN_OR_HIGHER_THAN_CURRENT_ADDR((SZ_end - SZparisc_kernel_start + KERNEL_BINARY_TEXT_START));
to avoid the ifdef, but I'm missing the linker script expert knowledge...

Helge

------------------------
[PATCH] parisc: Allow building a compressed vmlinuz with CONFIG_DEBUG_INFO enabled.

Signed-off-by: Helge Deller <deller@gmx.de>

diff --git a/arch/parisc/boot/compressed/vmlinux.lds.S b/arch/parisc/boot/compressed/vmlinux.lds.S
index bfd7872739a3..dac000ec3861 100644
--- a/arch/parisc/boot/compressed/vmlinux.lds.S
+++ b/arch/parisc/boot/compressed/vmlinux.lds.S
@@ -49,7 +49,10 @@ SECTIONS
 	}

 	/* bootloader code and data starts behind area of extracted kernel */
+#if !defined(CONFIG_DEBUG_INFO)
+	/* ensure at least max address when compiled without debug info: */
 	. = (SZ_end - SZparisc_kernel_start + KERNEL_BINARY_TEXT_START);
+#endif

 	/* align on next page boundary */
 	. = ALIGN(4096);
Helge Deller July 31, 2019, 7:36 p.m. UTC | #2
* Helge Deller <deller@gmx.de>:
> * Sven Schnelle <svens@stackframe.org>:
> > When compiling the kernel with debug information i got the following error:
> >
> > hppa-linux-gnu-ld: section .text LMA [0000000000e78000,0000000000e7b41f] overlaps section .rodata.compressed LMA [00000000000e0078,00000000015ad43d]
> > make[3]: *** [/home/svens/parisc-linux/src/arch/parisc/boot/compressed/Makefile:28: arch/parisc/boot/compressed/vmlinux] Error 1
> > make[2]: *** [/home/svens/parisc-linux/src/arch/parisc/boot/Makefile:17: arch/parisc/boot/compressed/vmlinux] Error 2
> > make[2]: Target 'arch/parisc/boot/bzImage' not remade because of errors.
> >
> > While this might also be fixed by adjusting the linker script, i think we
> > should strip the debug information when generating the compressed image. This
> > reduces the size of vmlinuz/lifimage from ~69MB to 6.6MB when full debug
> > information is enabled.
>
> I think keeping debug info is good.
> Can you test this patch instead?
> It converts a 141MB vmlinux boot file (with debug info) to a 32M vmlinuz for me.
>
> Ideally I would prefer something like
>   . = MIN_OR_HIGHER_THAN_CURRENT_ADDR((SZ_end - SZparisc_kernel_start + KERNEL_BINARY_TEXT_START));
> to avoid the ifdef, but I'm missing the linker script expert knowledge...

Here is an updated patch without ifdefs:
Helge

diff --git a/arch/parisc/boot/compressed/vmlinux.lds.S b/arch/parisc/boot/compressed/vmlinux.lds.S
index bfd7872739a3..2ac3a643f2eb 100644
--- a/arch/parisc/boot/compressed/vmlinux.lds.S
+++ b/arch/parisc/boot/compressed/vmlinux.lds.S
@@ -48,8 +48,8 @@ SECTIONS
 		*(.rodata.compressed)
 	}

-	/* bootloader code and data starts behind area of extracted kernel */
-	. = (SZ_end - SZparisc_kernel_start + KERNEL_BINARY_TEXT_START);
+	/* bootloader code and data starts at least behind area of extracted kernel */
+	. = MAX(ABSOLUTE(.), (SZ_end - SZparisc_kernel_start + KERNEL_BINARY_TEXT_START));

 	/* align on next page boundary */
 	. = ALIGN(4096);
James Bottomley July 31, 2019, 7:37 p.m. UTC | #3
On Wed, 2019-07-31 at 21:28 +0200, Helge Deller wrote:
> * Sven Schnelle <svens@stackframe.org>:
> > When compiling the kernel with debug information i got the
> > following error:
> > 
> > hppa-linux-gnu-ld: section .text LMA
> > [0000000000e78000,0000000000e7b41f] overlaps section
> > .rodata.compressed LMA [00000000000e0078,00000000015ad43d]
> > make[3]: *** [/home/svens/parisc-
> > linux/src/arch/parisc/boot/compressed/Makefile:28:
> > arch/parisc/boot/compressed/vmlinux] Error 1
> > make[2]: *** [/home/svens/parisc-
> > linux/src/arch/parisc/boot/Makefile:17:
> > arch/parisc/boot/compressed/vmlinux] Error 2
> > make[2]: Target 'arch/parisc/boot/bzImage' not remade because of
> > errors.
> > 
> > While this might also be fixed by adjusting the linker script, i
> > think we
> > should strip the debug information when generating the compressed
> > image. This
> > reduces the size of vmlinuz/lifimage from ~69MB to 6.6MB when full
> > debug
> > information is enabled.
> 
> I think keeping debug info is good.
> Can you test this patch instead?
> It converts a 141MB vmlinux boot file (with debug info) to a 32M
> vmlinuz for me.
> 
> Ideally I would prefer something like
>   . = MIN_OR_HIGHER_THAN_CURRENT_ADDR((SZ_end - SZparisc_kernel_start
> + KERNEL_BINARY_TEXT_START));
> to avoid the ifdef, but I'm missing the linker script expert
> knowledge...
> 
> Helge
> 
> ------------------------
> [PATCH] parisc: Allow building a compressed vmlinuz with
> CONFIG_DEBUG_INFO enabled.
> 
> Signed-off-by: Helge Deller <deller@gmx.de>
> 
> diff --git a/arch/parisc/boot/compressed/vmlinux.lds.S
> b/arch/parisc/boot/compressed/vmlinux.lds.S
> index bfd7872739a3..dac000ec3861 100644
> --- a/arch/parisc/boot/compressed/vmlinux.lds.S
> +++ b/arch/parisc/boot/compressed/vmlinux.lds.S
> @@ -49,7 +49,10 @@ SECTIONS
>  	}
> 
>  	/* bootloader code and data starts behind area of extracted
> kernel */
> +#if !defined(CONFIG_DEBUG_INFO)
> +	/* ensure at least max address when compiled without debug
> info: */
>  	. = (SZ_end - SZparisc_kernel_start +
> KERNEL_BINARY_TEXT_START);
> +#endif

This would cause the kernel to be built in a single section for the
!defined(CONFIG_DEBUG_INFO) case, meaning we'd always blow through the
0x00100000-end text hole we need to leave for the compressed kernel to
decompress into.

James
Helge Deller July 31, 2019, 7:40 p.m. UTC | #4
On 31.07.19 21:37, James Bottomley wrote:
> On Wed, 2019-07-31 at 21:28 +0200, Helge Deller wrote:
>> * Sven Schnelle <svens@stackframe.org>:
>>> When compiling the kernel with debug information i got the
>>> following error:
>>>
>>> hppa-linux-gnu-ld: section .text LMA
>>> [0000000000e78000,0000000000e7b41f] overlaps section
>>> .rodata.compressed LMA [00000000000e0078,00000000015ad43d]
>>> make[3]: *** [/home/svens/parisc-
>>> linux/src/arch/parisc/boot/compressed/Makefile:28:
>>> arch/parisc/boot/compressed/vmlinux] Error 1
>>> make[2]: *** [/home/svens/parisc-
>>> linux/src/arch/parisc/boot/Makefile:17:
>>> arch/parisc/boot/compressed/vmlinux] Error 2
>>> make[2]: Target 'arch/parisc/boot/bzImage' not remade because of
>>> errors.
>>>
>>> While this might also be fixed by adjusting the linker script, i
>>> think we
>>> should strip the debug information when generating the compressed
>>> image. This
>>> reduces the size of vmlinuz/lifimage from ~69MB to 6.6MB when full
>>> debug
>>> information is enabled.
>>
>> I think keeping debug info is good.
>> Can you test this patch instead?
>> It converts a 141MB vmlinux boot file (with debug info) to a 32M
>> vmlinuz for me.
>>
>> Ideally I would prefer something like
>>    . = MIN_OR_HIGHER_THAN_CURRENT_ADDR((SZ_end - SZparisc_kernel_start
>> + KERNEL_BINARY_TEXT_START));
>> to avoid the ifdef, but I'm missing the linker script expert
>> knowledge...
>>
>> Helge
>>
>> ------------------------
>> [PATCH] parisc: Allow building a compressed vmlinuz with
>> CONFIG_DEBUG_INFO enabled.
>>
>> Signed-off-by: Helge Deller <deller@gmx.de>
>>
>> diff --git a/arch/parisc/boot/compressed/vmlinux.lds.S
>> b/arch/parisc/boot/compressed/vmlinux.lds.S
>> index bfd7872739a3..dac000ec3861 100644
>> --- a/arch/parisc/boot/compressed/vmlinux.lds.S
>> +++ b/arch/parisc/boot/compressed/vmlinux.lds.S
>> @@ -49,7 +49,10 @@ SECTIONS
>>   	}
>>
>>   	/* bootloader code and data starts behind area of extracted
>> kernel */
>> +#if !defined(CONFIG_DEBUG_INFO)
>> +	/* ensure at least max address when compiled without debug
>> info: */
>>   	. = (SZ_end - SZparisc_kernel_start +
>> KERNEL_BINARY_TEXT_START);
>> +#endif
>
> This would cause the kernel to be built in a single section

Yes.

> for the
> !defined(CONFIG_DEBUG_INFO) case, meaning we'd always blow through the
> 0x00100000-end text hole we need to leave for the compressed kernel to
> decompress into.

The debug info occupied the memory (and more) in the 0x00100000-end text area,
so we have the room to decompress to.
But the second patch I just sent is better anyway.

Helge
James Bottomley July 31, 2019, 7:45 p.m. UTC | #5
On Wed, 2019-07-31 at 21:40 +0200, Helge Deller wrote:
> On 31.07.19 21:37, James Bottomley wrote:
> > On Wed, 2019-07-31 at 21:28 +0200, Helge Deller wrote:
> > > * Sven Schnelle <svens@stackframe.org>:
> > > > When compiling the kernel with debug information i got the
> > > > following error:
> > > > 
> > > > hppa-linux-gnu-ld: section .text LMA
> > > > [0000000000e78000,0000000000e7b41f] overlaps section
> > > > .rodata.compressed LMA [00000000000e0078,00000000015ad43d]
> > > > make[3]: *** [/home/svens/parisc-
> > > > linux/src/arch/parisc/boot/compressed/Makefile:28:
> > > > arch/parisc/boot/compressed/vmlinux] Error 1
> > > > make[2]: *** [/home/svens/parisc-
> > > > linux/src/arch/parisc/boot/Makefile:17:
> > > > arch/parisc/boot/compressed/vmlinux] Error 2
> > > > make[2]: Target 'arch/parisc/boot/bzImage' not remade because
> > > > of
> > > > errors.
> > > > 
> > > > While this might also be fixed by adjusting the linker script,
> > > > i
> > > > think we
> > > > should strip the debug information when generating the
> > > > compressed
> > > > image. This
> > > > reduces the size of vmlinuz/lifimage from ~69MB to 6.6MB when
> > > > full
> > > > debug
> > > > information is enabled.
> > > 
> > > I think keeping debug info is good.
> > > Can you test this patch instead?
> > > It converts a 141MB vmlinux boot file (with debug info) to a 32M
> > > vmlinuz for me.
> > > 
> > > Ideally I would prefer something like
> > >    . = MIN_OR_HIGHER_THAN_CURRENT_ADDR((SZ_end -
> > > SZparisc_kernel_start
> > > + KERNEL_BINARY_TEXT_START));
> > > to avoid the ifdef, but I'm missing the linker script expert
> > > knowledge...
> > > 
> > > Helge
> > > 
> > > ------------------------
> > > [PATCH] parisc: Allow building a compressed vmlinuz with
> > > CONFIG_DEBUG_INFO enabled.
> > > 
> > > Signed-off-by: Helge Deller <deller@gmx.de>
> > > 
> > > diff --git a/arch/parisc/boot/compressed/vmlinux.lds.S
> > > b/arch/parisc/boot/compressed/vmlinux.lds.S
> > > index bfd7872739a3..dac000ec3861 100644
> > > --- a/arch/parisc/boot/compressed/vmlinux.lds.S
> > > +++ b/arch/parisc/boot/compressed/vmlinux.lds.S
> > > @@ -49,7 +49,10 @@ SECTIONS
> > >   	}
> > > 
> > >   	/* bootloader code and data starts behind area of
> > > extracted
> > > kernel */
> > > +#if !defined(CONFIG_DEBUG_INFO)
> > > +	/* ensure at least max address when compiled without
> > > debug
> > > info: */
> > >   	. = (SZ_end - SZparisc_kernel_start +
> > > KERNEL_BINARY_TEXT_START);
> > > +#endif
> > 
> > This would cause the kernel to be built in a single section
> 
> Yes.
> 
> > for the !defined(CONFIG_DEBUG_INFO) case, meaning we'd always blow
> > through the 0x00100000-end text hole we need to leave for the
> > compressed kernel to decompress into.
> 
> The debug info occupied the memory (and more) in the 0x00100000-end
> text area, so we have the room to decompress to.

Only if the end of text in the compressed section occurs before
0x00100000.  That was the bug that caused my decompression to fail. 
Even for a moderately configured kernel, the compressed text size is
often bigger than the 128kb we have available between 0x000e0000 and
0x00100000.

James

> But the second patch I just sent is better anyway.
> 
> Helge
>
Sven Schnelle July 31, 2019, 7:55 p.m. UTC | #6
Hi Helge,

On Wed, Jul 31, 2019 at 09:36:01PM +0200, Helge Deller wrote:
> * Helge Deller <deller@gmx.de>:
> > * Sven Schnelle <svens@stackframe.org>:
> > > When compiling the kernel with debug information i got the following error:
> > >
> > > hppa-linux-gnu-ld: section .text LMA [0000000000e78000,0000000000e7b41f] overlaps section .rodata.compressed LMA [00000000000e0078,00000000015ad43d]
> > > make[3]: *** [/home/svens/parisc-linux/src/arch/parisc/boot/compressed/Makefile:28: arch/parisc/boot/compressed/vmlinux] Error 1
> > > make[2]: *** [/home/svens/parisc-linux/src/arch/parisc/boot/Makefile:17: arch/parisc/boot/compressed/vmlinux] Error 2
> > > make[2]: Target 'arch/parisc/boot/bzImage' not remade because of errors.
> > >
> > > While this might also be fixed by adjusting the linker script, i think we
> > > should strip the debug information when generating the compressed image. This
> > > reduces the size of vmlinuz/lifimage from ~69MB to 6.6MB when full debug
> > > information is enabled.
> >
> > I think keeping debug info is good.
> > Can you test this patch instead?
> > It converts a 141MB vmlinux boot file (with debug info) to a 32M vmlinuz for me.
> >
> > Ideally I would prefer something like
> >   . = MIN_OR_HIGHER_THAN_CURRENT_ADDR((SZ_end - SZparisc_kernel_start + KERNEL_BINARY_TEXT_START));
> > to avoid the ifdef, but I'm missing the linker script expert knowledge...
> 
> Here is an updated patch without ifdefs:
> Helge
> 
> diff --git a/arch/parisc/boot/compressed/vmlinux.lds.S b/arch/parisc/boot/compressed/vmlinux.lds.S
> index bfd7872739a3..2ac3a643f2eb 100644
> --- a/arch/parisc/boot/compressed/vmlinux.lds.S
> +++ b/arch/parisc/boot/compressed/vmlinux.lds.S
> @@ -48,8 +48,8 @@ SECTIONS
>  		*(.rodata.compressed)
>  	}
> 
> -	/* bootloader code and data starts behind area of extracted kernel */
> -	. = (SZ_end - SZparisc_kernel_start + KERNEL_BINARY_TEXT_START);
> +	/* bootloader code and data starts at least behind area of extracted kernel */
> +	. = MAX(ABSOLUTE(.), (SZ_end - SZparisc_kernel_start + KERNEL_BINARY_TEXT_START));
> 
>  	/* align on next page boundary */
>  	. = ALIGN(4096);

With full debug and a 64 Bit Build i get now (vmlinux is 128M):

  LD      vmlinux
  SORTEX  vmlinux
  SYSMAP  System.map
/sbin/palo -f ./palo.conf
palo version 2.00 http://www.parisc-linux.org - Mon, 01 Jan 2018 21:07:58 +0100
uncompressing Linux kernel................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
Decompression error: 
uncompressed image too long - wouldn't fit into destination
vmlinuz is not a recognizable executable (ELF32 or ELF64)
make[1]: *** [arch/parisc/Makefile:130: lifimage] Error 2
make[1]: Leaving directory '/home/svens/parisc-linux/build64'
make: *** [Makefile:179: sub-make] Error 2
Helge Deller July 31, 2019, 8:07 p.m. UTC | #7
On 31.07.19 21:55, Sven Schnelle wrote:
> Hi Helge,
> 
> On Wed, Jul 31, 2019 at 09:36:01PM +0200, Helge Deller wrote:
>> * Helge Deller <deller@gmx.de>:
>>> * Sven Schnelle <svens@stackframe.org>:
>>>> When compiling the kernel with debug information i got the following error:
>>>>
>>>> hppa-linux-gnu-ld: section .text LMA [0000000000e78000,0000000000e7b41f] overlaps section .rodata.compressed LMA [00000000000e0078,00000000015ad43d]
>>>> make[3]: *** [/home/svens/parisc-linux/src/arch/parisc/boot/compressed/Makefile:28: arch/parisc/boot/compressed/vmlinux] Error 1
>>>> make[2]: *** [/home/svens/parisc-linux/src/arch/parisc/boot/Makefile:17: arch/parisc/boot/compressed/vmlinux] Error 2
>>>> make[2]: Target 'arch/parisc/boot/bzImage' not remade because of errors.
>>>>
>>>> While this might also be fixed by adjusting the linker script, i think we
>>>> should strip the debug information when generating the compressed image. This
>>>> reduces the size of vmlinuz/lifimage from ~69MB to 6.6MB when full debug
>>>> information is enabled.
>>>
>>> I think keeping debug info is good.
>>> Can you test this patch instead?
>>> It converts a 141MB vmlinux boot file (with debug info) to a 32M vmlinuz for me.
>>>
>>> Ideally I would prefer something like
>>>    . = MIN_OR_HIGHER_THAN_CURRENT_ADDR((SZ_end - SZparisc_kernel_start + KERNEL_BINARY_TEXT_START));
>>> to avoid the ifdef, but I'm missing the linker script expert knowledge...
>>
>> Here is an updated patch without ifdefs:
>> Helge
>>
>> diff --git a/arch/parisc/boot/compressed/vmlinux.lds.S b/arch/parisc/boot/compressed/vmlinux.lds.S
>> index bfd7872739a3..2ac3a643f2eb 100644
>> --- a/arch/parisc/boot/compressed/vmlinux.lds.S
>> +++ b/arch/parisc/boot/compressed/vmlinux.lds.S
>> @@ -48,8 +48,8 @@ SECTIONS
>>   		*(.rodata.compressed)
>>   	}
>>
>> -	/* bootloader code and data starts behind area of extracted kernel */
>> -	. = (SZ_end - SZparisc_kernel_start + KERNEL_BINARY_TEXT_START);
>> +	/* bootloader code and data starts at least behind area of extracted kernel */
>> +	. = MAX(ABSOLUTE(.), (SZ_end - SZparisc_kernel_start + KERNEL_BINARY_TEXT_START));
>>
>>   	/* align on next page boundary */
>>   	. = ALIGN(4096);
> 
> With full debug and a 64 Bit Build i get now (vmlinux is 128M):
> 
>    LD      vmlinux
>    SORTEX  vmlinux
>    SYSMAP  System.map
> /sbin/palo -f ./palo.conf
> palo version 2.00 http://www.parisc-linux.org - Mon, 01 Jan 2018 21:07:58 +0100
> uncompressing Linux kernel................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
> Decompression error:
> uncompressed image too long - wouldn't fit into destination

You are using the built-in palo gzip decompression function.
Please don't use it, it is an old (not bug-free) implementation which got replaced
by the kernel self-decompressor.
My palo.conf in the build dir has:
--init-tape=lifimage
--recoverykernel=vmlinuz

and set
CONFIG_PARISC_SELF_EXTRACT=y
in .config.

Helge
Sven Schnelle July 31, 2019, 8:19 p.m. UTC | #8
Hi Helge,

On Wed, Jul 31, 2019 at 10:07:57PM +0200, Helge Deller wrote:
> On 31.07.19 21:55, Sven Schnelle wrote:
> > uncompressed image too long - wouldn't fit into destination
> 
> You are using the built-in palo gzip decompression function.
> Please don't use it, it is an old (not bug-free) implementation which got replaced
> by the kernel self-decompressor.
> My palo.conf in the build dir has:
> --init-tape=lifimage
> --recoverykernel=vmlinuz
> 
> and set
> CONFIG_PARISC_SELF_EXTRACT=y
> in .config.

Thanks. I had the palo option (probably because they are default), but missed the
Kernel option. The lifimage is now 28MB in size, and your patch works for me.

Thanks!
Sven
diff mbox series

Patch

diff --git a/arch/parisc/boot/compressed/Makefile b/arch/parisc/boot/compressed/Makefile
index 2da8624e5cf6..2a81997b1079 100644
--- a/arch/parisc/boot/compressed/Makefile
+++ b/arch/parisc/boot/compressed/Makefile
@@ -55,8 +55,11 @@  $(obj)/misc.o: $(obj)/sizes.h
 CPPFLAGS_vmlinux.lds += -I$(objtree)/$(obj) -DBOOTLOADER
 $(obj)/vmlinux.lds: $(obj)/sizes.h
 
+quiet_cmd_objcopy_strip_debug = OBJCOPY_STRIP_DEBUG $@
+      cmd_objcopy_strip_debug = $(OBJCOPY) --strip-debug $< $@
+
 $(obj)/vmlinux.bin: vmlinux
-	$(call if_changed,objcopy)
+	$(call if_changed,objcopy_strip_debug)
 
 vmlinux.bin.all-y := $(obj)/vmlinux.bin