mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-21 12:30:06 +00:00
Force building with -fno-common
As a result, is not necessary to specify __attribute__ ((nocommon)) on individual definitions. GCC 10 defaults to -fno-common on all architectures except ARC, but this change is compatible with older GCC versions and ARC, too. Reviewed-by: Carlos O'Donell <carlos@redhat.com>
This commit is contained in:
parent
dc76a059fd
commit
7c241325d6
@ -923,8 +923,12 @@ ifeq "$(strip $(+cflags))" ""
|
|||||||
+cflags := $(default_cflags)
|
+cflags := $(default_cflags)
|
||||||
endif # $(+cflags) == ""
|
endif # $(+cflags) == ""
|
||||||
|
|
||||||
|
# Force building with -fno-common because hidden_def, compat_symbol
|
||||||
|
# and other constructs do not work for common symbols (and would
|
||||||
|
# otherwise require specifying __attribute__ ((nocommon)) on a
|
||||||
|
# case-by-case basis).
|
||||||
+cflags += $(cflags-cpu) $(+gccwarn) $(+merge-constants) $(+math-flags) \
|
+cflags += $(cflags-cpu) $(+gccwarn) $(+merge-constants) $(+math-flags) \
|
||||||
$(+stack-protector)
|
$(+stack-protector) -fno-common
|
||||||
+gcc-nowarn := -w
|
+gcc-nowarn := -w
|
||||||
|
|
||||||
# Each sysdeps directory can contain header files that both will be
|
# Each sysdeps directory can contain header files that both will be
|
||||||
|
@ -52,8 +52,7 @@ uintptr_t __stack_chk_guard attribute_relro;
|
|||||||
# ifndef THREAD_SET_POINTER_GUARD
|
# ifndef THREAD_SET_POINTER_GUARD
|
||||||
/* Only exported for architectures that don't store the pointer guard
|
/* Only exported for architectures that don't store the pointer guard
|
||||||
value in thread local area. */
|
value in thread local area. */
|
||||||
uintptr_t __pointer_chk_guard_local
|
uintptr_t __pointer_chk_guard_local attribute_relro attribute_hidden;
|
||||||
attribute_relro attribute_hidden __attribute__ ((nocommon));
|
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -163,8 +163,8 @@ int _dl_correct_cache_id = _DL_CACHE_DEFAULT_ID;
|
|||||||
ElfW(auxv_t) *_dl_auxv;
|
ElfW(auxv_t) *_dl_auxv;
|
||||||
const ElfW(Phdr) *_dl_phdr;
|
const ElfW(Phdr) *_dl_phdr;
|
||||||
size_t _dl_phnum;
|
size_t _dl_phnum;
|
||||||
uint64_t _dl_hwcap __attribute__ ((nocommon));
|
uint64_t _dl_hwcap;
|
||||||
uint64_t _dl_hwcap2 __attribute__ ((nocommon));
|
uint64_t _dl_hwcap2;
|
||||||
|
|
||||||
/* The value of the FPU control word the kernel will preset in hardware. */
|
/* The value of the FPU control word the kernel will preset in hardware. */
|
||||||
fpu_control_t _dl_fpu_control = _FPU_DEFAULT;
|
fpu_control_t _dl_fpu_control = _FPU_DEFAULT;
|
||||||
@ -176,7 +176,7 @@ fpu_control_t _dl_fpu_control = _FPU_DEFAULT;
|
|||||||
file. Since there is no way to set this nonzero (we don't grok the
|
file. Since there is no way to set this nonzero (we don't grok the
|
||||||
LD_HWCAP_MASK environment variable here), there is no real point in
|
LD_HWCAP_MASK environment variable here), there is no real point in
|
||||||
setting _dl_hwcap nonzero below, but we do anyway. */
|
setting _dl_hwcap nonzero below, but we do anyway. */
|
||||||
uint64_t _dl_hwcap_mask __attribute__ ((nocommon));
|
uint64_t _dl_hwcap_mask;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Prevailing state of the stack. Generally this includes PF_X, indicating it's
|
/* Prevailing state of the stack. Generally this includes PF_X, indicating it's
|
||||||
|
@ -163,8 +163,7 @@ uintptr_t __stack_chk_guard attribute_relro;
|
|||||||
|
|
||||||
/* Only exported for architectures that don't store the pointer guard
|
/* Only exported for architectures that don't store the pointer guard
|
||||||
value in thread local area. */
|
value in thread local area. */
|
||||||
uintptr_t __pointer_chk_guard_local
|
uintptr_t __pointer_chk_guard_local attribute_relro attribute_hidden;
|
||||||
attribute_relro attribute_hidden __attribute__ ((nocommon));
|
|
||||||
#ifndef THREAD_SET_POINTER_GUARD
|
#ifndef THREAD_SET_POINTER_GUARD
|
||||||
strong_alias (__pointer_chk_guard_local, __pointer_chk_guard)
|
strong_alias (__pointer_chk_guard_local, __pointer_chk_guard)
|
||||||
#endif
|
#endif
|
||||||
|
@ -79,11 +79,7 @@
|
|||||||
unspecified whether SYMBOL@VERSION is associated with LOCAL, or if
|
unspecified whether SYMBOL@VERSION is associated with LOCAL, or if
|
||||||
an intermediate alias is created. If LOCAL and SYMBOL are
|
an intermediate alias is created. If LOCAL and SYMBOL are
|
||||||
distinct, and LOCAL is also intended for export, its version should
|
distinct, and LOCAL is also intended for export, its version should
|
||||||
be specified explicitly with versioned_symbol, too.
|
be specified explicitly with versioned_symbol, too. */
|
||||||
|
|
||||||
If LOCAL is a data symbol and does not have a non-zero initializer,
|
|
||||||
it should be defined with __attribute__ ((nocommon)) for
|
|
||||||
compatibility with GCC versions that default to -fcommon. */
|
|
||||||
# define versioned_symbol(lib, local, symbol, version) \
|
# define versioned_symbol(lib, local, symbol, version) \
|
||||||
versioned_symbol_1 (lib, local, symbol, version)
|
versioned_symbol_1 (lib, local, symbol, version)
|
||||||
# define versioned_symbol_1(lib, local, symbol, version) \
|
# define versioned_symbol_1(lib, local, symbol, version) \
|
||||||
|
@ -2026,7 +2026,7 @@ static void *memalign_hook_ini (size_t alignment, size_t sz,
|
|||||||
const void *caller) __THROW;
|
const void *caller) __THROW;
|
||||||
|
|
||||||
#if HAVE_MALLOC_INIT_HOOK
|
#if HAVE_MALLOC_INIT_HOOK
|
||||||
void (*__malloc_initialize_hook) (void) __attribute__ ((nocommon));
|
void (*__malloc_initialize_hook) (void);
|
||||||
compat_symbol (libc, __malloc_initialize_hook,
|
compat_symbol (libc, __malloc_initialize_hook,
|
||||||
__malloc_initialize_hook, GLIBC_2_0);
|
__malloc_initialize_hook, GLIBC_2_0);
|
||||||
#endif
|
#endif
|
||||||
|
@ -59,7 +59,7 @@ __libc_lock_define_initialized (static, lock);
|
|||||||
case some applications ended up linking against them but they don't actually
|
case some applications ended up linking against them but they don't actually
|
||||||
do anything anymore; not that they did much before anyway. */
|
do anything anymore; not that they did much before anyway. */
|
||||||
|
|
||||||
void *mallwatch __attribute__ ((nocommon));
|
void *mallwatch;
|
||||||
compat_symbol (libc, mallwatch, mallwatch, GLIBC_2_0);
|
compat_symbol (libc, mallwatch, mallwatch, GLIBC_2_0);
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -29,15 +29,14 @@
|
|||||||
|
|
||||||
#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_23)
|
#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_23)
|
||||||
|
|
||||||
/* Define the variables used for the interface. Avoid .symver on common
|
/* Define the variables used for the interface. */
|
||||||
symbol, which just creates a new common symbol, not an alias. */
|
char *loc1;
|
||||||
char *loc1 __attribute__ ((nocommon));
|
char *loc2;
|
||||||
char *loc2 __attribute__ ((nocommon));
|
|
||||||
compat_symbol (libc, loc1, loc1, GLIBC_2_0);
|
compat_symbol (libc, loc1, loc1, GLIBC_2_0);
|
||||||
compat_symbol (libc, loc2, loc2, GLIBC_2_0);
|
compat_symbol (libc, loc2, loc2, GLIBC_2_0);
|
||||||
|
|
||||||
/* Although we do not support the use we define this variable as well. */
|
/* Although we do not support the use we define this variable as well. */
|
||||||
char *locs __attribute__ ((nocommon));
|
char *locs;
|
||||||
compat_symbol (libc, locs, locs, GLIBC_2_0);
|
compat_symbol (libc, locs, locs, GLIBC_2_0);
|
||||||
|
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
/* Variable set to a nonzero value either if more than one thread runs or ran,
|
/* Variable set to a nonzero value either if more than one thread runs or ran,
|
||||||
or if a single-threaded process is trying to cancel itself. See
|
or if a single-threaded process is trying to cancel itself. See
|
||||||
nptl/descr.h for more context on the single-threaded process case. */
|
nptl/descr.h for more context on the single-threaded process case. */
|
||||||
int __libc_multiple_threads __attribute__ ((nocommon));
|
int __libc_multiple_threads;
|
||||||
libc_hidden_data_def (__libc_multiple_threads)
|
libc_hidden_data_def (__libc_multiple_threads)
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
@ -67,6 +67,6 @@ __lll_lock_wake (int *futex, int private)
|
|||||||
libc_hidden_def (__lll_lock_wake)
|
libc_hidden_def (__lll_lock_wake)
|
||||||
|
|
||||||
#if ENABLE_ELISION_SUPPORT
|
#if ENABLE_ELISION_SUPPORT
|
||||||
int __pthread_force_elision __attribute__ ((nocommon));
|
int __pthread_force_elision;
|
||||||
libc_hidden_data_def (__pthread_force_elision)
|
libc_hidden_data_def (__pthread_force_elision)
|
||||||
#endif
|
#endif
|
||||||
|
@ -43,12 +43,12 @@
|
|||||||
|
|
||||||
|
|
||||||
/* Globally enabled events. */
|
/* Globally enabled events. */
|
||||||
td_thr_events_t __nptl_threads_events __attribute__ ((nocommon));
|
td_thr_events_t __nptl_threads_events;
|
||||||
libc_hidden_proto (__nptl_threads_events)
|
libc_hidden_proto (__nptl_threads_events)
|
||||||
libc_hidden_data_def (__nptl_threads_events)
|
libc_hidden_data_def (__nptl_threads_events)
|
||||||
|
|
||||||
/* Pointer to descriptor with the last event. */
|
/* Pointer to descriptor with the last event. */
|
||||||
struct pthread *__nptl_last_event __attribute__ ((nocommon));
|
struct pthread *__nptl_last_event;
|
||||||
libc_hidden_proto (__nptl_last_event)
|
libc_hidden_proto (__nptl_last_event)
|
||||||
libc_hidden_data_def (__nptl_last_event)
|
libc_hidden_data_def (__nptl_last_event)
|
||||||
|
|
||||||
|
@ -19,6 +19,5 @@
|
|||||||
#include <pthreadP.h>
|
#include <pthreadP.h>
|
||||||
|
|
||||||
/* Table of the key information. */
|
/* Table of the key information. */
|
||||||
struct pthread_key_struct __pthread_keys[PTHREAD_KEYS_MAX]
|
struct pthread_key_struct __pthread_keys[PTHREAD_KEYS_MAX];
|
||||||
__attribute__ ((nocommon));
|
|
||||||
libc_hidden_data_def (__pthread_keys)
|
libc_hidden_data_def (__pthread_keys)
|
||||||
|
@ -22,11 +22,9 @@
|
|||||||
|
|
||||||
/* Default thread attributes for the case when the user does not
|
/* Default thread attributes for the case when the user does not
|
||||||
provide any. */
|
provide any. */
|
||||||
union pthread_attr_transparent __default_pthread_attr
|
union pthread_attr_transparent __default_pthread_attr;
|
||||||
__attribute__ ((nocommon));
|
|
||||||
libc_hidden_data_def (__default_pthread_attr)
|
libc_hidden_data_def (__default_pthread_attr)
|
||||||
|
|
||||||
/* Mutex protecting __default_pthread_attr. */
|
/* Mutex protecting __default_pthread_attr. */
|
||||||
int __default_pthread_attr_lock __attribute__ ((nocommon))
|
int __default_pthread_attr_lock = LLL_LOCK_INITIALIZER;
|
||||||
= LLL_LOCK_INITIALIZER;
|
|
||||||
libc_hidden_data_def (__default_pthread_attr_lock)
|
libc_hidden_data_def (__default_pthread_attr_lock)
|
||||||
|
@ -88,7 +88,7 @@ res_init (void)
|
|||||||
This differs from plain `struct __res_state _res;' in that it doesn't
|
This differs from plain `struct __res_state _res;' in that it doesn't
|
||||||
create a common definition, but a plain symbol that resides in .bss,
|
create a common definition, but a plain symbol that resides in .bss,
|
||||||
which can have an alias. */
|
which can have an alias. */
|
||||||
struct __res_state _res __attribute__ ((nocommon));
|
struct __res_state _res;
|
||||||
|
|
||||||
#undef __resp
|
#undef __resp
|
||||||
__thread struct __res_state *__resp = &_res;
|
__thread struct __res_state *__resp = &_res;
|
||||||
|
@ -32,7 +32,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Exported variable to locate abort message in core files etc. */
|
/* Exported variable to locate abort message in core files etc. */
|
||||||
struct abort_msg_s *__abort_msg __attribute__ ((nocommon));
|
struct abort_msg_s *__abort_msg;
|
||||||
libc_hidden_def (__abort_msg)
|
libc_hidden_def (__abort_msg)
|
||||||
|
|
||||||
/* We must avoid to run in circles. Therefore we remember how far we
|
/* We must avoid to run in circles. Therefore we remember how far we
|
||||||
|
@ -290,11 +290,9 @@ libc_hidden_nolink_sunrpc (key_get_conv, GLIBC_2_1)
|
|||||||
* implementations of these functions, and to call those in key_call().
|
* implementations of these functions, and to call those in key_call().
|
||||||
*/
|
*/
|
||||||
|
|
||||||
cryptkeyres *(*__key_encryptsession_pk_LOCAL) (uid_t, char *)
|
cryptkeyres *(*__key_encryptsession_pk_LOCAL) (uid_t, char *);
|
||||||
__attribute__ ((nocommon));
|
cryptkeyres *(*__key_decryptsession_pk_LOCAL) (uid_t, char *);
|
||||||
cryptkeyres *(*__key_decryptsession_pk_LOCAL) (uid_t, char *)
|
des_block *(*__key_gendes_LOCAL) (uid_t, char *);
|
||||||
__attribute__ ((nocommon));
|
|
||||||
des_block *(*__key_gendes_LOCAL) (uid_t, char *) __attribute__ ((nocommon));
|
|
||||||
#ifdef SHARED
|
#ifdef SHARED
|
||||||
# ifndef EXPORT_RPC_SYMBOLS
|
# ifndef EXPORT_RPC_SYMBOLS
|
||||||
compat_symbol (libc, __key_encryptsession_pk_LOCAL,
|
compat_symbol (libc, __key_encryptsession_pk_LOCAL,
|
||||||
|
@ -42,15 +42,13 @@
|
|||||||
/* We are very tricky here. We want to have _null_auth in a read-only
|
/* We are very tricky here. We want to have _null_auth in a read-only
|
||||||
section but we cannot add const to the type because this isn't how
|
section but we cannot add const to the type because this isn't how
|
||||||
the variable is declared. So we use the section attribute. */
|
the variable is declared. So we use the section attribute. */
|
||||||
struct opaque_auth _null_auth __attribute__ ((nocommon));
|
struct opaque_auth _null_auth;
|
||||||
libc_hidden_nolink_sunrpc (_null_auth, GLIBC_2_0)
|
libc_hidden_nolink_sunrpc (_null_auth, GLIBC_2_0)
|
||||||
|
|
||||||
/* The variables need the nocommon attribute, so that it is possible
|
fd_set svc_fdset;
|
||||||
to create aliases and specify symbol versions. */
|
struct rpc_createerr rpc_createerr;
|
||||||
fd_set svc_fdset __attribute__ ((nocommon));
|
struct pollfd *svc_pollfd;
|
||||||
struct rpc_createerr rpc_createerr __attribute__ ((nocommon));
|
int svc_max_pollfd;
|
||||||
struct pollfd *svc_pollfd __attribute__ ((nocommon));
|
|
||||||
int svc_max_pollfd __attribute__ ((nocommon));
|
|
||||||
#ifdef SHARED
|
#ifdef SHARED
|
||||||
# ifndef EXPORT_RPC_SYMBOLS
|
# ifndef EXPORT_RPC_SYMBOLS
|
||||||
compat_symbol (libc, svc_fdset, svc_fdset, GLIBC_2_0);
|
compat_symbol (libc, svc_fdset, svc_fdset, GLIBC_2_0);
|
||||||
|
@ -93,7 +93,7 @@ struct
|
|||||||
u_long ncachereplays; /* times cache hit, and is replay */
|
u_long ncachereplays; /* times cache hit, and is replay */
|
||||||
u_long ncachemisses; /* times cache missed */
|
u_long ncachemisses; /* times cache missed */
|
||||||
}
|
}
|
||||||
svcauthdes_stats __attribute__ ((nocommon));
|
svcauthdes_stats;
|
||||||
#ifdef SHARED
|
#ifdef SHARED
|
||||||
compat_symbol (libc, svcauthdes_stats, svcauthdes_stats, GLIBC_2_0);
|
compat_symbol (libc, svcauthdes_stats, svcauthdes_stats, GLIBC_2_0);
|
||||||
#endif
|
#endif
|
||||||
|
@ -23,11 +23,11 @@
|
|||||||
#include <tls.h>
|
#include <tls.h>
|
||||||
|
|
||||||
#ifndef __ASSUME_SET_ROBUST_LIST
|
#ifndef __ASSUME_SET_ROBUST_LIST
|
||||||
bool __nptl_set_robust_list_avail __attribute__ ((nocommon));
|
bool __nptl_set_robust_list_avail;
|
||||||
rtld_hidden_data_def (__nptl_set_robust_list_avail)
|
rtld_hidden_data_def (__nptl_set_robust_list_avail)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bool __nptl_initial_report_events __attribute__ ((nocommon));
|
bool __nptl_initial_report_events;
|
||||||
rtld_hidden_def (__nptl_initial_report_events)
|
rtld_hidden_def (__nptl_initial_report_events)
|
||||||
|
|
||||||
#ifdef SHARED
|
#ifdef SHARED
|
||||||
|
@ -22,18 +22,18 @@
|
|||||||
#include "soft-supp.h"
|
#include "soft-supp.h"
|
||||||
|
|
||||||
/* Thread-local to store sticky exceptions. */
|
/* Thread-local to store sticky exceptions. */
|
||||||
__thread int __sim_exceptions_thread __attribute__ ((nocommon));
|
__thread int __sim_exceptions_thread;
|
||||||
libc_hidden_tls_def (__sim_exceptions_thread);
|
libc_hidden_tls_def (__sim_exceptions_thread);
|
||||||
|
|
||||||
/* By default, no exceptions should trap. */
|
/* By default, no exceptions should trap. */
|
||||||
__thread int __sim_disabled_exceptions_thread = 0xffffffff;
|
__thread int __sim_disabled_exceptions_thread = 0xffffffff;
|
||||||
libc_hidden_tls_def (__sim_disabled_exceptions_thread);
|
libc_hidden_tls_def (__sim_disabled_exceptions_thread);
|
||||||
|
|
||||||
__thread int __sim_round_mode_thread __attribute__ ((nocommon));
|
__thread int __sim_round_mode_thread;
|
||||||
libc_hidden_tls_def (__sim_round_mode_thread);
|
libc_hidden_tls_def (__sim_round_mode_thread);
|
||||||
|
|
||||||
#if SIM_GLOBAL_COMPAT
|
#if SIM_GLOBAL_COMPAT
|
||||||
int __sim_exceptions_global __attribute__ ((nocommon));
|
int __sim_exceptions_global;
|
||||||
libc_hidden_data_def (__sim_exceptions_global);
|
libc_hidden_data_def (__sim_exceptions_global);
|
||||||
SIM_COMPAT_SYMBOL (__sim_exceptions_global, __sim_exceptions);
|
SIM_COMPAT_SYMBOL (__sim_exceptions_global, __sim_exceptions);
|
||||||
|
|
||||||
@ -42,7 +42,7 @@ libc_hidden_data_def (__sim_disabled_exceptions_global);
|
|||||||
SIM_COMPAT_SYMBOL (__sim_disabled_exceptions_global,
|
SIM_COMPAT_SYMBOL (__sim_disabled_exceptions_global,
|
||||||
__sim_disabled_exceptions);
|
__sim_disabled_exceptions);
|
||||||
|
|
||||||
int __sim_round_mode_global __attribute__ ((nocommon));
|
int __sim_round_mode_global;
|
||||||
libc_hidden_data_def (__sim_round_mode_global);
|
libc_hidden_data_def (__sim_round_mode_global);
|
||||||
SIM_COMPAT_SYMBOL (__sim_round_mode_global, __sim_round_mode);
|
SIM_COMPAT_SYMBOL (__sim_round_mode_global, __sim_round_mode);
|
||||||
#endif
|
#endif
|
||||||
|
@ -107,12 +107,11 @@ timer_helper_thread (void *arg)
|
|||||||
|
|
||||||
|
|
||||||
/* Control variable for helper thread creation. */
|
/* Control variable for helper thread creation. */
|
||||||
pthread_once_t __timer_helper_once __attribute__ ((nocommon))
|
pthread_once_t __timer_helper_once = PTHREAD_ONCE_INIT;
|
||||||
= PTHREAD_ONCE_INIT;
|
|
||||||
|
|
||||||
|
|
||||||
/* TID of the helper thread. */
|
/* TID of the helper thread. */
|
||||||
pid_t __timer_helper_tid __attribute__ ((nocommon));
|
pid_t __timer_helper_tid;
|
||||||
|
|
||||||
|
|
||||||
/* Reset variables so that after a fork a new helper thread gets started. */
|
/* Reset variables so that after a fork a new helper thread gets started. */
|
||||||
|
Loading…
Reference in New Issue
Block a user