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 |
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 --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
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