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

H.J. Lu hjl.tools@gmail.com
Tue Aug 31 13:26:03 GMT 2021


On Tue, Aug 31, 2021 at 5:48 AM Florian Weimer <fweimer@redhat.com> wrote:
>
> * 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.

Fixed in the next version.

Thanks.

> Thanks,
> Florian
>


-- 
H.J.


More information about the Libc-alpha mailing list