[gcc/devel/gccgo] Adapt libstdc++ os_defines for VxWorks to more recent versions

Ian Lance Taylor ian@gcc.gnu.org
Wed Jan 22 23:54:00 GMT 2020


https://gcc.gnu.org/g:c75e82cd60a1479c1c8539296cd2e91ea9063526

commit c75e82cd60a1479c1c8539296cd2e91ea9063526
Author: Jerome Lambourg <lambourg@adacore.com>
Date:   Mon Dec 30 22:22:34 2019 +0000

    Adapt libstdc++ os_defines for VxWorks to more recent versions
    
    This change reworks the VxWorks specific os_defines.h internal
    lisbstdc++ header to help fix build and runtime failures of various
    kinds in environments from 6.4/6.9 to 7 SR640, based on experiments
    and observations conducted against real installs of these OSes for
    different CPU architectures.
    
    2019-12-30  Jerome Lambourg  <lambourg@adacore.com>
               Olivier Hainque  <hainque@adacore.com>
    
    	libstdc++
    	* config/os/vxworks/os_defines.h
    	(NOMINMAX): Always redefine to 1.
    	(_NO_CPP_INLINES): Likewise.
    	(_GLIBCXX_USE_WEAK_REF): Define to 1 for RTP on
    	VxWorks >= 7, to 0 otherwise.
    	(_GLIBCXX_HAVE_TLS): Define to 1.
    	For VxWorks >= 7:
    	(_GLIBCXX_USE_C99_MATH): Define to 1.
    	(_GLIBCXX_USE_C99_MATH_FP_MACROS_DYNAMIC): Define to 0.
    	(_HAS_TR1_DECLARATIONS): Redefine to 0.
    	For VxWorks < 7, RTP:
    	(_GLIBCXX_INCLUDE_NEXT_C_HEADERS): Define to 1.
    	(_GLIBCXX_USE_C99_FP_MACROS_DYNAMIC): Redefine to 1.
    	(__CORRECT_ISO_CPP11_MATH_H_PROTO_FP): Define.
    	For VxWorks < 7, kernel: #include <vxWorks.h>
    
    Co-Authored-By: Olivier Hainque <hainque@adacore.com>
    
    From-SVN: r279792

Diff:
---
 libstdc++-v3/ChangeLog                      | 19 ++++++++
 libstdc++-v3/config/os/vxworks/os_defines.h | 67 +++++++++++++++++++++++++++--
 2 files changed, 82 insertions(+), 4 deletions(-)

diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 947bfd2..c9b4922 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,22 @@
+2019-12-30  Jerome Lambourg  <lambourg@adacore.com>
+            Olivier Hainque  <hainque@adacore.com>
+
+	* config/os/vxworks/os_defines.h
+	(NOMINMAX): Always redefine to 1.
+	(_NO_CPP_INLINES): Likewise.
+	(_GLIBCXX_USE_WEAK_REF): Define to 1 for RTP on
+	VxWorks >= 7, to 0 otherwise.
+	(_GLIBCXX_HAVE_TLS): Define to 1.
+	For VxWorks >= 7:
+	(_GLIBCXX_USE_C99_MATH): Define to 1.
+	(_GLIBCXX_USE_C99_MATH_FP_MACROS_DYNAMIC): Define to 0.
+	(_HAS_TR1_DECLARATIONS): Redefine to 0.
+	For VxWorks < 7, RTP:
+	(_GLIBCXX_INCLUDE_NEXT_C_HEADERS): Define to 1.
+	(_GLIBCXX_USE_C99_FP_MACROS_DYNAMIC): Redefine to 1.
+	(__CORRECT_ISO_CPP11_MATH_H_PROTO_FP): Define.
+	For VxWorks < 7, kernel: #include <vxWorks.h>
+
 2019-12-25  Alexandre Oliva <oliva@adacore.com>
 
 	* crossconfig.m4 (GLIBCXX_CROSSCONFIG) [*-vxworks*]: Define
diff --git a/libstdc++-v3/config/os/vxworks/os_defines.h b/libstdc++-v3/config/os/vxworks/os_defines.h
index 3a9a958..c5573a4 100644
--- a/libstdc++-v3/config/os/vxworks/os_defines.h
+++ b/libstdc++-v3/config/os/vxworks/os_defines.h
@@ -33,10 +33,69 @@
 // System-specific #define, typedefs, corrections, etc, go here.  This
 // file will come before all others.
 
-//Keep vxWorks from defining min()/max() as macros
-#ifdef NOMINMAX
-#undef NOMINMAX
+// The system environment we can rely on varies across VxWorks
+// versions.
+#include <_vxworks-versions.h>
+
+// Weak refs are supported starting with VxWorks 7, in RTP mode only
+
+#if _VXWORKS_MAJOR_GE(7) && defined(__RTP__)
+#define _GLIBCXX_USE_WEAK_REF 1
+#else
+#define _GLIBCXX_USE_WEAK_REF 0
 #endif
+
+// We support TLS on VxWorks (either directly or with emutls)
+#define _GLIBCXX_HAVE_TLS 1
+
+// VxWorks7 comes with a DinkumWare library and the system headers which we
+// are going to include for libstdc++ have a few related intrinsic
+// assumptions.  We control our own configuration here to best integrate with
+// this environment: use C99 math headers, do not use the FP macros for
+// dynamic cast by default (overriden for RTPs below) and arrange to disable
+// the system TR1 declarations as we'll provide ours.
+
+#if _VXWORKS_MAJOR_GE(7)
+
+#define _GLIBCXX_USE_C99_MATH 1
+#define _GLIBCXX_USE_C99_FP_MACROS_DYNAMIC 0
+
+#undef _HAS_TR1_DECLARATIONS
+#define _HAS_TR1_DECLARATIONS 0
+
+#else  // VXWORKS_MAJOR < 7
+
+// For RTPs, use the VxWorks headers as a basis, from which we can use
+// C99 dynamic FP macros and expect (after fixincludes) accurate c++11
+// prototypes for FP.
+
+#ifdef __RTP__
+
+#define _GLIBCXX_INCLUDE_NEXT_C_HEADERS 1
+
+#undef _GLIBCXX_USE_C99_FP_MACROS_DYNAMIC
+#define _GLIBCXX_USE_C99_FP_MACROS_DYNAMIC 1
+
+#define __CORRECT_ISO_CPP11_MATH_H_PROTO_FP
+
+#else // !__RTP__
+
+// libstdc++ will include system headers and vxWorks.h ought to have
+// been included ahead for VxWorks kernel modules prior to VxWorks 7
+#include <vxWorks.h>
+
+#endif // __RTP__
+
+#endif // _VXWORKS_MAJOR >= 7
+
+// The min/max "functions" may be refered to with a namespace prefix.
+// Prevent possible redefinitions as macros from VxWorks headers.
+#undef NOMINMAX
 #define NOMINMAX 1
 
-#endif
+// Do not include the inline definitions from VxWorks headers, as we'll
+// want to use the ones from libstdc++ instead.
+#undef _NO_CPP_INLINES
+#define _NO_CPP_INLINES 1
+
+#endif // _GLIBCXX_OS_DEFINES



More information about the Libstdc++-cvs mailing list