Re: [PATCH] x86/purgatory: strip debug info
On Sat, Aug 1, 2020 at 2:18 AM Nick Desaulniers wrote: > > On Fri, Jul 31, 2020 at 2:36 AM Pingfan Liu wrote: > > > > On Fri, Jul 31, 2020 at 7:11 AM Nick Desaulniers > > wrote: > > > > > > On Thu, Jul 30, 2020 at 1:27 AM Pingfan Liu wrote: > > > > > > > > It is useless to keep debug info in purgatory. And discarding them saves > > > > about 200K space. > > > > > > > > Original: > > > > 259080 kexec-purgatory.o > > > > Stripped: > > > >29152 kexec-purgatory.o > > > > > > > > Signed-off-by: Pingfan Liu > > > > Cc: Thomas Gleixner > > > > Cc: Ingo Molnar > > > > Cc: Borislav Petkov > > > > Cc: "H. Peter Anvin" > > > > Cc: Hans de Goede > > > > Cc: Nick Desaulniers > > > > Cc: Arvind Sankar > > > > Cc: Steve Wahl > > > > Cc: linux-kernel@vger.kernel.org > > > > To: x...@kernel.org > > > > > > I don't see any code in > > > arch/x86/purgatory/ > > > arch/x86/include/asm/purgatory.h > > > include/linux/purgatory.h > > > include/uapi/linux/kexec.h > > > kernel/kexec* > > > include/linux/kexec.h > > > include/linux/crash_dump.h > > > kernel/crash_dump.c > > > arch/x86/kernel/crash* > > > https://github.com/horms/kexec-tools/tree/master/kexec/arch/x86_64 > > > that mentions any kind of debug info section. I'm not sure what you'd > > > do with the debug info anyway for this binary. So I suspect this > > > information should ok to discard. > > > > > > This works, but it might be faster to build to not generate the > > > compile info in the first place via compile flag `-g0`, which could be > > > added `ifdef CONFIG_DEBUG_INFO` or even just unconditionally. That > > > way we're not doing additional work to generate debug info, then > > > additional work to throw it away. > > What about: > > diff --git a/arch/x86/purgatory/Makefile b/arch/x86/purgatory/Makefile > > index 088bd76..7e1ad9e 100644 > > --- a/arch/x86/purgatory/Makefile > > +++ b/arch/x86/purgatory/Makefile > > @@ -32,7 +32,7 @@ KCOV_INSTRUMENT := n > > # make up the standalone purgatory.ro > > > > PURGATORY_CFLAGS_REMOVE := -mcmodel=kernel > > -PURGATORY_CFLAGS := -mcmodel=large -ffreestanding > > -fno-zero-initialized-in-bss > > +PURGATORY_CFLAGS := -mcmodel=large -ffreestanding > > -fno-zero-initialized-in-bss -g0 > > PURGATORY_CFLAGS += $(DISABLE_STACKLEAK_PLUGIN) -DDISABLE_BRANCH_PROFILING > > PURGATORY_CFLAGS += $(call cc-option,-fno-stack-protector) > > I tested your patch but still see .debug_* sections in the .ro from a few .o. > > At least on > * setup-x86_64.o > * entry64.o > > If you add the following hunk to your diff: > ``` > @@ -64,6 +64,9 @@ CFLAGS_sha256.o += $(PURGATORY_CFLAGS) > CFLAGS_REMOVE_string.o += $(PURGATORY_CFLAGS_REMOVE) > CFLAGS_string.o+= $(PURGATORY_CFLAGS) > > +AFLAGS_REMOVE_setup-x86_$(BITS).o += -Wa,-gdwarf-2 > +AFLAGS_REMOVE_entry64.o+= -Wa,-gdwarf-2 > + Go through man as and gcc, and can not find a simpler method than your suggestion. > $(obj)/purgatory.ro: $(PURGATORY_OBJS) FORCE > $(call if_changed,ld) > ``` > then that should do it. Then you can verify the .ro file via: > $ llvm-readelf -S arch/x86/purgatory/purgatory.ro | not grep debug_ > (no output, should return zero) Thank you for your good suggestion and I will update V2 Regards, Pingfan
Re: [PATCH] x86/purgatory: strip debug info
On Fri, Jul 31, 2020 at 2:36 AM Pingfan Liu wrote: > > On Fri, Jul 31, 2020 at 7:11 AM Nick Desaulniers > wrote: > > > > On Thu, Jul 30, 2020 at 1:27 AM Pingfan Liu wrote: > > > > > > It is useless to keep debug info in purgatory. And discarding them saves > > > about 200K space. > > > > > > Original: > > > 259080 kexec-purgatory.o > > > Stripped: > > >29152 kexec-purgatory.o > > > > > > Signed-off-by: Pingfan Liu > > > Cc: Thomas Gleixner > > > Cc: Ingo Molnar > > > Cc: Borislav Petkov > > > Cc: "H. Peter Anvin" > > > Cc: Hans de Goede > > > Cc: Nick Desaulniers > > > Cc: Arvind Sankar > > > Cc: Steve Wahl > > > Cc: linux-kernel@vger.kernel.org > > > To: x...@kernel.org > > > > I don't see any code in > > arch/x86/purgatory/ > > arch/x86/include/asm/purgatory.h > > include/linux/purgatory.h > > include/uapi/linux/kexec.h > > kernel/kexec* > > include/linux/kexec.h > > include/linux/crash_dump.h > > kernel/crash_dump.c > > arch/x86/kernel/crash* > > https://github.com/horms/kexec-tools/tree/master/kexec/arch/x86_64 > > that mentions any kind of debug info section. I'm not sure what you'd > > do with the debug info anyway for this binary. So I suspect this > > information should ok to discard. > > > > This works, but it might be faster to build to not generate the > > compile info in the first place via compile flag `-g0`, which could be > > added `ifdef CONFIG_DEBUG_INFO` or even just unconditionally. That > > way we're not doing additional work to generate debug info, then > > additional work to throw it away. > What about: > diff --git a/arch/x86/purgatory/Makefile b/arch/x86/purgatory/Makefile > index 088bd76..7e1ad9e 100644 > --- a/arch/x86/purgatory/Makefile > +++ b/arch/x86/purgatory/Makefile > @@ -32,7 +32,7 @@ KCOV_INSTRUMENT := n > # make up the standalone purgatory.ro > > PURGATORY_CFLAGS_REMOVE := -mcmodel=kernel > -PURGATORY_CFLAGS := -mcmodel=large -ffreestanding > -fno-zero-initialized-in-bss > +PURGATORY_CFLAGS := -mcmodel=large -ffreestanding > -fno-zero-initialized-in-bss -g0 > PURGATORY_CFLAGS += $(DISABLE_STACKLEAK_PLUGIN) -DDISABLE_BRANCH_PROFILING > PURGATORY_CFLAGS += $(call cc-option,-fno-stack-protector) I tested your patch but still see .debug_* sections in the .ro from a few .o. At least on * setup-x86_64.o * entry64.o If you add the following hunk to your diff: ``` @@ -64,6 +64,9 @@ CFLAGS_sha256.o += $(PURGATORY_CFLAGS) CFLAGS_REMOVE_string.o += $(PURGATORY_CFLAGS_REMOVE) CFLAGS_string.o+= $(PURGATORY_CFLAGS) +AFLAGS_REMOVE_setup-x86_$(BITS).o += -Wa,-gdwarf-2 +AFLAGS_REMOVE_entry64.o+= -Wa,-gdwarf-2 + $(obj)/purgatory.ro: $(PURGATORY_OBJS) FORCE $(call if_changed,ld) ``` then that should do it. Then you can verify the .ro file via: $ llvm-readelf -S arch/x86/purgatory/purgatory.ro | not grep debug_ (no output, should return zero) -- Thanks, ~Nick Desaulniers
Re: [PATCH] x86/purgatory: strip debug info
On Fri, Jul 31, 2020 at 7:11 AM Nick Desaulniers wrote: > > On Thu, Jul 30, 2020 at 1:27 AM Pingfan Liu wrote: > > > > It is useless to keep debug info in purgatory. And discarding them saves > > about 200K space. > > > > Original: > > 259080 kexec-purgatory.o > > Stripped: > >29152 kexec-purgatory.o > > > > Signed-off-by: Pingfan Liu > > Cc: Thomas Gleixner > > Cc: Ingo Molnar > > Cc: Borislav Petkov > > Cc: "H. Peter Anvin" > > Cc: Hans de Goede > > Cc: Nick Desaulniers > > Cc: Arvind Sankar > > Cc: Steve Wahl > > Cc: linux-kernel@vger.kernel.org > > To: x...@kernel.org > > I don't see any code in > arch/x86/purgatory/ > arch/x86/include/asm/purgatory.h > include/linux/purgatory.h > include/uapi/linux/kexec.h > kernel/kexec* > include/linux/kexec.h > include/linux/crash_dump.h > kernel/crash_dump.c > arch/x86/kernel/crash* > https://github.com/horms/kexec-tools/tree/master/kexec/arch/x86_64 > that mentions any kind of debug info section. I'm not sure what you'd > do with the debug info anyway for this binary. So I suspect this > information should ok to discard. > > This works, but it might be faster to build to not generate the > compile info in the first place via compile flag `-g0`, which could be > added `ifdef CONFIG_DEBUG_INFO` or even just unconditionally. That > way we're not doing additional work to generate debug info, then > additional work to throw it away. What about: diff --git a/arch/x86/purgatory/Makefile b/arch/x86/purgatory/Makefile index 088bd76..7e1ad9e 100644 --- a/arch/x86/purgatory/Makefile +++ b/arch/x86/purgatory/Makefile @@ -32,7 +32,7 @@ KCOV_INSTRUMENT := n # make up the standalone purgatory.ro PURGATORY_CFLAGS_REMOVE := -mcmodel=kernel -PURGATORY_CFLAGS := -mcmodel=large -ffreestanding -fno-zero-initialized-in-bss +PURGATORY_CFLAGS := -mcmodel=large -ffreestanding -fno-zero-initialized-in-bss -g0 PURGATORY_CFLAGS += $(DISABLE_STACKLEAK_PLUGIN) -DDISABLE_BRANCH_PROFILING PURGATORY_CFLAGS += $(call cc-option,-fno-stack-protector) Thanks, Pingfan
Re: [PATCH] x86/purgatory: strip debug info
On Thu, Jul 30, 2020 at 1:27 AM Pingfan Liu wrote: > > It is useless to keep debug info in purgatory. And discarding them saves > about 200K space. > > Original: > 259080 kexec-purgatory.o > Stripped: >29152 kexec-purgatory.o > > Signed-off-by: Pingfan Liu > Cc: Thomas Gleixner > Cc: Ingo Molnar > Cc: Borislav Petkov > Cc: "H. Peter Anvin" > Cc: Hans de Goede > Cc: Nick Desaulniers > Cc: Arvind Sankar > Cc: Steve Wahl > Cc: linux-kernel@vger.kernel.org > To: x...@kernel.org I don't see any code in arch/x86/purgatory/ arch/x86/include/asm/purgatory.h include/linux/purgatory.h include/uapi/linux/kexec.h kernel/kexec* include/linux/kexec.h include/linux/crash_dump.h kernel/crash_dump.c arch/x86/kernel/crash* https://github.com/horms/kexec-tools/tree/master/kexec/arch/x86_64 that mentions any kind of debug info section. I'm not sure what you'd do with the debug info anyway for this binary. So I suspect this information should ok to discard. This works, but it might be faster to build to not generate the compile info in the first place via compile flag `-g0`, which could be added `ifdef CONFIG_DEBUG_INFO` or even just unconditionally. That way we're not doing additional work to generate debug info, then additional work to throw it away. > --- > arch/x86/purgatory/Makefile | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/arch/x86/purgatory/Makefile b/arch/x86/purgatory/Makefile > index 088bd76..4340ae6 100644 > --- a/arch/x86/purgatory/Makefile > +++ b/arch/x86/purgatory/Makefile > @@ -16,7 +16,7 @@ CFLAGS_sha256.o := -D__DISABLE_EXPORTS > > # When linking purgatory.ro with -r unresolved symbols are not checked, > # also link a purgatory.chk binary without -r to check for unresolved > symbols. > -PURGATORY_LDFLAGS := -e purgatory_start -nostdlib -z nodefaultlib > +PURGATORY_LDFLAGS := -e purgatory_start -nostdlib -z nodefaultlib -S > LDFLAGS_purgatory.ro := -r $(PURGATORY_LDFLAGS) > LDFLAGS_purgatory.chk := $(PURGATORY_LDFLAGS) > targets += purgatory.ro purgatory.chk > -- > 2.7.5 > -- Thanks, ~Nick Desaulniers
[PATCH] x86/purgatory: strip debug info
It is useless to keep debug info in purgatory. And discarding them saves about 200K space. Original: 259080 kexec-purgatory.o Stripped: 29152 kexec-purgatory.o Signed-off-by: Pingfan Liu Cc: Thomas Gleixner Cc: Ingo Molnar Cc: Borislav Petkov Cc: "H. Peter Anvin" Cc: Hans de Goede Cc: Nick Desaulniers Cc: Arvind Sankar Cc: Steve Wahl Cc: linux-kernel@vger.kernel.org To: x...@kernel.org --- arch/x86/purgatory/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/x86/purgatory/Makefile b/arch/x86/purgatory/Makefile index 088bd76..4340ae6 100644 --- a/arch/x86/purgatory/Makefile +++ b/arch/x86/purgatory/Makefile @@ -16,7 +16,7 @@ CFLAGS_sha256.o := -D__DISABLE_EXPORTS # When linking purgatory.ro with -r unresolved symbols are not checked, # also link a purgatory.chk binary without -r to check for unresolved symbols. -PURGATORY_LDFLAGS := -e purgatory_start -nostdlib -z nodefaultlib +PURGATORY_LDFLAGS := -e purgatory_start -nostdlib -z nodefaultlib -S LDFLAGS_purgatory.ro := -r $(PURGATORY_LDFLAGS) LDFLAGS_purgatory.chk := $(PURGATORY_LDFLAGS) targets += purgatory.ro purgatory.chk -- 2.7.5