Re: [PATCH] arm64: drop linker script hack to hide __efistub_ symbols

From: Nick Desaulniers
Date: Fri Nov 30 2018 - 19:20:59 EST


On Fri, Nov 30, 2018 at 3:36 AM Ard Biesheuvel
<ard.biesheuvel@xxxxxxxxxx> wrote:
>
> Commit 1212f7a16af4 ("scripts/kallsyms: filter arm64's __efistub_
> symbols") updated the kallsyms code to filter out symbols with
> the __efistub_ prefix explicitly, so we no longer require the
> hack in our linker script to emit them as absolute symbols.
>
> Cc: Nick Desaulniers <ndesaulniers@xxxxxxxxxx>
> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@xxxxxxxxxx>

Tested-by: Nick Desaulniers <ndesaulniers@xxxxxxxxxx>

Tested linking with bfd and booting in qemu. Thanks Ard! lld still
has some further bugs for us to work out, but this should help
simplify things for us.

> ---
> arch/arm64/kernel/image.h | 46 +++++++++++++++------------------------
> 1 file changed, 18 insertions(+), 28 deletions(-)
>
> diff --git a/arch/arm64/kernel/image.h b/arch/arm64/kernel/image.h
> index a820ed07fb80..8da289dc843a 100644
> --- a/arch/arm64/kernel/image.h
> +++ b/arch/arm64/kernel/image.h
> @@ -75,16 +75,6 @@
>
> __efistub_stext_offset = stext - _text;
>
> -/*
> - * Prevent the symbol aliases below from being emitted into the kallsyms
> - * table, by forcing them to be absolute symbols (which are conveniently
> - * ignored by scripts/kallsyms) rather than section relative symbols.
> - * The distinction is only relevant for partial linking, and only for symbols
> - * that are defined within a section declaration (which is not the case for
> - * the definitions below) so the resulting values will be identical.
> - */
> -#define KALLSYMS_HIDE(sym) ABSOLUTE(sym)
> -
> /*
> * The EFI stub has its own symbol namespace prefixed by __efistub_, to
> * isolate it from the kernel proper. The following symbols are legally
> @@ -94,28 +84,28 @@ __efistub_stext_offset = stext - _text;
> * linked at. The routines below are all implemented in assembler in a
> * position independent manner
> */
> -__efistub_memcmp = KALLSYMS_HIDE(__pi_memcmp);
> -__efistub_memchr = KALLSYMS_HIDE(__pi_memchr);
> -__efistub_memcpy = KALLSYMS_HIDE(__pi_memcpy);
> -__efistub_memmove = KALLSYMS_HIDE(__pi_memmove);
> -__efistub_memset = KALLSYMS_HIDE(__pi_memset);
> -__efistub_strlen = KALLSYMS_HIDE(__pi_strlen);
> -__efistub_strnlen = KALLSYMS_HIDE(__pi_strnlen);
> -__efistub_strcmp = KALLSYMS_HIDE(__pi_strcmp);
> -__efistub_strncmp = KALLSYMS_HIDE(__pi_strncmp);
> -__efistub_strrchr = KALLSYMS_HIDE(__pi_strrchr);
> -__efistub___flush_dcache_area = KALLSYMS_HIDE(__pi___flush_dcache_area);
> +__efistub_memcmp = __pi_memcmp;
> +__efistub_memchr = __pi_memchr;
> +__efistub_memcpy = __pi_memcpy;
> +__efistub_memmove = __pi_memmove;
> +__efistub_memset = __pi_memset;
> +__efistub_strlen = __pi_strlen;
> +__efistub_strnlen = __pi_strnlen;
> +__efistub_strcmp = __pi_strcmp;
> +__efistub_strncmp = __pi_strncmp;
> +__efistub_strrchr = __pi_strrchr;
> +__efistub___flush_dcache_area = __pi___flush_dcache_area;
>
> #ifdef CONFIG_KASAN
> -__efistub___memcpy = KALLSYMS_HIDE(__pi_memcpy);
> -__efistub___memmove = KALLSYMS_HIDE(__pi_memmove);
> -__efistub___memset = KALLSYMS_HIDE(__pi_memset);
> +__efistub___memcpy = __pi_memcpy;
> +__efistub___memmove = __pi_memmove;
> +__efistub___memset = __pi_memset;
> #endif
>
> -__efistub__text = KALLSYMS_HIDE(_text);
> -__efistub__end = KALLSYMS_HIDE(_end);
> -__efistub__edata = KALLSYMS_HIDE(_edata);
> -__efistub_screen_info = KALLSYMS_HIDE(screen_info);
> +__efistub__text = _text;
> +__efistub__end = _end;
> +__efistub__edata = _edata;
> +__efistub_screen_info = screen_info;
>
> #endif
>
> --
> 2.19.1
>


--
Thanks,
~Nick Desaulniers