[PATCH -next] arm32/boot/compressed: Force hidden visibility for all symbol references

Yuntao Liu posted 1 patch 1 year, 3 months ago
arch/arm/boot/compressed/Makefile | 3 +++
1 file changed, 3 insertions(+)
[PATCH -next] arm32/boot/compressed: Force hidden visibility for all symbol references
Posted by Yuntao Liu 1 year, 3 months ago
Eliminate all GOT entries in the decompressor binary, by forcing hidden
visibility for all symbol references, which informs the compiler that
such references will be resolved at link time without the need for
allocating GOT entries.

Include linux/hidden.h in Makefile, like x86, for the
hidden visibility attribute.

Signed-off-by: Yuntao Liu <liuyuntao12@huawei.com>
---
 arch/arm/boot/compressed/Makefile | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/arch/arm/boot/compressed/Makefile b/arch/arm/boot/compressed/Makefile
index 945b5975fce2..d8a17760ad29 100644
--- a/arch/arm/boot/compressed/Makefile
+++ b/arch/arm/boot/compressed/Makefile
@@ -93,6 +93,9 @@ targets       := vmlinux vmlinux.lds piggy_data piggy.o \
 		 head.o $(OBJS)
 
 KBUILD_CFLAGS += -DDISABLE_BRANCH_PROFILING
+ifneq ($(CONFIG_LD_IS_LLD),y)
+KBUILD_CFLAGS += -include $(srctree)/include/linux/hidden.h
+endif
 
 ccflags-y := -fpic $(call cc-option,-mno-single-pic-base,) -fno-builtin \
 	     -I$(srctree)/scripts/dtc/libfdt -fno-stack-protector \
-- 
2.34.1
Re: [PATCH -next] arm32/boot/compressed: Force hidden visibility for all symbol references
Posted by Russell King (Oracle) 1 year, 3 months ago
On Fri, Jan 24, 2025 at 08:20:30AM +0000, Yuntao Liu wrote:
> Eliminate all GOT entries in the decompressor binary, by forcing hidden
> visibility for all symbol references, which informs the compiler that
> such references will be resolved at link time without the need for
> allocating GOT entries.

One question. Why.

I don't think this is desirable. We don't want the linker to fully
resolve references at link time - we specifically want a GOT so that
at run time the decompressor can resolve the references irrespective
of where the decompressor is loaded - in other words, allowing the
decompressor to be loaded anywhere in memory.

We do not link the decompressor for any specific address, and thus
the only way the decompressor can work is by fixing up the GOT.

Unless you can demonstrate that the GOT is no longer required, then
based on your commit description... hard NAK.

-- 
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTP is here! 80Mbps down 10Mbps up. Decent connectivity at last!
Re: [PATCH -next] arm32/boot/compressed: Force hidden visibility for all symbol references
Posted by Ard Biesheuvel 1 year, 3 months ago
On Fri, 24 Jan 2025 at 09:31, Yuntao Liu <liuyuntao12@huawei.com> wrote:
>
> Eliminate all GOT entries in the decompressor binary, by forcing hidden
> visibility for all symbol references, which informs the compiler that
> such references will be resolved at link time without the need for
> allocating GOT entries.
>
> Include linux/hidden.h in Makefile, like x86, for the
> hidden visibility attribute.
>
> Signed-off-by: Yuntao Liu <liuyuntao12@huawei.com>

Doesn't this break appended DTB?

> ---
>  arch/arm/boot/compressed/Makefile | 3 +++
>  1 file changed, 3 insertions(+)
>
> diff --git a/arch/arm/boot/compressed/Makefile b/arch/arm/boot/compressed/Makefile
> index 945b5975fce2..d8a17760ad29 100644
> --- a/arch/arm/boot/compressed/Makefile
> +++ b/arch/arm/boot/compressed/Makefile
> @@ -93,6 +93,9 @@ targets       := vmlinux vmlinux.lds piggy_data piggy.o \
>                  head.o $(OBJS)
>
>  KBUILD_CFLAGS += -DDISABLE_BRANCH_PROFILING
> +ifneq ($(CONFIG_LD_IS_LLD),y)
> +KBUILD_CFLAGS += -include $(srctree)/include/linux/hidden.h
> +endif
>

Why not for LLD?


>  ccflags-y := -fpic $(call cc-option,-mno-single-pic-base,) -fno-builtin \
>              -I$(srctree)/scripts/dtc/libfdt -fno-stack-protector \
> --
> 2.34.1
>
Re: [PATCH -next] arm32/boot/compressed: Force hidden visibility for all symbol references
Posted by Russell King (Oracle) 1 year, 3 months ago
On Fri, Jan 24, 2025 at 03:00:10PM +0100, Ard Biesheuvel wrote:
> On Fri, 24 Jan 2025 at 09:31, Yuntao Liu <liuyuntao12@huawei.com> wrote:
> >
> > Eliminate all GOT entries in the decompressor binary, by forcing hidden
> > visibility for all symbol references, which informs the compiler that
> > such references will be resolved at link time without the need for
> > allocating GOT entries.
> >
> > Include linux/hidden.h in Makefile, like x86, for the
> > hidden visibility attribute.
> >
> > Signed-off-by: Yuntao Liu <liuyuntao12@huawei.com>
> 
> Doesn't this break appended DTB?

Yes. It also breaks ZBOOT_ROM=y as well.

-- 
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTP is here! 80Mbps down 10Mbps up. Decent connectivity at last!