diff options
author | Rasmus Villemoes <rv@rasmusvillemoes.dk> | 2018-08-21 10:50:27 +0200 |
---|---|---|
committer | Rasmus Villemoes <villemoes@gcc.gnu.org> | 2018-08-21 08:50:27 +0000 |
commit | ace193dc4773159a2c545ab6ca80842c56019e3a (patch) | |
tree | fc20d372cc962ea6382184e80aa1fcac7b03a9ff /gcc/config/vxworks.h | |
parent | 9a5b8df7007b350015509ee8f809fd7d2c8fa963 (diff) | |
download | gcc-ace193dc4773159a2c545ab6ca80842c56019e3a.zip gcc-ace193dc4773159a2c545ab6ca80842c56019e3a.tar.gz gcc-ace193dc4773159a2c545ab6ca80842c56019e3a.tar.bz2 |
vxworks: enable use of .init_array/.fini_array for cdtors
The target OS actually runs all function pointers found in the _ctors
array when the module is loaded. So it is not that hard to make use of
the "modern" .init_array/.fini_array mechanism - it mostly just requires
a linker script adding the _ctors and _dtors symbols and terminating
LONG(0) entries.
Assume that if the user passed --enable-initfini-array when building
gcc, the rest of the toolchain (including the link spec and linker
script) is set up appropriately.
Note that configuring with --enable-initfini-array may prevent the -mrtp
mode from working, due to the (unconditional) use of .init_array.*
sections instead of .ctors.* - however, that is the case regardless of this
patch.
From-SVN: r263691
Diffstat (limited to 'gcc/config/vxworks.h')
-rw-r--r-- | gcc/config/vxworks.h | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/gcc/config/vxworks.h b/gcc/config/vxworks.h index 08d2c9d..4c2d983 100644 --- a/gcc/config/vxworks.h +++ b/gcc/config/vxworks.h @@ -142,9 +142,13 @@ along with GCC; see the file COPYING3. If not see #define VXWORKS_OVERRIDE_OPTIONS vxworks_override_options () extern void vxworks_override_options (void); -/* Only RTPs support prioritized constructors and destructors: - the implementation relies on numbered .ctors* sections. */ -#define SUPPORTS_INIT_PRIORITY TARGET_VXWORKS_RTP +/* 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. */ +#define SUPPORTS_INIT_PRIORITY \ + (TARGET_VXWORKS_RTP || HAVE_INITFINI_ARRAY_SUPPORT) /* VxWorks requires special handling of constructors and destructors. All VxWorks configurations must use these functions. */ |