https://gcc.gnu.org/g:10360c1b0d45ae129df616a9e9b1db5f2a2eaef8
commit r16-827-g10360c1b0d45ae129df616a9e9b1db5f2a2eaef8 Author: Alexandre Oliva <ol...@adacore.com> Date: Thu May 22 15:15:31 2025 -0300 [vxworks] build partial libatomic Since vxworks' libc contains much of libatomic, in not-very-granular modules, building all of libatomic doesn't work very well. However, some expected entry points are not present in libc, so arrange for libatomic to build only those missing bits. for libatomic/ChangeLog * configure.tgt: Set partial_libatomic on *-*-vxworks*. * configure.ac (PARTIAL_VXWORKS): New AM_CONDITIONAL. * Makefile.am (libatomic_la_SOURCES): Select few sources for PARTIAL_VXWORKS. * configure, Makefile.in: Rebuilt. Diff: --- libatomic/Makefile.am | 8 +++- libatomic/Makefile.in | 109 +++++++++++++++++++++++++++--------------------- libatomic/configure | 20 ++++++++- libatomic/configure.ac | 3 ++ libatomic/configure.tgt | 4 ++ 5 files changed, 93 insertions(+), 51 deletions(-) diff --git a/libatomic/Makefile.am b/libatomic/Makefile.am index 0f1a71560848..65dff6ece9ff 100644 --- a/libatomic/Makefile.am +++ b/libatomic/Makefile.am @@ -70,11 +70,16 @@ endif libatomic_la_LDFLAGS = $(libatomic_version_info) $(libatomic_version_script) \ $(lt_host_flags) $(libatomic_darwin_rpath) + +SIZES = @SIZES@ + +if PARTIAL_VXWORKS +libatomic_la_SOURCES = fenv.c fence.c flag.c +else libatomic_la_SOURCES = gload.c gstore.c gcas.c gexch.c glfree.c lock.c init.c \ fenv.c fence.c flag.c SIZEOBJS = load store cas exch fadd fsub fand fior fxor fnand tas -SIZES = @SIZES@ EXTRA_libatomic_la_SOURCES = $(addsuffix _n.c,$(SIZEOBJS)) libatomic_la_DEPENDENCIES = $(libatomic_la_LIBADD) $(libatomic_version_dep) @@ -152,6 +157,7 @@ endif if ARCH_AARCH64_LINUX libatomic_la_SOURCES += atomic_16.S endif +endif libatomic_convenience_la_SOURCES = $(libatomic_la_SOURCES) libatomic_convenience_la_LIBADD = $(libatomic_la_LIBADD) diff --git a/libatomic/Makefile.in b/libatomic/Makefile.in index 9798e7c09e99..4344ac4a2e8f 100644 --- a/libatomic/Makefile.in +++ b/libatomic/Makefile.in @@ -89,18 +89,18 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ -@ARCH_AARCH64_LINUX_TRUE@@HAVE_IFUNC_TRUE@am__append_1 = $(foreach s,$(SIZES),$(addsuffix _$(s)_1_.lo,$(SIZEOBJS))) -@ARCH_ARM_LINUX_TRUE@@HAVE_IFUNC_TRUE@am__append_2 = $(foreach \ -@ARCH_ARM_LINUX_TRUE@@HAVE_IFUNC_TRUE@ s,$(SIZES),$(addsuffix \ -@ARCH_ARM_LINUX_TRUE@@HAVE_IFUNC_TRUE@ _$(s)_1_.lo,$(SIZEOBJS))) \ -@ARCH_ARM_LINUX_TRUE@@HAVE_IFUNC_TRUE@ $(addsuffix \ -@ARCH_ARM_LINUX_TRUE@@HAVE_IFUNC_TRUE@ _8_2_.lo,$(SIZEOBJS)) \ -@ARCH_ARM_LINUX_TRUE@@HAVE_IFUNC_TRUE@ tas_1_2_.lo -@ARCH_I386_TRUE@@HAVE_IFUNC_TRUE@am__append_3 = $(addsuffix _8_1_.lo,$(SIZEOBJS)) -@ARCH_X86_64_TRUE@@HAVE_IFUNC_TRUE@am__append_4 = $(addsuffix _16_1_.lo,$(SIZEOBJS)) \ -@ARCH_X86_64_TRUE@@HAVE_IFUNC_TRUE@ $(addsuffix _16_2_.lo,$(SIZEOBJS)) - -@ARCH_AARCH64_LINUX_TRUE@am__append_5 = atomic_16.S +@ARCH_AARCH64_LINUX_TRUE@@HAVE_IFUNC_TRUE@@PARTIAL_VXWORKS_FALSE@am__append_1 = $(foreach s,$(SIZES),$(addsuffix _$(s)_1_.lo,$(SIZEOBJS))) +@ARCH_ARM_LINUX_TRUE@@HAVE_IFUNC_TRUE@@PARTIAL_VXWORKS_FALSE@am__append_2 = $(foreach \ +@ARCH_ARM_LINUX_TRUE@@HAVE_IFUNC_TRUE@@PARTIAL_VXWORKS_FALSE@ s,$(SIZES),$(addsuffix \ +@ARCH_ARM_LINUX_TRUE@@HAVE_IFUNC_TRUE@@PARTIAL_VXWORKS_FALSE@ _$(s)_1_.lo,$(SIZEOBJS))) \ +@ARCH_ARM_LINUX_TRUE@@HAVE_IFUNC_TRUE@@PARTIAL_VXWORKS_FALSE@ $(addsuffix \ +@ARCH_ARM_LINUX_TRUE@@HAVE_IFUNC_TRUE@@PARTIAL_VXWORKS_FALSE@ _8_2_.lo,$(SIZEOBJS)) \ +@ARCH_ARM_LINUX_TRUE@@HAVE_IFUNC_TRUE@@PARTIAL_VXWORKS_FALSE@ tas_1_2_.lo +@ARCH_I386_TRUE@@HAVE_IFUNC_TRUE@@PARTIAL_VXWORKS_FALSE@am__append_3 = $(addsuffix _8_1_.lo,$(SIZEOBJS)) +@ARCH_X86_64_TRUE@@HAVE_IFUNC_TRUE@@PARTIAL_VXWORKS_FALSE@am__append_4 = $(addsuffix _16_1_.lo,$(SIZEOBJS)) \ +@ARCH_X86_64_TRUE@@HAVE_IFUNC_TRUE@@PARTIAL_VXWORKS_FALSE@ $(addsuffix _16_2_.lo,$(SIZEOBJS)) + +@ARCH_AARCH64_LINUX_TRUE@@PARTIAL_VXWORKS_FALSE@am__append_5 = atomic_16.S subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ @@ -156,10 +156,14 @@ am__uninstall_files_from_dir = { \ } am__installdirs = "$(DESTDIR)$(toolexeclibdir)" LTLIBRARIES = $(noinst_LTLIBRARIES) $(toolexeclib_LTLIBRARIES) -@ARCH_AARCH64_LINUX_TRUE@am__objects_1 = atomic_16.lo -am_libatomic_la_OBJECTS = gload.lo gstore.lo gcas.lo gexch.lo \ - glfree.lo lock.lo init.lo fenv.lo fence.lo flag.lo \ - $(am__objects_1) +@ARCH_AARCH64_LINUX_TRUE@@PARTIAL_VXWORKS_FALSE@am__objects_1 = \ +@ARCH_AARCH64_LINUX_TRUE@@PARTIAL_VXWORKS_FALSE@ atomic_16.lo +@PARTIAL_VXWORKS_FALSE@am_libatomic_la_OBJECTS = gload.lo gstore.lo \ +@PARTIAL_VXWORKS_FALSE@ gcas.lo gexch.lo glfree.lo lock.lo \ +@PARTIAL_VXWORKS_FALSE@ init.lo fenv.lo fence.lo flag.lo \ +@PARTIAL_VXWORKS_FALSE@ $(am__objects_1) +@PARTIAL_VXWORKS_TRUE@am_libatomic_la_OBJECTS = fenv.lo fence.lo \ +@PARTIAL_VXWORKS_TRUE@ flag.lo $(am__objects_1) libatomic_la_OBJECTS = $(am_libatomic_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) @@ -169,8 +173,12 @@ libatomic_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libatomic_la_LDFLAGS) $(LDFLAGS) -o $@ libatomic_convenience_la_DEPENDENCIES = $(libatomic_la_LIBADD) -am__objects_2 = gload.lo gstore.lo gcas.lo gexch.lo glfree.lo lock.lo \ - init.lo fenv.lo fence.lo flag.lo $(am__objects_1) +@PARTIAL_VXWORKS_FALSE@am__objects_2 = gload.lo gstore.lo gcas.lo \ +@PARTIAL_VXWORKS_FALSE@ gexch.lo glfree.lo lock.lo init.lo \ +@PARTIAL_VXWORKS_FALSE@ fenv.lo fence.lo flag.lo \ +@PARTIAL_VXWORKS_FALSE@ $(am__objects_1) +@PARTIAL_VXWORKS_TRUE@am__objects_2 = fenv.lo fence.lo flag.lo \ +@PARTIAL_VXWORKS_TRUE@ $(am__objects_1) am_libatomic_convenience_la_OBJECTS = $(am__objects_2) libatomic_convenience_la_OBJECTS = \ $(am_libatomic_convenience_la_OBJECTS) @@ -423,39 +431,44 @@ libatomic_version_info = -version-info $(libtool_VERSION) libatomic_la_LDFLAGS = $(libatomic_version_info) $(libatomic_version_script) \ $(lt_host_flags) $(libatomic_darwin_rpath) -libatomic_la_SOURCES = gload.c gstore.c gcas.c gexch.c glfree.c lock.c \ - init.c fenv.c fence.c flag.c $(am__append_5) -SIZEOBJS = load store cas exch fadd fsub fand fior fxor fnand tas -EXTRA_libatomic_la_SOURCES = $(addsuffix _n.c,$(SIZEOBJS)) -libatomic_la_DEPENDENCIES = $(libatomic_la_LIBADD) $(libatomic_version_dep) -empty = -space = $(empty) $(empty) -PAT_SPLIT = $(subst _,$(space),$(*F)) -PAT_BASE = $(word 1,$(PAT_SPLIT)) -PAT_N = $(word 2,$(PAT_SPLIT)) -PAT_S = $(word 3,$(PAT_SPLIT)) -IFUNC_DEF = -DIFUNC_ALT=$(PAT_S) -IFUNC_OPT = $(word $(PAT_S),$(IFUNC_OPTIONS)) -@AMDEP_TRUE@M_DEPS = -MT $@ -MD -MP -MF $(DEPDIR)/$(@F).Ppo -@AMDEP_FALSE@M_DEPS = -M_SIZE = -DN=$(PAT_N) -M_IFUNC = $(if $(PAT_S),$(IFUNC_DEF) $(IFUNC_OPT)) -M_FILE = $(PAT_BASE)_n.c +@PARTIAL_VXWORKS_FALSE@libatomic_la_SOURCES = gload.c gstore.c gcas.c \ +@PARTIAL_VXWORKS_FALSE@ gexch.c glfree.c lock.c init.c fenv.c \ +@PARTIAL_VXWORKS_FALSE@ fence.c flag.c $(am__append_5) +@PARTIAL_VXWORKS_TRUE@libatomic_la_SOURCES = fenv.c fence.c flag.c \ +@PARTIAL_VXWORKS_TRUE@ $(am__append_5) +@PARTIAL_VXWORKS_FALSE@SIZEOBJS = load store cas exch fadd fsub fand fior fxor fnand tas +@PARTIAL_VXWORKS_FALSE@EXTRA_libatomic_la_SOURCES = $(addsuffix _n.c,$(SIZEOBJS)) +@PARTIAL_VXWORKS_FALSE@libatomic_la_DEPENDENCIES = $(libatomic_la_LIBADD) $(libatomic_version_dep) +@PARTIAL_VXWORKS_FALSE@empty = +@PARTIAL_VXWORKS_FALSE@space = $(empty) $(empty) +@PARTIAL_VXWORKS_FALSE@PAT_SPLIT = $(subst _,$(space),$(*F)) +@PARTIAL_VXWORKS_FALSE@PAT_BASE = $(word 1,$(PAT_SPLIT)) +@PARTIAL_VXWORKS_FALSE@PAT_N = $(word 2,$(PAT_SPLIT)) +@PARTIAL_VXWORKS_FALSE@PAT_S = $(word 3,$(PAT_SPLIT)) +@PARTIAL_VXWORKS_FALSE@IFUNC_DEF = -DIFUNC_ALT=$(PAT_S) +@PARTIAL_VXWORKS_FALSE@IFUNC_OPT = $(word $(PAT_S),$(IFUNC_OPTIONS)) +@PARTIAL_VXWORKS_FALSE@@AMDEP_TRUE@M_DEPS = -MT $@ -MD -MP -MF $(DEPDIR)/$(@F).Ppo +@PARTIAL_VXWORKS_FALSE@@AMDEP_FALSE@M_DEPS = +@PARTIAL_VXWORKS_FALSE@M_SIZE = -DN=$(PAT_N) +@PARTIAL_VXWORKS_FALSE@M_IFUNC = $(if $(PAT_S),$(IFUNC_DEF) $(IFUNC_OPT)) +@PARTIAL_VXWORKS_FALSE@M_FILE = $(PAT_BASE)_n.c # The lack of explicit dependency on the source file means that VPATH cannot # work properly. Instead, perform this operation by hand. First, collect a # list of all .c files in the search path. -all_c_files := $(foreach dir,$(search_path),$(wildcard $(dir)/*.c)) +@PARTIAL_VXWORKS_FALSE@all_c_files := $(foreach dir,$(search_path),$(wildcard $(dir)/*.c)) # Then sort through them to find the one we want, and select the first. -M_SRC = $(firstword $(filter %/$(M_FILE), $(all_c_files))) -libatomic_la_LIBADD = $(foreach s,$(SIZES),$(addsuffix \ - _$(s)_.lo,$(SIZEOBJS))) $(am__append_1) $(am__append_2) \ - $(am__append_3) $(am__append_4) -@ARCH_AARCH64_LINUX_TRUE@@HAVE_IFUNC_TRUE@IFUNC_OPTIONS = -march=armv8-a+lse -@ARCH_ARM_LINUX_TRUE@@HAVE_IFUNC_TRUE@IFUNC_OPTIONS = -march=armv7-a+fp -DHAVE_KERNEL64 -@ARCH_I386_TRUE@@HAVE_IFUNC_TRUE@IFUNC_OPTIONS = -march=i586 -@ARCH_X86_64_TRUE@@HAVE_IFUNC_TRUE@IFUNC_OPTIONS = -mcx16 -mcx16 +@PARTIAL_VXWORKS_FALSE@M_SRC = $(firstword $(filter %/$(M_FILE), $(all_c_files))) +@PARTIAL_VXWORKS_FALSE@libatomic_la_LIBADD = $(foreach \ +@PARTIAL_VXWORKS_FALSE@ s,$(SIZES),$(addsuffix \ +@PARTIAL_VXWORKS_FALSE@ _$(s)_.lo,$(SIZEOBJS))) $(am__append_1) \ +@PARTIAL_VXWORKS_FALSE@ $(am__append_2) $(am__append_3) \ +@PARTIAL_VXWORKS_FALSE@ $(am__append_4) +@ARCH_AARCH64_LINUX_TRUE@@HAVE_IFUNC_TRUE@@PARTIAL_VXWORKS_FALSE@IFUNC_OPTIONS = -march=armv8-a+lse +@ARCH_ARM_LINUX_TRUE@@HAVE_IFUNC_TRUE@@PARTIAL_VXWORKS_FALSE@IFUNC_OPTIONS = -march=armv7-a+fp -DHAVE_KERNEL64 +@ARCH_I386_TRUE@@HAVE_IFUNC_TRUE@@PARTIAL_VXWORKS_FALSE@IFUNC_OPTIONS = -march=i586 +@ARCH_X86_64_TRUE@@HAVE_IFUNC_TRUE@@PARTIAL_VXWORKS_FALSE@IFUNC_OPTIONS = -mcx16 -mcx16 libatomic_convenience_la_SOURCES = $(libatomic_la_SOURCES) libatomic_convenience_la_LIBADD = $(libatomic_la_LIBADD) MULTISRCTOP = @@ -891,10 +904,10 @@ vpath % $(strip $(search_path)) @LIBAT_BUILD_VERSIONED_SHLIB_SUN_TRUE@@LIBAT_BUILD_VERSIONED_SHLIB_TRUE@ $(libatomic_la_OBJECTS) $(libatomic_la_LIBADD) \ @LIBAT_BUILD_VERSIONED_SHLIB_SUN_TRUE@@LIBAT_BUILD_VERSIONED_SHLIB_TRUE@ > $@ || (rm -f $@ ; exit 1) --include $(wildcard $(DEPDIR)/*.Ppo) +@PARTIAL_VXWORKS_FALSE@-include $(wildcard $(DEPDIR)/*.Ppo) -%_.lo: Makefile - $(LTCOMPILE) $(M_DEPS) $(M_SIZE) $(M_IFUNC) -c -o $@ $(M_SRC) +@PARTIAL_VXWORKS_FALSE@%_.lo: Makefile +@PARTIAL_VXWORKS_FALSE@ $(LTCOMPILE) $(M_DEPS) $(M_SIZE) $(M_IFUNC) -c -o $@ $(M_SRC) # Amend the automake generated all-multi rule to guarantee that all-multi # is not run in parallel with the %_.lo rules which generate $(DEPDIR)/*.Ppo diff --git a/libatomic/configure b/libatomic/configure index d579bab96f86..67b3a6388d7f 100755 --- a/libatomic/configure +++ b/libatomic/configure @@ -656,6 +656,8 @@ LIBAT_BUILD_VERSIONED_SHLIB_FALSE LIBAT_BUILD_VERSIONED_SHLIB_TRUE OPT_LDFLAGS SECTION_LDFLAGS +PARTIAL_VXWORKS_FALSE +PARTIAL_VXWORKS_TRUE SYSROOT_CFLAGS_FOR_TARGET enable_aarch64_lse libtool_VERSION @@ -11456,7 +11458,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11459 "configure" +#line 11461 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -11562,7 +11564,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11565 "configure" +#line 11567 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -11932,11 +11934,21 @@ esac # Get target configury. +partial_libatomic= . ${srcdir}/configure.tgt if test -n "$UNSUPPORTED"; then as_fn_error $? "Configuration ${target} is unsupported." "$LINENO" 5 fi + if test "x$partial_libatomic" = "xvxworks"; then + PARTIAL_VXWORKS_TRUE= + PARTIAL_VXWORKS_FALSE='#' +else + PARTIAL_VXWORKS_TRUE='#' + PARTIAL_VXWORKS_FALSE= +fi + + # Write out the ifunc resolver arg type. cat >>confdefs.h <<_ACEOF @@ -15989,6 +16001,10 @@ if test -z "${ENABLE_DARWIN_AT_RPATH_TRUE}" && test -z "${ENABLE_DARWIN_AT_RPATH as_fn_error $? "conditional \"ENABLE_DARWIN_AT_RPATH\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${PARTIAL_VXWORKS_TRUE}" && test -z "${PARTIAL_VXWORKS_FALSE}"; then + as_fn_error $? "conditional \"PARTIAL_VXWORKS\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi if test -z "${LIBAT_BUILD_VERSIONED_SHLIB_TRUE}" && test -z "${LIBAT_BUILD_VERSIONED_SHLIB_FALSE}"; then as_fn_error $? "conditional \"LIBAT_BUILD_VERSIONED_SHLIB\" was never defined. diff --git a/libatomic/configure.ac b/libatomic/configure.ac index aafae71028d2..01141f643769 100644 --- a/libatomic/configure.ac +++ b/libatomic/configure.ac @@ -175,11 +175,14 @@ esac AC_SUBST(SYSROOT_CFLAGS_FOR_TARGET) # Get target configury. +partial_libatomic= . ${srcdir}/configure.tgt if test -n "$UNSUPPORTED"; then AC_MSG_ERROR([Configuration ${target} is unsupported.]) fi +AM_CONDITIONAL(PARTIAL_VXWORKS, test "x$partial_libatomic" = "xvxworks") + # Write out the ifunc resolver arg type. AC_DEFINE_UNQUOTED(IFUNC_RESOLVER_ARGS, $IFUNC_RESOLVER_ARGS, [Define ifunc resolver function argument.]) diff --git a/libatomic/configure.tgt b/libatomic/configure.tgt index 6db039d6e8bb..606d249116af 100644 --- a/libatomic/configure.tgt +++ b/libatomic/configure.tgt @@ -185,6 +185,10 @@ case "${target}" in nvptx*-*-*) ;; + *-*-vxworks*) + partial_libatomic=vxworks + ;; + *) # Who are you? UNSUPPORTED=1