diff mbox series

arm64: drop linker script hack to hide __efistub_ symbols

Message ID 20181130113558.15198-1-ard.biesheuvel@linaro.org
State Accepted
Commit dd6846d774693bfa27d7db4dae5ea67dfe373fa1
Headers show
Series arm64: drop linker script hack to hide __efistub_ symbols | expand

Commit Message

Ard Biesheuvel Nov. 30, 2018, 11:35 a.m. UTC
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@google.com>
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>

---
 arch/arm64/kernel/image.h | 46 +++++++++++++++------------------------
 1 file changed, 18 insertions(+), 28 deletions(-)

-- 
2.19.1

Comments

Nick Desaulniers Dec. 1, 2018, 12:20 a.m. UTC | #1
On Fri, Nov 30, 2018 at 3:36 AM Ard Biesheuvel
<ard.biesheuvel@linaro.org> 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@google.com>

> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>


Tested-by: Nick Desaulniers <ndesaulniers@google.com>


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
diff mbox series

Patch

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