Message ID | yddzhrjy73d.fsf@CeBiTec.Uni-Bielefeld.DE |
---|---|
State | New |
Headers | show |
Series | [libphobos,build] Enable libphobos on Solaris 11/x86 | expand |
On Tue, 29 Jan 2019 at 13:35, Rainer Orth <ro@cebitec.uni-bielefeld.de> wrote: > > With the set of libphobos Solaris patches just posted, it would become > possible to enable libphobos on Solaris 11/x86 by default. > > This is what this patch does. > > * It uses a LIBPHOBOS_SUPPORTED variable both in toplevel configure and > libphobos/configure.tgt, following what libvtv does. > > * It's necessary to disable libphobos when Solaris as is in use: it has > a relatively low line length limit of 10240 which is exceeded in a few > libphobos files. > > Bootstrapped without regressions on i386-pc-solaris2.11 (as and gas, gas > and gld, Solaris 11.3/11.4/11.5) on top of the previous set of patches. > > Also tested manually that explicit > --enable-libphobos/--disable-libphobos give the desired results > (i.e. override the defaults). > OK.
Hi Iain, > On Tue, 29 Jan 2019 at 13:35, Rainer Orth <ro@cebitec.uni-bielefeld.de> wrote: >> >> With the set of libphobos Solaris patches just posted, it would become >> possible to enable libphobos on Solaris 11/x86 by default. >> >> This is what this patch does. >> >> * It uses a LIBPHOBOS_SUPPORTED variable both in toplevel configure and >> libphobos/configure.tgt, following what libvtv does. >> >> * It's necessary to disable libphobos when Solaris as is in use: it has >> a relatively low line length limit of 10240 which is exceeded in a few >> libphobos files. >> >> Bootstrapped without regressions on i386-pc-solaris2.11 (as and gas, gas >> and gld, Solaris 11.3/11.4/11.5) on top of the previous set of patches. >> >> Also tested manually that explicit >> --enable-libphobos/--disable-libphobos give the desired results >> (i.e. override the defaults). >> > > OK. Thanks. This will have to wait for [libphobos] Use sections_elf_shared.d on Solaris 11.5 (PR d/88150) https://gcc.gnu.org/ml/gcc-patches/2019-01/msg01661.html and [libphobos] Work around lack of dlpi_tls_modid before Solaris 11.5 https://gcc.gnu.org/ml/gcc-patches/2019-01/msg01664.html of course. Maybe even [libphobos] Work around Solaris ld bug linking __tls_get_addr on 64-bit x86 https://gcc.gnu.org/ml/gcc-patches/2019-01/msg01663.html will be needed depending on whether a proper ld fix makes it into Solaris 11.5 or not. Rainer
On Tue, 19 Feb 2019 at 10:32, Rainer Orth <ro@cebitec.uni-bielefeld.de> wrote: > > Hi Iain, > > > On Tue, 29 Jan 2019 at 13:35, Rainer Orth <ro@cebitec.uni-bielefeld.de> wrote: > >> > >> With the set of libphobos Solaris patches just posted, it would become > >> possible to enable libphobos on Solaris 11/x86 by default. > >> > >> This is what this patch does. > >> > >> * It uses a LIBPHOBOS_SUPPORTED variable both in toplevel configure and > >> libphobos/configure.tgt, following what libvtv does. > >> > >> * It's necessary to disable libphobos when Solaris as is in use: it has > >> a relatively low line length limit of 10240 which is exceeded in a few > >> libphobos files. > >> > >> Bootstrapped without regressions on i386-pc-solaris2.11 (as and gas, gas > >> and gld, Solaris 11.3/11.4/11.5) on top of the previous set of patches. > >> > >> Also tested manually that explicit > >> --enable-libphobos/--disable-libphobos give the desired results > >> (i.e. override the defaults). > >> > > > > OK. > > Thanks. This will have to wait for > > [libphobos] Use sections_elf_shared.d on Solaris 11.5 (PR d/88150) > https://gcc.gnu.org/ml/gcc-patches/2019-01/msg01661.html I'll make a fork of sections support tonight, as that seems to be the right way forwards. Other parts will need upstreaming, I can do that as well. > and > [libphobos] Work around lack of dlpi_tls_modid before Solaris 11.5 > https://gcc.gnu.org/ml/gcc-patches/2019-01/msg01664.html > Johannes has already commented there, and he is right about needing a way to get tls data from DSOs. > of course. Maybe even > > [libphobos] Work around Solaris ld bug linking __tls_get_addr on 64-bit x86 > https://gcc.gnu.org/ml/gcc-patches/2019-01/msg01663.html > > will be needed depending on whether a proper ld fix makes it into > Solaris 11.5 or not. > I'm not sure about this, but haven't looked at it properly just yet.
Hi Iain, >> Thanks. This will have to wait for >> >> [libphobos] Use sections_elf_shared.d on Solaris 11.5 (PR d/88150) >> https://gcc.gnu.org/ml/gcc-patches/2019-01/msg01661.html > > I'll make a fork of sections support tonight, as that seems to be the > right way forwards. > > Other parts will need upstreaming, I can do that as well. that would be great, thanks. >> and >> [libphobos] Work around lack of dlpi_tls_modid before Solaris 11.5 >> https://gcc.gnu.org/ml/gcc-patches/2019-01/msg01664.html >> > > Johannes has already commented there, and he is right about needing a > way to get tls data from DSOs. Understood. Maybe I can find a way to generalize the hack derived from sections_ldc.d to TLS segments outside the executable. >> of course. Maybe even >> >> [libphobos] Work around Solaris ld bug linking __tls_get_addr on >> 64-bit x86 >> https://gcc.gnu.org/ml/gcc-patches/2019-01/msg01663.html >> >> will be needed depending on whether a proper ld fix makes it into >> Solaris 11.5 or not. > > I'm not sure about this, but haven't looked at it properly just yet. I don't think you need concern yourself with this very much: it's just a hack around a Solaris ld bug, suggested by the Solaris linker engineers for the moment. Once the dlpi_tls_modid patch lands in Solaris 11.5 (this week or next), I'll ask if they see a chance to have that bug fixed in time for the Solaris 11.5 release. If so, nobody besides myself will ever be exposed to this issue. Rainer
Hi Iain, > On Tue, 29 Jan 2019 at 13:35, Rainer Orth <ro@cebitec.uni-bielefeld.de> wrote: >> >> With the set of libphobos Solaris patches just posted, it would become >> possible to enable libphobos on Solaris 11/x86 by default. >> >> This is what this patch does. >> >> * It uses a LIBPHOBOS_SUPPORTED variable both in toplevel configure and >> libphobos/configure.tgt, following what libvtv does. >> >> * It's necessary to disable libphobos when Solaris as is in use: it has >> a relatively low line length limit of 10240 which is exceeded in a few >> libphobos files. >> >> Bootstrapped without regressions on i386-pc-solaris2.11 (as and gas, gas >> and gld, Solaris 11.3/11.4/11.5) on top of the previous set of patches. >> >> Also tested manually that explicit >> --enable-libphobos/--disable-libphobos give the desired results >> (i.e. override the defaults). >> > > OK. I've now installed the patch since all the prerequisites are now in. As I mentioned, the current lack of core.sys.solaris.link support for Solaris 11.5 dlpi_tls_modid (to go upstream first) affects no one except myself. Thanks. Rainer
On Tue, 19 Feb 2019 at 13:58, Rainer Orth <ro@cebitec.uni-bielefeld.de> wrote: > > Hi Iain, > > >> Thanks. This will have to wait for > >> > >> [libphobos] Use sections_elf_shared.d on Solaris 11.5 (PR d/88150) > >> https://gcc.gnu.org/ml/gcc-patches/2019-01/msg01661.html > > > > I'll make a fork of sections support tonight, as that seems to be the > > right way forwards. > > > > Other parts will need upstreaming, I can do that as well. > > that would be great, thanks. > > >> and > >> [libphobos] Work around lack of dlpi_tls_modid before Solaris 11.5 > >> https://gcc.gnu.org/ml/gcc-patches/2019-01/msg01664.html > >> > > > > Johannes has already commented there, and he is right about needing a > > way to get tls data from DSOs. > > Understood. Maybe I can find a way to generalize the hack derived from > sections_ldc.d to TLS segments outside the executable. > > >> of course. Maybe even > >> > >> [libphobos] Work around Solaris ld bug linking __tls_get_addr on > >> 64-bit x86 > >> https://gcc.gnu.org/ml/gcc-patches/2019-01/msg01663.html > >> > >> will be needed depending on whether a proper ld fix makes it into > >> Solaris 11.5 or not. > > > > I'm not sure about this, but haven't looked at it properly just yet. > > I don't think you need concern yourself with this very much: it's just a > hack around a Solaris ld bug, suggested by the Solaris linker engineers > for the moment. Once the dlpi_tls_modid patch lands in Solaris 11.5 > (this week or next), I'll ask if they see a chance to have that bug > fixed in time for the Solaris 11.5 release. If so, nobody besides > myself will ever be exposed to this issue. > I've just given building gcc a try in an OpenIndiana VM, and get the following: ld: fatal: option -z has illegal argument 'relax=transtls' ld: fatal: flags processing errors collect2: error: ld returned 1 exit status $ ld --version ld: Software Generation Utilities - Solaris Link Editors: 5.11-1.1756 (illumos) My fatal mistake of course was not configuring with --with-ld=/usr/gnu/bin/ld, however it is notable that not all Solaris linkers support this relax=transtls option.
Hi Iain, >> I don't think you need concern yourself with this very much: it's just a >> hack around a Solaris ld bug, suggested by the Solaris linker engineers >> for the moment. Once the dlpi_tls_modid patch lands in Solaris 11.5 >> (this week or next), I'll ask if they see a chance to have that bug >> fixed in time for the Solaris 11.5 release. If so, nobody besides >> myself will ever be exposed to this issue. >> > > I've just given building gcc a try in an OpenIndiana VM, and get the following: > > ld: fatal: option -z has illegal argument 'relax=transtls' > ld: fatal: flags processing errors > collect2: error: ld returned 1 exit status > > $ ld --version > ld: Software Generation Utilities - Solaris Link Editors: 5.11-1.1756 (illumos) > > My fatal mistake of course was not configuring with > --with-ld=/usr/gnu/bin/ld, however it is notable that not all Solaris > linkers support this relax=transtls option. indeed. I don't have the time to try Illumos derivatives myself, but looking closer that -z relax=transtls was neither in OpenSolaris (and thus isn't in Illumos either) nor in Solaris 11.0. Must have been introduced at some later point, but it's certainly present in Solaris 11.3, the oldest version I can easily try. There are two options here: * Either Illumos has already fixed the ld bug worked around by -z transtls. Then the absence of the option doesn't matter and things will work fine. * Otherwise (and independently of the Illumos situation) I'll add a check for Solaris ld supporting the option instead of using it unconditionally. Rainer
Hi Iain, > On Tue, 19 Feb 2019 at 13:58, Rainer Orth <ro@cebitec.uni-bielefeld.de> wrote: >> >> Hi Iain, >> >> >> Thanks. This will have to wait for >> >> >> >> [libphobos] Use sections_elf_shared.d on Solaris 11.5 (PR d/88150) >> >> https://gcc.gnu.org/ml/gcc-patches/2019-01/msg01661.html >> > >> > I'll make a fork of sections support tonight, as that seems to be the >> > right way forwards. >> > >> > Other parts will need upstreaming, I can do that as well. >> >> that would be great, thanks. >> >> >> and >> >> [libphobos] Work around lack of dlpi_tls_modid before Solaris 11.5 >> >> https://gcc.gnu.org/ml/gcc-patches/2019-01/msg01664.html >> >> >> > >> > Johannes has already commented there, and he is right about needing a >> > way to get tls data from DSOs. >> >> Understood. Maybe I can find a way to generalize the hack derived from >> sections_ldc.d to TLS segments outside the executable. >> >> >> of course. Maybe even >> >> >> >> [libphobos] Work around Solaris ld bug linking __tls_get_addr on >> >> 64-bit x86 >> >> https://gcc.gnu.org/ml/gcc-patches/2019-01/msg01663.html >> >> >> >> will be needed depending on whether a proper ld fix makes it into >> >> Solaris 11.5 or not. >> > >> > I'm not sure about this, but haven't looked at it properly just yet. >> >> I don't think you need concern yourself with this very much: it's just a >> hack around a Solaris ld bug, suggested by the Solaris linker engineers >> for the moment. Once the dlpi_tls_modid patch lands in Solaris 11.5 >> (this week or next), I'll ask if they see a chance to have that bug >> fixed in time for the Solaris 11.5 release. If so, nobody besides >> myself will ever be exposed to this issue. >> > > I've just given building gcc a try in an OpenIndiana VM, and get the following: > > ld: fatal: option -z has illegal argument 'relax=transtls' > ld: fatal: flags processing errors > collect2: error: ld returned 1 exit status > > $ ld --version > ld: Software Generation Utilities - Solaris Link Editors: 5.11-1.1756 (illumos) > > My fatal mistake of course was not configuring with > --with-ld=/usr/gnu/bin/ld, however it is notable that not all Solaris > linkers support this relax=transtls option. I finally got back to this and did some experiments of my own: even the latest Illumos ld doesn't implement -z relax=transtls, neither has it fixed the underlying bug, so it's useless for 64-bit Illumos/x86. The following patch checks for those conditions (ld support for -z relax=transtls or gld in use) and only enables libphobos if they are met. I had to move the whole enable_libphobos/LIBPHOBOS_SUPPORTED block down in configure.ac so it's able to use the results of the augmented DRUNTIME_OS_LINK_SPEC. While I didn't test the patch on Illumos (gcc builds inside a VM are slow), I tried it on Solaris 10/x86 with gas/ld and gas/gld (and an improved version of the patch for PR d/88238) where it behaved as expected. I've also included a previous version in a Solaris 11/x86 bootstrap. Rainer
On Tue, 7 May 2019 at 10:15, Rainer Orth <ro@cebitec.uni-bielefeld.de> wrote: > > Hi Iain, > > > On Tue, 19 Feb 2019 at 13:58, Rainer Orth <ro@cebitec.uni-bielefeld.de> wrote: > >> > >> Hi Iain, > >> > >> >> Thanks. This will have to wait for > >> >> > >> >> [libphobos] Use sections_elf_shared.d on Solaris 11.5 (PR d/88150) > >> >> https://gcc.gnu.org/ml/gcc-patches/2019-01/msg01661.html > >> > > >> > I'll make a fork of sections support tonight, as that seems to be the > >> > right way forwards. > >> > > >> > Other parts will need upstreaming, I can do that as well. > >> > >> that would be great, thanks. > >> > >> >> and > >> >> [libphobos] Work around lack of dlpi_tls_modid before Solaris 11.5 > >> >> https://gcc.gnu.org/ml/gcc-patches/2019-01/msg01664.html > >> >> > >> > > >> > Johannes has already commented there, and he is right about needing a > >> > way to get tls data from DSOs. > >> > >> Understood. Maybe I can find a way to generalize the hack derived from > >> sections_ldc.d to TLS segments outside the executable. > >> > >> >> of course. Maybe even > >> >> > >> >> [libphobos] Work around Solaris ld bug linking __tls_get_addr on > >> >> 64-bit x86 > >> >> https://gcc.gnu.org/ml/gcc-patches/2019-01/msg01663.html > >> >> > >> >> will be needed depending on whether a proper ld fix makes it into > >> >> Solaris 11.5 or not. > >> > > >> > I'm not sure about this, but haven't looked at it properly just yet. > >> > >> I don't think you need concern yourself with this very much: it's just a > >> hack around a Solaris ld bug, suggested by the Solaris linker engineers > >> for the moment. Once the dlpi_tls_modid patch lands in Solaris 11.5 > >> (this week or next), I'll ask if they see a chance to have that bug > >> fixed in time for the Solaris 11.5 release. If so, nobody besides > >> myself will ever be exposed to this issue. > >> > > > > I've just given building gcc a try in an OpenIndiana VM, and get the following: > > > > ld: fatal: option -z has illegal argument 'relax=transtls' > > ld: fatal: flags processing errors > > collect2: error: ld returned 1 exit status > > > > $ ld --version > > ld: Software Generation Utilities - Solaris Link Editors: 5.11-1.1756 (illumos) > > > > My fatal mistake of course was not configuring with > > --with-ld=/usr/gnu/bin/ld, however it is notable that not all Solaris > > linkers support this relax=transtls option. > > I finally got back to this and did some experiments of my own: even the > latest Illumos ld doesn't implement -z relax=transtls, neither has it > fixed the underlying bug, so it's useless for 64-bit Illumos/x86. > > The following patch checks for those conditions (ld support for -z > relax=transtls or gld in use) and only enables libphobos if they are > met. > > I had to move the whole enable_libphobos/LIBPHOBOS_SUPPORTED block down > in configure.ac so it's able to use the results of the augmented > DRUNTIME_OS_LINK_SPEC. > > While I didn't test the patch on Illumos (gcc builds inside a VM are > slow), I tried it on Solaris 10/x86 with gas/ld and gas/gld (and an > improved version of the patch for PR d/88238) where it behaved as > expected. I've also included a previous version in a Solaris 11/x86 > bootstrap. > OK, thanks for having a look into it.
Hi Iain, >> > I've just given building gcc a try in an OpenIndiana VM, and get the >> > following: >> > >> > ld: fatal: option -z has illegal argument 'relax=transtls' >> > ld: fatal: flags processing errors >> > collect2: error: ld returned 1 exit status >> > >> > $ ld --version >> > ld: Software Generation Utilities - Solaris Link Editors: 5.11-1.1756 >> > (illumos) >> > >> > My fatal mistake of course was not configuring with >> > --with-ld=/usr/gnu/bin/ld, however it is notable that not all Solaris >> > linkers support this relax=transtls option. >> >> I finally got back to this and did some experiments of my own: even the >> latest Illumos ld doesn't implement -z relax=transtls, neither has it >> fixed the underlying bug, so it's useless for 64-bit Illumos/x86. >> >> The following patch checks for those conditions (ld support for -z >> relax=transtls or gld in use) and only enables libphobos if they are >> met. >> >> I had to move the whole enable_libphobos/LIBPHOBOS_SUPPORTED block down >> in configure.ac so it's able to use the results of the augmented >> DRUNTIME_OS_LINK_SPEC. >> >> While I didn't test the patch on Illumos (gcc builds inside a VM are >> slow), I tried it on Solaris 10/x86 with gas/ld and gas/gld (and an >> improved version of the patch for PR d/88238) where it behaved as >> expected. I've also included a previous version in a Solaris 11/x86 >> bootstrap. >> > > OK, thanks for having a look into it. installed on mainline now. I guess this should be backported to gcc-9 branch after some soak time? Rainer
# HG changeset patch # Parent 7943668e276d15b949fddd7723cb5213fb465977 Enable libphobos on Solaris 11/x86 diff --git a/configure.ac b/configure.ac --- a/configure.ac +++ b/configure.ac @@ -694,7 +694,7 @@ if test -d ${srcdir}/libphobos; then AC_MSG_CHECKING([for libphobos support]) if (srcdir=${srcdir}/libphobos; \ . ${srcdir}/configure.tgt; \ - test -n "$UNSUPPORTED") + test "$LIBPHOBOS_SUPPORTED" != "yes") then AC_MSG_RESULT([no]) noconfigdirs="$noconfigdirs target-libphobos" diff --git a/libphobos/Makefile.am b/libphobos/Makefile.am --- a/libphobos/Makefile.am +++ b/libphobos/Makefile.am @@ -15,7 +15,11 @@ # along with GCC; see the file COPYING3. If not see # <http://www.gnu.org/licenses/>. -SUBDIRS = libdruntime src testsuite +if ENABLE_LIBPHOBOS + SUBDIRS = libdruntime src testsuite +else + SUBDIRS = +endif ACLOCAL_AMFLAGS = -I . -I .. -I ../config diff --git a/libphobos/configure.ac b/libphobos/configure.ac --- a/libphobos/configure.ac +++ b/libphobos/configure.ac @@ -114,6 +114,42 @@ AC_SUBST(phobos_compiler_shared_flag) lt_prog_compiler_pic_D="$phobos_compiler_shared_flag" pic_mode='default' +AC_MSG_CHECKING([for --enable-libphobos]) +AC_ARG_ENABLE(libphobos, + [AS_HELP_STRING([--enable-libphobos], [Enable libphobos])]) +AC_MSG_RESULT($enable_libphobos) + +# See if supported. +unset LIBPHOBOS_SUPPORTED +AC_MSG_CHECKING([for host support for libphobos]) +. ${srcdir}/configure.tgt +case ${host} in + x86_64-*-solaris2.* | i?86-*-solaris2.*) + # libphobos doesn't compile with the Solaris/x86 assembler due to a + # relatively low linelength limit. + as_prog=`$CC -print-prog-name=as` + if test -n "$as_prog" && $as_prog -v /dev/null 2>&1 | grep GNU > /dev/null 2>&1; then + druntime_cv_use_gas=yes; + else + druntime_cv_use_gas=no; + fi + rm -f a.out + if test x$druntime_cv_use_gas = xno; then + LIBPHOBOS_SUPPORTED=no + fi + ;; +esac +AC_MSG_RESULT($LIBPHOBOS_SUPPORTED) + +# Decide if it's usable. +case $LIBPHOBOS_SUPPORTED:$enable_libphobos in +*:no) use_libphobos=no ;; +*:yes) use_libphobos=yes ;; +yes:*) use_libphobos=yes ;; +*:*) use_libphobos=no ;; +esac +AM_CONDITIONAL(ENABLE_LIBPHOBOS, test x$use_libphobos = xyes) + # Determine what GCC version number to use in filesystem paths. GCC_BASE_VER diff --git a/libphobos/configure.tgt b/libphobos/configure.tgt --- a/libphobos/configure.tgt +++ b/libphobos/configure.tgt @@ -21,16 +21,21 @@ # Disable the libphobos or libdruntime components on untested or known # broken systems. More targets shall be added after testing. +LIBPHOBOS_SUPPORTED=no case "${target}" in arm*-*-linux*) + LIBPHOBOS_SUPPORTED=yes ;; mips*-*-linux*) + LIBPHOBOS_SUPPORTED=yes ;; x86_64-*-kfreebsd*-gnu | i?86-*-kfreebsd*-gnu) + LIBPHOBOS_SUPPORTED=yes ;; x86_64-*-linux* | i?86-*-linux*) + LIBPHOBOS_SUPPORTED=yes ;; - *) - UNSUPPORTED=1 + x86_64-*-solaris2.11* | i?86-*-solaris2.11*) + LIBPHOBOS_SUPPORTED=yes ;; esac