aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Weimer <fweimer@redhat.com>2021-07-09 20:09:14 +0200
committerFlorian Weimer <fweimer@redhat.com>2021-07-09 20:09:14 +0200
commit7c241325d67af9e24ff03d4c6f6280c17ea181f8 (patch)
tree5667f94ae80c6e75dc1bac29ab4c51d48cfad084
parentdc76a059fded7a203c82dbb91d4fc1f43d3250db (diff)
downloadglibc-7c241325d67af9e24ff03d4c6f6280c17ea181f8.zip
glibc-7c241325d67af9e24ff03d4c6f6280c17ea181f8.tar.gz
glibc-7c241325d67af9e24ff03d4c6f6280c17ea181f8.tar.bz2
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>
-rw-r--r--Makeconfig6
-rw-r--r--csu/libc-start.c3
-rw-r--r--elf/dl-support.c6
-rw-r--r--elf/rtld.c3
-rw-r--r--include/shlib-compat.h6
-rw-r--r--malloc/malloc.c2
-rw-r--r--malloc/mtrace.c2
-rw-r--r--misc/regexp.c9
-rw-r--r--nptl/libc_multiple_threads.c2
-rw-r--r--nptl/lowlevellock.c2
-rw-r--r--nptl/pthread_create.c4
-rw-r--r--nptl/pthread_keys.c3
-rw-r--r--nptl/vars.c6
-rw-r--r--resolv/res_libc.c2
-rw-r--r--stdlib/abort.c2
-rw-r--r--sunrpc/key_call.c8
-rw-r--r--sunrpc/rpc_common.c12
-rw-r--r--sunrpc/svcauth_des.c2
-rw-r--r--sysdeps/nptl/dl-tls_init_tp.c4
-rw-r--r--sysdeps/powerpc/nofpu/sim-full.c8
-rw-r--r--sysdeps/unix/sysv/linux/timer_routines.c5
21 files changed, 43 insertions, 54 deletions
diff --git a/Makeconfig b/Makeconfig
index efc7351..68663d9 100644
--- a/Makeconfig
+++ b/Makeconfig
@@ -923,8 +923,12 @@ ifeq "$(strip $(+cflags))" ""
+cflags := $(default_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) \
- $(+stack-protector)
+ $(+stack-protector) -fno-common
+gcc-nowarn := -w
# Each sysdeps directory can contain header files that both will be
diff --git a/csu/libc-start.c b/csu/libc-start.c
index 5b5913e..0350b00 100644
--- a/csu/libc-start.c
+++ b/csu/libc-start.c
@@ -52,8 +52,7 @@ uintptr_t __stack_chk_guard attribute_relro;
# ifndef THREAD_SET_POINTER_GUARD
/* Only exported for architectures that don't store the pointer guard
value in thread local area. */
-uintptr_t __pointer_chk_guard_local
- attribute_relro attribute_hidden __attribute__ ((nocommon));
+uintptr_t __pointer_chk_guard_local attribute_relro attribute_hidden;
# endif
#endif
diff --git a/elf/dl-support.c b/elf/dl-support.c
index dfc9ab7..0155718 100644
--- a/elf/dl-support.c
+++ b/elf/dl-support.c
@@ -163,8 +163,8 @@ int _dl_correct_cache_id = _DL_CACHE_DEFAULT_ID;
ElfW(auxv_t) *_dl_auxv;
const ElfW(Phdr) *_dl_phdr;
size_t _dl_phnum;
-uint64_t _dl_hwcap __attribute__ ((nocommon));
-uint64_t _dl_hwcap2 __attribute__ ((nocommon));
+uint64_t _dl_hwcap;
+uint64_t _dl_hwcap2;
/* The value of the FPU control word the kernel will preset in hardware. */
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
LD_HWCAP_MASK environment variable here), there is no real point in
setting _dl_hwcap nonzero below, but we do anyway. */
-uint64_t _dl_hwcap_mask __attribute__ ((nocommon));
+uint64_t _dl_hwcap_mask;
#endif
/* Prevailing state of the stack. Generally this includes PF_X, indicating it's
diff --git a/elf/rtld.c b/elf/rtld.c
index fbbd60b..e3fb2a5 100644
--- a/elf/rtld.c
+++ b/elf/rtld.c
@@ -163,8 +163,7 @@ uintptr_t __stack_chk_guard attribute_relro;
/* Only exported for architectures that don't store the pointer guard
value in thread local area. */
-uintptr_t __pointer_chk_guard_local
- attribute_relro attribute_hidden __attribute__ ((nocommon));
+uintptr_t __pointer_chk_guard_local attribute_relro attribute_hidden;
#ifndef THREAD_SET_POINTER_GUARD
strong_alias (__pointer_chk_guard_local, __pointer_chk_guard)
#endif
diff --git a/include/shlib-compat.h b/include/shlib-compat.h
index 6c423c8..c29a0e0 100644
--- a/include/shlib-compat.h
+++ b/include/shlib-compat.h
@@ -79,11 +79,7 @@
unspecified whether SYMBOL@VERSION is associated with LOCAL, or if
an intermediate alias is created. If LOCAL and SYMBOL are
distinct, and LOCAL is also intended for export, its version should
- 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. */
+ be specified explicitly with versioned_symbol, too. */
# define versioned_symbol(lib, local, symbol, version) \
versioned_symbol_1 (lib, local, symbol, version)
# define versioned_symbol_1(lib, local, symbol, version) \
diff --git a/malloc/malloc.c b/malloc/malloc.c
index 0253453..154f6b4 100644
--- a/malloc/malloc.c
+++ b/malloc/malloc.c
@@ -2026,7 +2026,7 @@ static void *memalign_hook_ini (size_t alignment, size_t sz,
const void *caller) __THROW;
#if HAVE_MALLOC_INIT_HOOK
-void (*__malloc_initialize_hook) (void) __attribute__ ((nocommon));
+void (*__malloc_initialize_hook) (void);
compat_symbol (libc, __malloc_initialize_hook,
__malloc_initialize_hook, GLIBC_2_0);
#endif
diff --git a/malloc/mtrace.c b/malloc/mtrace.c
index f5b8321..6c2c58b 100644
--- a/malloc/mtrace.c
+++ b/malloc/mtrace.c
@@ -59,7 +59,7 @@ __libc_lock_define_initialized (static, lock);
case some applications ended up linking against them but they don't actually
do anything anymore; not that they did much before anyway. */
-void *mallwatch __attribute__ ((nocommon));
+void *mallwatch;
compat_symbol (libc, mallwatch, mallwatch, GLIBC_2_0);
void
diff --git a/misc/regexp.c b/misc/regexp.c
index d101afd..ba74875 100644
--- a/misc/regexp.c
+++ b/misc/regexp.c
@@ -29,15 +29,14 @@
#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_23)
-/* Define the variables used for the interface. Avoid .symver on common
- symbol, which just creates a new common symbol, not an alias. */
-char *loc1 __attribute__ ((nocommon));
-char *loc2 __attribute__ ((nocommon));
+/* Define the variables used for the interface. */
+char *loc1;
+char *loc2;
compat_symbol (libc, loc1, loc1, GLIBC_2_0);
compat_symbol (libc, loc2, loc2, GLIBC_2_0);
/* 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);
diff --git a/nptl/libc_multiple_threads.c b/nptl/libc_multiple_threads.c
index a0e7932..4eeec85 100644
--- a/nptl/libc_multiple_threads.c
+++ b/nptl/libc_multiple_threads.c
@@ -23,7 +23,7 @@
/* 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
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)
# endif
#endif
diff --git a/nptl/lowlevellock.c b/nptl/lowlevellock.c
index 4f88178..9dccc98 100644
--- a/nptl/lowlevellock.c
+++ b/nptl/lowlevellock.c
@@ -67,6 +67,6 @@ __lll_lock_wake (int *futex, int private)
libc_hidden_def (__lll_lock_wake)
#if ENABLE_ELISION_SUPPORT
-int __pthread_force_elision __attribute__ ((nocommon));
+int __pthread_force_elision;
libc_hidden_data_def (__pthread_force_elision)
#endif
diff --git a/nptl/pthread_create.c b/nptl/pthread_create.c
index d1b6817..440adc2 100644
--- a/nptl/pthread_create.c
+++ b/nptl/pthread_create.c
@@ -43,12 +43,12 @@
/* 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_data_def (__nptl_threads_events)
/* 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_data_def (__nptl_last_event)
diff --git a/nptl/pthread_keys.c b/nptl/pthread_keys.c
index 76e4cfa..d7bbdd9 100644
--- a/nptl/pthread_keys.c
+++ b/nptl/pthread_keys.c
@@ -19,6 +19,5 @@
#include <pthreadP.h>
/* Table of the key information. */
-struct pthread_key_struct __pthread_keys[PTHREAD_KEYS_MAX]
- __attribute__ ((nocommon));
+struct pthread_key_struct __pthread_keys[PTHREAD_KEYS_MAX];
libc_hidden_data_def (__pthread_keys)
diff --git a/nptl/vars.c b/nptl/vars.c
index 989d793..c3ec368 100644
--- a/nptl/vars.c
+++ b/nptl/vars.c
@@ -22,11 +22,9 @@
/* Default thread attributes for the case when the user does not
provide any. */
-union pthread_attr_transparent __default_pthread_attr
- __attribute__ ((nocommon));
+union pthread_attr_transparent __default_pthread_attr;
libc_hidden_data_def (__default_pthread_attr)
/* Mutex protecting __default_pthread_attr. */
-int __default_pthread_attr_lock __attribute__ ((nocommon))
- = LLL_LOCK_INITIALIZER;
+int __default_pthread_attr_lock = LLL_LOCK_INITIALIZER;
libc_hidden_data_def (__default_pthread_attr_lock)
diff --git a/resolv/res_libc.c b/resolv/res_libc.c
index 636d238..41d44ca 100644
--- a/resolv/res_libc.c
+++ b/resolv/res_libc.c
@@ -88,7 +88,7 @@ res_init (void)
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,
which can have an alias. */
-struct __res_state _res __attribute__ ((nocommon));
+struct __res_state _res;
#undef __resp
__thread struct __res_state *__resp = &_res;
diff --git a/stdlib/abort.c b/stdlib/abort.c
index 8f5f4fe..018f735 100644
--- a/stdlib/abort.c
+++ b/stdlib/abort.c
@@ -32,7 +32,7 @@
#endif
/* 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)
/* We must avoid to run in circles. Therefore we remember how far we
diff --git a/sunrpc/key_call.c b/sunrpc/key_call.c
index f13b0a7..8ea4303 100644
--- a/sunrpc/key_call.c
+++ b/sunrpc/key_call.c
@@ -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().
*/
-cryptkeyres *(*__key_encryptsession_pk_LOCAL) (uid_t, char *)
- __attribute__ ((nocommon));
-cryptkeyres *(*__key_decryptsession_pk_LOCAL) (uid_t, char *)
- __attribute__ ((nocommon));
-des_block *(*__key_gendes_LOCAL) (uid_t, char *) __attribute__ ((nocommon));
+cryptkeyres *(*__key_encryptsession_pk_LOCAL) (uid_t, char *);
+cryptkeyres *(*__key_decryptsession_pk_LOCAL) (uid_t, char *);
+des_block *(*__key_gendes_LOCAL) (uid_t, char *);
#ifdef SHARED
# ifndef EXPORT_RPC_SYMBOLS
compat_symbol (libc, __key_encryptsession_pk_LOCAL,
diff --git a/sunrpc/rpc_common.c b/sunrpc/rpc_common.c
index 05abab2..97e90be 100644
--- a/sunrpc/rpc_common.c
+++ b/sunrpc/rpc_common.c
@@ -42,15 +42,13 @@
/* 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
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)
-/* The variables need the nocommon attribute, so that it is possible
- to create aliases and specify symbol versions. */
-fd_set svc_fdset __attribute__ ((nocommon));
-struct rpc_createerr rpc_createerr __attribute__ ((nocommon));
-struct pollfd *svc_pollfd __attribute__ ((nocommon));
-int svc_max_pollfd __attribute__ ((nocommon));
+fd_set svc_fdset;
+struct rpc_createerr rpc_createerr;
+struct pollfd *svc_pollfd;
+int svc_max_pollfd;
#ifdef SHARED
# ifndef EXPORT_RPC_SYMBOLS
compat_symbol (libc, svc_fdset, svc_fdset, GLIBC_2_0);
diff --git a/sunrpc/svcauth_des.c b/sunrpc/svcauth_des.c
index 25a85c9..dba66a0 100644
--- a/sunrpc/svcauth_des.c
+++ b/sunrpc/svcauth_des.c
@@ -93,7 +93,7 @@ struct
u_long ncachereplays; /* times cache hit, and is replay */
u_long ncachemisses; /* times cache missed */
}
-svcauthdes_stats __attribute__ ((nocommon));
+svcauthdes_stats;
#ifdef SHARED
compat_symbol (libc, svcauthdes_stats, svcauthdes_stats, GLIBC_2_0);
#endif
diff --git a/sysdeps/nptl/dl-tls_init_tp.c b/sysdeps/nptl/dl-tls_init_tp.c
index c3349dd..ca494dd 100644
--- a/sysdeps/nptl/dl-tls_init_tp.c
+++ b/sysdeps/nptl/dl-tls_init_tp.c
@@ -23,11 +23,11 @@
#include <tls.h>
#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)
#endif
-bool __nptl_initial_report_events __attribute__ ((nocommon));
+bool __nptl_initial_report_events;
rtld_hidden_def (__nptl_initial_report_events)
#ifdef SHARED
diff --git a/sysdeps/powerpc/nofpu/sim-full.c b/sysdeps/powerpc/nofpu/sim-full.c
index 1867e8d..ab1e97d 100644
--- a/sysdeps/powerpc/nofpu/sim-full.c
+++ b/sysdeps/powerpc/nofpu/sim-full.c
@@ -22,18 +22,18 @@
#include "soft-supp.h"
/* 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);
/* By default, no exceptions should trap. */
__thread int __sim_disabled_exceptions_thread = 0xffffffff;
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);
#if SIM_GLOBAL_COMPAT
-int __sim_exceptions_global __attribute__ ((nocommon));
+int __sim_exceptions_global;
libc_hidden_data_def (__sim_exceptions_global);
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_disabled_exceptions);
-int __sim_round_mode_global __attribute__ ((nocommon));
+int __sim_round_mode_global;
libc_hidden_data_def (__sim_round_mode_global);
SIM_COMPAT_SYMBOL (__sim_round_mode_global, __sim_round_mode);
#endif
diff --git a/sysdeps/unix/sysv/linux/timer_routines.c b/sysdeps/unix/sysv/linux/timer_routines.c
index 30ad32b..02bad03 100644
--- a/sysdeps/unix/sysv/linux/timer_routines.c
+++ b/sysdeps/unix/sysv/linux/timer_routines.c
@@ -107,12 +107,11 @@ timer_helper_thread (void *arg)
/* Control variable for helper thread creation. */
-pthread_once_t __timer_helper_once __attribute__ ((nocommon))
- = PTHREAD_ONCE_INIT;
+pthread_once_t __timer_helper_once = PTHREAD_ONCE_INIT;
/* 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. */