mirror of
https://sourceware.org/git/glibc.git
synced 2026-10-24 01:33:52 +03:00
Clang issues a warning for double alias redirection, indicating that thei
original symbol is used even if a weak definition attempts to override it.
For instance, in the construction:
int __internal_impl (...) {}
weak_alias (__internal_impl, external_impl);
#if SOMETHING
weak_alias (external_impl, another_external_impl)
#endif
Clang warns that another_external_impl always resolves to __internal_impl,
even if external_impl is a weak reference. Using the internal symbol for
both aliases resolves this warning.
This issue also occurs with certain libc_hidden_def usage:
int __internal_impl (...) {}
weak_alias (__internal_impl, __internal_alias)
libc_hidden_weak (__internal_alias)
In this case, using a strong_alias is sufficient to avoid the warning
(since the alias is internal, there is no need to use a weak alias).
However, for the constructions like:
int __internal_impl (...) {}
weak_alias (__internal_impl, __internal_alias)
libc_hidden_def (__internal_alias)
weak_alias (__internal_impl, external_alias)
libc_hidden_def (external_alias)
Clang warns that the internal external_alias will always resolve to
__GI___internal_impl, even if a weak definition of __GI_internal_impl is
overridden. For this case, a new macro named static_weak_alias is used
to create a strong alias for SHARED, or a weak_alias otherwise.
With these changes, there is no need to check and enable the
-Wno-ignored-attributes suppression when using clang.
Checked with a build on affected ABIs, and a full check on aarch64,
armhf, i686, and x86_64.
Reviewed-by: Sam James <sam@gentoo.org>
150 lines
3.3 KiB
Makefile
150 lines
3.3 KiB
Makefile
# Copyright (C) 1991-2025 Free Software Foundation, Inc.
|
|
# This file is part of the GNU C Library.
|
|
|
|
# The GNU C Library is free software; you can redistribute it and/or
|
|
# modify it under the terms of the GNU Lesser General Public
|
|
# License as published by the Free Software Foundation; either
|
|
# version 2.1 of the License, or (at your option) any later version.
|
|
|
|
# The GNU C Library is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
# Lesser General Public License for more details.
|
|
|
|
# You should have received a copy of the GNU Lesser General Public
|
|
# License along with the GNU C Library; if not, see
|
|
# <https://www.gnu.org/licenses/>.
|
|
|
|
#
|
|
# Sub-makefile for inet portion of the library.
|
|
#
|
|
subdir := inet
|
|
|
|
include ../Makeconfig
|
|
|
|
headers := \
|
|
$(wildcard arpa/*.h protocols/*.h) \
|
|
bits/in.h \
|
|
bits/inet-fortified-decl.h \
|
|
bits/inet-fortified.h \
|
|
ifaddrs.h \
|
|
netinet/ether.h \
|
|
netinet/icmp6.h \
|
|
netinet/if_ether.h \
|
|
netinet/igmp.h \
|
|
netinet/in.h \
|
|
netinet/in_systm.h \
|
|
netinet/ip.h \
|
|
netinet/ip6.h \
|
|
netinet/tcp.h \
|
|
rpc/netdb.h \
|
|
# headers
|
|
|
|
routines := \
|
|
bindresvport \
|
|
deadline \
|
|
ether_aton \
|
|
ether_aton_r \
|
|
ether_line \
|
|
ether_ntoa \
|
|
ether_ntoa_r \
|
|
getipv4sourcefilter \
|
|
getsourcefilter \
|
|
herrno \
|
|
herrno-loc \
|
|
htonl \
|
|
htons \
|
|
idna \
|
|
idna_name_classify \
|
|
if_index \
|
|
ifaddrs \
|
|
in6_addr \
|
|
inet6_opt \
|
|
inet6_option \
|
|
inet6_rth \
|
|
inet6_scopeid_pton \
|
|
inet_lnaof \
|
|
inet_mkadr \
|
|
inet_net \
|
|
inet_netof \
|
|
inet_ntoa \
|
|
rcmd \
|
|
rexec \
|
|
ruserpass \
|
|
setipv4sourcefilter \
|
|
setsourcefilter \
|
|
# routines
|
|
|
|
install-others = $(inst_sysconfdir)/rpc
|
|
|
|
aux := check_pf check_native ifreq
|
|
|
|
tests := \
|
|
bug-if1 \
|
|
htontest \
|
|
test-hnto-types \
|
|
test-ifaddrs \
|
|
test-inet6_opt \
|
|
test_ifindex \
|
|
tst-checks \
|
|
tst-checks-posix \
|
|
tst-ether_aton \
|
|
tst-ether_line \
|
|
tst-getni1 \
|
|
tst-getni2 \
|
|
tst-if_index-long \
|
|
tst-if_nameindex \
|
|
tst-inet6_rth \
|
|
tst-network \
|
|
tst-ntoa \
|
|
tst-sockaddr \
|
|
# tests
|
|
|
|
# tst-deadline must be linked statically so that we can access
|
|
# internal functions.
|
|
tests-static += tst-deadline
|
|
tests-internal += tst-deadline
|
|
|
|
# tst-idna_name_classify must be linked statically because it tests
|
|
# internal functionality.
|
|
tests-static += tst-idna_name_classify
|
|
tests-internal += tst-idna_name_classify
|
|
|
|
# tst-inet6_scopeid_pton also needs internal functions but does not
|
|
# need to be linked statically.
|
|
tests-internal += tst-inet6_scopeid_pton
|
|
|
|
include ../Rules
|
|
|
|
LOCALES := en_US.UTF-8 en_US.ISO-8859-1
|
|
include ../gen-locales.mk
|
|
|
|
ifeq ($(have-thread-library),yes)
|
|
|
|
CFLAGS-rcmd.c += -fexceptions
|
|
CFLAGS-either_ntoh.c += -fexceptions
|
|
CFLAGS-either_hton.c += -fexceptions
|
|
|
|
CFLAGS-tst-checks-posix.c += -std=c99
|
|
CFLAGS-tst-sockaddr.c += -fno-strict-aliasing
|
|
|
|
endif
|
|
|
|
# Install the rpc database file.
|
|
$(inst_sysconfdir)/rpc: etc.rpc $(+force)
|
|
$(do-install)
|
|
|
|
ifeq ($(build-static-nss),yes)
|
|
CFLAGS += -DSTATIC_NSS
|
|
endif
|
|
|
|
ifeq ($(have-test-clang),yes)
|
|
CFLAGS-tst-deadline.c += -Wno-ignored-attributes
|
|
endif
|
|
|
|
# The test uses dlopen indirectly and would otherwise load system
|
|
# objects.
|
|
tst-idna_name_classify-ENV = \
|
|
LD_LIBRARY_PATH=$(ld-library-path):$(common-objpfx):$(common-objpfx)elf
|
|
$(objpfx)tst-idna_name_classify.out: $(gen-locales)
|