public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [patch] configury support for VxWorks shared libraries
@ 2022-10-10 17:05 Olivier Hainque
  2022-10-10 18:05 ` Olivier Hainque
  0 siblings, 1 reply; 4+ messages in thread
From: Olivier Hainque @ 2022-10-10 17:05 UTC (permalink / raw)
  To: gcc-patches; +Cc: Olivier Hainque

[-- Attachment #1: Type: text/plain, Size: 2946 bytes --]

Hello,

This change introduces configury infrastructure allowing the
production of shared libraries for VxWorks, amenable to use with
non-static rtps (linked with "-non-static").

The ability to produce PIC code is not a given on all VxWorks
configurations, so activating this has to be explicitly requested
by configuring with  --enable-shared
(https://gcc.gnu.org/pipermail/gcc-patches/2022-September/602523.html).

This requirement is then leveraged to factorize the configuration
processing in a mostly cpu independant manner, which makes maintenance
a lot easier.

When activated, shared libs are built for the rtp mode only
(the only kind of entity for which they are supported by the
VxWorks environment), for code model != large at this stage as
large and PIC still don't play well together.

We have been using this for about a year with gcc-11 based toolchains,
with support activated for aarch64, x86_64 and ppc64-vxworks7r2, and
not activated for the corresponding 32bit variants (arm, i686, ppc).
Aarch64 proved an interesting challenge with the gcc/gcc_eh split
for lse features.

I obtained good test results with a gcc-12 based compiler for ppc64
and could get a successful sanity check build with mainline for that
cpu as well.

Will commit to mainline shortly.

Cheers,

Olivier

2022-10-09  Olivier Hainque  <hainque@adacore.com>
    
gcc/
        * config.gcc (*vxworks*): Add t-slibgcc fragment
        if enable_shared.
    
libgcc/
        * config.host (*vxworks*): When enable_shared, add
        libgcc and crtstuff "shared" fragments for rtp except
        large code model.
        (aarch64*-wrs-vxworks7*): Remove t-slibgcc-libgcc from
        the list of fragments.
    
toplevel/
        * libtool.m4 (*vxworks*): When enable_shared, set dynamic_linker
        and friends for rtp !large. Assume the linker has the required
        abilities and set lt_cv_deplibs_check_method.


Then, regenerating configure scripts to reflect the libtool.m4 update.

2022-10-09  Olivier Hainque  <hainque@adacore.com>
    
gcc/
        * configure: Regenerate.

libatomic/
        * configure: Regenerate.
 
libbacktrace/
        * configure: Regenerate.
    
libcc1/
        * configure: Regenerate.
    
libffi/
        * configure: Regenerate.
  
libgfortran/
        * configure: Regenerate.
    
libgomp/
        * configure: Regenerate.
 
libitm/
        * configure: Regenerate.
    
libobjc/
        * configure: Regenerate.
   
liboffloadmic/
        * configure: Regenerate.
   
liboffloadmic/
        * plugin/configure: Regenerate.
   
libphobos/
        * configure: Regenerate.
    
libquadmath/
        * configure: Regenerate.
    
libsanitizer/
        * configure: Regenerate.
    
libssp/
        * configure: Regenerate.
    
libstdc++-v3/
        * configure: Regenerate.

libvtv/
        * configure: Regenerate.
    
lto-plugin/
        * configure: Regenerate.
    
zlib/
        * configure: Regenerate.


[-- Attachment #2: 0002-Generic-configury-support-for-shared-libs-on-VxWorks.patch --]
[-- Type: application/octet-stream, Size: 43406 bytes --]

From 5062a392d9716c9db2e41c7e19626f78fa4cd9fb Mon Sep 17 00:00:00 2001
From: Olivier Hainque <hainque@adacore.com>
Date: Fri, 3 Dec 2021 17:50:56 +0000
Subject: [PATCH 2/2] Generic configury support for shared libs on VxWorks

This change adds the configury bits to activate the build of
shared libs on VxWorks ports configured with --enable-shared,
for libraries variants where this is generally supported (rtp,
code model !large - currently not compatible with -fPIC).

Set lt_cv_deplibs_check_method in libtool.m4, so the build of
libraries know how to establish dependencies.  This is useful in
configurations such as aarch64 where proper support of LSE relies
on accurate dependency information between libstdc++ and libgcc_s
to begin with.

Regenerate configure scripts to reflect libtool.m4 change.

2022-10-09  Olivier Hainque  <hainque@adacore.com>

gcc/
	* config.gcc (*vxworks*): Add t-slibgcc fragment
	if enable_shared.

libgcc/
	* config.host (*vxworks*): When enable_shared, add
	libgcc and crtstuff "shared" fragments for rtp except
	large code model.
        (aarch64*-wrs-vxworks7*): Remove t-slibgcc-libgcc from
        the list of fragments.

toplevel/
	* libtool.m4 (*vxworks*): When enable_shared, set dynamic_linker
	and friends for rtp !large. Assume the linker has the required
	abilities and set lt_cv_deplibs_check_method.

2022-10-09  Olivier Hainque  <hainque@adacore.com>

gcc/
	* configure: Regenerate.

libatomic/
	* configure: Regenerate.

libbacktrace/
	* configure: Regenerate.

libcc1/
	* configure: Regenerate.

libffi/
	* configure: Regenerate.

libgfortran/
	* configure: Regenerate.

libgomp/
	* configure: Regenerate.

libitm/
	* configure: Regenerate.

libobjc/
	* configure: Regenerate.

liboffloadmic/
	* configure: Regenerate.

liboffloadmic/
	* plugin/configure: Regenerate.

libphobos/
	* configure: Regenerate.

libquadmath/
	* configure: Regenerate.

libsanitizer/
	* configure: Regenerate.

libssp/
	* configure: Regenerate.

libstdc++-v3/
	* configure: Regenerate.

libvtv/
	* configure: Regenerate.

lto-plugin/
	* configure: Regenerate.

z lib/
	* configure: Regenerate.
---
 gcc/config.gcc                 |  9 +++++++
 gcc/configure                  | 48 ++++++++++++++++++++++++++++++++--
 libatomic/configure            | 24 +++++++++++++++++
 libbacktrace/configure         | 24 +++++++++++++++++
 libcc1/configure               | 48 ++++++++++++++++++++++++++++++++--
 libffi/configure               | 48 ++++++++++++++++++++++++++++++++--
 libgcc/config.host             | 31 +++++++++++++++++++++-
 libgfortran/configure          | 43 ++++++++++++++++++++++++++++++
 libgomp/configure              | 43 ++++++++++++++++++++++++++++++
 libitm/configure               | 48 ++++++++++++++++++++++++++++++++--
 libobjc/configure              | 24 +++++++++++++++++
 liboffloadmic/configure        | 48 ++++++++++++++++++++++++++++++++--
 liboffloadmic/plugin/configure | 48 ++++++++++++++++++++++++++++++++--
 libphobos/configure            | 24 +++++++++++++++++
 libquadmath/configure          | 24 +++++++++++++++++
 libsanitizer/configure         | 48 ++++++++++++++++++++++++++++++++--
 libssp/configure               | 24 +++++++++++++++++
 libstdc++-v3/configure         | 48 ++++++++++++++++++++++++++++++++--
 libtool.m4                     | 29 ++++++++++++++++++--
 libvtv/configure               | 48 ++++++++++++++++++++++++++++++++--
 lto-plugin/configure           | 24 +++++++++++++++++
 zlib/configure                 | 24 +++++++++++++++++
 22 files changed, 758 insertions(+), 21 deletions(-)

diff --git a/gcc/config.gcc b/gcc/config.gcc
index e73cb848c2d..d87cb860598 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -5518,6 +5518,15 @@ case "${target}" in
 		;;
 esac
 
+# VxWorks support for shared libraries has to be requested explicitly,
+# so we can factor this part here:
+
+case "${target}-${enable_shared}" in
+  *-*-vxworks*-yes)
+    tmake_file="${tmake_file} t-slibgcc"
+    ;;
+esac
+
 # Targets for which there is at least one VxWorks port should include
 # vxworks-dummy.h to allow safe references to various TARGET_VXWORKS kinds
 # of markers from other files in the port, including the vxworks*.h files to
diff --git a/gcc/configure b/gcc/configure
index ce4e1859e1f..507fb8a9c62 100755
--- a/gcc/configure
+++ b/gcc/configure
@@ -14737,6 +14737,11 @@ sysv4 | sysv4.3*)
 tpf*)
   lt_cv_deplibs_check_method=pass_all
   ;;
+vxworks*)
+  # Assume VxWorks cross toolchains are built on Linux, possibly
+  # as canadian for Windows hosts.
+  lt_cv_deplibs_check_method=pass_all
+  ;;
 esac
 
 fi
@@ -19248,6 +19253,25 @@ uts4*)
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
+# Shared libraries for VwWorks, >= 7 only at this stage
+# and (fpic) still incompatible with "large" code models
+# in a few configurations. Only for RTP mode in any case,
+# and upon explicit request at configure time.
+vxworks7*)
+  dynamic_linker=no
+  case ${with_multisubdir}-${enable_shared} in
+    *large*)
+      ;;
+    *mrtp*-yes)
+      version_type=linux
+      need_lib_prefix=no
+      need_version=no
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+      soname_spec='${libname}${release}${shared_ext}$major'
+      dynamic_linker="$host_os module_loader"
+      ;;
+  esac
+  ;;
 *)
   dynamic_linker=no
   ;;
@@ -21354,8 +21378,9 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
         ;;
 
       vxworks*)
-        # FIXME: insert proper C++ library support
-        ld_shlibs_CXX=no
+        # For VxWorks ports, we assume the use of a GNU linker with
+        # standard elf conventions.
+        ld_shlibs_CXX=yes
         ;;
 
       *)
@@ -22903,6 +22928,25 @@ uts4*)
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
+# Shared libraries for VwWorks, >= 7 only at this stage
+# and (fpic) still incompatible with "large" code models
+# in a few configurations. Only for RTP mode in any case,
+# and upon explicit request at configure time.
+vxworks7*)
+  dynamic_linker=no
+  case ${with_multisubdir}-${enable_shared} in
+    *large*)
+      ;;
+    *mrtp*-yes)
+      version_type=linux
+      need_lib_prefix=no
+      need_version=no
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+      soname_spec='${libname}${release}${shared_ext}$major'
+      dynamic_linker="$host_os module_loader"
+      ;;
+  esac
+  ;;
 *)
   dynamic_linker=no
   ;;
diff --git a/libatomic/configure b/libatomic/configure
index 92853dd8a45..69e6b823ce5 100755
--- a/libatomic/configure
+++ b/libatomic/configure
@@ -6161,6 +6161,11 @@ sysv4 | sysv4.3*)
 tpf*)
   lt_cv_deplibs_check_method=pass_all
   ;;
+vxworks*)
+  # Assume VxWorks cross toolchains are built on Linux, possibly
+  # as canadian for Windows hosts.
+  lt_cv_deplibs_check_method=pass_all
+  ;;
 esac
 
 fi
@@ -10941,6 +10946,25 @@ uts4*)
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
+# Shared libraries for VwWorks, >= 7 only at this stage
+# and (fpic) still incompatible with "large" code models
+# in a few configurations. Only for RTP mode in any case,
+# and upon explicit request at configure time.
+vxworks7*)
+  dynamic_linker=no
+  case ${with_multisubdir}-${enable_shared} in
+    *large*)
+      ;;
+    *mrtp*-yes)
+      version_type=linux
+      need_lib_prefix=no
+      need_version=no
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+      soname_spec='${libname}${release}${shared_ext}$major'
+      dynamic_linker="$host_os module_loader"
+      ;;
+  esac
+  ;;
 *)
   dynamic_linker=no
   ;;
diff --git a/libbacktrace/configure b/libbacktrace/configure
index 705b71bd8cd..4e0987258e8 100755
--- a/libbacktrace/configure
+++ b/libbacktrace/configure
@@ -6558,6 +6558,11 @@ sysv4 | sysv4.3*)
 tpf*)
   lt_cv_deplibs_check_method=pass_all
   ;;
+vxworks*)
+  # Assume VxWorks cross toolchains are built on Linux, possibly
+  # as canadian for Windows hosts.
+  lt_cv_deplibs_check_method=pass_all
+  ;;
 esac
 
 fi
@@ -11070,6 +11075,25 @@ uts4*)
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
+# Shared libraries for VwWorks, >= 7 only at this stage
+# and (fpic) still incompatible with "large" code models
+# in a few configurations. Only for RTP mode in any case,
+# and upon explicit request at configure time.
+vxworks7*)
+  dynamic_linker=no
+  case ${with_multisubdir}-${enable_shared} in
+    *large*)
+      ;;
+    *mrtp*-yes)
+      version_type=linux
+      need_lib_prefix=no
+      need_version=no
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+      soname_spec='${libname}${release}${shared_ext}$major'
+      dynamic_linker="$host_os module_loader"
+      ;;
+  esac
+  ;;
 *)
   dynamic_linker=no
   ;;
diff --git a/libcc1/configure b/libcc1/configure
index 6dd91a086e6..2801e6c2ad0 100755
--- a/libcc1/configure
+++ b/libcc1/configure
@@ -5825,6 +5825,11 @@ sysv4 | sysv4.3*)
 tpf*)
   lt_cv_deplibs_check_method=pass_all
   ;;
+vxworks*)
+  # Assume VxWorks cross toolchains are built on Linux, possibly
+  # as canadian for Windows hosts.
+  lt_cv_deplibs_check_method=pass_all
+  ;;
 esac
 
 fi
@@ -10336,6 +10341,25 @@ uts4*)
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
+# Shared libraries for VwWorks, >= 7 only at this stage
+# and (fpic) still incompatible with "large" code models
+# in a few configurations. Only for RTP mode in any case,
+# and upon explicit request at configure time.
+vxworks7*)
+  dynamic_linker=no
+  case ${with_multisubdir}-${enable_shared} in
+    *large*)
+      ;;
+    *mrtp*-yes)
+      version_type=linux
+      need_lib_prefix=no
+      need_version=no
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+      soname_spec='${libname}${release}${shared_ext}$major'
+      dynamic_linker="$host_os module_loader"
+      ;;
+  esac
+  ;;
 *)
   dynamic_linker=no
   ;;
@@ -12848,8 +12872,9 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
         ;;
 
       vxworks*)
-        # FIXME: insert proper C++ library support
-        ld_shlibs_CXX=no
+        # For VxWorks ports, we assume the use of a GNU linker with
+        # standard elf conventions.
+        ld_shlibs_CXX=yes
         ;;
 
       *)
@@ -14397,6 +14422,25 @@ uts4*)
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
+# Shared libraries for VwWorks, >= 7 only at this stage
+# and (fpic) still incompatible with "large" code models
+# in a few configurations. Only for RTP mode in any case,
+# and upon explicit request at configure time.
+vxworks7*)
+  dynamic_linker=no
+  case ${with_multisubdir}-${enable_shared} in
+    *large*)
+      ;;
+    *mrtp*-yes)
+      version_type=linux
+      need_lib_prefix=no
+      need_version=no
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+      soname_spec='${libname}${release}${shared_ext}$major'
+      dynamic_linker="$host_os module_loader"
+      ;;
+  esac
+  ;;
 *)
   dynamic_linker=no
   ;;
diff --git a/libffi/configure b/libffi/configure
index 575641cca1d..523fa66c83e 100755
--- a/libffi/configure
+++ b/libffi/configure
@@ -6351,6 +6351,11 @@ sysv4 | sysv4.3*)
 tpf*)
   lt_cv_deplibs_check_method=pass_all
   ;;
+vxworks*)
+  # Assume VxWorks cross toolchains are built on Linux, possibly
+  # as canadian for Windows hosts.
+  lt_cv_deplibs_check_method=pass_all
+  ;;
 esac
 
 fi
@@ -11131,6 +11136,25 @@ uts4*)
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
+# Shared libraries for VwWorks, >= 7 only at this stage
+# and (fpic) still incompatible with "large" code models
+# in a few configurations. Only for RTP mode in any case,
+# and upon explicit request at configure time.
+vxworks7*)
+  dynamic_linker=no
+  case ${with_multisubdir}-${enable_shared} in
+    *large*)
+      ;;
+    *mrtp*-yes)
+      version_type=linux
+      need_lib_prefix=no
+      need_version=no
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+      soname_spec='${libname}${release}${shared_ext}$major'
+      dynamic_linker="$host_os module_loader"
+      ;;
+  esac
+  ;;
 *)
   dynamic_linker=no
   ;;
@@ -13237,8 +13261,9 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
         ;;
 
       vxworks*)
-        # FIXME: insert proper C++ library support
-        ld_shlibs_CXX=no
+        # For VxWorks ports, we assume the use of a GNU linker with
+        # standard elf conventions.
+        ld_shlibs_CXX=yes
         ;;
 
       *)
@@ -14786,6 +14811,25 @@ uts4*)
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
+# Shared libraries for VwWorks, >= 7 only at this stage
+# and (fpic) still incompatible with "large" code models
+# in a few configurations. Only for RTP mode in any case,
+# and upon explicit request at configure time.
+vxworks7*)
+  dynamic_linker=no
+  case ${with_multisubdir}-${enable_shared} in
+    *large*)
+      ;;
+    *mrtp*-yes)
+      version_type=linux
+      need_lib_prefix=no
+      need_version=no
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+      soname_spec='${libname}${release}${shared_ext}$major'
+      dynamic_linker="$host_os module_loader"
+      ;;
+  esac
+  ;;
 *)
   dynamic_linker=no
   ;;
diff --git a/libgcc/config.host b/libgcc/config.host
index 9dcc2538dc8..0fbf9a34f17 100644
--- a/libgcc/config.host
+++ b/libgcc/config.host
@@ -410,7 +410,7 @@ aarch64*-*-vxworks7*)
 	extra_parts="$extra_parts crtfastmath.o"
 	md_unwind_header=aarch64/aarch64-unwind.h
 	tmake_file="${tmake_file} ${cpu_type}/t-aarch64"
-	tmake_file="${tmake_file} ${cpu_type}/t-lse t-slibgcc-libgcc"
+	tmake_file="${tmake_file} ${cpu_type}/t-lse"
 	tmake_file="${tmake_file} ${cpu_type}/t-softfp t-softfp t-crtfm"
 	tmake_file="${tmake_file} t-dfprules"
 	;;
@@ -1549,6 +1549,35 @@ aarch64*-*-*)
 	;;
 esac
 
+# Setup to build a shared libgcc for VxWorks when that was requested,
+# for library variants that support it (rtp only, code model not large).
+#
+
+case ${host} in
+*vxworks*)
+	case ${with_multisubdir}-${enable_shared} in
+	*large*)
+		;;
+	*mrtp*-yes)
+		tmake_file="${tmake_file} t-libgcc-pic"
+
+		# Arrange to set a soname on libgcc_s so DT_NEEDED entries
+		# for it refer to that alone. This ensures absence of path
+		# components which would be incorrect as the runtime loader
+		# on target has no visibility over the host filesystem.
+		tmake_file="${tmake_file} t-slibgcc-gld-nover"
+		tmake_file="${tmake_file} t-slibgcc"
+
+		# t-slibgcc-libgcc is needed on at least aarch64 (for
+		# lse) and at most harmless on other targets.
+		tmake_file="${tmake_file} t-slibgcc-libgcc"
+
+		tmake_file="${tmake_file} t-crtstuff-pic t-vxcrtstuffS"
+		;;
+	esac
+	;;
+esac
+
 # The vxworks threads implementation relies on a few extra sources,
 # which we arrange to add after everything else:
 
diff --git a/libgfortran/configure b/libgfortran/configure
index beb0ec49eb1..bac967fc228 100755
--- a/libgfortran/configure
+++ b/libgfortran/configure
@@ -7783,6 +7783,11 @@ sysv4 | sysv4.3*)
 tpf*)
   lt_cv_deplibs_check_method=pass_all
   ;;
+vxworks*)
+  # Assume VxWorks cross toolchains are built on Linux, possibly
+  # as canadian for Windows hosts.
+  lt_cv_deplibs_check_method=pass_all
+  ;;
 esac
 
 fi
@@ -12311,6 +12316,25 @@ uts4*)
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
+# Shared libraries for VwWorks, >= 7 only at this stage
+# and (fpic) still incompatible with "large" code models
+# in a few configurations. Only for RTP mode in any case,
+# and upon explicit request at configure time.
+vxworks7*)
+  dynamic_linker=no
+  case ${with_multisubdir}-${enable_shared} in
+    *large*)
+      ;;
+    *mrtp*-yes)
+      version_type=linux
+      need_lib_prefix=no
+      need_version=no
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+      soname_spec='${libname}${release}${shared_ext}$major'
+      dynamic_linker="$host_os module_loader"
+      ;;
+  esac
+  ;;
 *)
   dynamic_linker=no
   ;;
@@ -16075,6 +16099,25 @@ uts4*)
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
+# Shared libraries for VwWorks, >= 7 only at this stage
+# and (fpic) still incompatible with "large" code models
+# in a few configurations. Only for RTP mode in any case,
+# and upon explicit request at configure time.
+vxworks7*)
+  dynamic_linker=no
+  case ${with_multisubdir}-${enable_shared} in
+    *large*)
+      ;;
+    *mrtp*-yes)
+      version_type=linux
+      need_lib_prefix=no
+      need_version=no
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+      soname_spec='${libname}${release}${shared_ext}$major'
+      dynamic_linker="$host_os module_loader"
+      ;;
+  esac
+  ;;
 *)
   dynamic_linker=no
   ;;
diff --git a/libgomp/configure b/libgomp/configure
index b11170e6a7c..c4d54f0a834 100755
--- a/libgomp/configure
+++ b/libgomp/configure
@@ -6173,6 +6173,11 @@ sysv4 | sysv4.3*)
 tpf*)
   lt_cv_deplibs_check_method=pass_all
   ;;
+vxworks*)
+  # Assume VxWorks cross toolchains are built on Linux, possibly
+  # as canadian for Windows hosts.
+  lt_cv_deplibs_check_method=pass_all
+  ;;
 esac
 
 fi
@@ -10953,6 +10958,25 @@ uts4*)
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
+# Shared libraries for VwWorks, >= 7 only at this stage
+# and (fpic) still incompatible with "large" code models
+# in a few configurations. Only for RTP mode in any case,
+# and upon explicit request at configure time.
+vxworks7*)
+  dynamic_linker=no
+  case ${with_multisubdir}-${enable_shared} in
+    *large*)
+      ;;
+    *mrtp*-yes)
+      version_type=linux
+      need_lib_prefix=no
+      need_version=no
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+      soname_spec='${libname}${release}${shared_ext}$major'
+      dynamic_linker="$host_os module_loader"
+      ;;
+  esac
+  ;;
 *)
   dynamic_linker=no
   ;;
@@ -14587,6 +14611,25 @@ uts4*)
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
+# Shared libraries for VwWorks, >= 7 only at this stage
+# and (fpic) still incompatible with "large" code models
+# in a few configurations. Only for RTP mode in any case,
+# and upon explicit request at configure time.
+vxworks7*)
+  dynamic_linker=no
+  case ${with_multisubdir}-${enable_shared} in
+    *large*)
+      ;;
+    *mrtp*-yes)
+      version_type=linux
+      need_lib_prefix=no
+      need_version=no
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+      soname_spec='${libname}${release}${shared_ext}$major'
+      dynamic_linker="$host_os module_loader"
+      ;;
+  esac
+  ;;
 *)
   dynamic_linker=no
   ;;
diff --git a/libitm/configure b/libitm/configure
index 18fc2d3a10a..3700ae44de2 100755
--- a/libitm/configure
+++ b/libitm/configure
@@ -6836,6 +6836,11 @@ sysv4 | sysv4.3*)
 tpf*)
   lt_cv_deplibs_check_method=pass_all
   ;;
+vxworks*)
+  # Assume VxWorks cross toolchains are built on Linux, possibly
+  # as canadian for Windows hosts.
+  lt_cv_deplibs_check_method=pass_all
+  ;;
 esac
 
 fi
@@ -11617,6 +11622,25 @@ uts4*)
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
+# Shared libraries for VwWorks, >= 7 only at this stage
+# and (fpic) still incompatible with "large" code models
+# in a few configurations. Only for RTP mode in any case,
+# and upon explicit request at configure time.
+vxworks7*)
+  dynamic_linker=no
+  case ${with_multisubdir}-${enable_shared} in
+    *large*)
+      ;;
+    *mrtp*-yes)
+      version_type=linux
+      need_lib_prefix=no
+      need_version=no
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+      soname_spec='${libname}${release}${shared_ext}$major'
+      dynamic_linker="$host_os module_loader"
+      ;;
+  esac
+  ;;
 *)
   dynamic_linker=no
   ;;
@@ -13723,8 +13747,9 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
         ;;
 
       vxworks*)
-        # FIXME: insert proper C++ library support
-        ld_shlibs_CXX=no
+        # For VxWorks ports, we assume the use of a GNU linker with
+        # standard elf conventions.
+        ld_shlibs_CXX=yes
         ;;
 
       *)
@@ -15272,6 +15297,25 @@ uts4*)
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
+# Shared libraries for VwWorks, >= 7 only at this stage
+# and (fpic) still incompatible with "large" code models
+# in a few configurations. Only for RTP mode in any case,
+# and upon explicit request at configure time.
+vxworks7*)
+  dynamic_linker=no
+  case ${with_multisubdir}-${enable_shared} in
+    *large*)
+      ;;
+    *mrtp*-yes)
+      version_type=linux
+      need_lib_prefix=no
+      need_version=no
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+      soname_spec='${libname}${release}${shared_ext}$major'
+      dynamic_linker="$host_os module_loader"
+      ;;
+  esac
+  ;;
 *)
   dynamic_linker=no
   ;;
diff --git a/libobjc/configure b/libobjc/configure
index 2dcc9cd32f6..ee7e021f949 100755
--- a/libobjc/configure
+++ b/libobjc/configure
@@ -5478,6 +5478,11 @@ sysv4 | sysv4.3*)
 tpf*)
   lt_cv_deplibs_check_method=pass_all
   ;;
+vxworks*)
+  # Assume VxWorks cross toolchains are built on Linux, possibly
+  # as canadian for Windows hosts.
+  lt_cv_deplibs_check_method=pass_all
+  ;;
 esac
 
 fi
@@ -10315,6 +10320,25 @@ uts4*)
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
+# Shared libraries for VwWorks, >= 7 only at this stage
+# and (fpic) still incompatible with "large" code models
+# in a few configurations. Only for RTP mode in any case,
+# and upon explicit request at configure time.
+vxworks7*)
+  dynamic_linker=no
+  case ${with_multisubdir}-${enable_shared} in
+    *large*)
+      ;;
+    *mrtp*-yes)
+      version_type=linux
+      need_lib_prefix=no
+      need_version=no
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+      soname_spec='${libname}${release}${shared_ext}$major'
+      dynamic_linker="$host_os module_loader"
+      ;;
+  esac
+  ;;
 *)
   dynamic_linker=no
   ;;
diff --git a/liboffloadmic/configure b/liboffloadmic/configure
index f8da8fabb6f..24b687a05fa 100755
--- a/liboffloadmic/configure
+++ b/liboffloadmic/configure
@@ -6470,6 +6470,11 @@ sysv4 | sysv4.3*)
 tpf*)
   lt_cv_deplibs_check_method=pass_all
   ;;
+vxworks*)
+  # Assume VxWorks cross toolchains are built on Linux, possibly
+  # as canadian for Windows hosts.
+  lt_cv_deplibs_check_method=pass_all
+  ;;
 esac
 
 fi
@@ -10981,6 +10986,25 @@ uts4*)
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
+# Shared libraries for VwWorks, >= 7 only at this stage
+# and (fpic) still incompatible with "large" code models
+# in a few configurations. Only for RTP mode in any case,
+# and upon explicit request at configure time.
+vxworks7*)
+  dynamic_linker=no
+  case ${with_multisubdir}-${enable_shared} in
+    *large*)
+      ;;
+    *mrtp*-yes)
+      version_type=linux
+      need_lib_prefix=no
+      need_version=no
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+      soname_spec='${libname}${release}${shared_ext}$major'
+      dynamic_linker="$host_os module_loader"
+      ;;
+  esac
+  ;;
 *)
   dynamic_linker=no
   ;;
@@ -13087,8 +13111,9 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
         ;;
 
       vxworks*)
-        # FIXME: insert proper C++ library support
-        ld_shlibs_CXX=no
+        # For VxWorks ports, we assume the use of a GNU linker with
+        # standard elf conventions.
+        ld_shlibs_CXX=yes
         ;;
 
       *)
@@ -14636,6 +14661,25 @@ uts4*)
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
+# Shared libraries for VwWorks, >= 7 only at this stage
+# and (fpic) still incompatible with "large" code models
+# in a few configurations. Only for RTP mode in any case,
+# and upon explicit request at configure time.
+vxworks7*)
+  dynamic_linker=no
+  case ${with_multisubdir}-${enable_shared} in
+    *large*)
+      ;;
+    *mrtp*-yes)
+      version_type=linux
+      need_lib_prefix=no
+      need_version=no
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+      soname_spec='${libname}${release}${shared_ext}$major'
+      dynamic_linker="$host_os module_loader"
+      ;;
+  esac
+  ;;
 *)
   dynamic_linker=no
   ;;
diff --git a/liboffloadmic/plugin/configure b/liboffloadmic/plugin/configure
index ce0a5511fc3..6e2b88c350d 100755
--- a/liboffloadmic/plugin/configure
+++ b/liboffloadmic/plugin/configure
@@ -5849,6 +5849,11 @@ sysv4 | sysv4.3*)
 tpf*)
   lt_cv_deplibs_check_method=pass_all
   ;;
+vxworks*)
+  # Assume VxWorks cross toolchains are built on Linux, possibly
+  # as canadian for Windows hosts.
+  lt_cv_deplibs_check_method=pass_all
+  ;;
 esac
 
 fi
@@ -10628,6 +10633,25 @@ uts4*)
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
+# Shared libraries for VwWorks, >= 7 only at this stage
+# and (fpic) still incompatible with "large" code models
+# in a few configurations. Only for RTP mode in any case,
+# and upon explicit request at configure time.
+vxworks7*)
+  dynamic_linker=no
+  case ${with_multisubdir}-${enable_shared} in
+    *large*)
+      ;;
+    *mrtp*-yes)
+      version_type=linux
+      need_lib_prefix=no
+      need_version=no
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+      soname_spec='${libname}${release}${shared_ext}$major'
+      dynamic_linker="$host_os module_loader"
+      ;;
+  esac
+  ;;
 *)
   dynamic_linker=no
   ;;
@@ -12734,8 +12758,9 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
         ;;
 
       vxworks*)
-        # FIXME: insert proper C++ library support
-        ld_shlibs_CXX=no
+        # For VxWorks ports, we assume the use of a GNU linker with
+        # standard elf conventions.
+        ld_shlibs_CXX=yes
         ;;
 
       *)
@@ -14283,6 +14308,25 @@ uts4*)
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
+# Shared libraries for VwWorks, >= 7 only at this stage
+# and (fpic) still incompatible with "large" code models
+# in a few configurations. Only for RTP mode in any case,
+# and upon explicit request at configure time.
+vxworks7*)
+  dynamic_linker=no
+  case ${with_multisubdir}-${enable_shared} in
+    *large*)
+      ;;
+    *mrtp*-yes)
+      version_type=linux
+      need_lib_prefix=no
+      need_version=no
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+      soname_spec='${libname}${release}${shared_ext}$major'
+      dynamic_linker="$host_os module_loader"
+      ;;
+  esac
+  ;;
 *)
   dynamic_linker=no
   ;;
diff --git a/libphobos/configure b/libphobos/configure
index 69d2d440d69..f1540b24f2d 100755
--- a/libphobos/configure
+++ b/libphobos/configure
@@ -6798,6 +6798,11 @@ sysv4 | sysv4.3*)
 tpf*)
   lt_cv_deplibs_check_method=pass_all
   ;;
+vxworks*)
+  # Assume VxWorks cross toolchains are built on Linux, possibly
+  # as canadian for Windows hosts.
+  lt_cv_deplibs_check_method=pass_all
+  ;;
 esac
 
 fi
@@ -11309,6 +11314,25 @@ uts4*)
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
+# Shared libraries for VwWorks, >= 7 only at this stage
+# and (fpic) still incompatible with "large" code models
+# in a few configurations. Only for RTP mode in any case,
+# and upon explicit request at configure time.
+vxworks7*)
+  dynamic_linker=no
+  case ${with_multisubdir}-${enable_shared} in
+    *large*)
+      ;;
+    *mrtp*-yes)
+      version_type=linux
+      need_lib_prefix=no
+      need_version=no
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+      soname_spec='${libname}${release}${shared_ext}$major'
+      dynamic_linker="$host_os module_loader"
+      ;;
+  esac
+  ;;
 *)
   dynamic_linker=no
   ;;
diff --git a/libquadmath/configure b/libquadmath/configure
index 603f2f13140..39579d14cdf 100755
--- a/libquadmath/configure
+++ b/libquadmath/configure
@@ -5820,6 +5820,11 @@ sysv4 | sysv4.3*)
 tpf*)
   lt_cv_deplibs_check_method=pass_all
   ;;
+vxworks*)
+  # Assume VxWorks cross toolchains are built on Linux, possibly
+  # as canadian for Windows hosts.
+  lt_cv_deplibs_check_method=pass_all
+  ;;
 esac
 
 fi
@@ -10350,6 +10355,25 @@ uts4*)
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
+# Shared libraries for VwWorks, >= 7 only at this stage
+# and (fpic) still incompatible with "large" code models
+# in a few configurations. Only for RTP mode in any case,
+# and upon explicit request at configure time.
+vxworks7*)
+  dynamic_linker=no
+  case ${with_multisubdir}-${enable_shared} in
+    *large*)
+      ;;
+    *mrtp*-yes)
+      version_type=linux
+      need_lib_prefix=no
+      need_version=no
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+      soname_spec='${libname}${release}${shared_ext}$major'
+      dynamic_linker="$host_os module_loader"
+      ;;
+  esac
+  ;;
 *)
   dynamic_linker=no
   ;;
diff --git a/libsanitizer/configure b/libsanitizer/configure
index 771b135573a..9552cc0d06f 100755
--- a/libsanitizer/configure
+++ b/libsanitizer/configure
@@ -7407,6 +7407,11 @@ sysv4 | sysv4.3*)
 tpf*)
   lt_cv_deplibs_check_method=pass_all
   ;;
+vxworks*)
+  # Assume VxWorks cross toolchains are built on Linux, possibly
+  # as canadian for Windows hosts.
+  lt_cv_deplibs_check_method=pass_all
+  ;;
 esac
 
 fi
@@ -11918,6 +11923,25 @@ uts4*)
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
+# Shared libraries for VwWorks, >= 7 only at this stage
+# and (fpic) still incompatible with "large" code models
+# in a few configurations. Only for RTP mode in any case,
+# and upon explicit request at configure time.
+vxworks7*)
+  dynamic_linker=no
+  case ${with_multisubdir}-${enable_shared} in
+    *large*)
+      ;;
+    *mrtp*-yes)
+      version_type=linux
+      need_lib_prefix=no
+      need_version=no
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+      soname_spec='${libname}${release}${shared_ext}$major'
+      dynamic_linker="$host_os module_loader"
+      ;;
+  esac
+  ;;
 *)
   dynamic_linker=no
   ;;
@@ -14024,8 +14048,9 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
         ;;
 
       vxworks*)
-        # FIXME: insert proper C++ library support
-        ld_shlibs_CXX=no
+        # For VxWorks ports, we assume the use of a GNU linker with
+        # standard elf conventions.
+        ld_shlibs_CXX=yes
         ;;
 
       *)
@@ -15573,6 +15598,25 @@ uts4*)
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
+# Shared libraries for VwWorks, >= 7 only at this stage
+# and (fpic) still incompatible with "large" code models
+# in a few configurations. Only for RTP mode in any case,
+# and upon explicit request at configure time.
+vxworks7*)
+  dynamic_linker=no
+  case ${with_multisubdir}-${enable_shared} in
+    *large*)
+      ;;
+    *mrtp*-yes)
+      version_type=linux
+      need_lib_prefix=no
+      need_version=no
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+      soname_spec='${libname}${release}${shared_ext}$major'
+      dynamic_linker="$host_os module_loader"
+      ;;
+  esac
+  ;;
 *)
   dynamic_linker=no
   ;;
diff --git a/libssp/configure b/libssp/configure
index b27ae22a976..ff0d9c3b61d 100755
--- a/libssp/configure
+++ b/libssp/configure
@@ -6006,6 +6006,11 @@ sysv4 | sysv4.3*)
 tpf*)
   lt_cv_deplibs_check_method=pass_all
   ;;
+vxworks*)
+  # Assume VxWorks cross toolchains are built on Linux, possibly
+  # as canadian for Windows hosts.
+  lt_cv_deplibs_check_method=pass_all
+  ;;
 esac
 
 fi
@@ -10536,6 +10541,25 @@ uts4*)
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
+# Shared libraries for VwWorks, >= 7 only at this stage
+# and (fpic) still incompatible with "large" code models
+# in a few configurations. Only for RTP mode in any case,
+# and upon explicit request at configure time.
+vxworks7*)
+  dynamic_linker=no
+  case ${with_multisubdir}-${enable_shared} in
+    *large*)
+      ;;
+    *mrtp*-yes)
+      version_type=linux
+      need_lib_prefix=no
+      need_version=no
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+      soname_spec='${libname}${release}${shared_ext}$major'
+      dynamic_linker="$host_os module_loader"
+      ;;
+  esac
+  ;;
 *)
   dynamic_linker=no
   ;;
diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure
index 7ead77a5c80..4bb1d73f0e0 100755
--- a/libstdc++-v3/configure
+++ b/libstdc++-v3/configure
@@ -7089,6 +7089,11 @@ sysv4 | sysv4.3*)
 tpf*)
   lt_cv_deplibs_check_method=pass_all
   ;;
+vxworks*)
+  # Assume VxWorks cross toolchains are built on Linux, possibly
+  # as canadian for Windows hosts.
+  lt_cv_deplibs_check_method=pass_all
+  ;;
 esac
 
 fi
@@ -11747,6 +11752,25 @@ uts4*)
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
+# Shared libraries for VwWorks, >= 7 only at this stage
+# and (fpic) still incompatible with "large" code models
+# in a few configurations. Only for RTP mode in any case,
+# and upon explicit request at configure time.
+vxworks7*)
+  dynamic_linker=no
+  case ${with_multisubdir}-${enable_shared} in
+    *large*)
+      ;;
+    *mrtp*-yes)
+      version_type=linux
+      need_lib_prefix=no
+      need_version=no
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+      soname_spec='${libname}${release}${shared_ext}$major'
+      dynamic_linker="$host_os module_loader"
+      ;;
+  esac
+  ;;
 *)
   dynamic_linker=no
   ;;
@@ -13874,8 +13898,9 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
         ;;
 
       vxworks*)
-        # FIXME: insert proper C++ library support
-        ld_shlibs_CXX=no
+        # For VxWorks ports, we assume the use of a GNU linker with
+        # standard elf conventions.
+        ld_shlibs_CXX=yes
         ;;
 
       *)
@@ -15426,6 +15451,25 @@ uts4*)
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
+# Shared libraries for VwWorks, >= 7 only at this stage
+# and (fpic) still incompatible with "large" code models
+# in a few configurations. Only for RTP mode in any case,
+# and upon explicit request at configure time.
+vxworks7*)
+  dynamic_linker=no
+  case ${with_multisubdir}-${enable_shared} in
+    *large*)
+      ;;
+    *mrtp*-yes)
+      version_type=linux
+      need_lib_prefix=no
+      need_version=no
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+      soname_spec='${libname}${release}${shared_ext}$major'
+      dynamic_linker="$host_os module_loader"
+      ;;
+  esac
+  ;;
 *)
   dynamic_linker=no
   ;;
diff --git a/libtool.m4 b/libtool.m4
index 17f8e5f3074..b92e284d9f9 100644
--- a/libtool.m4
+++ b/libtool.m4
@@ -2675,6 +2675,25 @@ uts4*)
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
+# Shared libraries for VwWorks, >= 7 only at this stage
+# and (fpic) still incompatible with "large" code models
+# in a few configurations. Only for RTP mode in any case,
+# and upon explicit request at configure time.
+vxworks7*)
+  dynamic_linker=no
+  case ${with_multisubdir}-${enable_shared} in
+    *large*)
+      ;;
+    *mrtp*-yes)
+      version_type=linux
+      need_lib_prefix=no
+      need_version=no
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+      soname_spec='${libname}${release}${shared_ext}$major'
+      dynamic_linker="$host_os module_loader"
+      ;;
+  esac
+  ;;
 *)
   dynamic_linker=no
   ;;
@@ -3162,6 +3181,11 @@ sysv4 | sysv4.3*)
 tpf*)
   lt_cv_deplibs_check_method=pass_all
   ;;
+vxworks*)
+  # Assume VxWorks cross toolchains are built on Linux, possibly
+  # as canadian for Windows hosts.
+  lt_cv_deplibs_check_method=pass_all
+  ;;
 esac
 ])
 file_magic_cmd=$lt_cv_file_magic_cmd
@@ -6396,8 +6420,9 @@ if test "$_lt_caught_CXX_error" != yes; then
         ;;
 
       vxworks*)
-        # FIXME: insert proper C++ library support
-        _LT_TAGVAR(ld_shlibs, $1)=no
+        # For VxWorks ports, we assume the use of a GNU linker with
+        # standard elf conventions.
+        _LT_TAGVAR(ld_shlibs, $1)=yes
         ;;
 
       *)
diff --git a/libvtv/configure b/libvtv/configure
index 897b069b613..a2cfca98332 100755
--- a/libvtv/configure
+++ b/libvtv/configure
@@ -7302,6 +7302,11 @@ sysv4 | sysv4.3*)
 tpf*)
   lt_cv_deplibs_check_method=pass_all
   ;;
+vxworks*)
+  # Assume VxWorks cross toolchains are built on Linux, possibly
+  # as canadian for Windows hosts.
+  lt_cv_deplibs_check_method=pass_all
+  ;;
 esac
 
 fi
@@ -11813,6 +11818,25 @@ uts4*)
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
+# Shared libraries for VwWorks, >= 7 only at this stage
+# and (fpic) still incompatible with "large" code models
+# in a few configurations. Only for RTP mode in any case,
+# and upon explicit request at configure time.
+vxworks7*)
+  dynamic_linker=no
+  case ${with_multisubdir}-${enable_shared} in
+    *large*)
+      ;;
+    *mrtp*-yes)
+      version_type=linux
+      need_lib_prefix=no
+      need_version=no
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+      soname_spec='${libname}${release}${shared_ext}$major'
+      dynamic_linker="$host_os module_loader"
+      ;;
+  esac
+  ;;
 *)
   dynamic_linker=no
   ;;
@@ -13919,8 +13943,9 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
         ;;
 
       vxworks*)
-        # FIXME: insert proper C++ library support
-        ld_shlibs_CXX=no
+        # For VxWorks ports, we assume the use of a GNU linker with
+        # standard elf conventions.
+        ld_shlibs_CXX=yes
         ;;
 
       *)
@@ -15468,6 +15493,25 @@ uts4*)
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
+# Shared libraries for VwWorks, >= 7 only at this stage
+# and (fpic) still incompatible with "large" code models
+# in a few configurations. Only for RTP mode in any case,
+# and upon explicit request at configure time.
+vxworks7*)
+  dynamic_linker=no
+  case ${with_multisubdir}-${enable_shared} in
+    *large*)
+      ;;
+    *mrtp*-yes)
+      version_type=linux
+      need_lib_prefix=no
+      need_version=no
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+      soname_spec='${libname}${release}${shared_ext}$major'
+      dynamic_linker="$host_os module_loader"
+      ;;
+  esac
+  ;;
 *)
   dynamic_linker=no
   ;;
diff --git a/lto-plugin/configure b/lto-plugin/configure
index f165eaeb194..33a07c819a4 100755
--- a/lto-plugin/configure
+++ b/lto-plugin/configure
@@ -7157,6 +7157,11 @@ sysv4 | sysv4.3*)
 tpf*)
   lt_cv_deplibs_check_method=pass_all
   ;;
+vxworks*)
+  # Assume VxWorks cross toolchains are built on Linux, possibly
+  # as canadian for Windows hosts.
+  lt_cv_deplibs_check_method=pass_all
+  ;;
 esac
 
 fi
@@ -11669,6 +11674,25 @@ uts4*)
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
+# Shared libraries for VwWorks, >= 7 only at this stage
+# and (fpic) still incompatible with "large" code models
+# in a few configurations. Only for RTP mode in any case,
+# and upon explicit request at configure time.
+vxworks7*)
+  dynamic_linker=no
+  case ${with_multisubdir}-${enable_shared} in
+    *large*)
+      ;;
+    *mrtp*-yes)
+      version_type=linux
+      need_lib_prefix=no
+      need_version=no
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+      soname_spec='${libname}${release}${shared_ext}$major'
+      dynamic_linker="$host_os module_loader"
+      ;;
+  esac
+  ;;
 *)
   dynamic_linker=no
   ;;
diff --git a/zlib/configure b/zlib/configure
index 05c41b7e12d..a05f1c647fd 100755
--- a/zlib/configure
+++ b/zlib/configure
@@ -5482,6 +5482,11 @@ sysv4 | sysv4.3*)
 tpf*)
   lt_cv_deplibs_check_method=pass_all
   ;;
+vxworks*)
+  # Assume VxWorks cross toolchains are built on Linux, possibly
+  # as canadian for Windows hosts.
+  lt_cv_deplibs_check_method=pass_all
+  ;;
 esac
 
 fi
@@ -10279,6 +10284,25 @@ uts4*)
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
+# Shared libraries for VwWorks, >= 7 only at this stage
+# and (fpic) still incompatible with "large" code models
+# in a few configurations. Only for RTP mode in any case,
+# and upon explicit request at configure time.
+vxworks7*)
+  dynamic_linker=no
+  case ${with_multisubdir}-${enable_shared} in
+    *large*)
+      ;;
+    *mrtp*-yes)
+      version_type=linux
+      need_lib_prefix=no
+      need_version=no
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+      soname_spec='${libname}${release}${shared_ext}$major'
+      dynamic_linker="$host_os module_loader"
+      ;;
+  esac
+  ;;
 *)
   dynamic_linker=no
   ;;
-- 
2.25.1


[-- Attachment #3: Type: text/plain, Size: 3 bytes --]





^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [patch] configury support for VxWorks shared libraries
  2022-10-10 17:05 [patch] configury support for VxWorks shared libraries Olivier Hainque
@ 2022-10-10 18:05 ` Olivier Hainque
  2022-10-10 19:38   ` Jonathan Wakely
  0 siblings, 1 reply; 4+ messages in thread
From: Olivier Hainque @ 2022-10-10 18:05 UTC (permalink / raw)
  To: libstdc++; +Cc: Olivier Hainque, gcc-patches

Sorry, I forgot to cc libstdc++ on 

  https://gcc.gnu.org/pipermail/gcc-patches/2022-October/603182.html

which includes a regen of libstdc++-v3/configure after an update
libtool.m4.

Not committed yet.

With Kind Regards,

Olivier


> On 10 Oct 2022, at 19:05, Olivier Hainque <hainque@adacore.com> wrote:
> 
> Hello,
> 
> This change introduces configury infrastructure allowing the
> production of shared libraries for VxWorks, amenable to use with
> non-static rtps (linked with "-non-static").
> 
> The ability to produce PIC code is not a given on all VxWorks
> configurations, so activating this has to be explicitly requested
> by configuring with  --enable-shared
> (https://gcc.gnu.org/pipermail/gcc-patches/2022-September/602523.html).
> 
> This requirement is then leveraged to factorize the configuration
> processing in a mostly cpu independant manner, which makes maintenance
> a lot easier.
> 
> When activated, shared libs are built for the rtp mode only
> (the only kind of entity for which they are supported by the
> VxWorks environment), for code model != large at this stage as
> large and PIC still don't play well together.
> 
> We have been using this for about a year with gcc-11 based toolchains,
> with support activated for aarch64, x86_64 and ppc64-vxworks7r2, and
> not activated for the corresponding 32bit variants (arm, i686, ppc).
> Aarch64 proved an interesting challenge with the gcc/gcc_eh split
> for lse features.
> 
> I obtained good test results with a gcc-12 based compiler for ppc64
> and could get a successful sanity check build with mainline for that
> cpu as well.
> 
> Will commit to mainline shortly.
> 
> Cheers,
> 
> Olivier
> 
> 2022-10-09  Olivier Hainque  <hainque@adacore.com>
> 
> gcc/
>        * config.gcc (*vxworks*): Add t-slibgcc fragment
>        if enable_shared.
> 
> libgcc/
>        * config.host (*vxworks*): When enable_shared, add
>        libgcc and crtstuff "shared" fragments for rtp except
>        large code model.
>        (aarch64*-wrs-vxworks7*): Remove t-slibgcc-libgcc from
>        the list of fragments.
> 
> toplevel/
>        * libtool.m4 (*vxworks*): When enable_shared, set dynamic_linker
>        and friends for rtp !large. Assume the linker has the required
>        abilities and set lt_cv_deplibs_check_method.
> 
> 
> Then, regenerating configure scripts to reflect the libtool.m4 update.
> 
> 2022-10-09  Olivier Hainque  <hainque@adacore.com>
> 
> gcc/
>        * configure: Regenerate.
> 
> libatomic/
>        * configure: Regenerate.
> 
> libbacktrace/
>        * configure: Regenerate.
> 
> libcc1/
>        * configure: Regenerate.
> 
> libffi/
>        * configure: Regenerate.
> 
> libgfortran/
>        * configure: Regenerate.
> 
> libgomp/
>        * configure: Regenerate.
> 
> libitm/
>        * configure: Regenerate.
> 
> libobjc/
>        * configure: Regenerate.
> 
> liboffloadmic/
>        * configure: Regenerate.
> 
> liboffloadmic/
>        * plugin/configure: Regenerate.
> 
> libphobos/
>        * configure: Regenerate.
> 
> libquadmath/
>        * configure: Regenerate.
> 
> libsanitizer/
>        * configure: Regenerate.
> 
> libssp/
>        * configure: Regenerate.
> 
> libstdc++-v3/
>        * configure: Regenerate.
> 
> libvtv/
>        * configure: Regenerate.
> 
> lto-plugin/
>        * configure: Regenerate.
> 
> zlib/
>        * configure: Regenerate.
> 
> <0002-Generic-configury-support-for-shared-libs-on-VxWorks.patch>
> 
> 


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [patch] configury support for VxWorks shared libraries
  2022-10-10 18:05 ` Olivier Hainque
@ 2022-10-10 19:38   ` Jonathan Wakely
  2022-10-11  7:26     ` Olivier Hainque
  0 siblings, 1 reply; 4+ messages in thread
From: Jonathan Wakely @ 2022-10-10 19:38 UTC (permalink / raw)
  To: Olivier Hainque; +Cc: libstdc++, gcc-patches

On Mon, 10 Oct 2022 at 19:06, Olivier Hainque via Libstdc++
<libstdc++@gcc.gnu.org> wrote:
>
> Sorry, I forgot to cc libstdc++ on
>
>   https://gcc.gnu.org/pipermail/gcc-patches/2022-October/603182.html
>
> which includes a regen of libstdc++-v3/configure after an update
> libtool.m4.

OK, thanks for the heads up.


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [patch] configury support for VxWorks shared libraries
  2022-10-10 19:38   ` Jonathan Wakely
@ 2022-10-11  7:26     ` Olivier Hainque
  0 siblings, 0 replies; 4+ messages in thread
From: Olivier Hainque @ 2022-10-11  7:26 UTC (permalink / raw)
  To: Jonathan Wakely; +Cc: Olivier Hainque, libstdc++, gcc-patches



> On 10 Oct 2022, at 21:38, Jonathan Wakely <jwakely@redhat.com> wrote:
> 
> On Mon, 10 Oct 2022 at 19:06, Olivier Hainque via Libstdc++
> <libstdc++@gcc.gnu.org> wrote:
>> 
>> Sorry, I forgot to cc libstdc++ on
>> 
>>  https://gcc.gnu.org/pipermail/gcc-patches/2022-October/603182.html
>> 
>> which includes a regen of libstdc++-v3/configure after an update
>> libtool.m4.
> 
> OK,

Great :)

> thanks for the heads up.

You are very welcome. Thanks for your prompt feedback.

Regards,

Olivier


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2022-10-11  7:26 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-10-10 17:05 [patch] configury support for VxWorks shared libraries Olivier Hainque
2022-10-10 18:05 ` Olivier Hainque
2022-10-10 19:38   ` Jonathan Wakely
2022-10-11  7:26     ` Olivier Hainque

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).