[PATCH] Fix the error of GET_DATA_POINTER for aarch64 on linux

Jussi Kivilinna jussi.kivilinna at iki.fi
Wed May 11 19:14:04 CEST 2022


Hello,

On 10.5.2022 15.49, Tianjia Zhang via Gcrypt-devel wrote:
> * cipher/asm-common-aarch64.h: Use same macro GET_DATA_POINTER() for
>    linux and windows.
> --
> 
> For multiple labels defined in the same consts object on Linux,
> except the first label, an error result will be obtained when taking
> the addresss of other labels through GET_DATA_POINTER(). The error
> address is the same as the first label. An error fragment code after
> compilation is as follows:
> 
>    0x0000fffff7f18be4 <+12>:	adrp	x6, 0xfffff7fb8000
>    0x0000fffff7f18be8 <+16>:	ldr	x6, [x6, #3216]
>    0x0000fffff7f18bec <+20>:	ld1b	{z24.b}, p0/z, [x6]
>    0x0000fffff7f18bf0 <+24>:	adrp	x6, 0xfffff7fb8000
>    0x0000fffff7f18bf4 <+28>:	ldr	x6, [x6, #3216]
>    0x0000fffff7f18bf8 <+32>:	ldr	p1, [x6]
> 
> This patch fixes this problem by using the ADRP/ADD instruction.
> 
> Signed-off-by: Tianjia Zhang <tianjia.zhang at linux.alibaba.com>
> ---
>   cipher/asm-common-aarch64.h | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/cipher/asm-common-aarch64.h b/cipher/asm-common-aarch64.h
> index d3f7801c7661..b29479a32157 100644
> --- a/cipher/asm-common-aarch64.h
> +++ b/cipher/asm-common-aarch64.h
> @@ -33,7 +33,7 @@
>   #define GET_DATA_POINTER(reg, name) \
>   	adrp    reg, name at GOTPAGE ; \
>   	add     reg, reg, name at GOTPAGEOFF ;
> -#elif defined(_WIN32)
> +#elif defined(__linux__) || defined(_WIN32)
>   #define GET_DATA_POINTER(reg, name) \
>   	adrp    reg, name ; \
>   	add     reg, reg, #:lo12:name ;

It might be better to rename GET_DATA_POINTER to GET_LOCAL_POINTER,
remove the ifdefs and just use:
   #define GET_LOCAL_POINTER(reg, name) \
     adrp    reg, name ; \
     add     reg, reg, #:lo12:name ;

The Apple variant is likely to be broken in the same way as the
Linux variant. If we later need support for external objects,
we can add GET_EXTERN_POINTER macro.

-Jussi



More information about the Gcrypt-devel mailing list