[PATCH v6 1/2] Add declare_object_symbol_alias for assembly codes [BZ #28128]

Florian Weimer fweimer@redhat.com
Tue Aug 31 12:48:14 GMT 2021


* H. J. Lu:

> diff --git a/include/libc-symbols.h b/include/libc-symbols.h
> index d41ecf4384..1678071d77 100644
> --- a/include/libc-symbols.h
> +++ b/include/libc-symbols.h
> @@ -324,14 +324,16 @@ for linking")
>     This is only necessary when defining something in assembly, or playing
>     funny alias games where the size should be other than what the compiler
>     thinks it is.  */
> -#define declare_symbol_alias(symbol, original, type, size) \
> -  declare_symbol_alias_1 (symbol, original, type, size)
>  #ifdef __ASSEMBLER__
> -# define declare_symbol_alias_1(symbol, original, type, size) \
> +# define declare_object_symbol_alias(symbol, original, size) \
> +  declare_object_symbol_alias_1 (symbol, original, size)
> +# define declare_object_symbol_alias_1(symbol, original, s_size) \
>     strong_alias (original, symbol); \
> -   .type C_SYMBOL_NAME (symbol), %##type; \
> -   .size C_SYMBOL_NAME (symbol), size
> +   .type C_SYMBOL_NAME (symbol), %object; \
> +   .size C_SYMBOL_NAME (symbol), s_size
>  #else /* Not __ASSEMBLER__.  */
> +# define declare_symbol_alias(symbol, original, type, size) \
> +  declare_symbol_alias_1 (symbol, original, type, size)
>  # define declare_symbol_alias_1(symbol, original, type, size) \
>     asm (".globl " __SYMBOL_PREFIX #symbol \
>  	"\n\t" declare_symbol_alias_1_alias (symbol, original) \

(trimming Cc: list)

This change needs to use ASM_LINE_SEP, otherwise part of the directives
turn into comments on arc and hppa, leading to ABI breakage.

Something like this:

diff --git a/include/libc-symbols.h b/include/libc-symbols.h
index 1678071d77..2b47144d6f 100644
--- a/include/libc-symbols.h
+++ b/include/libc-symbols.h
@@ -328,8 +328,8 @@ for linking")
 # define declare_object_symbol_alias(symbol, original, size) \
   declare_object_symbol_alias_1 (symbol, original, size)
 # define declare_object_symbol_alias_1(symbol, original, s_size) \
-   strong_alias (original, symbol); \
-   .type C_SYMBOL_NAME (symbol), %object; \
+   strong_alias (original, symbol) ASM_LINE_SEP \
+   .type C_SYMBOL_NAME (symbol), %object ASM_LINE_SEP \
    .size C_SYMBOL_NAME (symbol), s_size
 #else /* Not __ASSEMBLER__.  */
 # define declare_symbol_alias(symbol, original, type, size) \

With this change, the expected ABI is produced.

Thanks,
Florian



More information about the Libc-alpha mailing list