[PATCH 1/3] arm64: asm: Add new-style position independent function annotations

Will Deacon will at kernel.org
Tue Jan 7 06:44:08 PST 2020


On Mon, Jan 06, 2020 at 07:58:16PM +0000, Mark Brown wrote:
> As part of an effort to make the annotations in assembly code clearer and
> more consistent new macros have been introduced, including replacements
> for ENTRY() and ENDPROC().
> 
> On arm64 we have ENDPIPROC(), a custom version of ENDPROC() which is
> used for code that will need to run in position independent environments
> like EFI, it creates an alias for the function with the prefix __pi_ and
> then emits the standard ENDPROC. Add new-style macros to replace this
> which expand to the standard SYM_FUNC_*() and SYM_FUNC_ALIAS_*(),
> resulting in the same object code. These are added in linkage.h for
> consistency with where the generic assembler code has its macros.
> 
> Signed-off-by: Mark Brown <broonie at kernel.org>
> ---
>  arch/arm64/include/asm/linkage.h | 16 ++++++++++++++++
>  1 file changed, 16 insertions(+)
> 
> diff --git a/arch/arm64/include/asm/linkage.h b/arch/arm64/include/asm/linkage.h
> index 1b266292f0be..23944ce14969 100644
> --- a/arch/arm64/include/asm/linkage.h
> +++ b/arch/arm64/include/asm/linkage.h
> @@ -4,4 +4,20 @@
>  #define __ALIGN		.align 2
>  #define __ALIGN_STR	".align 2"
>  
> +/*
> + * Annotate a function as position independent, i.e., safe to be called before
> + * the kernel virtual mapping is activated.
> + */
> +#define SYM_FUNC_START_PI(x) \
> +		SYM_FUNC_START_ALIAS(__pi_##x) ASM_NL \
> +		SYM_FUNC_START(x)
> +
> +#define SYM_FUNC_START_PI_WEAK(x) \
> +		SYM_FUNC_START_ALIAS(__pi_##x) ASM_NL \
> +		SYM_FUNC_START_WEAK(x)

Naming's hard, but I think this is particularly bad because it reads to me
like it's declaring a weak, position-independent symbol, whereas the weak
symbol is actually the version without the "__pi_" prefix. Maybe
SYM_FUNC_START_WEAK_PI() is a tiny bit better? Hrm.

Will



More information about the linux-arm-kernel mailing list