This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH] powerpc: Remove HAVE_ASM_GLOBAL_DOT_NAME define
- From: Adhemerval Zanella <azanella at linux dot vnet dot ibm dot com>
- To: libc-alpha at sourceware dot org
- Date: Mon, 09 Mar 2015 16:51:02 -0300
- Subject: Re: [PATCH] powerpc: Remove HAVE_ASM_GLOBAL_DOT_NAME define
- Authentication-results: sourceware.org; auth=none
- References: <54D124C1 dot 3010208 at linux dot vnet dot ibm dot com> <54D8B844 dot 2070507 at linux dot vnet dot ibm dot com> <54F5FED1 dot 6080001 at linux dot vnet dot ibm dot com>
Although this touch various non-powerpc files, this change is only used
on powerpc. If nobody objects I will commit it today or later tomorrow.
On 03-03-2015 15:34, Adhemerval Zanella wrote:
> Ping.
>
> On 09-02-2015 11:38, Adhemerval Zanella wrote:
>> Ping.
>>
>> On 03-02-2015 17:42, Adhemerval Zanella wrote:
>>> With AIX port deprecated there is no need to check/define
>>> HAVE_ASM_GLOBAL_DOT_NAME anymore since the current minimum binutils
>>> supported (2.22) does not emit global symbol with dot.
>>>
>>> This patch removes all the HAVE_ASM_GLOBAL_DOT_NAME definition and
>>> checks for powerpc64 port.
>>>
>>> Checked on powerpc64.
>>>
>>> --
>>>
>>> * config.h.in [HAVE_ASM_GLOBAL_DOT_NAME]: Remove define.
>>> * include/libc-symbols.h [HAVE_ASM_GLOBAL_DOT_NAME] (strong_alias):
>>> Remove define.
>>> [HAVE_ASM_GLOBAL_DOT_NAME] (strong_data_alias): Likewise.
>>> [HAVE_ASM_GLOBAL_DOT_NAME] (weak_alias): Likewise.
>>> [HAVE_ASM_GLOBAL_DOT_NAME] (_symbol_version): Likewise.
>>> [HAVE_ASM_GLOBAL_DOT_NAME] (_default_symbol_version): Likewise.
>>> [HAVE_ASM_GLOBAL_DOT_NAME] (HIDDEN_JUMPTARGET): Likewise.
>>> * nptl_db/db-symbols.h [HAVE_ASM_GLOBAL_DOT_NAME] (DOT): Remove
>>> define.
>>> * nptl_db/td_symbol_list.c (td_lookup): Remove
>>> HAVE_ASM_GLOBAL_DOT_NAME code.
>>> * sysdeps/powerpc/powerpc64/configure.ac: Remove
>>> HAVE_ASM_GLOBAL_DOT_NAME check.
>>> * sysdeps/powerpc/powerpc64/configure: Regenerate.
>>> * sysdeps/powerpc/powerpc64/sysdep.h [HAVE_ASM_GLOBAL_DOT_NAME]
>>> (DOT_LABEL): Remove define.
>>> [HAVE_ASM_GLOBAL_DOT_NAME] (BODY_LABEL): Likewise.
>>> [HAVE_ASM_GLOBAL_DOT_NAME] (ENTRY_2): Likewise.
>>> [HAVE_ASM_GLOBAL_DOT_NAME] (END_2): Likewise.
>>> * sysdeps/powerpc/powerpc64/tls-macros.h [HAVE_ASM_GLOBAL_DOT_NAME]
>>> (__TLS_GET_ADDR): Likewise.
>>> * sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h
>>> [HAVE_ASM_GLOBAL_DOT_NAME] (DASHDASHPFX): Likewise.
>>>
>>> --
>>>
>>> diff --git a/config.h.in b/config.h.in
>>> index 695ca35..a1ae478 100644
>>> --- a/config.h.in
>>> +++ b/config.h.in
>>> @@ -37,9 +37,6 @@
>>> /* Define if the assembler supports the gnu_unique_object symbol type. */
>>> #undef HAVE_ASM_UNIQUE_OBJECT
>>>
>>> -/* Define a symbol_name as a global .symbol_name for ld. */
>>> -#undef HAVE_ASM_GLOBAL_DOT_NAME
>>> -
>>> /* On powerpc64, use overlapping .opd entries. */
>>> #undef USE_PPC64_OVERLAPPING_OPD
>>>
>>> diff --git a/include/libc-symbols.h b/include/libc-symbols.h
>>> index 2da0ab4..ca3fe00 100644
>>> --- a/include/libc-symbols.h
>>> +++ b/include/libc-symbols.h
>>> @@ -96,17 +96,6 @@
>>> # define ASM_LINE_SEP ;
>>> #endif
>>>
>>> -#ifdef HAVE_ASM_GLOBAL_DOT_NAME
>>> -# ifndef C_SYMBOL_DOT_NAME
>>> -# if defined __GNUC__ && defined __GNUC_MINOR__ \
>>> - && (__GNUC__ << 16) + __GNUC_MINOR__ >= (3 << 16) + 1
>>> -# define C_SYMBOL_DOT_NAME(name) .name
>>> -# else
>>> -# define C_SYMBOL_DOT_NAME(name) .##name
>>> -# endif
>>> -# endif
>>> -#endif
>>> -
>>> #ifndef __ASSEMBLER__
>>> /* GCC understands weak symbols and aliases; use its interface where
>>> possible, instead of embedded assembly language. */
>>> @@ -142,64 +131,28 @@
>>> #else /* __ASSEMBLER__ */
>>>
>>> # ifdef HAVE_ASM_SET_DIRECTIVE
>>> -# ifdef HAVE_ASM_GLOBAL_DOT_NAME
>>> -# define strong_alias(original, alias) \
>>> - .globl C_SYMBOL_NAME (alias) ASM_LINE_SEP \
>>> - .set C_SYMBOL_NAME (alias),C_SYMBOL_NAME (original) ASM_LINE_SEP \
>>> - .globl C_SYMBOL_DOT_NAME (alias) ASM_LINE_SEP \
>>> - .set C_SYMBOL_DOT_NAME (alias),C_SYMBOL_DOT_NAME (original)
>>> -# define strong_data_alias(original, alias) \
>>> - .globl C_SYMBOL_NAME (alias) ASM_LINE_SEP \
>>> - .set C_SYMBOL_NAME (alias),C_SYMBOL_NAME (original)
>>> -# else
>>> -# define strong_alias(original, alias) \
>>> +# define strong_alias(original, alias) \
>>> .globl C_SYMBOL_NAME (alias) ASM_LINE_SEP \
>>> .set C_SYMBOL_NAME (alias),C_SYMBOL_NAME (original)
>>> -# define strong_data_alias(original, alias) strong_alias(original, alias)
>>> -# endif
>>> +# define strong_data_alias(original, alias) strong_alias(original, alias)
>>> # else
>>> -# ifdef HAVE_ASM_GLOBAL_DOT_NAME
>>> -# define strong_alias(original, alias) \
>>> - .globl C_SYMBOL_NAME (alias) ASM_LINE_SEP \
>>> - C_SYMBOL_NAME (alias) = C_SYMBOL_NAME (original) ASM_LINE_SEP \
>>> - .globl C_SYMBOL_DOT_NAME (alias) ASM_LINE_SEP \
>>> - C_SYMBOL_DOT_NAME (alias) = C_SYMBOL_DOT_NAME (original)
>>> -# define strong_data_alias(original, alias) \
>>> +# define strong_alias(original, alias) \
>>> .globl C_SYMBOL_NAME (alias) ASM_LINE_SEP \
>>> C_SYMBOL_NAME (alias) = C_SYMBOL_NAME (original)
>>> -# else
>>> -# define strong_alias(original, alias) \
>>> - .globl C_SYMBOL_NAME (alias) ASM_LINE_SEP \
>>> - C_SYMBOL_NAME (alias) = C_SYMBOL_NAME (original)
>>> -# define strong_data_alias(original, alias) strong_alias(original, alias)
>>> -# endif
>>> +# define strong_data_alias(original, alias) strong_alias(original, alias)
>>> # endif
>>>
>>> # ifdef HAVE_ASM_WEAKEXT_DIRECTIVE
>>> -# ifdef HAVE_ASM_GLOBAL_DOT_NAME
>>> -# define weak_alias(original, alias) \
>>> - .weakext C_SYMBOL_NAME (alias), C_SYMBOL_NAME (original) ASM_LINE_SEP \
>>> - .weakext C_SYMBOL_DOT_NAME (alias), C_SYMBOL_DOT_NAME (original)
>>> -# else
>>> -# define weak_alias(original, alias) \
>>> +# define weak_alias(original, alias) \
>>> .weakext C_SYMBOL_NAME (alias), C_SYMBOL_NAME (original)
>>> -# endif
>>> # define weak_extern(symbol) \
>>> .weakext C_SYMBOL_NAME (symbol)
>>>
>>> # else /* ! HAVE_ASM_WEAKEXT_DIRECTIVE */
>>>
>>> -# ifdef HAVE_ASM_GLOBAL_DOT_NAME
>>> -# define weak_alias(original, alias) \
>>> - .weak C_SYMBOL_NAME (alias) ASM_LINE_SEP \
>>> - C_SYMBOL_NAME (alias) = C_SYMBOL_NAME (original) ASM_LINE_SEP \
>>> - .weak C_SYMBOL_DOT_NAME (alias) ASM_LINE_SEP \
>>> - C_SYMBOL_DOT_NAME (alias) = C_SYMBOL_DOT_NAME (original)
>>> -# else
>>> -# define weak_alias(original, alias) \
>>> +# define weak_alias(original, alias) \
>>> .weak C_SYMBOL_NAME (alias) ASM_LINE_SEP \
>>> C_SYMBOL_NAME (alias) = C_SYMBOL_NAME (original)
>>> -# endif
>>>
>>> # define weak_extern(symbol) \
>>> .weak C_SYMBOL_NAME (symbol)
>>> @@ -358,33 +311,15 @@ for linking")
>>> # define default_symbol_version(real, name, version) \
>>> _default_symbol_version(real, name, version)
>>> # ifdef __ASSEMBLER__
>>> -# ifdef HAVE_ASM_GLOBAL_DOT_NAME
>>> -# define _symbol_version(real, name, version) \
>>> - .symver real, name##@##version ASM_LINE_SEP \
>>> - .symver C_SYMBOL_DOT_NAME(real), C_SYMBOL_DOT_NAME(name##@##version)
>>> -# define _default_symbol_version(real, name, version) \
>>> - .symver real, name##@##@##version ASM_LINE_SEP \
>>> - .symver C_SYMBOL_DOT_NAME(real), C_SYMBOL_DOT_NAME(name##@##@##version)
>>> -# else
>>> -# define _symbol_version(real, name, version) \
>>> +# define _symbol_version(real, name, version) \
>>> .symver real, name##@##version
>>> -# define _default_symbol_version(real, name, version) \
>>> +# define _default_symbol_version(real, name, version) \
>>> .symver real, name##@##@##version
>>> -# endif
>>> # else
>>> -# ifdef HAVE_ASM_GLOBAL_DOT_NAME
>>> -# define _symbol_version(real, name, version) \
>>> - __asm__ (".symver " #real "," #name "@" #version "\n\t" \
>>> - ".symver ." #real ",." #name "@" #version)
>>> -# define _default_symbol_version(real, name, version) \
>>> - __asm__ (".symver " #real "," #name "@@" #version "\n\t" \
>>> - ".symver ." #real ",." #name "@@" #version)
>>> -# else
>>> -# define _symbol_version(real, name, version) \
>>> +# define _symbol_version(real, name, version) \
>>> __asm__ (".symver " #real "," #name "@" #version)
>>> -# define _default_symbol_version(real, name, version) \
>>> +# define _default_symbol_version(real, name, version) \
>>> __asm__ (".symver " #real "," #name "@@" #version)
>>> -# endif
>>> # endif
>>> #else
>>> # define symbol_version(real, name, version)
>>> @@ -527,11 +462,7 @@ for linking")
>>> # define hidden_data_def(name) strong_data_alias (name, __GI_##name)
>>> # define hidden_data_weak(name) hidden_data_def (name)
>>> # define hidden_data_ver(local, name) strong_data_alias (local, __GI_##name)
>>> -# ifdef HAVE_ASM_GLOBAL_DOT_NAME
>>> -# define HIDDEN_JUMPTARGET(name) .__GI_##name
>>> -# else
>>> -# define HIDDEN_JUMPTARGET(name) __GI_##name
>>> -# endif
>>> +# define HIDDEN_JUMPTARGET(name) __GI_##name
>>> # endif
>>> #else
>>> # ifndef __ASSEMBLER__
>>> diff --git a/nptl_db/db-symbols.h b/nptl_db/db-symbols.h
>>> index 47fe951..0f27e67 100644
>>> --- a/nptl_db/db-symbols.h
>>> +++ b/nptl_db/db-symbols.h
>>> @@ -16,11 +16,7 @@
>>> License along with the GNU C Library; if not, see
>>> <http://www.gnu.org/licenses/>. */
>>>
>>> -#ifdef HAVE_ASM_GLOBAL_DOT_NAME
>>> -# define DOT(x) .##x /* PPC64 requires . prefix on code symbols. */
>>> -#else
>>> -# define DOT(x) x /* No prefix. */
>>> -#endif
>>> +#define DOT(x) x /* No prefix. */
>>>
>>> #define STRINGIFY(name) STRINGIFY_1(name)
>>> #define STRINGIFY_1(name) #name
>>> diff --git a/nptl_db/td_symbol_list.c b/nptl_db/td_symbol_list.c
>>> index 6b14d36..6915ed7 100644
>>> --- a/nptl_db/td_symbol_list.c
>>> +++ b/nptl_db/td_symbol_list.c
>>> @@ -48,13 +48,5 @@ td_lookup (struct ps_prochandle *ps, int idx, psaddr_t *sym_addr)
>>> result = ps_pglobal_lookup (ps, LIBPTHREAD_SO, symbol_list_arr[idx],
>>> sym_addr);
>>>
>>> -#ifdef HAVE_ASM_GLOBAL_DOT_NAME
>>> - /* For PowerPC, 64-bit uses dot symbols but 32-bit does not.
>>> - We could be a 64-bit libthread_db debugging a 32-bit libpthread. */
>>> - if (result == PS_NOSYM && symbol_list_arr[idx][0] == '.')
>>> - result = ps_pglobal_lookup (ps, LIBPTHREAD_SO, &symbol_list_arr[idx][1],
>>> - sym_addr);
>>> -#endif
>>> -
>>> return result;
>>> }
>>> diff --git a/sysdeps/powerpc/powerpc64/configure b/sysdeps/powerpc/powerpc64/configure
>>> index 92ec607..d4deee7 100644
>>> --- a/sysdeps/powerpc/powerpc64/configure
>>> +++ b/sysdeps/powerpc/powerpc64/configure
>>> @@ -1,37 +1,6 @@
>>> # This file is generated from configure.ac by Autoconf. DO NOT EDIT!
>>> # Local configure fragment for sysdeps/powerpc/powerpc64.
>>>
>>> -# The Aix ld uses global .symbol_names instead of symbol_names
>>> -# and unfortunately early Linux PPC64 linkers use it as well.
>>> -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for support for omitting dot symbols" >&5
>>> -$as_echo_n "checking for support for omitting dot symbols... " >&6; }
>>> -if ${libc_cv_omit_dot_syms+:} false; then :
>>> - $as_echo_n "(cached) " >&6
>>> -else
>>> - libc_cv_omit_dot_syms=no
>>> -echo 'void foo (void) {}' > conftest.c
>>> -if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS -S conftest.c -o conftest.s 1>&5'
>>> - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
>>> - (eval $ac_try) 2>&5
>>> - ac_status=$?
>>> - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
>>> - test $ac_status = 0; }; }; then
>>> - if grep -w '\.foo' conftest.s > /dev/null; then
>>> - :
>>> - else
>>> - libc_cv_omit_dot_syms=yes
>>> - fi
>>> -fi
>>> -rm -f conftest.c conftest.s
>>> -
>>> -fi
>>> -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_omit_dot_syms" >&5
>>> -$as_echo "$libc_cv_omit_dot_syms" >&6; }
>>> -if test x$libc_cv_omit_dot_syms != xyes; then
>>> - $as_echo "#define HAVE_ASM_GLOBAL_DOT_NAME 1" >>confdefs.h
>>> -
>>> -fi
>>> -
>>> { $as_echo "$as_me:${as_lineno-$LINENO}: checking for linker support for overlapping .opd entries" >&5
>>> $as_echo_n "checking for linker support for overlapping .opd entries... " >&6; }
>>> if ${libc_cv_overlapping_opd+:} false; then :
>>> diff --git a/sysdeps/powerpc/powerpc64/configure.ac b/sysdeps/powerpc/powerpc64/configure.ac
>>> index 67aac66..9e9881c 100644
>>> --- a/sysdeps/powerpc/powerpc64/configure.ac
>>> +++ b/sysdeps/powerpc/powerpc64/configure.ac
>>> @@ -1,25 +1,6 @@
>>> GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
>>> # Local configure fragment for sysdeps/powerpc/powerpc64.
>>>
>>> -# The Aix ld uses global .symbol_names instead of symbol_names
>>> -# and unfortunately early Linux PPC64 linkers use it as well.
>>> -AC_CACHE_CHECK(for support for omitting dot symbols,
>>> -libc_cv_omit_dot_syms, [dnl
>>> -libc_cv_omit_dot_syms=no
>>> -echo 'void foo (void) {}' > conftest.c
>>> -if AC_TRY_COMMAND(${CC-cc} $CFLAGS $CPPFLAGS -S conftest.c -o conftest.s 1>&AS_MESSAGE_LOG_FD); then
>>> - if grep -w '\.foo' conftest.s > /dev/null; then
>>> - :
>>> - else
>>> - libc_cv_omit_dot_syms=yes
>>> - fi
>>> -fi
>>> -rm -f conftest.c conftest.s
>>> -])
>>> -if test x$libc_cv_omit_dot_syms != xyes; then
>>> - AC_DEFINE(HAVE_ASM_GLOBAL_DOT_NAME)
>>> -fi
>>> -
>>> AC_CACHE_CHECK(for linker support for overlapping .opd entries,
>>> libc_cv_overlapping_opd, [dnl
>>> libc_cv_overlapping_opd=no
>>> diff --git a/sysdeps/powerpc/powerpc64/sysdep.h b/sysdeps/powerpc/powerpc64/sysdep.h
>>> index 1f4efe6..bf2a884 100644
>>> --- a/sysdeps/powerpc/powerpc64/sysdep.h
>>> +++ b/sysdeps/powerpc/powerpc64/sysdep.h
>>> @@ -140,25 +140,14 @@
>>> name##: OPD_ENT (name); \
>>> .previous;
>>>
>>> -#ifdef HAVE_ASM_GLOBAL_DOT_NAME
>>> -# define DOT_LABEL(X) .##X
>>> -# define BODY_LABEL(X) .##X
>>> -# define ENTRY_2(name) \
>>> - .globl BODY_LABEL(name); \
>>> - ENTRY_1(name) \
>>> - .size name, 24;
>>> -# define END_2(name) \
>>> - .size BODY_LABEL(name),.-BODY_LABEL(name);
>>> -#else
>>> -# define DOT_LABEL(X) X
>>> -# define BODY_LABEL(X) .LY##X
>>> -# define ENTRY_2(name) \
>>> +#define DOT_LABEL(X) X
>>> +#define BODY_LABEL(X) .LY##X
>>> +#define ENTRY_2(name) \
>>> .type name,@function; \
>>> ENTRY_1(name)
>>> -# define END_2(name) \
>>> +#define END_2(name) \
>>> .size name,.-BODY_LABEL(name); \
>>> .size BODY_LABEL(name),.-BODY_LABEL(name);
>>> -#endif
>>> #define LOCALENTRY(name)
>>>
>>> #else /* _CALL_ELF */
>>> @@ -403,25 +392,14 @@ LT_LABELSUFFIX(name,_name_end): ; \
>>> OPD_ENT (name) "\n" \
>>> ".popsection;"
>>>
>>> -#ifdef HAVE_ASM_GLOBAL_DOT_NAME
>>> -# define DOT_PREFIX "."
>>> -# define BODY_PREFIX "."
>>> -# define ENTRY_2(name) \
>>> - ".globl " BODY_PREFIX #name ";\n" \
>>> - ENTRY_1(name) "\n" \
>>> - ".size " #name ", 24;"
>>> -# define END_2(name) \
>>> - ".size " BODY_PREFIX #name ",.-" BODY_PREFIX #name ";"
>>> -#else
>>> -# define DOT_PREFIX ""
>>> -# define BODY_PREFIX ".LY"
>>> -# define ENTRY_2(name) \
>>> +#define DOT_PREFIX ""
>>> +#define BODY_PREFIX ".LY"
>>> +#define ENTRY_2(name) \
>>> ".type " #name ",@function;\n" \
>>> ENTRY_1(name)
>>> -# define END_2(name) \
>>> +#define END_2(name) \
>>> ".size " #name ",.-" BODY_PREFIX #name ";\n" \
>>> ".size " BODY_PREFIX #name ",.-" BODY_PREFIX #name ";"
>>> -#endif
>>> #define LOCALENTRY(name)
>>>
>>> #else /* _CALL_ELF */
>>> diff --git a/sysdeps/powerpc/powerpc64/tls-macros.h b/sysdeps/powerpc/powerpc64/tls-macros.h
>>> index 198215d..42a95ec 100644
>>> --- a/sysdeps/powerpc/powerpc64/tls-macros.h
>>> +++ b/sysdeps/powerpc/powerpc64/tls-macros.h
>>> @@ -17,11 +17,9 @@
>>> : "=r" (__result) ); \
>>> __result; \
>>> })
>>> -#ifdef HAVE_ASM_GLOBAL_DOT_NAME
>>> -# define __TLS_GET_ADDR ".__tls_get_addr"
>>> -#else
>>> -# define __TLS_GET_ADDR "__tls_get_addr"
>>> -#endif
>>> +
>>> +#define __TLS_GET_ADDR "__tls_get_addr"
>>> +
>>> /* PowerPC64 Local Dynamic TLS access. */
>>> #define TLS_LD(x) \
>>> ({ int * __result; \
>>> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h b/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h
>>> index 6579757..5cd7ddb 100644
>>> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h
>>> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h
>>> @@ -25,11 +25,7 @@
>>>
>>> #if IS_IN (libc) || IS_IN (libpthread) || IS_IN (librt)
>>>
>>> -# ifdef HAVE_ASM_GLOBAL_DOT_NAME
>>> -# define DASHDASHPFX(str) .__##str
>>> -# else
>>> -# define DASHDASHPFX(str) __##str
>>> -# endif
>>> +# define DASHDASHPFX(str) __##str
>>>
>>> #if _CALL_ELF == 2
>>> #define CANCEL_FRAMESIZE (FRAME_MIN_SIZE+16+48)
>>>