+2018-08-21 Rasmus Villemoes <rv@rasmusvillemoes.dk>
+
+ * config/vxworks.c: Set targetm.have_ctors_dtors
+ if HAVE_INITFINI_ARRAY_SUPPORT.
+ * config/vxworks.h: Set SUPPORTS_INIT_PRIORITY
+ if HAVE_INITFINI_ARRAY_SUPPORT.
+
2018-08-21 Rasmus Villemoes <rv@rasmusvillemoes.dk>
* config/vxworks.h: Add $(WIND_BASE)/target/h/wrn/coreip to
targetm.emutls.debug_form_tls_address = true;
}
- /* We can use .ctors/.dtors sections only in RTP mode. */
- targetm.have_ctors_dtors = TARGET_VXWORKS_RTP;
+ /* 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;
/* PIC is only supported for RTPs. */
if (flag_pic && !TARGET_VXWORKS_RTP)
#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. */