Hi Philip, Philip Herron <philip.her...@embecosm.com> writes:
> As some of you might know, I have been working on GCC Rust over on > GitHub https://github.com/Rust-GCC/gccrs. As the project is moving > forward and enforcing GCC copyright assignments for contributors, I > would like to create a branch on the GCC git repo to show the intention > to be upstream with GCC someday. I tried building GCC Rust on ppc64le. With the attached patches, "make check-rust" succeeds with: === rust Summary === # of expected passes 2368 # of expected failures 26 Thomas
>From 42099a90a23c31d1af95ceac590938d50a362cf9 Mon Sep 17 00:00:00 2001 From: Thomas Fitzsimmons <fitz...@fitzsim.org> Date: Thu, 27 May 2021 21:53:29 -0400 Subject: [PATCH 1/2] rs6000: Override TARGET_RUST_OS_INFO in linux64.h Both config/rs6000/sysv4.h and config/rs6000/linux64.h define TARGET_RUST_OS_INFO, and both are included in that order in tm.h. This change eliminates the error directive, permitting the more specific definition in linux64.h to override the prior definition in sysv4.h. gcc/ChangeLog: 2021-05-27 Thomas Fitzsimmons <fitz...@fitzsim.org> * config/rs6000/linux64.h: Undefine TARGET_RUST_OS_INFO before defining it. --- gcc/config/rs6000/linux64.h | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/gcc/config/rs6000/linux64.h b/gcc/config/rs6000/linux64.h index fbd8cf0a693..536007ca685 100644 --- a/gcc/config/rs6000/linux64.h +++ b/gcc/config/rs6000/linux64.h @@ -314,9 +314,8 @@ extern int dot_symbols; } \ while (0) -#ifdef TARGET_RUST_OS_INFO -# error "TARGET_RUST_OS_INFO already defined in linux64.h (rs6000) - c++ undefines it and redefines it." -#endif +/* Override less-specific rs6000/sysv4.h definition. */ +#undef TARGET_RUST_OS_INFO #define TARGET_RUST_OS_INFO() \ do { \ GNU_USER_TARGET_RUST_OS_INFO(); \ -- 2.30.0
>From cd4d663c13d27a53ccabeef3d7d8cffa7a5a5365 Mon Sep 17 00:00:00 2001 From: Thomas Fitzsimmons <fitz...@fitzsim.org> Date: Thu, 27 May 2021 21:55:46 -0400 Subject: [PATCH 2/2] rs6000: Recognize GNU Rust when producing epilogue Handling the GNU Rust language when writing a function's epilogue is necessary to avoid an internal compiler error. gcc/ChangeLog: 2021-05-27 Thomas Fitzsimmons <fitz...@fitzsim.org> Mark Wielaard <m...@klomp.org> * config/rs6000/rs6000-logue.c (rs6000_output_function_epilogue): Set language type field to 0 for GNU Rust. Co-Authored-By: Mark Wielaard <m...@klomp.org> --- gcc/config/rs6000/rs6000-logue.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/gcc/config/rs6000/rs6000-logue.c b/gcc/config/rs6000/rs6000-logue.c index b0ac183ceff..7da8db6d232 100644 --- a/gcc/config/rs6000/rs6000-logue.c +++ b/gcc/config/rs6000/rs6000-logue.c @@ -5262,12 +5262,13 @@ rs6000_output_function_epilogue (FILE *file) use language_string. C is 0. Fortran is 1. Ada is 3. Modula-2 is 8. C++ is 9. Java is 13. Objective-C is 14. Objective-C++ isn't assigned - a number, so for now use 9. LTO, Go, D, and JIT aren't assigned - numbers either, so for now use 0. */ + a number, so for now use 9. LTO, Go, D, Rust, and JIT aren't + assigned numbers either, so for now use 0. */ if (lang_GNU_C () || ! strcmp (language_string, "GNU GIMPLE") || ! strcmp (language_string, "GNU Go") || ! strcmp (language_string, "GNU D") + || ! strcmp (language_string, "GNU Rust") || ! strcmp (language_string, "libgccjit")) i = 0; else if (! strcmp (language_string, "GNU F77") -- 2.30.0