* [RFC] Fix static-only build of glibc [BZ #20845]
@ 2021-03-09 20:59 Carlos Eduardo Seo
2021-03-09 21:33 ` Joseph Myers
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Carlos Eduardo Seo @ 2021-03-09 20:59 UTC (permalink / raw)
To: libc-alpha
The following patch fixes the build when configuring with '--disable-shared'.
However, a second phase for properly fixing this will be required, as the tests need to be triaged (i.e. what should be running and what should not when building with --disable-shared). My proposal is to first fix the build (this patch) and then start looking at the tests and fixing those in subsequent patches. Does that sound reasonable?
Thanks,
Carlos
--- >8 ---
This fixes the build when configuring with --disable-shared.
'make' passes on x86_64-linux-gnu, aarch64-linux-gnu and powerpc64le-linux-gnu.
---
Makeconfig | 5 +---
Makefile | 4 +++
Makerules | 8 +++---
include/shlib-compat.h | 34 +++++++++++++-----------
nscd/nscd.c | 2 +-
nss/nss_module.c | 3 +++
support/Makefile | 4 +++
sysdeps/unix/sysv/linux/aarch64/Makefile | 2 --
sysdeps/unix/sysv/linux/powerpc/Makefile | 2 --
9 files changed, 37 insertions(+), 27 deletions(-)
diff --git a/Makeconfig b/Makeconfig
index 0a4811b5e5..b884de1d77 100644
--- a/Makeconfig
+++ b/Makeconfig
@@ -1092,8 +1092,6 @@ subdir-srcdirs = $(foreach dir,$(subdirs),\
sed '/^[ ]*#/d;/^[ ]*$$/d' $< > $@T
mv -f $@T $@
-ifeq (yes, $(build-shared))
-
# To generate a header to support more than one ABI for different
# architecture variants, the CPU/Makefile defines abi-variants to be a
# list of names for those variants (e.g. 32 64), and, for each variant,
@@ -1176,7 +1174,6 @@ endif
# Generate version maps, but wait until sysdep-subdirs is known
ifeq ($(sysd-sorted-done),t)
-ifeq ($(build-shared),yes)
-include $(common-objpfx)sysd-versions
-include $(common-objpfx)Versions.mk
$(addprefix $(common-objpfx),$(version-maps)): $(common-objpfx)sysd-versions
@@ -1226,12 +1223,12 @@ $(common-objpfx)versions.stmp: $(common-objpfx)Versions.all \
mv -f $(common-objpfx)sysd-versionsT $(common-objpfx)sysd-versions
touch $@
endif # avoid-generated
-endif # $(build-shared) = yes
endif # sysd-sorted-done
# The name under which the run-time dynamic linker is installed.
# We are currently going for the convention that `/lib/ld.so.1'
# names the SVR4/ELF ABI-compliant dynamic linker.
+ifeq ($(build-shared),yes)
ifndef rtld-installed-name
ifdef ld.so-version
rtld-installed-name = $(ld.so-version)
diff --git a/Makefile b/Makefile
index 50f99ca611..5cd7b01340 100644
--- a/Makefile
+++ b/Makefile
@@ -583,11 +583,15 @@ endef
# (which we do not build) that GCC-compiled programs depend on.
+ifeq (yes, $(build-shared))
ifeq (,$(CXX))
LINKS_DSO_PROGRAM = links-dso-program-c
else
LINKS_DSO_PROGRAM = links-dso-program
endif
+else
+LINKS_DSO_PROGRAM =
+endif
$(tests-container) $(addsuffix /tests,$(subdirs)) : \
$(objpfx)testroot.pristine/install.stamp
diff --git a/Makerules b/Makerules
index ca9885436e..52e7357d76 100644
--- a/Makerules
+++ b/Makerules
@@ -93,7 +93,6 @@ before-compile := $(filter $(common-objpfx)mach% $(common-objpfx)hurd%,\
$(before-compile))
# Even before that, we need abi-versions.h which is generated right here.
-ifeq ($(build-shared),yes)
ifndef avoid-generated
before-compile := $(common-objpfx)abi-versions.h $(before-compile)
$(common-objpfx)abi-versions.h: $(..)scripts/abi-versions.awk \
@@ -113,7 +112,6 @@ before-compile := $(common-objpfx)first-versions.h \
$(common-objpfx)first-versions.h: $(common-objpfx)versions.stmp
$(common-objpfx)ldbl-compat-choose.h: $(common-objpfx)versions.stmp
endif # avoid-generated
-endif # $(build-shared) = yes
ifndef avoid-generated
ifneq (,$(CXX))
@@ -280,6 +278,7 @@ $(common-objpfx)%.h $(common-objpfx)%.h.d: $(..)scripts/gen-as-const.py \
vpath %.sym $(sysdirs)
before-compile += $(gen-as-const-headers:%.sym=$(common-objpfx)%.h)
+ifeq (yes, $(build-shared))
tests-internal += $(gen-as-const-headers:%.sym=test-as-const-%)
generated += $(gen-as-const-headers:%.sym=test-as-const-%.c)
$(objpfx)test-as-const-%.c: $(..)scripts/gen-as-const.py $(..)Makerules \
@@ -288,6 +287,7 @@ $(objpfx)test-as-const-%.c: $(..)scripts/gen-as-const.py $(..)Makerules \
$(PYTHON) $< --test $(filter %.sym,$^)) > $@T
mv -f $@T $@
endif
+endif
\f
ifeq (yes,$(build-shared))
# Generate the header containing the names of all shared libraries.
@@ -1049,6 +1049,7 @@ $(LN_S) `$(..)scripts/rellns-sh -p $< $@` $@
endef
endif
+ifeq ($(build-shared),yes)
ifdef libc.so-version
# For a library specified to be version N, install three files:
# libc.so -> libc.so.N (e.g. libc.so.6)
@@ -1102,7 +1103,8 @@ else
install: $(inst_slibdir)/libc.so
$(inst_slibdir)/libc.so: $(common-objpfx)libc.so $(+force)
$(do-install-program)
-endif
+endif # libc.so-version
+endif # build-shared
ifneq (,$(versioned))
# Produce three sets of rules as above for all the smaller versioned libraries.
diff --git a/include/shlib-compat.h b/include/shlib-compat.h
index 28baef1ea4..af8019e43a 100644
--- a/include/shlib-compat.h
+++ b/include/shlib-compat.h
@@ -104,21 +104,6 @@
_compat_symbol_unique (lib, name, _compat_symbol_unique_alias (name), \
version)
-#else
-
-/* Not compiling ELF shared libraries at all, so never any old versions. */
-# define SHLIB_COMPAT(lib, introduced, obsoleted) 0
-
-/* No versions to worry about, just make this the global definition. */
-# define versioned_symbol(lib, local, symbol, version) \
- weak_alias (local, symbol)
-
-/* This should not appear outside `#if SHLIB_COMPAT (...)'. */
-# define compat_symbol(lib, local, symbol, version) ...
-# define compat_symbol_unique(lib, name, version) ...
-
-#endif
-
/* Use compat_symbol_reference for a reference *or* definition of a
specific version of a symbol. Definitions are primarily used to
ensure tests reference the exact compat symbol required, or define an
@@ -146,4 +131,23 @@
(!(ABI_##lib##_##obsoleted - 0) \
|| ((ABI_##lib##_##introduced - 0) < (ABI_##lib##_##obsoleted - 0)))
+#else
+
+/* Not compiling ELF shared libraries at all, so never any old versions. */
+# define SHLIB_COMPAT(lib, introduced, obsoleted) 0
+
+/* No versions to worry about, just make this the global definition. */
+# define versioned_symbol(lib, local, symbol, version) \
+ weak_alias (local, symbol)
+
+/* This should not appear outside `#if SHLIB_COMPAT (...)'. */
+# define compat_symbol(lib, local, symbol, version) ...
+# define compat_symbol_unique(lib, name, version) ...
+
+# define compat_symbol_reference(lib, local, symbol, version)
+
+# define TEST_COMPAT(lib, introduced, obsoleted) 0
+
+#endif /* SHARED */
+
#endif /* shlib-compat.h */
diff --git a/nscd/nscd.c b/nscd/nscd.c
index 3ca7c522c2..359df91b4b 100644
--- a/nscd/nscd.c
+++ b/nscd/nscd.c
@@ -314,7 +314,7 @@ main (int argc, char **argv)
# endif
#endif
-#ifdef USE_NSCD
+#if defined SHARED && defined USE_NSCD
/* Make sure we do not get recursive calls. */
__nss_disable_nscd (register_traced_file);
#endif
diff --git a/nss/nss_module.c b/nss/nss_module.c
index 60c070c851..7bf0196f40 100644
--- a/nss/nss_module.c
+++ b/nss/nss_module.c
@@ -55,6 +55,9 @@ __libc_lock_define (static, nss_module_list_lock);
static bool is_nscd;
/* The callback passed to the init functions when nscd is used. */
static void (*nscd_init_cb) (size_t, struct traced_file *);
+#else
+# define is_nscd (0)
+# define nscd_init_cb (NULL)
#endif
/* Allocate the service NAME with length NAME_LENGTH. If the service
diff --git a/support/Makefile b/support/Makefile
index 8d63fbd5da..b7079e5591 100644
--- a/support/Makefile
+++ b/support/Makefile
@@ -211,12 +211,16 @@ CFLAGS-support_paths.c = \
# -fexcess-precision=standard.
CFLAGS-timespec.c += -fexcess-precision=standard
+ifeq (yes, $(build-shared))
ifeq (,$(CXX))
LINKS_DSO_PROGRAM = links-dso-program-c
else
LINKS_DSO_PROGRAM = links-dso-program
LDLIBS-links-dso-program = -lstdc++ -lgcc -lgcc_s $(libunwind)
endif
+else
+LINKS_DSO_PROGRAM =
+endif
ifeq (yes,$(have-selinux))
LDLIBS-$(LINKS_DSO_PROGRAM) += -lselinux
diff --git a/sysdeps/unix/sysv/linux/aarch64/Makefile b/sysdeps/unix/sysv/linux/aarch64/Makefile
index 3f22f71bef..41b284df17 100644
--- a/sysdeps/unix/sysv/linux/aarch64/Makefile
+++ b/sysdeps/unix/sysv/linux/aarch64/Makefile
@@ -1,9 +1,7 @@
ifeq ($(subdir),elf)
-ifeq ($(build-shared),yes)
# This is needed for DSO loading from static binaries.
sysdep-dl-routines += dl-static
endif
-endif
ifeq ($(subdir),misc)
sysdep_headers += sys/elf.h
diff --git a/sysdeps/unix/sysv/linux/powerpc/Makefile b/sysdeps/unix/sysv/linux/powerpc/Makefile
index a093cda68b..c567d6782a 100644
--- a/sysdeps/unix/sysv/linux/powerpc/Makefile
+++ b/sysdeps/unix/sysv/linux/powerpc/Makefile
@@ -13,10 +13,8 @@ gen-as-const-headers += ucontext_i.sym
endif
ifeq ($(subdir),elf)
-ifeq ($(build-shared),yes)
# This is needed for DSO loading from static binaries.
sysdep-dl-routines += dl-static
-endif
# Otherwise tst-tls-dlinfo fails due to tst-tlsmod2.so using static tls.
LDFLAGS-tst-tlsmod2.so += -Wl,--no-tls-get-addr-optimize
endif
--
2.25.1
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [RFC] Fix static-only build of glibc [BZ #20845]
2021-03-09 20:59 [RFC] Fix static-only build of glibc [BZ #20845] Carlos Eduardo Seo
@ 2021-03-09 21:33 ` Joseph Myers
2021-03-15 13:42 ` Florian Weimer
2021-03-15 14:22 ` Szabolcs Nagy
2 siblings, 0 replies; 6+ messages in thread
From: Joseph Myers @ 2021-03-09 21:33 UTC (permalink / raw)
To: Carlos Eduardo Seo; +Cc: libc-alpha
On Tue, 9 Mar 2021, Carlos Eduardo Seo via Libc-alpha wrote:
> 'make' passes on x86_64-linux-gnu, aarch64-linux-gnu and
> powerpc64le-linux-gnu.
Another key piece of validation is that a default build, without
--disable-shared, is unaffected.
* The installation tree should be byte-for-byte identical before and after
this patch, at least after stripping binaries if there are otherwise
issues with line numbers in debug info, and eliminating timestamps in .a
files as needed. If any differences remain, they should be clearly
explained.
* The testsuite should also complete with unchanged results in a default
build.
--
Joseph S. Myers
joseph@codesourcery.com
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [RFC] Fix static-only build of glibc [BZ #20845]
2021-03-09 20:59 [RFC] Fix static-only build of glibc [BZ #20845] Carlos Eduardo Seo
2021-03-09 21:33 ` Joseph Myers
@ 2021-03-15 13:42 ` Florian Weimer
2021-03-15 15:25 ` Carlos Seo
2021-03-15 14:22 ` Szabolcs Nagy
2 siblings, 1 reply; 6+ messages in thread
From: Florian Weimer @ 2021-03-15 13:42 UTC (permalink / raw)
To: Carlos Eduardo Seo via Libc-alpha
* Carlos Eduardo Seo via Libc-alpha:
> The following patch fixes the build when configuring with '--disable-shared'.
>
> However, a second phase for properly fixing this will be required, as
> the tests need to be triaged (i.e. what should be running and what
> should not when building with --disable-shared). My proposal is to
> first fix the build (this patch) and then start looking at the tests
> and fixing those in subsequent patches. Does that sound reasonable?
Could you split this up by root cause, and mention them in the commit
message?
Some parts are easy to review, others, not so. And for the latter
category, it would help to have some rationale for the change.
Thanks,
Florian
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [RFC] Fix static-only build of glibc [BZ #20845]
2021-03-09 20:59 [RFC] Fix static-only build of glibc [BZ #20845] Carlos Eduardo Seo
2021-03-09 21:33 ` Joseph Myers
2021-03-15 13:42 ` Florian Weimer
@ 2021-03-15 14:22 ` Szabolcs Nagy
2021-03-15 15:24 ` Carlos Seo
2 siblings, 1 reply; 6+ messages in thread
From: Szabolcs Nagy @ 2021-03-15 14:22 UTC (permalink / raw)
To: Carlos Eduardo Seo; +Cc: libc-alpha
The 03/09/2021 17:59, Carlos Eduardo Seo via Libc-alpha wrote:
> The following patch fixes the build when configuring with '--disable-shared'.
...
> diff --git a/sysdeps/unix/sysv/linux/aarch64/Makefile b/sysdeps/unix/sysv/linux/aarch64/Makefile
> index 3f22f71bef..41b284df17 100644
> --- a/sysdeps/unix/sysv/linux/aarch64/Makefile
> +++ b/sysdeps/unix/sysv/linux/aarch64/Makefile
> @@ -1,9 +1,7 @@
> ifeq ($(subdir),elf)
> -ifeq ($(build-shared),yes)
> # This is needed for DSO loading from static binaries.
> sysdep-dl-routines += dl-static
> endif
> -endif
>
> ifeq ($(subdir),misc)
> sysdep_headers += sys/elf.h
this one is ok to fix separately:
dl-static.o defines _dl_static_init which is used for static linking.
(i think the same problem in other targets can be fixed together,
this is a fairly obvious change.)
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [RFC] Fix static-only build of glibc [BZ #20845]
2021-03-15 14:22 ` Szabolcs Nagy
@ 2021-03-15 15:24 ` Carlos Seo
0 siblings, 0 replies; 6+ messages in thread
From: Carlos Seo @ 2021-03-15 15:24 UTC (permalink / raw)
To: Szabolcs Nagy; +Cc: GLIBC
> On 15 Mar 2021, at 11:22, Szabolcs Nagy <szabolcs.nagy@arm.com> wrote:
>
> The 03/09/2021 17:59, Carlos Eduardo Seo via Libc-alpha wrote:
>> The following patch fixes the build when configuring with '--disable-shared'.
> ...
>> diff --git a/sysdeps/unix/sysv/linux/aarch64/Makefile b/sysdeps/unix/sysv/linux/aarch64/Makefile
>> index 3f22f71bef..41b284df17 100644
>> --- a/sysdeps/unix/sysv/linux/aarch64/Makefile
>> +++ b/sysdeps/unix/sysv/linux/aarch64/Makefile
>> @@ -1,9 +1,7 @@
>> ifeq ($(subdir),elf)
>> -ifeq ($(build-shared),yes)
>> # This is needed for DSO loading from static binaries.
>> sysdep-dl-routines += dl-static
>> endif
>> -endif
>>
>> ifeq ($(subdir),misc)
>> sysdep_headers += sys/elf.h
>
> this one is ok to fix separately:
>
> dl-static.o defines _dl_static_init which is used for static linking.
>
> (i think the same problem in other targets can be fixed together,
> this is a fairly obvious change.)
OK, I'll send a patch for this separately later today.
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [RFC] Fix static-only build of glibc [BZ #20845]
2021-03-15 13:42 ` Florian Weimer
@ 2021-03-15 15:25 ` Carlos Seo
0 siblings, 0 replies; 6+ messages in thread
From: Carlos Seo @ 2021-03-15 15:25 UTC (permalink / raw)
To: Florian Weimer; +Cc: GLIBC
> On 15 Mar 2021, at 10:42, Florian Weimer <fweimer@redhat.com> wrote:
>
> Could you split this up by root cause, and mention them in the commit
> message?
>
> Some parts are easy to review, others, not so. And for the latter
> category, it would help to have some rationale for the change.
>
OK, I'll respin this and send it again after I fix the issue Szabolcs mentioned.
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2021-03-15 15:25 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-03-09 20:59 [RFC] Fix static-only build of glibc [BZ #20845] Carlos Eduardo Seo
2021-03-09 21:33 ` Joseph Myers
2021-03-15 13:42 ` Florian Weimer
2021-03-15 15:25 ` Carlos Seo
2021-03-15 14:22 ` Szabolcs Nagy
2021-03-15 15:24 ` Carlos Seo
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).