aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJerome Lambourg <lambourg@adacore.com>2018-11-16 09:23:22 +0000
committerOlivier Hainque <hainque@gcc.gnu.org>2018-11-16 09:23:22 +0000
commit7f37b31d731262f65b5274e660ac123117e3b775 (patch)
tree18933e0ad81eb68ca32bd2ea167f81f32037abaf
parentff641ae11288626fb367dd7e56ddcc363c34d02a (diff)
downloadgcc-7f37b31d731262f65b5274e660ac123117e3b775.zip
gcc-7f37b31d731262f65b5274e660ac123117e3b775.tar.gz
gcc-7f37b31d731262f65b5274e660ac123117e3b775.tar.bz2
Allow target overrides of ctors/dtors support advertisement on VxWorks
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
-rw-r--r--gcc/ChangeLog10
-rw-r--r--gcc/config/vxworks.c13
-rw-r--r--gcc/config/vxworks.h17
3 files changed, 29 insertions, 11 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 48e230c..f17c93a 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/config/vxworks.c b/gcc/config/vxworks.c
index 3b6b234..f0d1974 100644
--- a/gcc/config/vxworks.c
+++ b/gcc/config/vxworks.c
@@ -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)
diff --git a/gcc/config/vxworks.h b/gcc/config/vxworks.h
index 2c4c796..156fcc0 100644
--- a/gcc/config/vxworks.h
+++ b/gcc/config/vxworks.h
@@ -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.