public inbox for gcc-rust@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH 01/14] rust: Add skeleton support and documentation for targetrustm hooks.
@ 2023-09-07 13:36 arthur.cohen
  2023-09-07 13:36 ` [PATCH 02/14] rust: Reintroduce TARGET_RUST_CPU_INFO hook arthur.cohen
                   ` (12 more replies)
  0 siblings, 13 replies; 14+ messages in thread
From: arthur.cohen @ 2023-09-07 13:36 UTC (permalink / raw)
  To: gcc-patches; +Cc: gcc-rust, ibuclaw

From: Iain Buclaw <ibuclaw@gdcproject.org>

gcc/ChangeLog:

	* Makefile.in (tm_rust_file_list, tm_rust_include_list, TM_RUST_H,
	RUST_TARGET_DEF, RUST_TARGET_H, RUST_TARGET_OBJS): New variables.
	(tm_rust.h, cs-tm_rust.h, default-rust.o,
	rust/rust-target-hooks-def.h, s-rust-target-hooks-def-h): New rules.
	(s-tm-texi): Also check timestamp on rust-target.def.
	(generated_files): Add TM_RUST_H and rust-target-hooks-def.h.
	(build/genhooks.o): Also depend on RUST_TARGET_DEF.
	* config.gcc (tm_rust_file, rust_target_objs, target_has_targetrustm):
	New variables.
	* configure: Regenerate.
	* configure.ac (tm_rust_file_list, tm_rust_include_list,
	rust_target_objs): Add substitutes.
	* doc/tm.texi: Regenerate.
	* doc/tm.texi.in (targetrustm): Document.
	(target_has_targetrustm): Document.
	* genhooks.cc: Include rust/rust-target.def.
	* config/default-rust.cc: New file.

gcc/rust/ChangeLog:

	* rust-target-def.h: New file.
	* rust-target.def: New file.
	* rust-target.h: New file.
---
 gcc/Makefile.in            | 34 +++++++++++++++++++++++++++++++++-
 gcc/config.gcc             | 25 +++++++++++++++++++++++++
 gcc/config/default-rust.cc | 29 +++++++++++++++++++++++++++++
 gcc/configure              | 21 +++++++++++++++++++--
 gcc/configure.ac           | 14 ++++++++++++++
 gcc/doc/tm.texi            |  8 ++++++++
 gcc/doc/tm.texi.in         |  8 ++++++++
 gcc/genhooks.cc            |  1 +
 gcc/rust/rust-target-def.h | 20 ++++++++++++++++++++
 gcc/rust/rust-target.def   | 32 ++++++++++++++++++++++++++++++++
 gcc/rust/rust-target.h     | 31 +++++++++++++++++++++++++++++++
 11 files changed, 220 insertions(+), 3 deletions(-)
 create mode 100644 gcc/config/default-rust.cc
 create mode 100644 gcc/rust/rust-target-def.h
 create mode 100644 gcc/rust/rust-target.def
 create mode 100644 gcc/rust/rust-target.h

diff --git a/gcc/Makefile.in b/gcc/Makefile.in
index 6d608db4dd2..9cc16268abf 100644
--- a/gcc/Makefile.in
+++ b/gcc/Makefile.in
@@ -600,6 +600,8 @@ tm_p_file_list=@tm_p_file_list@
 tm_p_include_list=@tm_p_include_list@
 tm_d_file_list=@tm_d_file_list@
 tm_d_include_list=@tm_d_include_list@
+tm_rust_file_list=@tm_rust_file_list@
+tm_rust_include_list=@tm_rust_include_list@
 build_xm_file_list=@build_xm_file_list@
 build_xm_include_list=@build_xm_include_list@
 build_xm_defines=@build_xm_defines@
@@ -898,6 +900,7 @@ TCONFIG_H = tconfig.h $(xm_file_list)
 # Some $(target)-protos.h depends on tree.h
 TM_P_H    = tm_p.h    $(tm_p_file_list) $(TREE_H)
 TM_D_H    = tm_d.h    $(tm_d_file_list)
+TM_RUST_H = tm_rust.h $(tm_rust_file_list)
 GTM_H     = tm.h      $(tm_file_list) insn-constants.h
 TM_H      = $(GTM_H) insn-flags.h $(OPTIONS_H)
 
@@ -956,10 +959,12 @@ TARGET_DEF = target.def target-hooks-macros.h target-insns.def
 C_TARGET_DEF = c-family/c-target.def target-hooks-macros.h
 COMMON_TARGET_DEF = common/common-target.def target-hooks-macros.h
 D_TARGET_DEF = d/d-target.def target-hooks-macros.h
+RUST_TARGET_DEF = rust/rust-target.def target-hooks-macros.h
 TARGET_H = $(TM_H) target.h $(TARGET_DEF) insn-modes.h insn-codes.h
 C_TARGET_H = c-family/c-target.h $(C_TARGET_DEF)
 COMMON_TARGET_H = common/common-target.h $(INPUT_H) $(COMMON_TARGET_DEF)
 D_TARGET_H = d/d-target.h $(D_TARGET_DEF)
+RUST_TARGET_H = rust/rust-target.h $(RUST_TARGET_DEF)
 MACHMODE_H = machmode.h mode-classes.def
 HOOKS_H = hooks.h
 HOSTHOOKS_DEF_H = hosthooks-def.h $(HOOKS_H)
@@ -1268,6 +1273,9 @@ D_TARGET_OBJS=@d_target_objs@
 # Target specific, Fortran specific object file
 FORTRAN_TARGET_OBJS=@fortran_target_objs@
 
+# Target specific, Rust specific object file
+RUST_TARGET_OBJS=@rust_target_objs@
+
 # Object files for gcc many-languages driver.
 GCC_OBJS = gcc.o gcc-main.o ggc-none.o
 
@@ -1999,6 +2007,7 @@ tconfig.h: cs-tconfig.h ; @true
 tm.h: cs-tm.h ; @true
 tm_p.h: cs-tm_p.h ; @true
 tm_d.h: cs-tm_d.h ; @true
+tm_rust.h: cs-tm_rust.h ; @true
 
 cs-config.h: Makefile
 	TARGET_CPU_DEFAULT="" \
@@ -2030,6 +2039,11 @@ cs-tm_d.h: Makefile
 	HEADERS="$(tm_d_include_list)" DEFINES="" \
 	$(SHELL) $(srcdir)/mkconfig.sh tm_d.h
 
+cs-tm_rust.h: Makefile
+	TARGET_CPU_DEFAULT="" \
+	HEADERS="$(tm_rust_include_list)" DEFINES="" \
+	$(SHELL) $(srcdir)/mkconfig.sh tm_rust.h
+
 # Don't automatically run autoconf, since configure.ac might be accidentally
 # newer than configure.  Also, this writes into the source directory which
 # might be on a read-only file system.  If configured for maintainer mode
@@ -2366,6 +2380,12 @@ default-d.o: config/default-d.cc
 	$(COMPILE) $<
 	$(POSTCOMPILE)
 
+# Files used by the Rust language front end.
+
+default-rust.o: config/default-rust.cc
+	$(COMPILE) $<
+	$(POSTCOMPILE)
+
 # Language-independent files.
 
 DRIVER_DEFINES = \
@@ -2672,6 +2692,15 @@ s-d-target-hooks-def-h: build/genhooks$(build_exeext)
 					     d/d-target-hooks-def.h
 	$(STAMP) s-d-target-hooks-def-h
 
+rust/rust-target-hooks-def.h: s-rust-target-hooks-def-h; @true
+
+s-rust-target-hooks-def-h: build/genhooks$(build_exeext)
+	$(RUN_GEN) build/genhooks$(build_exeext) "Rust Target Hook" \
+					     > tmp-rust-target-hooks-def.h
+	$(SHELL) $(srcdir)/../move-if-change tmp-rust-target-hooks-def.h \
+					     rust/rust-target-hooks-def.h
+	$(STAMP) s-rust-target-hooks-def-h
+
 # check if someone mistakenly only changed tm.texi.
 # We use a different pathname here to avoid a circular dependency.
 s-tm-texi: $(srcdir)/doc/../doc/tm.texi
@@ -2696,6 +2725,7 @@ s-tm-texi: build/genhooks$(build_exeext) $(srcdir)/doc/tm.texi.in
 	    || test $(srcdir)/doc/tm.texi -nt $(srcdir)/c-family/c-target.def \
 	    || test $(srcdir)/doc/tm.texi -nt $(srcdir)/common/common-target.def \
 	    || test $(srcdir)/doc/tm.texi -nt $(srcdir)/d/d-target.def \
+	    || test $(srcdir)/doc/tm.texi -nt $(srcdir)/rust/rust-target.def \
 	  ); then \
 	  echo >&2 ; \
 	  echo You should edit $(srcdir)/doc/tm.texi.in rather than $(srcdir)/doc/tm.texi . >&2 ; \
@@ -2872,6 +2902,7 @@ generated_files = config.h tm.h $(TM_P_H) $(TM_D_H) $(TM_H) multilib.h \
        $(GIMPLE_MATCH_PD_SEQ_SRC) $(GENERIC_MATCH_PD_SEQ_SRC) \
        gimple-match-auto.h generic-match-auto.h \
        c-family/c-target-hooks-def.h d/d-target-hooks-def.h \
+       $(TM_RUST_H) rust/rust-target-hooks-def.h \
        case-cfn-macros.h \
        cfn-operators.pd omp-device-properties.h
 
@@ -3006,7 +3037,8 @@ build/genrecog.o : genrecog.cc $(RTL_BASE_H) $(BCONFIG_H) $(SYSTEM_H)	\
   $(CORETYPES_H) $(GTM_H) errors.h $(READ_MD_H) $(GENSUPPORT_H)		\
   $(HASH_TABLE_H) inchash.h
 build/genhooks.o : genhooks.cc $(TARGET_DEF) $(C_TARGET_DEF)		\
-  $(COMMON_TARGET_DEF) $(D_TARGET_DEF) $(BCONFIG_H) $(SYSTEM_H) errors.h
+  $(COMMON_TARGET_DEF) $(D_TARGET_DEF) $(RUST_TARGET_DEF) $(BCONFIG_H) \
+  $(SYSTEM_H) errors.h
 build/genmddump.o : genmddump.cc $(RTL_BASE_H) $(BCONFIG_H) $(SYSTEM_H)	\
   $(CORETYPES_H) $(GTM_H) errors.h $(READ_MD_H) $(GENSUPPORT_H)
 build/genmatch.o : genmatch.cc $(BCONFIG_H) $(SYSTEM_H) $(CORETYPES_H) \
diff --git a/gcc/config.gcc b/gcc/config.gcc
index b2fe7c7ceef..13c575839ef 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -90,6 +90,9 @@
 #  tm_d_file		A list of headers with definitions of target hook
 #			macros for the D compiler.
 #
+#  tm_rust_file		list of headers with definitions of target hook
+#			macros for the Rust compiler.
+#
 #  out_file		The name of the machine description C support
 #			file, if different from "$cpu_type/$cpu_type.c".
 #
@@ -149,6 +152,9 @@
 #  fortran_target_objs	List of extra target-dependent objects that be
 #			linked into the fortran compiler only.
 #
+#  rust_target_objs	List of extra target-dependent objects that be
+#			linked into the Rust compiler only.
+#
 #  target_gtfiles       List of extra source files with type information.
 #
 #  xm_defines		List of macros to define when compiling for the
@@ -201,6 +207,9 @@
 #
 #  target_has_targetdm	Set to yes or no depending on whether the target
 #			has its own definition of targetdm.
+#
+#  target_has_targetrustm	Set to yes or no depending on whether the target
+#			has its own definition of targetrustm.
 
 out_file=
 common_out_file=
@@ -218,9 +227,11 @@ c_target_objs=
 cxx_target_objs=
 d_target_objs=
 fortran_target_objs=
+rust_target_objs=
 target_has_targetcm=no
 target_has_targetm_common=yes
 target_has_targetdm=no
+target_has_targetrustm=no
 tm_defines=
 xm_defines=
 # Set this to force installation and use of collect2.
@@ -590,6 +601,16 @@ then
 	tm_d_file="${tm_d_file} ${cpu_type}/${cpu_type}-d.h"
 fi
 
+tm_rust_file=
+if test -f ${srcdir}/config/${cpu_type}/${cpu_type}-rust.h
+then
+	tm_rust_file="${cpu_type}/${cpu_type}-rust.h"
+fi
+if test -f ${srcdir}/config/${cpu_type}/${cpu_type}-rust.cc
+then
+	rust_target_objs="${rust_target_objs} ${cpu_type}-rust.o"
+fi
+
 extra_modes=
 if test -f ${srcdir}/config/${cpu_type}/${cpu_type}-modes.def
 then
@@ -3606,6 +3627,10 @@ if [ "$target_has_targetdm" = "no" ]; then
   d_target_objs="$d_target_objs default-d.o"
 fi
 
+if [ "$target_has_targetrustm" = "no" ]; then
+  rust_target_objs="$rust_target_objs default-rust.o"
+fi
+
 # Support for --with-cpu and related options (and a few unrelated options,
 # too).
 case ${with_cpu} in
diff --git a/gcc/config/default-rust.cc b/gcc/config/default-rust.cc
new file mode 100644
index 00000000000..aa098cbb806
--- /dev/null
+++ b/gcc/config/default-rust.cc
@@ -0,0 +1,29 @@
+/* Default Rust language target hooks initializer.
+   Copyright (C) 2022 Free Software Foundation, Inc.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#include "config.h"
+#include "system.h"
+#include "coretypes.h"
+#include "tm_rust.h"
+#include "rust/rust-target.h"
+#include "rust/rust-target-def.h"
+
+/* Do not include tm.h or tm_p.h here; definitions needed by the target
+   architecture to initialize targetrustm should instead be added to tm_rust.h.
+ */
+
+struct gcc_targetrustm targetrustm = TARGETRUSTM_INITIALIZER;
diff --git a/gcc/configure b/gcc/configure
index 07e8a64afbb..53a32373a18 100755
--- a/gcc/configure
+++ b/gcc/configure
@@ -645,6 +645,7 @@ ISLLIBS
 GMPINC
 GMPLIBS
 target_cpu_default
+rust_target_objs
 d_target_objs
 fortran_target_objs
 cxx_target_objs
@@ -653,6 +654,8 @@ use_gcc_stdint
 xm_defines
 xm_include_list
 xm_file_list
+tm_rust_include_list
+tm_rust_file_list
 tm_d_include_list
 tm_d_file_list
 tm_p_include_list
@@ -13562,6 +13565,17 @@ for f in $tm_d_file; do
   esac
 done
 
+tm_rust_file_list=
+tm_rust_include_list=
+for f in $tm_rust_file; do
+  case $f in
+    * )
+       tm_rust_file_list="${tm_rust_file_list} \$(srcdir)/config/$f"
+       tm_rust_include_list="${tm_rust_include_list} config/$f"
+       ;;
+  esac
+done
+
 xm_file_list=
 xm_include_list=
 for f in $xm_file; do
@@ -19886,7 +19900,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 19889 "configure"
+#line 19903 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -19992,7 +20006,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 19995 "configure"
+#line 20009 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -31903,6 +31917,9 @@ fi
 
 
 
+
+
+
 
 
 
diff --git a/gcc/configure.ac b/gcc/configure.ac
index cb4be11facd..c193c96452a 100644
--- a/gcc/configure.ac
+++ b/gcc/configure.ac
@@ -2405,6 +2405,17 @@ for f in $tm_d_file; do
   esac
 done
 
+tm_rust_file_list=
+tm_rust_include_list=
+for f in $tm_rust_file; do
+  case $f in
+    * )
+       tm_rust_file_list="${tm_rust_file_list} \$(srcdir)/config/$f"
+       tm_rust_include_list="${tm_rust_include_list} config/$f"
+       ;;
+  esac
+done
+
 xm_file_list=
 xm_include_list=
 for f in $xm_file; do
@@ -7381,6 +7392,8 @@ AC_SUBST(tm_p_file_list)
 AC_SUBST(tm_p_include_list)
 AC_SUBST(tm_d_file_list)
 AC_SUBST(tm_d_include_list)
+AC_SUBST(tm_rust_file_list)
+AC_SUBST(tm_rust_include_list)
 AC_SUBST(xm_file_list)
 AC_SUBST(xm_include_list)
 AC_SUBST(xm_defines)
@@ -7389,6 +7402,7 @@ AC_SUBST(c_target_objs)
 AC_SUBST(cxx_target_objs)
 AC_SUBST(fortran_target_objs)
 AC_SUBST(d_target_objs)
+AC_SUBST(rust_target_objs)
 AC_SUBST(target_cpu_default)
 
 AC_SUBST_FILE(language_hooks)
diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi
index ff69207fb9f..69123f00298 100644
--- a/gcc/doc/tm.texi
+++ b/gcc/doc/tm.texi
@@ -115,6 +115,14 @@ initialize @code{targetdm} themselves, they should set
 @code{target_has_targetdm=yes} in @file{config.gcc}; otherwise a default
 definition is used.
 
+Similarly, there is a @code{targetrustm} variable for hooks that are
+specific to the Rust language front end, documented as ``Rust Target
+Hook''.  This is declared in @file{rust/rust-target.h}, the initializer
+@code{TARGETRUSTM_INITIALIZER} in @file{rust/rust-target-def.h}.
+If targets initialize @code{targetrustm} themselves, they should set
+@code{target_has_targetrustm=yes} in @file{config.gcc}; otherwise a
+default definition is used.
+
 @node Driver
 @section Controlling the Compilation Driver, @file{gcc}
 @cindex driver
diff --git a/gcc/doc/tm.texi.in b/gcc/doc/tm.texi.in
index cad6308a87c..9bac02b9b66 100644
--- a/gcc/doc/tm.texi.in
+++ b/gcc/doc/tm.texi.in
@@ -115,6 +115,14 @@ initialize @code{targetdm} themselves, they should set
 @code{target_has_targetdm=yes} in @file{config.gcc}; otherwise a default
 definition is used.
 
+Similarly, there is a @code{targetrustm} variable for hooks that are
+specific to the Rust language front end, documented as ``Rust Target
+Hook''.  This is declared in @file{rust/rust-target.h}, the initializer
+@code{TARGETRUSTM_INITIALIZER} in @file{rust/rust-target-def.h}.
+If targets initialize @code{targetrustm} themselves, they should set
+@code{target_has_targetrustm=yes} in @file{config.gcc}; otherwise a
+default definition is used.
+
 @node Driver
 @section Controlling the Compilation Driver, @file{gcc}
 @cindex driver
diff --git a/gcc/genhooks.cc b/gcc/genhooks.cc
index 8bcf9929207..49414eca531 100644
--- a/gcc/genhooks.cc
+++ b/gcc/genhooks.cc
@@ -35,6 +35,7 @@ static struct hook_desc hook_array[] = {
 #include "c-family/c-target.def"
 #include "common/common-target.def"
 #include "d/d-target.def"
+#include "rust/rust-target.def"
 #undef DEFHOOK
 };
 
diff --git a/gcc/rust/rust-target-def.h b/gcc/rust/rust-target-def.h
new file mode 100644
index 00000000000..8534c4b68c3
--- /dev/null
+++ b/gcc/rust/rust-target-def.h
@@ -0,0 +1,20 @@
+/* Default initializers for Rust target hooks.
+   Copyright (C) 2022 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published by the
+   Free Software Foundation; either version 3, or (at your option) any
+   later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+#include "rust/rust-target-hooks-def.h"
+#include "tree.h"
+#include "hooks.h"
diff --git a/gcc/rust/rust-target.def b/gcc/rust/rust-target.def
new file mode 100644
index 00000000000..c800eefcfaa
--- /dev/null
+++ b/gcc/rust/rust-target.def
@@ -0,0 +1,32 @@
+/* Target hook definitions for the Rust front end.
+   Copyright (C) 2022 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published by the
+   Free Software Foundation; either version 3, or (at your option) any
+   later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+/* See target-hooks-macros.h for details of macros that should be
+   provided by the including file, and how to use them here.  */
+
+#include "target-hooks-macros.h"
+
+#undef HOOK_TYPE
+#define HOOK_TYPE "Rust Target Hook"
+
+HOOK_VECTOR (TARGETRUSTM_INITIALIZER, gcc_targetrustm)
+
+#undef HOOK_PREFIX
+#define HOOK_PREFIX "TARGET_"
+
+/* Close the 'struct gcc_targetrustm' definition.  */
+HOOK_VECTOR_END (C90_EMPTY_HACK)
diff --git a/gcc/rust/rust-target.h b/gcc/rust/rust-target.h
new file mode 100644
index 00000000000..79edd786cdd
--- /dev/null
+++ b/gcc/rust/rust-target.h
@@ -0,0 +1,31 @@
+/* Data structure definitions for target-specific Rust behavior.
+   Copyright (C) 2022 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published by the
+   Free Software Foundation; either version 3, or (at your option) any
+   later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_RUST_TARGET_H
+#define GCC_RUST_TARGET_H
+
+#define DEFHOOKPOD(NAME, DOC, TYPE, INIT) TYPE NAME;
+#define DEFHOOK(NAME, DOC, TYPE, PARAMS, INIT) TYPE (*NAME) PARAMS;
+#define DEFHOOK_UNDOC DEFHOOK
+#define HOOKSTRUCT(FRAGMENT) FRAGMENT
+
+#include "rust-target.def"
+
+/* Each target can provide their own.  */
+extern struct gcc_targetrustm targetrustm;
+
+#endif /* GCC_RUST_TARGET_H  */
-- 
2.42.0


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH 02/14] rust: Reintroduce TARGET_RUST_CPU_INFO hook
  2023-09-07 13:36 [PATCH 01/14] rust: Add skeleton support and documentation for targetrustm hooks arthur.cohen
@ 2023-09-07 13:36 ` arthur.cohen
  2023-09-07 13:36 ` [PATCH 03/14] rust: Reintroduce TARGET_RUST_OS_INFO hook arthur.cohen
                   ` (11 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: arthur.cohen @ 2023-09-07 13:36 UTC (permalink / raw)
  To: gcc-patches; +Cc: gcc-rust, ibuclaw

From: Iain Buclaw <ibuclaw@gdcproject.org>

gcc/ChangeLog:

	* doc/tm.texi: Regenerate.
	* doc/tm.texi.in: Add @node for Rust language and ABI, and document
	TARGET_RUST_CPU_INFO.

gcc/rust/ChangeLog:

	* rust-lang.cc (rust_add_target_info): Remove sorry.
	* rust-session-manager.cc: Replace include of target.h with
	include of tm.h and rust-target.h.
	(Session::init): Call targetrustm.rust_cpu_info.
	* rust-target.def (rust_cpu_info): New hook.
	* rust-target.h (rust_add_target_info): Declare.
---
 gcc/doc/tm.texi                  | 13 +++++++++++++
 gcc/doc/tm.texi.in               |  7 +++++++
 gcc/rust/rust-lang.cc            |  2 --
 gcc/rust/rust-session-manager.cc |  7 ++++++-
 gcc/rust/rust-target.def         | 12 ++++++++++++
 gcc/rust/rust-target.h           |  4 ++++
 6 files changed, 42 insertions(+), 3 deletions(-)

diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi
index 69123f00298..f7a2f8be542 100644
--- a/gcc/doc/tm.texi
+++ b/gcc/doc/tm.texi
@@ -53,6 +53,7 @@ through the macros defined in the @file{.h} file.
 * PCH Target::          Validity checking for precompiled headers.
 * C++ ABI::             Controlling C++ ABI changes.
 * D Language and ABI::  Controlling D ABI changes.
+* Rust Language and ABI:: Controlling Rust ABI changes.
 * Named Address Spaces:: Adding support for named address spaces
 * Misc::                Everything else.
 @end menu
@@ -10962,6 +10963,18 @@ if they have external linkage.  If this flag is false, then instantiated
 decls will be emitted as weak symbols.  The default is @code{false}.
 @end deftypevr
 
+@node Rust Language and ABI
+@section Rust ABI parameters
+@cindex parameters, rust abi
+
+@deftypefn {Rust Target Hook} void TARGET_RUST_CPU_INFO (void)
+Declare all environmental CPU info and features relating to the target CPU
+using the function @code{rust_add_target_info}, which takes a string
+representing the feature key and a string representing the feature value.
+Configuration pairs predefined by this hook apply to all files that are being
+compiled.
+@end deftypefn
+
 @node Named Address Spaces
 @section Adding support for named address spaces
 @cindex named address spaces
diff --git a/gcc/doc/tm.texi.in b/gcc/doc/tm.texi.in
index 9bac02b9b66..cd4e687aea1 100644
--- a/gcc/doc/tm.texi.in
+++ b/gcc/doc/tm.texi.in
@@ -53,6 +53,7 @@ through the macros defined in the @file{.h} file.
 * PCH Target::          Validity checking for precompiled headers.
 * C++ ABI::             Controlling C++ ABI changes.
 * D Language and ABI::  Controlling D ABI changes.
+* Rust Language and ABI:: Controlling Rust ABI changes.
 * Named Address Spaces:: Adding support for named address spaces
 * Misc::                Everything else.
 @end menu
@@ -7143,6 +7144,12 @@ floating-point support; they are not included in this mechanism.
 
 @hook TARGET_D_TEMPLATES_ALWAYS_COMDAT
 
+@node Rust Language and ABI
+@section Rust ABI parameters
+@cindex parameters, rust abi
+
+@hook TARGET_RUST_CPU_INFO
+
 @node Named Address Spaces
 @section Adding support for named address spaces
 @cindex named address spaces
diff --git a/gcc/rust/rust-lang.cc b/gcc/rust/rust-lang.cc
index 1fb1c25da7a..978b8b9ead2 100644
--- a/gcc/rust/rust-lang.cc
+++ b/gcc/rust/rust-lang.cc
@@ -101,8 +101,6 @@ struct GTY (()) language_function
 void
 rust_add_target_info (const char *key, const char *value)
 {
-  sorry ("TODO");
-
   Rust::Session::get_instance ().options.target_data.insert_key_value_pair (
     key, value);
 }
diff --git a/gcc/rust/rust-session-manager.cc b/gcc/rust/rust-session-manager.cc
index 074bad9c5d7..112960ad3c0 100644
--- a/gcc/rust/rust-session-manager.cc
+++ b/gcc/rust/rust-session-manager.cc
@@ -44,7 +44,8 @@
 #include "diagnostic.h"
 #include "input.h"
 #include "selftest.h"
-#include "target.h"
+#include "tm.h"
+#include "rust-target.h"
 
 extern bool
 saw_errors (void);
@@ -137,6 +138,10 @@ validate_crate_name (const std::string &crate_name, Error &error)
 void
 Session::init ()
 {
+  // initialize target hooks
+  targetrustm.rust_cpu_info ();
+
+  // target-independent values that should exist in all targets
   options.target_data.insert_key_value_pair ("target_pointer_width",
 					     std::to_string (POINTER_SIZE));
   options.target_data.insert_key_value_pair ("target_endian", BYTES_BIG_ENDIAN
diff --git a/gcc/rust/rust-target.def b/gcc/rust/rust-target.def
index c800eefcfaa..285b7503528 100644
--- a/gcc/rust/rust-target.def
+++ b/gcc/rust/rust-target.def
@@ -28,5 +28,17 @@ HOOK_VECTOR (TARGETRUSTM_INITIALIZER, gcc_targetrustm)
 #undef HOOK_PREFIX
 #define HOOK_PREFIX "TARGET_"
 
+/* Environmental CPU info and features (e.g. endianness, pointer size) relating
+   to the target CPU.  */
+DEFHOOK
+(rust_cpu_info,
+ "Declare all environmental CPU info and features relating to the target CPU\n\
+using the function @code{rust_add_target_info}, which takes a string\n\
+representing the feature key and a string representing the feature value.\n\
+Configuration pairs predefined by this hook apply to all files that are being\n\
+compiled.",
+ void, (void),
+ hook_void_void)
+
 /* Close the 'struct gcc_targetrustm' definition.  */
 HOOK_VECTOR_END (C90_EMPTY_HACK)
diff --git a/gcc/rust/rust-target.h b/gcc/rust/rust-target.h
index 79edd786cdd..7fcdfc99b81 100644
--- a/gcc/rust/rust-target.h
+++ b/gcc/rust/rust-target.h
@@ -25,6 +25,10 @@
 
 #include "rust-target.def"
 
+/* Used by target to add target-related info.  */
+extern void
+rust_add_target_info (const char *, const char *);
+
 /* Each target can provide their own.  */
 extern struct gcc_targetrustm targetrustm;
 
-- 
2.42.0


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH 03/14] rust: Reintroduce TARGET_RUST_OS_INFO hook
  2023-09-07 13:36 [PATCH 01/14] rust: Add skeleton support and documentation for targetrustm hooks arthur.cohen
  2023-09-07 13:36 ` [PATCH 02/14] rust: Reintroduce TARGET_RUST_CPU_INFO hook arthur.cohen
@ 2023-09-07 13:36 ` arthur.cohen
  2023-09-07 13:36 ` [PATCH 04/14] rust: Implement TARGET_RUST_CPU_INFO for i[34567]86-*-* and x86_64-*-* arthur.cohen
                   ` (10 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: arthur.cohen @ 2023-09-07 13:36 UTC (permalink / raw)
  To: gcc-patches; +Cc: gcc-rust, ibuclaw

From: Iain Buclaw <ibuclaw@gdcproject.org>

gcc/ChangeLog:

	* doc/tm.texi: Regenerate.
	* doc/tm.texi.in: Document TARGET_RUST_OS_INFO.

gcc/rust/ChangeLog:

	* rust-session-manager.cc (Session::init): Call
	targetrustm.rust_os_info.
	* rust-target.def (rust_os_info): New hook.
---
 gcc/doc/tm.texi                  | 5 +++++
 gcc/doc/tm.texi.in               | 2 ++
 gcc/rust/rust-session-manager.cc | 1 +
 gcc/rust/rust-target.def         | 8 ++++++++
 4 files changed, 16 insertions(+)

diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi
index f7a2f8be542..b0779724d30 100644
--- a/gcc/doc/tm.texi
+++ b/gcc/doc/tm.texi
@@ -10975,6 +10975,11 @@ Configuration pairs predefined by this hook apply to all files that are being
 compiled.
 @end deftypefn
 
+@deftypefn {Rust Target Hook} void TARGET_RUST_OS_INFO (void)
+Similar to @code{TARGET_RUST_CPU_INFO}, but is used for configuration info
+relating to the target operating system.
+@end deftypefn
+
 @node Named Address Spaces
 @section Adding support for named address spaces
 @cindex named address spaces
diff --git a/gcc/doc/tm.texi.in b/gcc/doc/tm.texi.in
index cd4e687aea1..d3e18955628 100644
--- a/gcc/doc/tm.texi.in
+++ b/gcc/doc/tm.texi.in
@@ -7150,6 +7150,8 @@ floating-point support; they are not included in this mechanism.
 
 @hook TARGET_RUST_CPU_INFO
 
+@hook TARGET_RUST_OS_INFO
+
 @node Named Address Spaces
 @section Adding support for named address spaces
 @cindex named address spaces
diff --git a/gcc/rust/rust-session-manager.cc b/gcc/rust/rust-session-manager.cc
index 112960ad3c0..ce1fdbb02af 100644
--- a/gcc/rust/rust-session-manager.cc
+++ b/gcc/rust/rust-session-manager.cc
@@ -140,6 +140,7 @@ Session::init ()
 {
   // initialize target hooks
   targetrustm.rust_cpu_info ();
+  targetrustm.rust_os_info ();
 
   // target-independent values that should exist in all targets
   options.target_data.insert_key_value_pair ("target_pointer_width",
diff --git a/gcc/rust/rust-target.def b/gcc/rust/rust-target.def
index 285b7503528..9c72c1c86d3 100644
--- a/gcc/rust/rust-target.def
+++ b/gcc/rust/rust-target.def
@@ -40,5 +40,13 @@ compiled.",
  void, (void),
  hook_void_void)
 
+/* Environmental OS info relating to the target OS.  */
+DEFHOOK
+(rust_os_info,
+ "Similar to @code{TARGET_RUST_CPU_INFO}, but is used for configuration info\n\
+relating to the target operating system.",
+ void, (void),
+ hook_void_void)
+
 /* Close the 'struct gcc_targetrustm' definition.  */
 HOOK_VECTOR_END (C90_EMPTY_HACK)
-- 
2.42.0


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH 04/14] rust: Implement TARGET_RUST_CPU_INFO for i[34567]86-*-* and x86_64-*-*
  2023-09-07 13:36 [PATCH 01/14] rust: Add skeleton support and documentation for targetrustm hooks arthur.cohen
  2023-09-07 13:36 ` [PATCH 02/14] rust: Reintroduce TARGET_RUST_CPU_INFO hook arthur.cohen
  2023-09-07 13:36 ` [PATCH 03/14] rust: Reintroduce TARGET_RUST_OS_INFO hook arthur.cohen
@ 2023-09-07 13:36 ` arthur.cohen
  2023-09-07 13:36 ` [PATCH 05/14] rust: Implement TARGET_RUST_OS_INFO for *-*-darwin* arthur.cohen
                   ` (9 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: arthur.cohen @ 2023-09-07 13:36 UTC (permalink / raw)
  To: gcc-patches; +Cc: gcc-rust, ibuclaw

From: Iain Buclaw <ibuclaw@gdcproject.org>

There are still quite a lot of the previously reverted i386-rust.cc
missing, so it's only a partial reimplementation.

gcc/ChangeLog:

	* config/i386/t-i386 (i386-rust.o): New rule.
	* config/i386/i386-rust.cc: New file.
	* config/i386/i386-rust.h: New file.
---
 gcc/config/i386/i386-rust.cc | 129 +++++++++++++++++++++++++++++++++++
 gcc/config/i386/i386-rust.h  |  22 ++++++
 gcc/config/i386/t-i386       |   4 ++
 3 files changed, 155 insertions(+)
 create mode 100644 gcc/config/i386/i386-rust.cc
 create mode 100644 gcc/config/i386/i386-rust.h

diff --git a/gcc/config/i386/i386-rust.cc b/gcc/config/i386/i386-rust.cc
new file mode 100644
index 00000000000..a00c4f8cee1
--- /dev/null
+++ b/gcc/config/i386/i386-rust.cc
@@ -0,0 +1,129 @@
+/* Subroutines for the Rust front end on the x86 architecture.
+   Copyright (C) 2022 Free Software Foundation, Inc.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#define IN_TARGET_CODE 1
+
+#include "config.h"
+#include "system.h"
+#include "coretypes.h"
+#include "tm.h"
+#include "tm_rust.h"
+#include "rust/rust-target.h"
+
+/* Implement TARGET_RUST_CPU_INFO for x86 targets.  */
+
+void
+ix86_rust_target_cpu_info (void)
+{
+  if (TARGET_64BIT)
+    rust_add_target_info ("target_arch", "x86_64");
+  else
+    rust_add_target_info ("target_arch", "x86");
+
+  // features officially "stabilised" in rustc
+  if (TARGET_MMX)
+    rust_add_target_info ("target_feature", "mmx");
+  if (TARGET_SSE)
+    rust_add_target_info ("target_feature", "sse");
+  if (TARGET_SSE2)
+    rust_add_target_info ("target_feature", "sse2");
+  if (TARGET_SSE3)
+    rust_add_target_info ("target_feature", "sse3");
+  if (TARGET_SSSE3)
+    rust_add_target_info ("target_feature", "ssse3");
+  if (TARGET_SSE4_1)
+    rust_add_target_info ("target_feature", "sse4.1");
+  if (TARGET_SSE4_2)
+    rust_add_target_info ("target_feature", "sse4.2");
+  if (TARGET_AES)
+    rust_add_target_info ("target_feature", "aes");
+  if (TARGET_SHA)
+    rust_add_target_info ("target_feature", "sha");
+  if (TARGET_AVX)
+    rust_add_target_info ("target_feature", "avx");
+  if (TARGET_AVX2)
+    rust_add_target_info ("target_feature", "avx2");
+  if (TARGET_AVX512F)
+    rust_add_target_info ("target_feature", "avx512f");
+  if (TARGET_AVX512ER)
+    rust_add_target_info ("target_feature", "avx512er");
+  if (TARGET_AVX512CD)
+    rust_add_target_info ("target_feature", "avx512cd");
+  if (TARGET_AVX512PF)
+    rust_add_target_info ("target_feature", "avx512pf");
+  if (TARGET_AVX512DQ)
+    rust_add_target_info ("target_feature", "avx512dq");
+  if (TARGET_AVX512BW)
+    rust_add_target_info ("target_feature", "avx512bw");
+  if (TARGET_AVX512VL)
+    rust_add_target_info ("target_feature", "avx512vl");
+  if (TARGET_AVX512VBMI)
+    rust_add_target_info ("target_feature", "avx512vbmi");
+  if (TARGET_AVX512IFMA)
+    rust_add_target_info ("target_feature", "avx512ifma");
+  if (TARGET_AVX512VPOPCNTDQ)
+    rust_add_target_info ("target_feature", "avx512vpopcntdq");
+  if (TARGET_FMA)
+    rust_add_target_info ("target_feature", "fma");
+  if (TARGET_RTM)
+    rust_add_target_info ("target_feature", "rtm");
+  if (TARGET_SSE4A)
+    rust_add_target_info ("target_feature", "sse4a");
+  if (TARGET_BMI)
+    {
+      rust_add_target_info ("target_feature", "bmi1");
+      rust_add_target_info ("target_feature", "bmi");
+    }
+  if (TARGET_BMI2)
+    rust_add_target_info ("target_feature", "bmi2");
+  if (TARGET_LZCNT)
+    rust_add_target_info ("target_feature", "lzcnt");
+  if (TARGET_TBM)
+    rust_add_target_info ("target_feature", "tbm");
+  if (TARGET_POPCNT)
+    rust_add_target_info ("target_feature", "popcnt");
+  if (TARGET_RDRND)
+    {
+      rust_add_target_info ("target_feature", "rdrand");
+      rust_add_target_info ("target_feature", "rdrnd");
+    }
+  if (TARGET_F16C)
+    rust_add_target_info ("target_feature", "f16c");
+  if (TARGET_RDSEED)
+    rust_add_target_info ("target_feature", "rdseed");
+  if (TARGET_ADX)
+    rust_add_target_info ("target_feature", "adx");
+  if (TARGET_FXSR)
+    rust_add_target_info ("target_feature", "fxsr");
+  if (TARGET_XSAVE)
+    rust_add_target_info ("target_feature", "xsave");
+  if (TARGET_XSAVEOPT)
+    rust_add_target_info ("target_feature", "xsaveopt");
+  if (TARGET_XSAVEC)
+    rust_add_target_info ("target_feature", "xsavec");
+  if (TARGET_XSAVES)
+    rust_add_target_info ("target_feature", "xsaves");
+  if (TARGET_VPCLMULQDQ)
+    {
+      rust_add_target_info ("target_feature", "pclmulqdq");
+      rust_add_target_info ("target_feature", "vpclmulqdq");
+    }
+  if (TARGET_CMPXCHG16B)
+    rust_add_target_info ("target_feature", "cmpxchg16b");
+  if (TARGET_MOVBE)
+    rust_add_target_info ("target_feature", "movbe");
+}
diff --git a/gcc/config/i386/i386-rust.h b/gcc/config/i386/i386-rust.h
new file mode 100644
index 00000000000..a837e2f1c74
--- /dev/null
+++ b/gcc/config/i386/i386-rust.h
@@ -0,0 +1,22 @@
+/* Definitions for the Rust front end on the x86 architecture.
+   Copyright (C) 2022 Free Software Foundation, Inc.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+/* In i386-rust.cc  */
+extern void ix86_rust_target_cpu_info (void);
+
+/* Target CPU info for Rust.  */
+#define TARGET_RUST_CPU_INFO ix86_rust_target_cpu_info
diff --git a/gcc/config/i386/t-i386 b/gcc/config/i386/t-i386
index b417c7f17ec..f85817d698c 100644
--- a/gcc/config/i386/t-i386
+++ b/gcc/config/i386/t-i386
@@ -46,6 +46,10 @@ i386-d.o: $(srcdir)/config/i386/i386-d.cc
 	$(COMPILE) $<
 	$(POSTCOMPILE)
 
+i386-rust.o: $(srcdir)/config/i386/i386-rust.cc
+	$(COMPILE) $<
+	$(POSTCOMPILE)
+
 i386-options.o: $(srcdir)/config/i386/i386-options.cc
 	$(COMPILE) $<
 	$(POSTCOMPILE)
-- 
2.42.0


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH 05/14] rust: Implement TARGET_RUST_OS_INFO for *-*-darwin*
  2023-09-07 13:36 [PATCH 01/14] rust: Add skeleton support and documentation for targetrustm hooks arthur.cohen
                   ` (2 preceding siblings ...)
  2023-09-07 13:36 ` [PATCH 04/14] rust: Implement TARGET_RUST_CPU_INFO for i[34567]86-*-* and x86_64-*-* arthur.cohen
@ 2023-09-07 13:36 ` arthur.cohen
  2023-09-07 13:36 ` [PATCH 06/14] rust: Implement TARGET_RUST_OS_INFO for *-*-freebsd* arthur.cohen
                   ` (8 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: arthur.cohen @ 2023-09-07 13:36 UTC (permalink / raw)
  To: gcc-patches; +Cc: gcc-rust, ibuclaw

From: Iain Buclaw <ibuclaw@gdcproject.org>

gcc/ChangeLog:

	* config.gcc (*-*-darwin*): Set rust_target_objs and
	target_has_targetrustm.
	* config/t-darwin (darwin-rust.o): New rule.
	* config/darwin-rust.cc: New file.
---
 gcc/config.gcc            |  2 ++
 gcc/config/darwin-rust.cc | 44 +++++++++++++++++++++++++++++++++++++++
 gcc/config/t-darwin       |  4 ++++
 3 files changed, 50 insertions(+)
 create mode 100644 gcc/config/darwin-rust.cc

diff --git a/gcc/config.gcc b/gcc/config.gcc
index 13c575839ef..a654c7c5a83 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -779,8 +779,10 @@ case ${target} in
   cxx_target_objs="${cxx_target_objs} darwin-c.o"
   d_target_objs="${d_target_objs} darwin-d.o"
   fortran_target_objs="darwin-f.o"
+  rust_target_objs="${rust_target_objs} darwin-rust.o"
   target_has_targetcm=yes
   target_has_targetdm=yes
+  target_has_targetrustm=yes
   extra_objs="${extra_objs} darwin.o"
   extra_gcc_objs="darwin-driver.o"
   default_use_cxa_atexit=yes
diff --git a/gcc/config/darwin-rust.cc b/gcc/config/darwin-rust.cc
new file mode 100644
index 00000000000..4b014b88c52
--- /dev/null
+++ b/gcc/config/darwin-rust.cc
@@ -0,0 +1,44 @@
+/* Darwin support needed only by Rust front-end.
+   Copyright (C) 2022 Free Software Foundation, Inc.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#include "config.h"
+#include "system.h"
+#include "coretypes.h"
+#include "tm.h"
+#include "tm_rust.h"
+#include "rust/rust-target.h"
+#include "rust/rust-target-def.h"
+
+/* Implement TARGET_RUST_OS_INFO for Darwin targets.  */
+
+static void
+darwin_rust_target_os_info (void)
+{
+  rust_add_target_info ("target_family", "unix");
+
+  /* TODO: rust actually has "macos", "ios", and "tvos" for darwin targets, but
+     gcc seems to have no current support for them, so assuming that target_os
+     is always macos for now.  */
+  rust_add_target_info ("target_os", "macos");
+  rust_add_target_info ("target_vendor", "apple");
+  rust_add_target_info ("target_env", "");
+}
+
+#undef TARGET_RUST_OS_INFO
+#define TARGET_RUST_OS_INFO darwin_rust_target_os_info
+
+struct gcc_targetrustm targetrustm = TARGETRUSTM_INITIALIZER;
diff --git a/gcc/config/t-darwin b/gcc/config/t-darwin
index e22a579e951..52b6d89b6d4 100644
--- a/gcc/config/t-darwin
+++ b/gcc/config/t-darwin
@@ -34,6 +34,10 @@ darwin-f.o: $(srcdir)/config/darwin-f.cc
 	$(COMPILE) $<
 	$(POSTCOMPILE)
 
+darwin-rust.o: $(srcdir)/config/darwin-rust.cc
+	$(COMPILE) $<
+	$(POSTCOMPILE)
+
 darwin-driver.o: $(srcdir)/config/darwin-driver.cc
 	$(COMPILE) $<
 	$(POSTCOMPILE)
-- 
2.42.0


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH 06/14] rust: Implement TARGET_RUST_OS_INFO for *-*-freebsd*
  2023-09-07 13:36 [PATCH 01/14] rust: Add skeleton support and documentation for targetrustm hooks arthur.cohen
                   ` (3 preceding siblings ...)
  2023-09-07 13:36 ` [PATCH 05/14] rust: Implement TARGET_RUST_OS_INFO for *-*-darwin* arthur.cohen
@ 2023-09-07 13:36 ` arthur.cohen
  2023-09-07 13:36 ` [PATCH 07/14] rust: Implement TARGET_RUST_OS_INFO for *-*-netbsd* arthur.cohen
                   ` (7 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: arthur.cohen @ 2023-09-07 13:36 UTC (permalink / raw)
  To: gcc-patches; +Cc: gcc-rust, ibuclaw

From: Iain Buclaw <ibuclaw@gdcproject.org>

gcc/ChangeLog:

	* config.gcc (*-*-freebsd*): Set rust_target_objs and
	target_has_targetrustm.
	* config/t-freebsd (freebsd-rust.o): New rule.
	* config/freebsd-rust.cc: New file.
---
 gcc/config.gcc             |  2 ++
 gcc/config/freebsd-rust.cc | 40 ++++++++++++++++++++++++++++++++++++++
 gcc/config/t-freebsd       |  4 ++++
 3 files changed, 46 insertions(+)
 create mode 100644 gcc/config/freebsd-rust.cc

diff --git a/gcc/config.gcc b/gcc/config.gcc
index a654c7c5a83..61d77567bb6 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -864,6 +864,8 @@ case ${target} in
   d_target_objs="${d_target_objs} freebsd-d.o"
   tmake_file="${tmake_file} t-freebsd"
   target_has_targetdm=yes
+  rust_target_objs="${rust_target_objs} freebsd-rust.o"
+  target_has_targetrustm=yes
   ;;
 *-*-fuchsia*)
   native_system_header_dir=/include
diff --git a/gcc/config/freebsd-rust.cc b/gcc/config/freebsd-rust.cc
new file mode 100644
index 00000000000..1dbf2ed8ef9
--- /dev/null
+++ b/gcc/config/freebsd-rust.cc
@@ -0,0 +1,40 @@
+/* FreeBSD support needed only by Rust front-end.
+   Copyright (C) 2022 Free Software Foundation, Inc.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#include "config.h"
+#include "system.h"
+#include "coretypes.h"
+#include "tm.h"
+#include "tm_rust.h"
+#include "rust/rust-target.h"
+#include "rust/rust-target-def.h"
+
+/* Implement TARGET_RUST_OS_INFO for FreeBSD targets.  */
+
+static void
+freebsd_rust_target_os_info (void)
+{
+  rust_add_target_info ("target_family", "unix");
+  rust_add_target_info ("target_os", "freebsd");
+  rust_add_target_info ("target_vendor", "unknown");
+  rust_add_target_info ("target_env", "");
+}
+
+#undef TARGET_RUST_OS_INFO
+#define TARGET_RUST_OS_INFO freebsd_rust_target_os_info
+
+struct gcc_targetrustm targetrustm = TARGETRUSTM_INITIALIZER;
diff --git a/gcc/config/t-freebsd b/gcc/config/t-freebsd
index fb36685653a..d4b4615e567 100644
--- a/gcc/config/t-freebsd
+++ b/gcc/config/t-freebsd
@@ -19,3 +19,7 @@
 freebsd-d.o: $(srcdir)/config/freebsd-d.cc
 	$(COMPILE) $<
 	$(POSTCOMPILE)
+
+freebsd-rust.o: $(srcdir)/config/freebsd-rust.cc
+	$(COMPILE) $<
+	$(POSTCOMPILE)
-- 
2.42.0


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH 07/14] rust: Implement TARGET_RUST_OS_INFO for *-*-netbsd*
  2023-09-07 13:36 [PATCH 01/14] rust: Add skeleton support and documentation for targetrustm hooks arthur.cohen
                   ` (4 preceding siblings ...)
  2023-09-07 13:36 ` [PATCH 06/14] rust: Implement TARGET_RUST_OS_INFO for *-*-freebsd* arthur.cohen
@ 2023-09-07 13:36 ` arthur.cohen
  2023-09-07 13:36 ` [PATCH 08/14] rust: Implement TARGET_RUST_OS_INFO for *-*-openbsd* arthur.cohen
                   ` (6 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: arthur.cohen @ 2023-09-07 13:36 UTC (permalink / raw)
  To: gcc-patches; +Cc: gcc-rust, ibuclaw

From: Iain Buclaw <ibuclaw@gdcproject.org>

gcc/ChangeLog:

	* config.gcc (*-*-netbsd*): Set rust_target_objs and
	target_has_targetrustm.
	* config/t-netbsd (netbsd-rust.o): New rule.
	* config/netbsd-rust.cc: New file.
---
 gcc/config.gcc            |  2 ++
 gcc/config/netbsd-rust.cc | 40 +++++++++++++++++++++++++++++++++++++++
 gcc/config/t-netbsd       |  4 ++++
 3 files changed, 46 insertions(+)
 create mode 100644 gcc/config/netbsd-rust.cc

diff --git a/gcc/config.gcc b/gcc/config.gcc
index 61d77567bb6..ad4c01dfc89 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -973,6 +973,8 @@ case ${target} in
       default_gnu_indirect_function=yes
       ;;
   esac
+  rust_target_objs="${rust_target_objs} netbsd-rust.o"
+  target_has_targetrustm=yes
   ;;
 *-*-openbsd*)
   tmake_file="t-openbsd"
diff --git a/gcc/config/netbsd-rust.cc b/gcc/config/netbsd-rust.cc
new file mode 100644
index 00000000000..9395466cbbe
--- /dev/null
+++ b/gcc/config/netbsd-rust.cc
@@ -0,0 +1,40 @@
+/* NetBSD support needed only by Rust front-end.
+   Copyright (C) 2022 Free Software Foundation, Inc.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#include "config.h"
+#include "system.h"
+#include "coretypes.h"
+#include "tm.h"
+#include "tm_rust.h"
+#include "rust/rust-target.h"
+#include "rust/rust-target-def.h"
+
+/* Implement TARGET_RUST_OS_INFO for NetBSD targets.  */
+
+static void
+netbsd_rust_target_os_info (void)
+{
+  rust_add_target_info ("target_family", "unix");
+  rust_add_target_info ("target_os", "netbsd");
+  rust_add_target_info ("target_vendor", "unknown");
+  rust_add_target_info ("target_env", "");
+}
+
+#undef TARGET_RUST_OS_INFO
+#define TARGET_RUST_OS_INFO netbsd_rust_target_os_info
+
+struct gcc_targetrustm targetrustm = TARGETRUSTM_INITIALIZER;
diff --git a/gcc/config/t-netbsd b/gcc/config/t-netbsd
index 1d9a8ce8c7b..fdbfda52412 100644
--- a/gcc/config/t-netbsd
+++ b/gcc/config/t-netbsd
@@ -23,3 +23,7 @@ netbsd.o: $(srcdir)/config/netbsd.cc
 netbsd-d.o: $(srcdir)/config/netbsd-d.cc
 	$(COMPILE) $<
 	$(POSTCOMPILE)
+
+netbsd-rust.o: $(srcdir)/config/netbsd-rust.cc
+	$(COMPILE) $<
+	$(POSTCOMPILE)
-- 
2.42.0


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH 08/14] rust: Implement TARGET_RUST_OS_INFO for *-*-openbsd*
  2023-09-07 13:36 [PATCH 01/14] rust: Add skeleton support and documentation for targetrustm hooks arthur.cohen
                   ` (5 preceding siblings ...)
  2023-09-07 13:36 ` [PATCH 07/14] rust: Implement TARGET_RUST_OS_INFO for *-*-netbsd* arthur.cohen
@ 2023-09-07 13:36 ` arthur.cohen
  2023-09-07 13:36 ` [PATCH 09/14] rust: Implement TARGET_RUST_OS_INFO for *-*-solaris2* arthur.cohen
                   ` (5 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: arthur.cohen @ 2023-09-07 13:36 UTC (permalink / raw)
  To: gcc-patches; +Cc: gcc-rust, ibuclaw

From: Iain Buclaw <ibuclaw@gdcproject.org>

gcc/ChangeLog:

	* config.gcc (*-*-openbsd*): Set rust_target_objs and
	target_has_targetrustm.
	* config/t-openbsd (openbsd-rust.o): New rule.
	* config/openbsd-rust.cc: New file.
---
 gcc/config.gcc             |  2 ++
 gcc/config/openbsd-rust.cc | 40 ++++++++++++++++++++++++++++++++++++++
 gcc/config/t-openbsd       |  5 +++++
 3 files changed, 47 insertions(+)
 create mode 100644 gcc/config/openbsd-rust.cc

diff --git a/gcc/config.gcc b/gcc/config.gcc
index ad4c01dfc89..f2b4381362c 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -990,6 +990,8 @@ case ${target} in
   esac
   d_target_objs="${d_target_objs} openbsd-d.o"
   target_has_targetdm=yes
+  rust_target_objs="${rust_target_objs} openbsd-rust.o"
+  target_has_targetrustm=yes
   ;;
 *-*-phoenix*)
   gas=yes
diff --git a/gcc/config/openbsd-rust.cc b/gcc/config/openbsd-rust.cc
new file mode 100644
index 00000000000..c4721ea18e9
--- /dev/null
+++ b/gcc/config/openbsd-rust.cc
@@ -0,0 +1,40 @@
+/* OpenBSD support needed only by Rust front-end.
+   Copyright (C) 2022 Free Software Foundation, Inc.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#include "config.h"
+#include "system.h"
+#include "coretypes.h"
+#include "tm.h"
+#include "tm_rust.h"
+#include "rust/rust-target.h"
+#include "rust/rust-target-def.h"
+
+/* Implement TARGET_RUST_OS_INFO for OpenBSD targets.  */
+
+static void
+openbsd_rust_target_os_info (void)
+{
+  rust_add_target_info ("target_family", "unix");
+  rust_add_target_info ("target_os", "openbsd");
+  rust_add_target_info ("target_vendor", "unknown");
+  rust_add_target_info ("target_env", "");
+}
+
+#undef TARGET_RUST_OS_INFO
+#define TARGET_RUST_OS_INFO openbsd_rust_target_os_info
+
+struct gcc_targetrustm targetrustm = TARGETRUSTM_INITIALIZER;
diff --git a/gcc/config/t-openbsd b/gcc/config/t-openbsd
index 69643f521fb..3b625d62b30 100644
--- a/gcc/config/t-openbsd
+++ b/gcc/config/t-openbsd
@@ -5,3 +5,8 @@ USER_H = $(EXTRA_HEADERS)
 openbsd-d.o: $(srcdir)/config/openbsd-d.cc
 	$(COMPILE) $<
 	$(POSTCOMPILE)
+
+# OpenBSD-specific Rust support.
+openbsd-rust.o: $(srcdir)/config/openbsd-rust.cc
+	$(COMPILE) $<
+	$(POSTCOMPILE)
-- 
2.42.0


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH 09/14] rust: Implement TARGET_RUST_OS_INFO for *-*-solaris2*.
  2023-09-07 13:36 [PATCH 01/14] rust: Add skeleton support and documentation for targetrustm hooks arthur.cohen
                   ` (6 preceding siblings ...)
  2023-09-07 13:36 ` [PATCH 08/14] rust: Implement TARGET_RUST_OS_INFO for *-*-openbsd* arthur.cohen
@ 2023-09-07 13:36 ` arthur.cohen
  2023-09-07 13:36 ` [PATCH 10/14] rust: Implement TARGET_RUST_OS_INFO for *-*-dragonfly* arthur.cohen
                   ` (4 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: arthur.cohen @ 2023-09-07 13:36 UTC (permalink / raw)
  To: gcc-patches; +Cc: gcc-rust, ibuclaw

From: Iain Buclaw <ibuclaw@gdcproject.org>

gcc/ChangeLog:

	* config.gcc (*-*-solaris2*): Set rust_target_objs and
	target_has_targetrustm.
	* config/t-sol2 (sol2-rust.o): New rule.
	* config/sol2-rust.cc: New file.
---
 gcc/config.gcc          |  2 ++
 gcc/config/sol2-rust.cc | 40 ++++++++++++++++++++++++++++++++++++++++
 gcc/config/t-sol2       |  5 +++++
 3 files changed, 47 insertions(+)
 create mode 100644 gcc/config/sol2-rust.cc

diff --git a/gcc/config.gcc b/gcc/config.gcc
index f2b4381362c..81142763ac2 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -1056,6 +1056,8 @@ case ${target} in
       ;;
   esac
   target_has_targetdm=yes
+  rust_target_objs="${rust_target_objs} sol2-rust.o"
+  target_has_targetrustm=yes
   ;;
 *-*-*vms*)
   extra_options="${extra_options} vms/vms.opt"
diff --git a/gcc/config/sol2-rust.cc b/gcc/config/sol2-rust.cc
new file mode 100644
index 00000000000..e36bd450bcc
--- /dev/null
+++ b/gcc/config/sol2-rust.cc
@@ -0,0 +1,40 @@
+/* Solaris support needed only by Rust front-end.
+   Copyright (C) 2022 Free Software Foundation, Inc.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#include "config.h"
+#include "system.h"
+#include "coretypes.h"
+#include "tm.h"
+#include "tm_rust.h"
+#include "rust/rust-target.h"
+#include "rust/rust-target-def.h"
+
+/* Implement TARGET_RUST_OS_INFO for Solaris targets.  */
+
+static void
+solaris_rust_target_os_info (void)
+{
+  rust_add_target_info ("target_family", "unix");
+  rust_add_target_info ("target_os", "solaris");
+  rust_add_target_info ("target_vendor", "sun");
+  rust_add_target_info ("target_env", "");
+}
+
+#undef TARGET_RUST_OS_INFO
+#define TARGET_RUST_OS_INFO solaris_rust_target_os_info
+
+struct gcc_targetrustm targetrustm = TARGETRUSTM_INITIALIZER;
diff --git a/gcc/config/t-sol2 b/gcc/config/t-sol2
index 83d4c85fdeb..d454409d346 100644
--- a/gcc/config/t-sol2
+++ b/gcc/config/t-sol2
@@ -31,6 +31,11 @@ sol2-d.o: $(srcdir)/config/sol2-d.cc
 	$(COMPILE) $<
 	$(POSTCOMPILE)
 
+# Solaris-specific Rust support.
+sol2-rust.o: $(srcdir)/config/sol2-rust.cc
+	$(COMPILE) $<
+	$(POSTCOMPILE)
+
 # Corresponding stub routines.
 sol2-stubs.o: $(srcdir)/config/sol2-stubs.cc
 	$(COMPILE) $<
-- 
2.42.0


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH 10/14] rust: Implement TARGET_RUST_OS_INFO for *-*-dragonfly*
  2023-09-07 13:36 [PATCH 01/14] rust: Add skeleton support and documentation for targetrustm hooks arthur.cohen
                   ` (7 preceding siblings ...)
  2023-09-07 13:36 ` [PATCH 09/14] rust: Implement TARGET_RUST_OS_INFO for *-*-solaris2* arthur.cohen
@ 2023-09-07 13:36 ` arthur.cohen
  2023-09-07 13:36 ` [PATCH 11/14] rust: Implement TARGET_RUST_OS_INFO for *-*-vxworks* arthur.cohen
                   ` (3 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: arthur.cohen @ 2023-09-07 13:36 UTC (permalink / raw)
  To: gcc-patches; +Cc: gcc-rust, ibuclaw

From: Iain Buclaw <ibuclaw@gdcproject.org>

gcc/ChangeLog:

	* config.gcc (*-*-dragonfly*): Set rust_target_objs and
	target_has_targetrustm.
	* config/t-dragonfly (dragonfly-rust.o): New rule.
	* config/dragonfly-rust.cc: New file.
---
 gcc/config.gcc               |  2 ++
 gcc/config/dragonfly-rust.cc | 40 ++++++++++++++++++++++++++++++++++++
 gcc/config/t-dragonfly       |  4 ++++
 3 files changed, 46 insertions(+)
 create mode 100644 gcc/config/dragonfly-rust.cc

diff --git a/gcc/config.gcc b/gcc/config.gcc
index 81142763ac2..9344e26a48e 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -813,6 +813,8 @@ case ${target} in
   d_target_objs="${d_target_objs} dragonfly-d.o"
   tmake_file="${tmake_file} t-dragonfly"
   target_has_targetdm=yes
+  rust_target_objs="${rust_target_objs} dragonfly-rust.o"
+  target_has_targetrustm=yes
   ;;
 *-*-freebsd*)
   # This is the generic ELF configuration of FreeBSD.  Later
diff --git a/gcc/config/dragonfly-rust.cc b/gcc/config/dragonfly-rust.cc
new file mode 100644
index 00000000000..ce501d1b6fd
--- /dev/null
+++ b/gcc/config/dragonfly-rust.cc
@@ -0,0 +1,40 @@
+/* DragonFly support needed only by Rust front-end.
+   Copyright (C) 2022 Free Software Foundation, Inc.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#include "config.h"
+#include "system.h"
+#include "coretypes.h"
+#include "tm.h"
+#include "tm_rust.h"
+#include "rust/rust-target.h"
+#include "rust/rust-target-def.h"
+
+/* Implement TARGET_RUST_OS_INFO for DragonFly targets.  */
+
+static void
+dragonfly_rust_target_os_info (void)
+{
+  rust_add_target_info ("target_family", "unix");
+  rust_add_target_info ("target_os", "dragonfly");
+  rust_add_target_info ("target_vendor", "unknown");
+  rust_add_target_info ("target_env", "");
+}
+
+#undef TARGET_RUST_OS_INFO
+#define TARGET_RUST_OS_INFO dragonfly_rust_target_os_info
+
+struct gcc_targetrustm targetrustm = TARGETRUSTM_INITIALIZER;
diff --git a/gcc/config/t-dragonfly b/gcc/config/t-dragonfly
index b80587dd0d3..e60fa18f116 100644
--- a/gcc/config/t-dragonfly
+++ b/gcc/config/t-dragonfly
@@ -19,3 +19,7 @@
 dragonfly-d.o: $(srcdir)/config/dragonfly-d.cc
 	$(COMPILE) $<
 	$(POSTCOMPILE)
+
+dragonfly-rust.o: $(srcdir)/config/dragonfly-rust.cc
+	$(COMPILE) $<
+	$(POSTCOMPILE)
-- 
2.42.0


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH 11/14] rust: Implement TARGET_RUST_OS_INFO for *-*-vxworks*
  2023-09-07 13:36 [PATCH 01/14] rust: Add skeleton support and documentation for targetrustm hooks arthur.cohen
                   ` (8 preceding siblings ...)
  2023-09-07 13:36 ` [PATCH 10/14] rust: Implement TARGET_RUST_OS_INFO for *-*-dragonfly* arthur.cohen
@ 2023-09-07 13:36 ` arthur.cohen
  2023-09-07 13:36 ` [PATCH 12/14] rust: Implement TARGET_RUST_OS_INFO for *-*-fuchsia* arthur.cohen
                   ` (2 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: arthur.cohen @ 2023-09-07 13:36 UTC (permalink / raw)
  To: gcc-patches; +Cc: gcc-rust, ibuclaw

From: Iain Buclaw <ibuclaw@gdcproject.org>

gcc/ChangeLog:

	* config.gcc (*-*-vxworks*): Set rust_target_objs and
	target_has_targetrustm.
	* config/t-vxworks (vxworks-rust.o): New rule.
	* config/vxworks-rust.cc: New file.
---
 gcc/config.gcc             |  3 +++
 gcc/config/t-vxworks       |  4 ++++
 gcc/config/vxworks-rust.cc | 40 ++++++++++++++++++++++++++++++++++++++
 3 files changed, 47 insertions(+)
 create mode 100644 gcc/config/vxworks-rust.cc

diff --git a/gcc/config.gcc b/gcc/config.gcc
index 9344e26a48e..da59fa3eecd 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -1092,6 +1092,9 @@ case ${target} in
   extra_headers="${extra_headers} ../vxworks/vxworks-predef.h"
   target_has_targetcm="yes"
 
+  rust_target_objs="${rust_target_objs} vxworks-rust.o"
+  target_has_targetrustm=yes
+
   extra_gcc_objs="vxworks-driver.o"
 
   # This private header exposes a consistent interface for checks on
diff --git a/gcc/config/t-vxworks b/gcc/config/t-vxworks
index 164869a7bf0..639b2fd7a21 100644
--- a/gcc/config/t-vxworks
+++ b/gcc/config/t-vxworks
@@ -28,6 +28,10 @@ vxworks-c.o: $(srcdir)/config/vxworks-c.cc
 	$(COMPILE) $<
 	$(POSTCOMPILE)
 
+vxworks-rust.o: $(srcdir)/config/vxworks-rust.cc
+	$(COMPILE) $<
+	$(POSTCOMPILE)
+
 # We leverage $sysroot to find target system headers only, distributed
 # in a VxWorks (a)typical fashion with a different set of headers for
 # rtp vs kernel mode.  We setup SYSROOT_HEADERS_SUFFIX_SPEC to handle
diff --git a/gcc/config/vxworks-rust.cc b/gcc/config/vxworks-rust.cc
new file mode 100644
index 00000000000..76d618cdcd1
--- /dev/null
+++ b/gcc/config/vxworks-rust.cc
@@ -0,0 +1,40 @@
+/* VxWorks support needed only by Rust front-end.
+   Copyright (C) 2022 Free Software Foundation, Inc.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#include "config.h"
+#include "system.h"
+#include "coretypes.h"
+#include "tm.h"
+#include "tm_rust.h"
+#include "rust/rust-target.h"
+#include "rust/rust-target-def.h"
+
+/* Implement TARGET_RUST_OS_INFO for VxWorks targets.  */
+
+static void
+vxworks_rust_target_os_info (void)
+{
+  rust_add_target_info ("target_family", "unix");
+  rust_add_target_info ("target_os", "vxworks");
+  rust_add_target_info ("target_vendor", "wrs");
+  rust_add_target_info ("target_env", "gnu");
+}
+
+#undef TARGET_RUST_OS_INFO
+#define TARGET_RUST_OS_INFO vxworks_rust_target_os_info
+
+struct gcc_targetrustm targetrustm = TARGETRUSTM_INITIALIZER;
-- 
2.42.0


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH 12/14] rust: Implement TARGET_RUST_OS_INFO for *-*-fuchsia*.
  2023-09-07 13:36 [PATCH 01/14] rust: Add skeleton support and documentation for targetrustm hooks arthur.cohen
                   ` (9 preceding siblings ...)
  2023-09-07 13:36 ` [PATCH 11/14] rust: Implement TARGET_RUST_OS_INFO for *-*-vxworks* arthur.cohen
@ 2023-09-07 13:36 ` arthur.cohen
  2023-09-07 13:36 ` [PATCH 13/14] rust: Implement TARGET_RUST_OS_INFO for i[34567]86-*-mingw* and x86_64-*-mingw* arthur.cohen
  2023-09-07 13:36 ` [PATCH 14/14] rust: Implement TARGET_RUST_OS_INFO for *-*-*linux* arthur.cohen
  12 siblings, 0 replies; 14+ messages in thread
From: arthur.cohen @ 2023-09-07 13:36 UTC (permalink / raw)
  To: gcc-patches; +Cc: gcc-rust, ibuclaw

From: Iain Buclaw <ibuclaw@gdcproject.org>

gcc/ChangeLog:

	* config.gcc (*-*-fuchsia): Set tmake_rule, rust_target_objs,
	and target_has_targetrustm.
	* config/fuchsia-rust.cc: New file.
	* config/t-fuchsia: New file.
---
 gcc/config.gcc             |  3 +++
 gcc/config/fuchsia-rust.cc | 40 ++++++++++++++++++++++++++++++++++++++
 gcc/config/t-fuchsia       | 21 ++++++++++++++++++++
 3 files changed, 64 insertions(+)
 create mode 100644 gcc/config/fuchsia-rust.cc
 create mode 100644 gcc/config/t-fuchsia

diff --git a/gcc/config.gcc b/gcc/config.gcc
index da59fa3eecd..a512eb37275 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -871,6 +871,9 @@ case ${target} in
   ;;
 *-*-fuchsia*)
   native_system_header_dir=/include
+  tmake_file="t-fuchsia"
+  rust_target_objs="${rust_target_objs} fuchsia-rust.o"
+  target_has_targetrustm=yes
   ;;
 *-*-linux* | frv-*-*linux* | *-*-kfreebsd*-gnu | *-*-gnu* | *-*-kopensolaris*-gnu | *-*-uclinuxfdpiceabi)
   extra_options="$extra_options gnu-user.opt"
diff --git a/gcc/config/fuchsia-rust.cc b/gcc/config/fuchsia-rust.cc
new file mode 100644
index 00000000000..86262504ac2
--- /dev/null
+++ b/gcc/config/fuchsia-rust.cc
@@ -0,0 +1,40 @@
+/* Fuchsia support needed only by Rust front-end.
+   Copyright (C) 2022 Free Software Foundation, Inc.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#include "config.h"
+#include "system.h"
+#include "coretypes.h"
+#include "tm.h"
+#include "tm_rust.h"
+#include "rust/rust-target.h"
+#include "rust/rust-target-def.h"
+
+/* Implement TARGET_RUST_OS_INFO for Fuchsia targets.  */
+
+static void
+fushsia_rust_target_os_info (void)
+{
+  rust_add_target_info ("target_family", "unix");
+  rust_add_target_info ("target_os", "fushsia");
+  rust_add_target_info ("target_vendor", "unknown");
+  rust_add_target_info ("target_env", "");
+}
+
+#undef TARGET_RUST_OS_INFO
+#define TARGET_RUST_OS_INFO fushsia_rust_target_os_info
+
+struct gcc_targetrustm targetrustm = TARGETRUSTM_INITIALIZER;
diff --git a/gcc/config/t-fuchsia b/gcc/config/t-fuchsia
new file mode 100644
index 00000000000..55c884bcb2e
--- /dev/null
+++ b/gcc/config/t-fuchsia
@@ -0,0 +1,21 @@
+# Copyright (C) 2022 Free Software Foundation, Inc.
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GCC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3.  If not see
+# <http://www.gnu.org/licenses/>.
+
+fuchsia-rust.o: $(srcdir)/config/fuchsia-rust.cc
+	$(COMPILE) $<
+	$(POSTCOMPILE)
-- 
2.42.0


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH 13/14] rust: Implement TARGET_RUST_OS_INFO for i[34567]86-*-mingw* and x86_64-*-mingw*.
  2023-09-07 13:36 [PATCH 01/14] rust: Add skeleton support and documentation for targetrustm hooks arthur.cohen
                   ` (10 preceding siblings ...)
  2023-09-07 13:36 ` [PATCH 12/14] rust: Implement TARGET_RUST_OS_INFO for *-*-fuchsia* arthur.cohen
@ 2023-09-07 13:36 ` arthur.cohen
  2023-09-07 13:36 ` [PATCH 14/14] rust: Implement TARGET_RUST_OS_INFO for *-*-*linux* arthur.cohen
  12 siblings, 0 replies; 14+ messages in thread
From: arthur.cohen @ 2023-09-07 13:36 UTC (permalink / raw)
  To: gcc-patches; +Cc: gcc-rust, ibuclaw

From: Iain Buclaw <ibuclaw@gdcproject.org>

gcc/ChangeLog:

	* config.gcc (i[34567]86-*-mingw* | x86_64-*-mingw*): Set
	rust_target_objs and target_has_targetrustm.
	* config/t-winnt (winnt-rust.o): New rule.
	* config/winnt-rust.cc: New file.
---
 gcc/config.gcc           |  2 ++
 gcc/config/t-winnt       |  4 ++++
 gcc/config/winnt-rust.cc | 40 ++++++++++++++++++++++++++++++++++++++++
 3 files changed, 46 insertions(+)
 create mode 100644 gcc/config/winnt-rust.cc

diff --git a/gcc/config.gcc b/gcc/config.gcc
index a512eb37275..a7a36fccd8d 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -2170,6 +2170,8 @@ i[34567]86-*-mingw* | x86_64-*-mingw*)
 	d_target_objs="${d_target_objs} winnt-d.o"
 	target_has_targetcm="yes"
 	target_has_targetdm="yes"
+	rust_target_objs="${rust_target_objs} winnt-rust.o"
+	target_has_targetrustm="yes"
 	case ${target} in
 		x86_64-*-* | *-w64-*)
 			need_64bit_isa=yes
diff --git a/gcc/config/t-winnt b/gcc/config/t-winnt
index 73ce48af12b..b70c7f799e4 100644
--- a/gcc/config/t-winnt
+++ b/gcc/config/t-winnt
@@ -20,3 +20,7 @@ winnt-c.o: config/winnt-c.cc $(CONFIG_H) $(SYSTEM_H) coretypes.h \
   $(C_TARGET_H) $(C_TARGET_DEF_H)
 	$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) \
 	  $< $(OUTPUT_OPTION)
+
+winnt-rust.o: $(srcdir)/config/winnt-rust.cc
+	$(COMPILE) $<
+	$(POSTCOMPILE)
diff --git a/gcc/config/winnt-rust.cc b/gcc/config/winnt-rust.cc
new file mode 100644
index 00000000000..190584d3961
--- /dev/null
+++ b/gcc/config/winnt-rust.cc
@@ -0,0 +1,40 @@
+/* Windows support needed only by Rust front-end.
+   Copyright (C) 2022 Free Software Foundation, Inc.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#include "config.h"
+#include "system.h"
+#include "coretypes.h"
+#include "tm.h"
+#include "tm_rust.h"
+#include "rust/rust-target.h"
+#include "rust/rust-target-def.h"
+
+/* Implement TARGET_RUST_OS_INFO for Windows targets.  */
+
+static void
+winnt_rust_target_os_info (void)
+{
+  rust_add_target_info ("target_family", "windows");
+  rust_add_target_info ("target_os", "windows");
+  rust_add_target_info ("target_vendor", "pc");
+  rust_add_target_info ("target_env", "gnu");
+}
+
+#undef TARGET_RUST_OS_INFO
+#define TARGET_RUST_OS_INFO winnt_rust_target_os_info
+
+struct gcc_targetrustm targetrustm = TARGETRUSTM_INITIALIZER;
-- 
2.42.0


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH 14/14] rust: Implement TARGET_RUST_OS_INFO for *-*-*linux*.
  2023-09-07 13:36 [PATCH 01/14] rust: Add skeleton support and documentation for targetrustm hooks arthur.cohen
                   ` (11 preceding siblings ...)
  2023-09-07 13:36 ` [PATCH 13/14] rust: Implement TARGET_RUST_OS_INFO for i[34567]86-*-mingw* and x86_64-*-mingw* arthur.cohen
@ 2023-09-07 13:36 ` arthur.cohen
  12 siblings, 0 replies; 14+ messages in thread
From: arthur.cohen @ 2023-09-07 13:36 UTC (permalink / raw)
  To: gcc-patches; +Cc: gcc-rust, ibuclaw

From: Iain Buclaw <ibuclaw@gdcproject.org>

gcc/ChangeLog:

	* config.gcc (*linux*): Set rust target_objs, and
	target_has_targetrustm,
	* config/t-linux (linux-rust.o): New rule.
	* config/linux-rust.cc: New file.
---
 gcc/config.gcc           |  2 ++
 gcc/config/linux-rust.cc | 57 ++++++++++++++++++++++++++++++++++++++++
 gcc/config/t-linux       |  4 +++
 3 files changed, 63 insertions(+)
 create mode 100644 gcc/config/linux-rust.cc

diff --git a/gcc/config.gcc b/gcc/config.gcc
index a7a36fccd8d..0c8d756a895 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -944,6 +944,8 @@ case ${target} in
     *-*-*linux*)
       d_target_objs="${d_target_objs} linux-d.o"
       target_has_targetdm=yes
+      rust_target_objs="${rust_target_objs} linux-rust.o"
+      target_has_targetrustm=yes
       ;;
     *-*-kfreebsd*-gnu)
       d_target_objs="${d_target_objs} kfreebsd-d.o"
diff --git a/gcc/config/linux-rust.cc b/gcc/config/linux-rust.cc
new file mode 100644
index 00000000000..3eaa91818ff
--- /dev/null
+++ b/gcc/config/linux-rust.cc
@@ -0,0 +1,57 @@
+/* Linux support needed only by Rust front-end.
+   Copyright (C) 2022 Free Software Foundation, Inc.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#include "config.h"
+#include "system.h"
+#include "coretypes.h"
+#include "tm.h"
+#include "tm_rust.h"
+#include "rust/rust-target.h"
+#include "rust/rust-target-def.h"
+
+/* `-mandroid' is not available as an command-line option.  */
+#ifndef TARGET_ANDROID
+#define TARGET_ANDROID 0
+#endif
+
+/* Implement TARGET_RUST_OS_INFO for Linux targets.  */
+
+static void
+linux_rust_target_os_info (void)
+{
+  rust_add_target_info ("target_family", "unix");
+  rust_add_target_info ("target_vendor", "unknown");
+
+  if (TARGET_ANDROID)
+    rust_add_target_info ("target_os", "android");
+  else
+    rust_add_target_info ("target_os", "linux");
+
+  if (OPTION_GLIBC)
+    rust_add_target_info ("target_env", "gnu");
+  else if (OPTION_MUSL)
+    rust_add_target_info ("target_env", "musl");
+  else if (OPTION_UCLIBC)
+    rust_add_target_info ("target_env", "uclibc");
+  else
+    rust_add_target_info ("target_env", "");
+}
+
+#undef TARGET_RUST_OS_INFO
+#define TARGET_RUST_OS_INFO linux_rust_target_os_info
+
+struct gcc_targetrustm targetrustm = TARGETRUSTM_INITIALIZER;
diff --git a/gcc/config/t-linux b/gcc/config/t-linux
index 03966d5ce96..96593fbf27f 100644
--- a/gcc/config/t-linux
+++ b/gcc/config/t-linux
@@ -23,3 +23,7 @@ linux.o: $(srcdir)/config/linux.cc
 linux-d.o: $(srcdir)/config/linux-d.cc
 	  $(COMPILE) $<
 	  $(POSTCOMPILE)
+
+linux-rust.o: $(srcdir)/config/linux-rust.cc
+	  $(COMPILE) $<
+	  $(POSTCOMPILE)
-- 
2.42.0


^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2023-09-07 13:38 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-09-07 13:36 [PATCH 01/14] rust: Add skeleton support and documentation for targetrustm hooks arthur.cohen
2023-09-07 13:36 ` [PATCH 02/14] rust: Reintroduce TARGET_RUST_CPU_INFO hook arthur.cohen
2023-09-07 13:36 ` [PATCH 03/14] rust: Reintroduce TARGET_RUST_OS_INFO hook arthur.cohen
2023-09-07 13:36 ` [PATCH 04/14] rust: Implement TARGET_RUST_CPU_INFO for i[34567]86-*-* and x86_64-*-* arthur.cohen
2023-09-07 13:36 ` [PATCH 05/14] rust: Implement TARGET_RUST_OS_INFO for *-*-darwin* arthur.cohen
2023-09-07 13:36 ` [PATCH 06/14] rust: Implement TARGET_RUST_OS_INFO for *-*-freebsd* arthur.cohen
2023-09-07 13:36 ` [PATCH 07/14] rust: Implement TARGET_RUST_OS_INFO for *-*-netbsd* arthur.cohen
2023-09-07 13:36 ` [PATCH 08/14] rust: Implement TARGET_RUST_OS_INFO for *-*-openbsd* arthur.cohen
2023-09-07 13:36 ` [PATCH 09/14] rust: Implement TARGET_RUST_OS_INFO for *-*-solaris2* arthur.cohen
2023-09-07 13:36 ` [PATCH 10/14] rust: Implement TARGET_RUST_OS_INFO for *-*-dragonfly* arthur.cohen
2023-09-07 13:36 ` [PATCH 11/14] rust: Implement TARGET_RUST_OS_INFO for *-*-vxworks* arthur.cohen
2023-09-07 13:36 ` [PATCH 12/14] rust: Implement TARGET_RUST_OS_INFO for *-*-fuchsia* arthur.cohen
2023-09-07 13:36 ` [PATCH 13/14] rust: Implement TARGET_RUST_OS_INFO for i[34567]86-*-mingw* and x86_64-*-mingw* arthur.cohen
2023-09-07 13:36 ` [PATCH 14/14] rust: Implement TARGET_RUST_OS_INFO for *-*-*linux* arthur.cohen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).