define NO_DOT_IN_LABEL only in vxworks6
authorAlexandre Oliva <oliva@adacore.com>
Thu, 27 Feb 2020 16:34:47 +0000 (13:34 -0300)
committerAlexandre Oliva <oliva@gnu.org>
Thu, 27 Feb 2020 16:35:43 +0000 (13:35 -0300)
There was a mistake in forward-porting and contributing some
vxworks7r2 changes, that caused a conditional to be dropped around a
couple of preprocessor directives, needed only up to vxworks6, that
change the compiler's behavior WRT introducing dollars and dots in
symbol names.

This deviates GCC's behavior from the native system compiler, in a way
that appears to have ABI implications, so we'd like to correct that,
even at this late stage in the development cycle.

for  gcc/ChangeLog

* config/vx-common.h (NO_DOLLAR_IN_LABEL, NO_DOT_IN_LABEL): Leave
them alone on vx7.

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

index 8c9b7906772c311210d88045299e68affbe3f057..d42bfbe0c014cad3c61c2cccc0085785033c9480 100644 (file)
@@ -1,3 +1,8 @@
+2020-02-27  Alexandre Oliva <oliva@adacore.com>
+
+       * config/vx-common.h (NO_DOLLAR_IN_LABEL, NO_DOT_IN_LABEL): Leave
+       them alone on vx7.
+
 2020-02-27  Richard Biener  <rguenther@suse.de>
 
        PR tree-optimization/93508
index c993711c2aa5b7ad2e52193b7b9564704e473b0b..f4a1ffdfb408160b217466bc922d6a7f5fcc9781 100644 (file)
@@ -99,12 +99,14 @@ along with GCC; see the file COPYING3.  If not see
 
 /* ------------------------ Misc configuration bits ----------------------  */
 
-/* VxWorks cannot have dots in constructor labels, because it uses a
-   mutant variation of collect2 that generates C code instead of
-   assembly.  Thus each constructor label must be a legitimate C
-   symbol.  FIXME: Have VxWorks use real collect2 instead.  */
-#undef NO_DOLLAR_IN_LABEL
-#define NO_DOT_IN_LABEL
+#ifndef TARGET_VXWORKS7
+/* VxWorks, prior to version 7, could not have dots in constructor
+   labels, because it used a mutant variation of collect2 that
+   generates C code instead of assembly.  Thus each constructor label
+   had to be a legitimate C symbol.  */
+# undef NO_DOLLAR_IN_LABEL
+# define NO_DOT_IN_LABEL
+#endif
 
 /* Kernel mode doesn't have ctors/dtors, but RTP mode does.  */
 #define TARGET_HAVE_CTORS_DTORS false