@@ -32,9 +32,35 @@ darwin_d_os_builtins (void)
d_add_builtin_version ("darwin");
}
+/* Handle a call to `__traits(getTargetInfo, "objectFormat")'. */
+
+static tree
+darwin_d_handle_target_object_format (void)
+{
+ const char *objfmt = "macho";
+
+ return build_string_literal (strlen (objfmt) + 1, objfmt);
+}
+
+/* Implement TARGET_D_REGISTER_OS_TARGET_INFO for Darwin targets. */
+
+static void
+darwin_d_register_target_info (void)
+{
+ const struct d_target_info_spec handlers[] = {
+ { "objectFormat", darwin_d_handle_target_object_format },
+ { NULL, NULL },
+ };
+
+ d_add_target_info_handlers (handlers);
+}
+
#undef TARGET_D_OS_VERSIONS
#define TARGET_D_OS_VERSIONS darwin_d_os_builtins
+#undef TARGET_D_REGISTER_OS_TARGET_INFO
+#define TARGET_D_REGISTER_OS_TARGET_INFO darwin_d_register_target_info
+
/* Define TARGET_D_MINFO_SECTION for Darwin targets. */
#undef TARGET_D_MINFO_SECTION
@@ -31,7 +31,33 @@ dragonfly_d_os_builtins (void)
d_add_builtin_version ("Posix");
}
+/* Handle a call to `__traits(getTargetInfo, "objectFormat")'. */
+
+static tree
+dragonfly_d_handle_target_object_format (void)
+{
+ const char *objfmt = "elf";
+
+ return build_string_literal (strlen (objfmt) + 1, objfmt);
+}
+
+/* Implement TARGET_D_REGISTER_OS_TARGET_INFO for DragonFly targets. */
+
+static void
+dragonfly_d_register_target_info (void)
+{
+ const struct d_target_info_spec handlers[] = {
+ { "objectFormat", dragonfly_d_handle_target_object_format },
+ { NULL, NULL },
+ };
+
+ d_add_target_info_handlers (handlers);
+}
+
#undef TARGET_D_OS_VERSIONS
#define TARGET_D_OS_VERSIONS dragonfly_d_os_builtins
+#undef TARGET_D_REGISTER_OS_TARGET_INFO
+#define TARGET_D_REGISTER_OS_TARGET_INFO dragonfly_d_register_target_info
+
struct gcc_targetdm targetdm = TARGETDM_INITIALIZER;
@@ -37,7 +37,33 @@ freebsd_d_os_builtins (void)
d_add_builtin_version ("Posix");
}
+/* Handle a call to `__traits(getTargetInfo, "objectFormat")'. */
+
+static tree
+freebsd_d_handle_target_object_format (void)
+{
+ const char *objfmt = "elf";
+
+ return build_string_literal (strlen (objfmt) + 1, objfmt);
+}
+
+/* Implement TARGET_D_REGISTER_OS_TARGET_INFO for FreeBSD targets. */
+
+static void
+freebsd_d_register_target_info (void)
+{
+ const struct d_target_info_spec handlers[] = {
+ { "objectFormat", freebsd_d_handle_target_object_format },
+ { NULL, NULL },
+ };
+
+ d_add_target_info_handlers (handlers);
+}
+
#undef TARGET_D_OS_VERSIONS
#define TARGET_D_OS_VERSIONS freebsd_d_os_builtins
+#undef TARGET_D_REGISTER_OS_TARGET_INFO
+#define TARGET_D_REGISTER_OS_TARGET_INFO freebsd_d_register_target_info
+
struct gcc_targetdm targetdm = TARGETDM_INITIALIZER;
@@ -42,7 +42,33 @@ glibc_d_os_builtins (void)
#endif
}
+/* Handle a call to `__traits(getTargetInfo, "objectFormat")'. */
+
+static tree
+glibc_d_handle_target_object_format (void)
+{
+ const char *objfmt = "elf";
+
+ return build_string_literal (strlen (objfmt) + 1, objfmt);
+}
+
+/* Implement TARGET_D_REGISTER_OS_TARGET_INFO for Glibc targets. */
+
+static void
+glibc_d_register_target_info (void)
+{
+ const struct d_target_info_spec handlers[] = {
+ { "objectFormat", glibc_d_handle_target_object_format },
+ { NULL, NULL },
+ };
+
+ d_add_target_info_handlers (handlers);
+}
+
#undef TARGET_D_OS_VERSIONS
#define TARGET_D_OS_VERSIONS glibc_d_os_builtins
+#undef TARGET_D_REGISTER_OS_TARGET_INFO
+#define TARGET_D_REGISTER_OS_TARGET_INFO glibc_d_register_target_info
+
struct gcc_targetdm targetdm = TARGETDM_INITIALIZER;
@@ -33,7 +33,33 @@ netbsd_d_os_builtins (void)
d_add_builtin_version ("NetBSD");
}
+/* Handle a call to `__traits(getTargetInfo, "objectFormat")'. */
+
+static tree
+netbsd_d_handle_target_object_format (void)
+{
+ const char *objfmt = "elf";
+
+ return build_string_literal (strlen (objfmt) + 1, objfmt);
+}
+
+/* Implement TARGET_D_REGISTER_OS_TARGET_INFO for NetBSD targets. */
+
+static void
+netbsd_d_register_target_info (void)
+{
+ const struct d_target_info_spec handlers[] = {
+ { "objectFormat", netbsd_d_handle_target_object_format },
+ { NULL, NULL },
+ };
+
+ d_add_target_info_handlers (handlers);
+}
+
#undef TARGET_D_OS_VERSIONS
#define TARGET_D_OS_VERSIONS netbsd_d_os_builtins
+#undef TARGET_D_REGISTER_OS_TARGET_INFO
+#define TARGET_D_REGISTER_OS_TARGET_INFO netbsd_d_register_target_info
+
struct gcc_targetdm targetdm = TARGETDM_INITIALIZER;
@@ -33,7 +33,33 @@ solaris_d_os_builtins (void)
d_add_builtin_version ("Solaris"); \
}
+/* Handle a call to `__traits(getTargetInfo, "objectFormat")'. */
+
+static tree
+solaris_d_handle_target_object_format (void)
+{
+ const char *objfmt = "elf";
+
+ return build_string_literal (strlen (objfmt) + 1, objfmt);
+}
+
+/* Implement TARGET_D_REGISTER_OS_TARGET_INFO for Solaris targets. */
+
+static void
+solaris_d_register_target_info (void)
+{
+ const struct d_target_info_spec handlers[] = {
+ { "objectFormat", solaris_d_handle_target_object_format },
+ { NULL, NULL },
+ };
+
+ d_add_target_info_handlers (handlers);
+}
+
#undef TARGET_D_OS_VERSIONS
#define TARGET_D_OS_VERSIONS solaris_d_os_builtins
+#undef TARGET_D_REGISTER_OS_TARGET_INFO
+#define TARGET_D_REGISTER_OS_TARGET_INFO solaris_d_register_target_info
+
struct gcc_targetdm targetdm = TARGETDM_INITIALIZER;
@@ -199,6 +199,7 @@ Target::_init (const Param &)
/* Initialize target info tables, the keys required by the language are added
last, so that the OS and CPU handlers can override. */
targetdm.d_register_cpu_target_info ();
+ targetdm.d_register_os_target_info ();
d_add_target_info_handlers (d_language_target_info);
}
@@ -58,6 +58,14 @@ describing the requested target information.",
void, (void),
hook_void_void)
+/* getTargetInfo keys relating to the target OS. */
+DEFHOOK
+(d_register_os_target_info,
+ "Same as @code{TARGET_D_CPU_TARGET_INFO}, but is used for keys relating to\n\
+the target operating system.",
+ void, (void),
+ hook_void_void)
+
/* ModuleInfo section name and brackets. */
DEFHOOKPOD
(d_minfo_section,
@@ -10817,6 +10817,11 @@ added by this hook are made available at compile time by the
describing the requested target information.
@end deftypefn
+@deftypefn {D Target Hook} void TARGET_D_REGISTER_OS_TARGET_INFO (void)
+Same as @code{TARGET_D_CPU_TARGET_INFO}, but is used for keys relating to
+the target operating system.
+@end deftypefn
+
@deftypevr {D Target Hook} {const char *} TARGET_D_MINFO_SECTION
Contains the name of the section in which module info references should be
placed. This section is expected to be bracketed by two symbols to indicate
@@ -7359,6 +7359,8 @@ floating-point support; they are not included in this mechanism.
@hook TARGET_D_REGISTER_CPU_TARGET_INFO
+@hook TARGET_D_REGISTER_OS_TARGET_INFO
+
@hook TARGET_D_MINFO_SECTION
@hook TARGET_D_MINFO_START_NAME