diff mbox series

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

Message ID 20250124082030.764417-1-liuyuntao12@huawei.com (mailing list archive)
State New
Headers show
Series [-next] arm32/boot/compressed: Force hidden visibility for all symbol references | expand

Commit Message

Yuntao Liu Jan. 24, 2025, 8:20 a.m. UTC
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(+)

Comments

Ard Biesheuvel Jan. 24, 2025, 2 p.m. UTC | #1
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
>
Russell King (Oracle) Jan. 24, 2025, 3:25 p.m. UTC | #2
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.
Russell King (Oracle) Jan. 24, 2025, 3:32 p.m. UTC | #3
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.
diff mbox series

Patch

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 \