Message ID | yddr1oswc16.fsf@CeBiTec.Uni-Bielefeld.DE |
---|---|
State | New |
Headers | show |
Series | ada: c++: Get rid of libposix4, librt on Solaris | expand |
> I recently noticed that neither libposix4 nor librt are needed on > Solaris 11 any longer: > > * libposix4 was renamed to librt in Solaris 7 back in 1998. > > * librt was folded into libc in the OpenSolaris timeframe, leaving librt > only as a filter on libc. Thus, it's no longer needed on either > Solaris 11 or Illumos. > > The following patch removes both uses. At the same time, Ada's use of > libthread has gone: it was folded into libc in Solaris 10 already. > TIME_LIBRARY and friends in g++ are likewise removed: Solaris was the > only user. > > Bootstrapped without regressions on i386-pc-solaris2.11, > sparc-sun-solaris2.11, and x86_64-pc-linux-gnu. > > Ok for master? The Ada part is OK, thanks. > 2020-11-16 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> > > gcc/cp: > * g++spec.c (TIMELIB, TIME_LIBRARY): Remove. > (lang_specific_driver): Remove TIME_LIBRARY handling. > > gcc: > * config/sol2.h (TIME_LIBRARY): Remove. > > libstdc++-v3: > * acinclude.m4 (GLIBCXX_ENABLE_LIBSTDCXX_TIME): Remove libposix4 > references. > <solaris*>: Don't use -lrt any longer. > * configure: Regenerate. > > * doc/xml/manual/configure.xml (--enable-libstdcxx-time=OPTION): > Remove libposix4 reference. > > gcc/ada: > * Makefile.rtl <sparc*-sun-solaris*> (THREADSLIB): Remove. > (MISCLIB): Remove -lposix4. > <*86-*-solaris2*>: Likewise. > * libgnarl/s-osinte__solaris.ads (System.OS_Interface): Remove > -lposix4 -lthread.
On 17/11/20 10:47 +0100, Rainer Orth wrote: >I recently noticed that neither libposix4 nor librt are needed on >Solaris 11 any longer: > >* libposix4 was renamed to librt in Solaris 7 back in 1998. > >* librt was folded into libc in the OpenSolaris timeframe, leaving librt > only as a filter on libc. Thus, it's no longer needed on either > Solaris 11 or Illumos. > >The following patch removes both uses. At the same time, Ada's use of >libthread has gone: it was folded into libc in Solaris 10 already. >TIME_LIBRARY and friends in g++ are likewise removed: Solaris was the >only user. > >Bootstrapped without regressions on i386-pc-solaris2.11, >sparc-sun-solaris2.11, and x86_64-pc-linux-gnu. > >Ok for master? > >There are two more uses of librt left: > >* On glibc targets before 2.17 it's needed for clock_gettime. I've no > idea how long gcc is supposed to support such targets (glibc 2.17 was > released in December 2012). RHEL 7 uses glibc 2.17, so it will still be in use for some time. >diff --git a/libstdc++-v3/acinclude.m4 b/libstdc++-v3/acinclude.m4 >--- a/libstdc++-v3/acinclude.m4 >+++ b/libstdc++-v3/acinclude.m4 >@@ -1381,8 +1381,8 @@ dnl > dnl --enable-libstdcxx-time > dnl --enable-libstdcxx-time=yes > dnl checks for the availability of monotonic and realtime clocks, >-dnl nanosleep and sched_yield in libc and libposix4 and, if needed, >-dnl links in the latter. >+dnl nanosleep and sched_yield in libc and, if needed, links in the >+dnl latter. "The latter" was referring to libposix4, and we always link to libc, so "if needed" doesn't apply to it. So I think it should be: dnl checks for the availability of monotonic and realtime clocks, -dnl nanosleep and sched_yield in libc and libposix4 and, if needed, -dnl links in the latter. +dnl nanosleep and sched_yield in libc. >diff --git a/libstdc++-v3/doc/xml/manual/configure.xml b/libstdc++-v3/doc/xml/manual/configure.xml >--- a/libstdc++-v3/doc/xml/manual/configure.xml >+++ b/libstdc++-v3/doc/xml/manual/configure.xml >@@ -171,7 +171,7 @@ > <function>sched_yield</function> functions, used in the > implementation of [thread.thread.this] of the 2011 ISO C++ standard. > The choice OPTION=yes checks for the availability of the facilities >- in libc and libposix4. In case it's needed the latter is also linked >+ in libc. In case it's needed the latter is also linked > to libstdc++ as part of the build process. OPTION=rt also checks in Similarly, the whole "In case it's needed the latter is also linked to libstdc++ as part of the build process." sentence should be removed. It only applied to libposix4. > librt (and, if it's needed, links to it). Note that linking to librt > is not always desirable because for glibc it requires linking to The libstdc++ part is OK with those adjustments. Thanks for doing this, it's really helpful to trim these checks so the unnecessary parts don't hang around indefinitely.
Hi Jonathan, >>There are two more uses of librt left: >> >>* On glibc targets before 2.17 it's needed for clock_gettime. I've no >> idea how long gcc is supposed to support such targets (glibc 2.17 was >> released in December 2012). > > RHEL 7 uses glibc 2.17, so it will still be in use for some time. but at least the comments say < 2.17, so RHEL 7 wouldn't be affected. >>diff --git a/libstdc++-v3/acinclude.m4 b/libstdc++-v3/acinclude.m4 >>--- a/libstdc++-v3/acinclude.m4 >>+++ b/libstdc++-v3/acinclude.m4 >>@@ -1381,8 +1381,8 @@ dnl >> dnl --enable-libstdcxx-time >> dnl --enable-libstdcxx-time=yes >> dnl checks for the availability of monotonic and realtime clocks, >>-dnl nanosleep and sched_yield in libc and libposix4 and, if needed, >>-dnl links in the latter. >>+dnl nanosleep and sched_yield in libc and, if needed, links in the >>+dnl latter. > > "The latter" was referring to libposix4, and we always link to libc, > so "if needed" doesn't apply to it. > > So I think it should be: > > dnl checks for the availability of monotonic and realtime clocks, > -dnl nanosleep and sched_yield in libc and libposix4 and, if needed, > -dnl links in the latter. > +dnl nanosleep and sched_yield in libc. > > > >>diff --git a/libstdc++-v3/doc/xml/manual/configure.xml >> b/libstdc++-v3/doc/xml/manual/configure.xml >>--- a/libstdc++-v3/doc/xml/manual/configure.xml >>+++ b/libstdc++-v3/doc/xml/manual/configure.xml >>@@ -171,7 +171,7 @@ >> <function>sched_yield</function> functions, used in the >> implementation of [thread.thread.this] of the 2011 ISO C++ standard. >> The choice OPTION=yes checks for the availability of the facilities >>- in libc and libposix4. In case it's needed the latter is also linked >>+ in libc. In case it's needed the latter is also linked >> to libstdc++ as part of the build process. OPTION=rt also checks in > > Similarly, the whole "In case it's needed the latter is also linked to > libstdc++ as part of the build process." sentence should be removed. It > only applied to libposix4. Good catch: I've been too mechanical in my updates. Btw., can you take care of regenerating the html files there? >> librt (and, if it's needed, links to it). Note that linking to librt >> is not always desirable because for glibc it requires linking to > > The libstdc++ part is OK with those adjustments. Thanks for doing > this, it's really helpful to trim these checks so the unnecessary > parts don't hang around indefinitely. My pleasure: they are easy enough to miss, unfortunately, since the are seldom labeled with `for OS version X.Y' or some such. E.g. we still have a libexc test in gcc/configure.in, which was only added for Tru64 UNIX, I believe (unless Linux/alpha needs it, too). Rainer
On 17/11/20 14:25 +0100, Rainer Orth wrote: >Hi Jonathan, > >>>There are two more uses of librt left: >>> >>>* On glibc targets before 2.17 it's needed for clock_gettime. I've no >>> idea how long gcc is supposed to support such targets (glibc 2.17 was >>> released in December 2012). >> >> RHEL 7 uses glibc 2.17, so it will still be in use for some time. > >but at least the comments say < 2.17, so RHEL 7 wouldn't be affected. Ah right, sorry, I read too quickly. Yes, < 2.17 probably isn't very relevant now, although historically libstdc++ has not explicitly dropped support older glibc versions. If it builds, then it builds. We could consider doing some housekeeping in that area, or just documenting our requirements more carefully (for example, we now require Linux kernel version 2.6.22 for the FUTEX_PRIVATE_FLAG but I don't think we say that anywhere). >>>diff --git a/libstdc++-v3/acinclude.m4 b/libstdc++-v3/acinclude.m4 >>>--- a/libstdc++-v3/acinclude.m4 >>>+++ b/libstdc++-v3/acinclude.m4 >>>@@ -1381,8 +1381,8 @@ dnl >>> dnl --enable-libstdcxx-time >>> dnl --enable-libstdcxx-time=yes >>> dnl checks for the availability of monotonic and realtime clocks, >>>-dnl nanosleep and sched_yield in libc and libposix4 and, if needed, >>>-dnl links in the latter. >>>+dnl nanosleep and sched_yield in libc and, if needed, links in the >>>+dnl latter. >> >> "The latter" was referring to libposix4, and we always link to libc, >> so "if needed" doesn't apply to it. >> >> So I think it should be: >> >> dnl checks for the availability of monotonic and realtime clocks, >> -dnl nanosleep and sched_yield in libc and libposix4 and, if needed, >> -dnl links in the latter. >> +dnl nanosleep and sched_yield in libc. >> >> >> >>>diff --git a/libstdc++-v3/doc/xml/manual/configure.xml >>> b/libstdc++-v3/doc/xml/manual/configure.xml >>>--- a/libstdc++-v3/doc/xml/manual/configure.xml >>>+++ b/libstdc++-v3/doc/xml/manual/configure.xml >>>@@ -171,7 +171,7 @@ >>> <function>sched_yield</function> functions, used in the >>> implementation of [thread.thread.this] of the 2011 ISO C++ standard. >>> The choice OPTION=yes checks for the availability of the facilities >>>- in libc and libposix4. In case it's needed the latter is also linked >>>+ in libc. In case it's needed the latter is also linked >>> to libstdc++ as part of the build process. OPTION=rt also checks in >> >> Similarly, the whole "In case it's needed the latter is also linked to >> libstdc++ as part of the build process." sentence should be removed. It >> only applied to libposix4. > >Good catch: I've been too mechanical in my updates. Btw., can you take >care of regenerating the html files there? Yes, no problem. >>> librt (and, if it's needed, links to it). Note that linking to librt >>> is not always desirable because for glibc it requires linking to >> >> The libstdc++ part is OK with those adjustments. Thanks for doing >> this, it's really helpful to trim these checks so the unnecessary >> parts don't hang around indefinitely. > >My pleasure: they are easy enough to miss, unfortunately, since the are >seldom labeled with `for OS version X.Y' or some such. E.g. we still >have a libexc test in gcc/configure.in, which was only added for Tru64 >UNIX, I believe (unless Linux/alpha needs it, too). Do we even have anybody still using alpha?
Hi Jonathan, >>>>There are two more uses of librt left: >>>> >>>>* On glibc targets before 2.17 it's needed for clock_gettime. I've no >>>> idea how long gcc is supposed to support such targets (glibc 2.17 was >>>> released in December 2012). >>> >>> RHEL 7 uses glibc 2.17, so it will still be in use for some time. >> >>but at least the comments say < 2.17, so RHEL 7 wouldn't be affected. > > Ah right, sorry, I read too quickly. Yes, < 2.17 probably isn't very > relevant now, although historically libstdc++ has not explicitly > dropped support older glibc versions. If it builds, then it builds. > > We could consider doing some housekeeping in that area, or just > documenting our requirements more carefully (for example, we now > require Linux kernel version 2.6.22 for the FUTEX_PRIVATE_FLAG but I > don't think we say that anywhere). that would certainly help, if only to set user expectations. When e.g. I tried to get any info from the LLVM community which macOS versions were supposed to be still supported, it was like pulling teeth and in the end got me nothing. Not a particularly pleasant experience. We should be able to do better than that. >>> The libstdc++ part is OK with those adjustments. Thanks for doing >>> this, it's really helpful to trim these checks so the unnecessary >>> parts don't hang around indefinitely. >> >>My pleasure: they are easy enough to miss, unfortunately, since the are >>seldom labeled with `for OS version X.Y' or some such. E.g. we still >>have a libexc test in gcc/configure.in, which was only added for Tru64 >>UNIX, I believe (unless Linux/alpha needs it, too). > > Do we even have anybody still using alpha? I have no idea: I donated my last alpha systems to some sort of computer museum years ago once I had removed Tru64 UNIX support. There are always some enthusiasts around, some of which clamour for keeping their pet target around a bit longer ;-) Rainer
# HG changeset patch # Parent aea7401c4d83f8a1fd609b22ec7a9131c857c98d ada: c++: Get rid of libposix4, librt on Solaris diff --git a/gcc/ada/Makefile.rtl b/gcc/ada/Makefile.rtl --- a/gcc/ada/Makefile.rtl +++ b/gcc/ada/Makefile.rtl @@ -1641,8 +1641,7 @@ ifeq ($(strip $(filter-out sparc% sun so endif EH_MECHANISM=-gcc - THREADSLIB = -lposix4 -lthread - MISCLIB = -lposix4 -lnsl -lsocket + MISCLIB = -lnsl -lsocket SO_OPTS = -Wl,-h, GNATLIB_SHARED = gnatlib-shared-dual GMEM_LIB = gmemlib @@ -1695,8 +1694,7 @@ ifeq ($(strip $(filter-out %86 %x86_64 s EXTRA_GNATRTL_NONTASKING_OBJS += $(TRASYM_DWARF_UNIX_OBJS) EH_MECHANISM=-gcc - THREADSLIB = -lposix4 -lthread - MISCLIB = -lposix4 -lnsl -lsocket + MISCLIB = -lnsl -lsocket SO_OPTS = -Wl,-h, GNATLIB_SHARED = gnatlib-shared-dual GMEM_LIB = gmemlib diff --git a/gcc/ada/libgnarl/s-osinte__solaris.ads b/gcc/ada/libgnarl/s-osinte__solaris.ads --- a/gcc/ada/libgnarl/s-osinte__solaris.ads +++ b/gcc/ada/libgnarl/s-osinte__solaris.ads @@ -45,9 +45,6 @@ with Ada.Unchecked_Conversion; package System.OS_Interface is pragma Preelaborate; - pragma Linker_Options ("-lposix4"); - pragma Linker_Options ("-lthread"); - subtype int is Interfaces.C.int; subtype short is Interfaces.C.short; subtype long is Interfaces.C.long; diff --git a/gcc/config/sol2.h b/gcc/config/sol2.h --- a/gcc/config/sol2.h +++ b/gcc/config/sol2.h @@ -381,9 +381,6 @@ along with GCC; see the file COPYING3. { "endfile_vtv", ENDFILE_VTV_SPEC }, \ SUBTARGET_CPU_EXTRA_SPECS -/* C++11 programs need -lrt for nanosleep. */ -#define TIME_LIBRARY "rt" - #ifndef USE_GLD /* With Sun ld, -rdynamic is a no-op. */ #define RDYNAMIC_SPEC "" diff --git a/gcc/cp/g++spec.c b/gcc/cp/g++spec.c --- a/gcc/cp/g++spec.c +++ b/gcc/cp/g++spec.c @@ -27,12 +27,10 @@ along with GCC; see the file COPYING3. #define LANGSPEC (1<<1) /* This bit is set if they did `-lm' or `-lmath'. */ #define MATHLIB (1<<2) -/* This bit is set if they did `-lrt' or equivalent. */ -#define TIMELIB (1<<3) /* This bit is set if they did `-lc'. */ -#define WITHLIBC (1<<4) +#define WITHLIBC (1<<3) /* Skip this option. */ -#define SKIPOPT (1<<5) +#define SKIPOPT (1<<4) #ifndef MATH_LIBRARY #define MATH_LIBRARY "m" @@ -41,10 +39,6 @@ along with GCC; see the file COPYING3. #define MATH_LIBRARY_PROFILE MATH_LIBRARY #endif -#ifndef TIME_LIBRARY -#define TIME_LIBRARY "" -#endif - #ifndef LIBSTDCXX #define LIBSTDCXX "stdc++" #endif @@ -95,15 +89,12 @@ lang_specific_driver (struct cl_decoded_ const struct cl_decoded_option *saw_libc = NULL; /* An array used to flag each argument that needs a bit set for - LANGSPEC, MATHLIB, TIMELIB, or WITHLIBC. */ + LANGSPEC, MATHLIB, or WITHLIBC. */ int *args; /* By default, we throw on the math library if we have one. */ int need_math = (MATH_LIBRARY[0] != '\0'); - /* By default, we throw on the time library if we have one. */ - int need_time = (TIME_LIBRARY[0] != '\0'); - /* True if we saw -static. */ int static_link = 0; @@ -147,11 +138,6 @@ lang_specific_driver (struct cl_decoded_ args[i] |= MATHLIB; need_math = 0; } - else if (strcmp (arg, TIME_LIBRARY) == 0) - { - args[i] |= TIMELIB; - need_time = 0; - } else if (strcmp (arg, "c") == 0) args[i] |= WITHLIBC; else @@ -285,12 +271,6 @@ lang_specific_driver (struct cl_decoded_ saw_math = &decoded_options[i]; } - if (!saw_time && (args[i] & TIMELIB) && library > 0) - { - --j; - saw_time = &decoded_options[i]; - } - if (!saw_libc && (args[i] & WITHLIBC) && library > 0) { --j; @@ -377,13 +357,6 @@ lang_specific_driver (struct cl_decoded_ } if (saw_time) new_decoded_options[j++] = *saw_time; - else if (library > 0 && need_time) - { - generate_option (OPT_l, TIME_LIBRARY, 1, CL_DRIVER, - &new_decoded_options[j]); - added_libraries++; - j++; - } if (saw_libc) new_decoded_options[j++] = *saw_libc; if (shared_libgcc && !static_link) diff --git a/libstdc++-v3/acinclude.m4 b/libstdc++-v3/acinclude.m4 --- a/libstdc++-v3/acinclude.m4 +++ b/libstdc++-v3/acinclude.m4 @@ -1381,8 +1381,8 @@ dnl dnl --enable-libstdcxx-time dnl --enable-libstdcxx-time=yes dnl checks for the availability of monotonic and realtime clocks, -dnl nanosleep and sched_yield in libc and libposix4 and, if needed, -dnl links in the latter. +dnl nanosleep and sched_yield in libc and, if needed, links in the +dnl latter. dnl --enable-libstdcxx-time=rt dnl also searches (and, if needed, links) librt. Note that this is dnl not always desirable because, in glibc 2.16 and earlier, for @@ -1455,7 +1455,6 @@ AC_DEFUN([GLIBCXX_ENABLE_LIBSTDCXX_TIME] ac_has_nanosleep=yes ;; solaris*) - GLIBCXX_LIBS="$GLIBCXX_LIBS -lrt" ac_has_clock_monotonic=yes ac_has_clock_realtime=yes ac_has_nanosleep=yes @@ -1469,11 +1468,11 @@ AC_DEFUN([GLIBCXX_ENABLE_LIBSTDCXX_TIME] elif test x"$enable_libstdcxx_time" != x"no"; then if test x"$enable_libstdcxx_time" = x"rt"; then - AC_SEARCH_LIBS(clock_gettime, [rt posix4]) - AC_SEARCH_LIBS(nanosleep, [rt posix4]) + AC_SEARCH_LIBS(clock_gettime, [rt]) + AC_SEARCH_LIBS(nanosleep, [rt]) else - AC_SEARCH_LIBS(clock_gettime, [posix4]) - AC_SEARCH_LIBS(nanosleep, [posix4]) + AC_CHECK_FUNC(clock_gettime) + AC_CHECK_FUNC(nanosleep) fi case "$ac_cv_search_clock_gettime" in @@ -1485,13 +1484,9 @@ AC_DEFUN([GLIBCXX_ENABLE_LIBSTDCXX_TIME] ;; esac - AC_SEARCH_LIBS(sched_yield, [rt posix4]) + AC_SEARCH_LIBS(sched_yield, [rt]) case "$ac_cv_search_sched_yield" in - -lposix4*) - GLIBCXX_LIBS="$GLIBCXX_LIBS $ac_cv_search_sched_yield" - ac_has_sched_yield=yes - ;; -lrt*) if test x"$enable_libstdcxx_time" = x"rt"; then GLIBCXX_LIBS="$GLIBCXX_LIBS $ac_cv_search_sched_yield" diff --git a/libstdc++-v3/doc/xml/manual/configure.xml b/libstdc++-v3/doc/xml/manual/configure.xml --- a/libstdc++-v3/doc/xml/manual/configure.xml +++ b/libstdc++-v3/doc/xml/manual/configure.xml @@ -171,7 +171,7 @@ <function>sched_yield</function> functions, used in the implementation of [thread.thread.this] of the 2011 ISO C++ standard. The choice OPTION=yes checks for the availability of the facilities - in libc and libposix4. In case it's needed the latter is also linked + in libc. In case it's needed the latter is also linked to libstdc++ as part of the build process. OPTION=rt also checks in librt (and, if it's needed, links to it). Note that linking to librt is not always desirable because for glibc it requires linking to