[01/19] Add pthread-in-libc, libpthread-routines-var, librt-routines-var

Message ID 62101950200ba00285cf57a6e83aa4ef03816160.1619456219.git.fweimer@redhat.com
State New
Headers show
Series
  • nptl: Move most C11 symbols into libc
Related show

Commit Message

Simon Marchi via Libc-alpha April 26, 2021, 5 p.m.
These make variables can be used to add routines to different
libraries for the Hurd and Linux builds.
---
 Makeconfig                     | 11 +++++++++++
 config.h.in                    |  3 +++
 config.make.in                 |  1 +
 configure                      |  8 ++++++++
 configure.ac                   |  6 ++++++
 rt/Makefile                    |  2 ++
 sysdeps/mach/hurd/configure    |  3 +++
 sysdeps/mach/hurd/configure.ac |  3 +++
 sysdeps/pthread/Makefile       |  3 +++
 9 files changed, 40 insertions(+)

-- 
2.30.2

Comments

Simon Marchi via Libc-alpha May 2, 2021, 8:46 p.m. | #1
On 4/26/21 1:00 PM, Florian Weimer via Libc-alpha wrote:
> These make variables can be used to add routines to different

> libraries for the Hurd and Linux builds.


Tested and reviewed on x86_64 and i686.

LGTM.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>

Tested-by: Carlos O'Donell <carlos@redhat.com>


> ---

>  Makeconfig                     | 11 +++++++++++

>  config.h.in                    |  3 +++

>  config.make.in                 |  1 +

>  configure                      |  8 ++++++++

>  configure.ac                   |  6 ++++++

>  rt/Makefile                    |  2 ++

>  sysdeps/mach/hurd/configure    |  3 +++

>  sysdeps/mach/hurd/configure.ac |  3 +++

>  sysdeps/pthread/Makefile       |  3 +++

>  9 files changed, 40 insertions(+)

> 

> diff --git a/Makeconfig b/Makeconfig

> index 01f8638c2e..1d5e45926c 100644

> --- a/Makeconfig

> +++ b/Makeconfig

> @@ -1328,6 +1328,17 @@ endif

>  sysd-rules-targets := $(sort $(foreach p,$(sysd-rules-patterns),\

>  					 $(firstword $(subst :, ,$p))))

>  

> +# $(libpthread-routines-var) and $(librt-routines-var) are the make

> +# variable to which pthread routines need to be added to land in the

> +# right library.

> +ifeq ($(pthread-in-libc),yes)

> +libpthread-routines-var = routines

> +librt-routines-var = routines

> +else

> +libpthread-routines-var = libpthread-routines

> +librt-routines-var = libpthread-routines

> +endif


OK. Makes sense and refactors this with a level of indirection that avoids
needing to duplicate any more files.

> +

>  # A sysdeps Makeconfig fragment may set libc-reentrant to yes.

>  ifeq (yes,$(libc-reentrant))

>  defines += -D_LIBC_REENTRANT

> diff --git a/config.h.in b/config.h.in

> index ea56e5b4a4..99036b887f 100644

> --- a/config.h.in

> +++ b/config.h.in

> @@ -200,6 +200,9 @@

>     multiple symbol versions for one symbol.  */

>  #define SYMVER_NEEDS_ALIAS 0

>  

> +/* Define to 1 if libpthread actually resides in libc.  */

> +#define PTHREAD_IN_LIBC 0

> +

>  /*

>   */

>  

> diff --git a/config.make.in b/config.make.in

> index 7f47f0caa4..cbf59114b0 100644

> --- a/config.make.in

> +++ b/config.make.in

> @@ -103,6 +103,7 @@ use-nscd = @use_nscd@

>  build-hardcoded-path-in-tests= @hardcoded_path_in_tests@

>  build-pt-chown = @build_pt_chown@

>  have-tunables = @have_tunables@

> +pthread-in-libc = @pthread_in_libc@

>  

>  # Build tools.

>  CC = @CC@

> diff --git a/configure b/configure

> index e64b7f8efe..4cc462613c 100755

> --- a/configure

> +++ b/configure

> @@ -588,6 +588,7 @@ ac_unique_file="include/features.h"

>  enable_option_checking=no

>  ac_subst_vars='LTLIBOBJS

>  LIBOBJS

> +pthread_in_libc

>  RELEASE

>  VERSION

>  mach_interface_list

> @@ -6780,6 +6781,7 @@ libc_cv_sysconfdir=$sysconfdir

>  libc_cv_localstatedir=$localstatedir

>  libc_cv_gcc_unwind_find_fde=no

>  libc_cv_idn=no

> +pthread_in_libc=yes

>  

>  # Iterate over all the sysdep directories we will use, running their

>  # configure fragments.

> @@ -6939,6 +6941,12 @@ RELEASE=`sed -n -e 's/^#define RELEASE "\([^"]*\)"/\1/p' < $srcdir/version.h`

>  

>  

>  

> +if test "$pthread_in_libc" = yes; then

> +  $as_echo "#define PTHREAD_IN_LIBC 1" >>confdefs.h

> +

> +fi

> +

> +

>  ac_config_files="$ac_config_files config.make Makefile"

>  

>  ac_config_commands="$ac_config_commands default"

> diff --git a/configure.ac b/configure.ac

> index cc47e56e82..64be29d877 100644

> --- a/configure.ac

> +++ b/configure.ac

> @@ -1777,6 +1777,7 @@ libc_cv_sysconfdir=$sysconfdir

>  libc_cv_localstatedir=$localstatedir

>  libc_cv_gcc_unwind_find_fde=no

>  libc_cv_idn=no

> +pthread_in_libc=yes

>  

>  # Iterate over all the sysdep directories we will use, running their

>  # configure fragments.

> @@ -1903,6 +1904,11 @@ RELEASE=`sed -n -e 's/^#define RELEASE "\([^"]*\)"/\1/p' < $srcdir/version.h`

>  AC_SUBST(VERSION)

>  AC_SUBST(RELEASE)

>  

> +if test "$pthread_in_libc" = yes; then

> +  AC_DEFINE(PTHREAD_IN_LIBC)

> +fi

> +AC_SUBST(pthread_in_libc)

> +

>  AC_CONFIG_FILES([config.make Makefile])

>  AC_CONFIG_COMMANDS([default],[[

>  case $CONFIG_FILES in *config.make*)

> diff --git a/rt/Makefile b/rt/Makefile

> index 7b374f2073..c1a0fdeb46 100644

> --- a/rt/Makefile

> +++ b/rt/Makefile

> @@ -39,6 +39,8 @@ librt-routines = $(aio-routines) \

>  		 $(timer-routines) \

>  		 $(shm-routines) $(mq-routines)

>  

> +$(librt-routines-var) = \

> +

>  tests := tst-shm tst-timer tst-timer2 \

>  	 tst-aio tst-aio64 tst-aio2 tst-aio3 tst-aio4 tst-aio5 tst-aio6 \

>  	 tst-aio7 tst-aio8 tst-aio9 tst-aio10 \

> diff --git a/sysdeps/mach/hurd/configure b/sysdeps/mach/hurd/configure

> index 537f235077..4876e1f176 100644

> --- a/sysdeps/mach/hurd/configure

> +++ b/sysdeps/mach/hurd/configure

> @@ -45,3 +45,6 @@ fi

>  if test -n "$sysheaders"; then

>    CPPFLAGS=$OLD_CPPFLAGS

>  fi

> +

> +# Hurd has libpthread as a separate library.

> +pthread_in_libc=no

> diff --git a/sysdeps/mach/hurd/configure.ac b/sysdeps/mach/hurd/configure.ac

> index eab0e5b6c1..9a049b1d86 100644

> --- a/sysdeps/mach/hurd/configure.ac

> +++ b/sysdeps/mach/hurd/configure.ac

> @@ -26,3 +26,6 @@ fi

>  if test -n "$sysheaders"; then

>    CPPFLAGS=$OLD_CPPFLAGS

>  fi

> +

> +# Hurd has libpthread as a separate library.

> +pthread_in_libc=no

> diff --git a/sysdeps/pthread/Makefile b/sysdeps/pthread/Makefile

> index ed15c1e433..8133bcda8f 100644

> --- a/sysdeps/pthread/Makefile

> +++ b/sysdeps/pthread/Makefile

> @@ -39,6 +39,9 @@ libpthread-routines += thrd_create thrd_detach thrd_exit thrd_join \

>  		       cnd_destroy cnd_init cnd_signal cnd_timedwait cnd_wait \

>  		       tss_create tss_delete tss_get tss_set

>  

> +$(libpthread-routines-var) += \

> +

> +

>  tests += tst-cnd-basic tst-mtx-trylock tst-cnd-broadcast \

>  	 tst-cnd-timedwait tst-thrd-detach tst-mtx-basic tst-thrd-sleep \

>  	 tst-mtx-recursive tst-tss-basic tst-call-once tst-mtx-timedlock \

> 



-- 
Cheers,
Carlos.

Patch

diff --git a/Makeconfig b/Makeconfig
index 01f8638c2e..1d5e45926c 100644
--- a/Makeconfig
+++ b/Makeconfig
@@ -1328,6 +1328,17 @@  endif
 sysd-rules-targets := $(sort $(foreach p,$(sysd-rules-patterns),\
 					 $(firstword $(subst :, ,$p))))
 
+# $(libpthread-routines-var) and $(librt-routines-var) are the make
+# variable to which pthread routines need to be added to land in the
+# right library.
+ifeq ($(pthread-in-libc),yes)
+libpthread-routines-var = routines
+librt-routines-var = routines
+else
+libpthread-routines-var = libpthread-routines
+librt-routines-var = libpthread-routines
+endif
+
 # A sysdeps Makeconfig fragment may set libc-reentrant to yes.
 ifeq (yes,$(libc-reentrant))
 defines += -D_LIBC_REENTRANT
diff --git a/config.h.in b/config.h.in
index ea56e5b4a4..99036b887f 100644
--- a/config.h.in
+++ b/config.h.in
@@ -200,6 +200,9 @@ 
    multiple symbol versions for one symbol.  */
 #define SYMVER_NEEDS_ALIAS 0
 
+/* Define to 1 if libpthread actually resides in libc.  */
+#define PTHREAD_IN_LIBC 0
+
 /*
  */
 
diff --git a/config.make.in b/config.make.in
index 7f47f0caa4..cbf59114b0 100644
--- a/config.make.in
+++ b/config.make.in
@@ -103,6 +103,7 @@  use-nscd = @use_nscd@
 build-hardcoded-path-in-tests= @hardcoded_path_in_tests@
 build-pt-chown = @build_pt_chown@
 have-tunables = @have_tunables@
+pthread-in-libc = @pthread_in_libc@
 
 # Build tools.
 CC = @CC@
diff --git a/configure b/configure
index e64b7f8efe..4cc462613c 100755
--- a/configure
+++ b/configure
@@ -588,6 +588,7 @@  ac_unique_file="include/features.h"
 enable_option_checking=no
 ac_subst_vars='LTLIBOBJS
 LIBOBJS
+pthread_in_libc
 RELEASE
 VERSION
 mach_interface_list
@@ -6780,6 +6781,7 @@  libc_cv_sysconfdir=$sysconfdir
 libc_cv_localstatedir=$localstatedir
 libc_cv_gcc_unwind_find_fde=no
 libc_cv_idn=no
+pthread_in_libc=yes
 
 # Iterate over all the sysdep directories we will use, running their
 # configure fragments.
@@ -6939,6 +6941,12 @@  RELEASE=`sed -n -e 's/^#define RELEASE "\([^"]*\)"/\1/p' < $srcdir/version.h`
 
 
 
+if test "$pthread_in_libc" = yes; then
+  $as_echo "#define PTHREAD_IN_LIBC 1" >>confdefs.h
+
+fi
+
+
 ac_config_files="$ac_config_files config.make Makefile"
 
 ac_config_commands="$ac_config_commands default"
diff --git a/configure.ac b/configure.ac
index cc47e56e82..64be29d877 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1777,6 +1777,7 @@  libc_cv_sysconfdir=$sysconfdir
 libc_cv_localstatedir=$localstatedir
 libc_cv_gcc_unwind_find_fde=no
 libc_cv_idn=no
+pthread_in_libc=yes
 
 # Iterate over all the sysdep directories we will use, running their
 # configure fragments.
@@ -1903,6 +1904,11 @@  RELEASE=`sed -n -e 's/^#define RELEASE "\([^"]*\)"/\1/p' < $srcdir/version.h`
 AC_SUBST(VERSION)
 AC_SUBST(RELEASE)
 
+if test "$pthread_in_libc" = yes; then
+  AC_DEFINE(PTHREAD_IN_LIBC)
+fi
+AC_SUBST(pthread_in_libc)
+
 AC_CONFIG_FILES([config.make Makefile])
 AC_CONFIG_COMMANDS([default],[[
 case $CONFIG_FILES in *config.make*)
diff --git a/rt/Makefile b/rt/Makefile
index 7b374f2073..c1a0fdeb46 100644
--- a/rt/Makefile
+++ b/rt/Makefile
@@ -39,6 +39,8 @@  librt-routines = $(aio-routines) \
 		 $(timer-routines) \
 		 $(shm-routines) $(mq-routines)
 
+$(librt-routines-var) = \
+
 tests := tst-shm tst-timer tst-timer2 \
 	 tst-aio tst-aio64 tst-aio2 tst-aio3 tst-aio4 tst-aio5 tst-aio6 \
 	 tst-aio7 tst-aio8 tst-aio9 tst-aio10 \
diff --git a/sysdeps/mach/hurd/configure b/sysdeps/mach/hurd/configure
index 537f235077..4876e1f176 100644
--- a/sysdeps/mach/hurd/configure
+++ b/sysdeps/mach/hurd/configure
@@ -45,3 +45,6 @@  fi
 if test -n "$sysheaders"; then
   CPPFLAGS=$OLD_CPPFLAGS
 fi
+
+# Hurd has libpthread as a separate library.
+pthread_in_libc=no
diff --git a/sysdeps/mach/hurd/configure.ac b/sysdeps/mach/hurd/configure.ac
index eab0e5b6c1..9a049b1d86 100644
--- a/sysdeps/mach/hurd/configure.ac
+++ b/sysdeps/mach/hurd/configure.ac
@@ -26,3 +26,6 @@  fi
 if test -n "$sysheaders"; then
   CPPFLAGS=$OLD_CPPFLAGS
 fi
+
+# Hurd has libpthread as a separate library.
+pthread_in_libc=no
diff --git a/sysdeps/pthread/Makefile b/sysdeps/pthread/Makefile
index ed15c1e433..8133bcda8f 100644
--- a/sysdeps/pthread/Makefile
+++ b/sysdeps/pthread/Makefile
@@ -39,6 +39,9 @@  libpthread-routines += thrd_create thrd_detach thrd_exit thrd_join \
 		       cnd_destroy cnd_init cnd_signal cnd_timedwait cnd_wait \
 		       tss_create tss_delete tss_get tss_set
 
+$(libpthread-routines-var) += \
+
+
 tests += tst-cnd-basic tst-mtx-trylock tst-cnd-broadcast \
 	 tst-cnd-timedwait tst-thrd-detach tst-mtx-basic tst-thrd-sleep \
 	 tst-mtx-recursive tst-tss-basic tst-call-once tst-mtx-timedlock \