Refine definitions for wchar_t/wint_t on VxWorks
authorAlexandre Oliva <oliva@adacore.com>
Mon, 30 Dec 2019 21:34:35 +0000 (21:34 +0000)
committerOlivier Hainque <hainque@gcc.gnu.org>
Mon, 30 Dec 2019 21:34:35 +0000 (21:34 +0000)
This change refines the VxWorks macro definitions configuring
wchar_t to accommodate the VxWorks7 environment, where wchar_t
is now typically a 32bit type.

We also ensure that the definitions for wint_t are always based
on those for wchar_t, so the two remain in sync in environments
where WCHAR_TYPE is redefined for a specific CPU architecture.

2019-12-30  Alexandre Oliva  <oliva@adacore.com>
           Olivier Hainque  <hainque@adacore.com>

* config/vx-common.h (WCHAR_TYPE_SIZE): 32 on VxWorks 7.
(WCHAR_TYPE): Pick accordingly.
(WINT_TYPE_SIZE): Define in terms of WCHAR_TYPE_SIZE.
(WINT_TYPE): Define in terms of WCHAR_TYPE.

Co-Authored-By: Olivier Hainque <hainque@adacore.com>
From-SVN: r279780

gcc/ChangeLog
gcc/config/vx-common.h

index a11d8ab29c14cae510c645041b1e2947fbdde777..252e921d22821d717349827d9dacd3bacf83b252 100644 (file)
@@ -1,3 +1,11 @@
+2019-12-30  Alexandre Oliva  <oliva@adacore.com>
+            Olivier Hainque  <hainque@adacore.com>
+
+       * config/vx-common.h (WCHAR_TYPE_SIZE): 32 on VxWorks 7.
+       (WCHAR_TYPE): Pick accordingly.
+       (WINT_TYPE_SIZE): Define in terms of WCHAR_TYPE_SIZE.
+       (WINT_TYPE): Define in terms of WCHAR_TYPE.
+
 2019-12-30  Olivier Hainque  <hainque@adacore.com>
 
        * config/vx-common.h: Minor reorganization and add
index ed3e4254e77c21b88121bb1282099830329c68df..594db5122ac3052d36219b679ecd20733cfe89cd 100644 (file)
@@ -43,17 +43,32 @@ along with GCC; see the file COPYING3.  If not see
 
 /* ----------------------- Common type descriptions -----------------------  */
 
-/* VxWorks uses wchar_t == unsigned short (UCS2) on all architectures.  */
+/* Regardless of the target architecture, VxWorks uses a signed 32bit
+   integer for wchar_t starting with vx7 SR06xx.  An unsigned short
+   otherwise.  */
+#if TARGET_VXWORKS7
+
+#undef WCHAR_TYPE_SIZE
+#define WCHAR_TYPE_SIZE 32
 #undef WCHAR_TYPE
-#define WCHAR_TYPE "short unsigned int"
+#define WCHAR_TYPE (TARGET_VXWORKS64 ? "int" : "long int")
+
+#else
+
 #undef WCHAR_TYPE_SIZE
 #define WCHAR_TYPE_SIZE 16
+#undef WCHAR_TYPE
+#define WCHAR_TYPE "short unsigned int"
 
-/* Likewise wint_t.  */
-#undef WINT_TYPE
-#define WINT_TYPE "short unsigned int"
+#endif
+
+/* The VxWorks headers base wint_t on the definitions used for wchar_t.
+   Do the same here to make sure they remain in sync, in case WCHAR_TYPE
+   gets redefined for a specific CPU architecture.  */
 #undef WINT_TYPE_SIZE
-#define WINT_TYPE_SIZE 16
+#define WINT_TYPE_SIZE WCHAR_TYPE_SIZE
+#undef WINT_TYPE
+#define WINT_TYPE WCHAR_TYPE
 
 /* ---------------------- Debug and unwind info formats ------------------  */