From 7f37b31d731262f65b5274e660ac123117e3b775 Mon Sep 17 00:00:00 2001 From: Jerome Lambourg Date: Fri, 16 Nov 2018 09:23:22 +0000 Subject: [PATCH] Allow target overrides of ctors/dtors support advertisement on VxWorks 2018-11-16 Jerome Lambourg * 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 | 10 ++++++++++ gcc/config/vxworks.c | 13 ++++++++----- gcc/config/vxworks.h | 17 +++++++++++------ 3 files changed, 29 insertions(+), 11 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 48e230c63e2..f17c93a5e91 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2018-11-16 Jerome Lambourg + + * 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 PR c++/25759 diff --git a/gcc/config/vxworks.c b/gcc/config/vxworks.c index 3b6b2343859..f0d19745199 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 2c4c79643de..156fcc060aa 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.