https://gcc.gnu.org/g:6c472b330ac4fc0dfbc9cf985e08923abc5bd530

commit r16-2034-g6c472b330ac4fc0dfbc9cf985e08923abc5bd530
Author: Alexandre Oliva <ol...@adacore.com>
Date:   Sat Jul 5 00:58:02 2025 -0300

    [vxworks] [ppc] match TARGET_VXWORKS64 to TARGET_64BIT
    
    Configuring gcc for --target=powerpc-wrs-vxworks7r2 sets things up for
    a 64-bit compiler, just like powerpc64-wrs-vxworks7r2, except that
    TARGET_VXWORKS64 is only defined as 1 for targets that match
    *64-*-vxworks*.
    
    With !TARGET_VXWORKS64, we get a 64-bit toolchain that defines
    SIZE_TYPE, PTRDIFF_TYPE, and WCHAR_TYPE as 32-bit types, and that
    breaks GCC passes that expect SIZE_TYPE and PTRDIFF_TYPE to be as wide
    as pointers.
    
    Arrange for TARGET_VXWORKS64 on ppc to match TARGET_64BIT, after using
    it to select the default word size with driver self specs.
    
    
    for  gcc/ChangeLog
    
            * config/rs6000/vxworks.h (SUBTARGET_DRIVER_SELF_SPECS):
            Redefine to select word size matching TARGET_VXWORKS64.
            (TARGET_VXWORKS64): Redefine in terms of TARGET_64BIT.

Diff:
---
 gcc/config/rs6000/vxworks.h | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/gcc/config/rs6000/vxworks.h b/gcc/config/rs6000/vxworks.h
index fa2c837b0642..e77247b726ea 100644
--- a/gcc/config/rs6000/vxworks.h
+++ b/gcc/config/rs6000/vxworks.h
@@ -34,6 +34,21 @@ along with GCC; see the file COPYING3.  If not see
 /* Common definitions first.                                   */
 /*-------------------------------------------------------------*/
 
+/* Default to 64 bits when the target is powerpc64*-wrs-vxworks*,
+   and to 32 bits otherwise.  */
+#undef SUBTARGET_DRIVER_SELF_SPECS
+#if TARGET_VXWORKS64
+#define SUBTARGET_DRIVER_SELF_SPECS "%{!m64:%{!m32:-m64}}"
+#else
+#define SUBTARGET_DRIVER_SELF_SPECS "%{!m32:%{!m64:-m32}}"
+#endif
+
+/* Having used the build-time TARGET_VXWORKS64 to choose the default ABI above,
+   redefine it so that it matches whichever ABI is selected for each
+   compilation.  */
+#undef TARGET_VXWORKS64
+#define TARGET_VXWORKS64 TARGET_64BIT
+
 /* CPP predefined macros.  */
 
 #undef TARGET_OS_CPP_BUILTINS

Reply via email to