Allow target overrides of ctors/dtors support advertisement on VxWorks
authorJerome Lambourg <lambourg@adacore.com>
Fri, 16 Nov 2018 09:23:22 +0000 (09:23 +0000)
committerOlivier Hainque <hainque@gcc.gnu.org>
Fri, 16 Nov 2018 09:23:22 +0000 (09:23 +0000)
2018-11-16  Jerome Lambourg  <lambourg@adacore.com>

        * config/vxworks.h (TARGET_VXWORKS_HAVE_CTORS_DTORS): New macro.
        Default to TARGET_VXWORKS_RTP.
        (SUPPORTS_INIT_PRIORITY): Use TARGET_VXWORKS_HAVE_CTORS_DTORS instead
        of TARGET_VXWORKS_RTP.
        * config/vxworksae.h: Also define TARGET_VXWORKS_HAVE_CTORS_DTORS.
        * config/vxworks.c: Use TARGET_VXWORKS_HAVE_CTORS_DTORS instead
        of TARGET_VXWORKS_RTP to set targetm.have_ctors_dtors.

From-SVN: r266201

gcc/ChangeLog
gcc/config/vxworks.c
gcc/config/vxworks.h

index 48e230c63e28a8aa602860137c2d25fc767bed70..f17c93a5e91952d8aa63dc6c532cfb9ef908b925 100644 (file)
@@ -1,3 +1,13 @@
+2018-11-16  Jerome Lambourg  <lambourg@adacore.com>
+
+       * config/vxworks.h (TARGET_VXWORKS_HAVE_CTORS_DTORS): New macro.
+       Default to TARGET_VXWORKS_RTP.
+       (SUPPORTS_INIT_PRIORITY): Use TARGET_VXWORKS_HAVE_CTORS_DTORS instead
+       of TARGET_VXWORKS_RTP.
+       * config/vxworksae.h: Also define TARGET_VXWORKS_HAVE_CTORS_DTORS.
+       * config/vxworks.c: Use TARGET_VXWORKS_HAVE_CTORS_DTORS instead
+       of TARGET_VXWORKS_RTP to set targetm.have_ctors_dtors.
+
 2018-11-15  Sandra Loosemore  <sandra@codesourcery.com>
 
        PR c++/25759
index 3b6b2343859d1276f908c94b6d2159bdae4164ea..f0d197451996f9759e981e11a78aea148b11abae 100644 (file)
@@ -145,11 +145,14 @@ vxworks_override_options (void)
       targetm.emutls.debug_form_tls_address = true;
     }
 
-  /* We can use .ctors/.dtors sections only in RTP mode.  But, if the
-     compiler was built with --enable-initfini-array, assume the
-     toolchain implements the proper glue to make .init_array and
-     .fini_array work.  */
-  targetm.have_ctors_dtors = TARGET_VXWORKS_RTP || HAVE_INITFINI_ARRAY_SUPPORT;
+  /* Arrange to use .ctors/.dtors sections if the target VxWorks configuration
+     and mode supports it, or the init/fini_array sections if we were
+     configured with --enable-initfini-array explicitly.  In the latter case,
+     the toolchain user is expected to provide whatever linker level glue is
+     required to get things to operate properly.  */
+
+  targetm.have_ctors_dtors = 
+    TARGET_VXWORKS_HAVE_CTORS_DTORS || HAVE_INITFINI_ARRAY_SUPPORT;
 
   /* PIC is only supported for RTPs.  */
   if (flag_pic && !TARGET_VXWORKS_RTP)
index 2c4c79643de4cd01adf960b621b65c02eee78e67..156fcc060aa90fa543f8a8110bd1a76f172725c0 100644 (file)
@@ -142,13 +142,18 @@ along with GCC; see the file COPYING3.  If not see
 #define VXWORKS_OVERRIDE_OPTIONS vxworks_override_options ()
 extern void vxworks_override_options (void);
 
-/* RTPs support prioritized constructors and destructors: the
-   implementation relies on numbered .ctors* sections. If the compiler
-   was built with --enable-initfini-array, we assume the user uses a
-   linker script that sorts and merges the .init_array.* sections
-   appropriately.  */
+/* Whether the VxWorks variant and mode supports constructors/destructors
+   placed in .ctors/.dtors section or if we should generate proxy functions
+   for them, with special names which munch knows how to collect.  On most
+   versions of VxWorks, only the RTP loader supports .ctors/.dtors sections,
+   not the kernel module loader.  */
+#define TARGET_VXWORKS_HAVE_CTORS_DTORS TARGET_VXWORKS_RTP
+
+/* Support for prioritized ctors/dtors is in sync with the support for sections
+   on the VxWorks front, and is assumed to be provided by whatever linker level
+   glue is required if we were configured with --enable-initfini-array.  */
 #define SUPPORTS_INIT_PRIORITY \
-  (TARGET_VXWORKS_RTP || HAVE_INITFINI_ARRAY_SUPPORT)
+  (TARGET_VXWORKS_HAVE_CTORS_DTORS || HAVE_INITFINI_ARRAY_SUPPORT)
 
 #if !HAVE_INITFINI_ARRAY_SUPPORT
 /* VxWorks requires special handling of constructors and destructors.