From: Thomas Schwinge <thomas@codesourcery.com>
To: <gcc-patches@gcc.gnu.org>
Cc: <fortran@gcc.gnu.org>, Tom de Vries <tdevries@suse.de>,
Jakub Jelinek <jakub@redhat.com>
Subject: Clean up after newlib "nvptx: In offloading execution, map '_exit' to 'abort' [GCC PR85463]"
Date: Fri, 20 Jan 2023 21:12:05 +0100 [thread overview]
Message-ID: <87lelxotii.fsf@euler.schwinge.homeip.net> (raw)
In-Reply-To: <20230119220005.2002779-1-thomas@codesourcery.com>
[-- Attachment #1: Type: text/plain, Size: 1792 bytes --]
Hi!
Re the newlib commit 05a2d7a8b3277b469e7cb121115bba398adc8559
"nvptx: In offloading execution, map '_exit' to 'abort' [GCC PR85463]"
that I've just pushes to newlib main branch:
On 2023-01-19T23:00:05+0100, I wrote:
> This is still not properly resolving <https://gcc.gnu.org/PR85463>
> '[nvptx] "exit" in offloaded region doesn't terminate process', but is
> one step into that direction, and allows for simplifying some GCC code.
> --- a/newlib/libc/machine/nvptx/_exit.c
> +++ b/newlib/libc/machine/nvptx/_exit.c
> @@ -26,7 +27,15 @@ void __attribute__((noreturn))
> _exit (int status)
> {
> if (__exitval_ptr)
> - *__exitval_ptr = status;
> - for (;;)
> - asm ("exit;" ::: "memory");
> + {
> + *__exitval_ptr = status;
> + for (;;)
> + asm ("exit;" ::: "memory");
> + }
> + else /* offloading */
> + {
> + /* Map to 'abort'; see <https://gcc.gnu.org/PR85463>
> + '[nvptx] "exit" in offloaded region doesn't terminate process'. */
> + abort ();
> + }
> }
That has put "the PR85463 stuff" into the one central place, and allows
for simplifying GCC as per the attached
'Clean up after newlib "nvptx: In offloading execution, map '_exit' to 'abort' [GCC PR85463]"',
which I've just pushed to GCC devel/omp/gcc-12 branch in
commit 094b379f461bb4b635327cde26eabc0966159fec, and intend to push to
GCC master branch once the latter depends on updated newlib for other
(functional) reasons.
Grüße
Thomas
-----------------
Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstraße 201, 80634 München; Gesellschaft mit beschränkter Haftung; Geschäftsführer: Thomas Heurung, Frank Thürauf; Sitz der Gesellschaft: München; Registergericht München, HRB 106955
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-Clean-up-after-newlib-nvptx-In-offloading-execution-.patch --]
[-- Type: text/x-diff, Size: 9588 bytes --]
From 094b379f461bb4b635327cde26eabc0966159fec Mon Sep 17 00:00:00 2001
From: Thomas Schwinge <thomas@codesourcery.com>
Date: Thu, 19 Jan 2023 20:25:45 +0100
Subject: [PATCH] Clean up after newlib "nvptx: In offloading execution, map
'_exit' to 'abort' [GCC PR85463]"
PR target/85463
libgfortran/
* runtime/minimal.c [__nvptx__] (exit): Don't override.
libgomp/
* config/nvptx/error.c (exit): Don't override.
* testsuite/libgomp.oacc-fortran/error_stop-1.f: Update.
* testsuite/libgomp.oacc-fortran/error_stop-2.f: Likewise.
* testsuite/libgomp.oacc-fortran/error_stop-3.f: Likewise.
* testsuite/libgomp.oacc-fortran/stop-1.f: Likewise.
* testsuite/libgomp.oacc-fortran/stop-2.f: Likewise.
* testsuite/libgomp.oacc-fortran/stop-3.f: Likewise.
---
libgfortran/ChangeLog.omp | 4 ++++
libgfortran/runtime/minimal.c | 8 --------
libgomp/ChangeLog.omp | 9 +++++++++
libgomp/config/nvptx/error.c | 7 -------
.../testsuite/libgomp.oacc-fortran/error_stop-1.f | 8 +++++---
.../testsuite/libgomp.oacc-fortran/error_stop-2.f | 8 +++++---
.../testsuite/libgomp.oacc-fortran/error_stop-3.f | 8 +++++---
libgomp/testsuite/libgomp.oacc-fortran/stop-1.f | 13 +++++++++----
libgomp/testsuite/libgomp.oacc-fortran/stop-2.f | 6 +++++-
libgomp/testsuite/libgomp.oacc-fortran/stop-3.f | 12 ++++++++----
10 files changed, 50 insertions(+), 33 deletions(-)
create mode 100644 libgfortran/ChangeLog.omp
diff --git a/libgfortran/ChangeLog.omp b/libgfortran/ChangeLog.omp
new file mode 100644
index 00000000000..b08c264daf9
--- /dev/null
+++ b/libgfortran/ChangeLog.omp
@@ -0,0 +1,4 @@
+2023-01-20 Thomas Schwinge <thomas@codesourcery.com>
+
+ PR target/85463
+ * runtime/minimal.c [__nvptx__] (exit): Don't override.
diff --git a/libgfortran/runtime/minimal.c b/libgfortran/runtime/minimal.c
index 326ff822ca7..5af2bada2f6 100644
--- a/libgfortran/runtime/minimal.c
+++ b/libgfortran/runtime/minimal.c
@@ -31,14 +31,6 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#endif
-#if __nvptx__
-/* Map "exit" to "abort"; see PR85463 '[nvptx] "exit" in offloaded region
- doesn't terminate process'. */
-# undef exit
-# define exit(status) do { (void) (status); abort (); } while (0)
-#endif
-
-
#if __nvptx__
/* 'printf' is all we have. */
# undef estr_vprintf
diff --git a/libgomp/ChangeLog.omp b/libgomp/ChangeLog.omp
index 134d450f44a..33aa4b01350 100644
--- a/libgomp/ChangeLog.omp
+++ b/libgomp/ChangeLog.omp
@@ -1,5 +1,14 @@
2023-01-20 Thomas Schwinge <thomas@codesourcery.com>
+ PR target/85463
+ * config/nvptx/error.c (exit): Don't override.
+ * testsuite/libgomp.oacc-fortran/error_stop-1.f: Update.
+ * testsuite/libgomp.oacc-fortran/error_stop-2.f: Likewise.
+ * testsuite/libgomp.oacc-fortran/error_stop-3.f: Likewise.
+ * testsuite/libgomp.oacc-fortran/stop-1.f: Likewise.
+ * testsuite/libgomp.oacc-fortran/stop-2.f: Likewise.
+ * testsuite/libgomp.oacc-fortran/stop-3.f: Likewise.
+
* testsuite/libgomp.c/simd-math-1.c: Fix configuration, again.
* testsuite/libgomp.oacc-c-c++-common/abort-3.c: Force
diff --git a/libgomp/config/nvptx/error.c b/libgomp/config/nvptx/error.c
index ab99130ed4a..1756eaeee53 100644
--- a/libgomp/config/nvptx/error.c
+++ b/libgomp/config/nvptx/error.c
@@ -58,11 +58,4 @@
#endif
-/* The 'exit (EXIT_FAILURE);' of an Fortran (only, huh?) OpenMP 'error'
- directive with 'severity (fatal)' causes a hang, so 'abort' instead of
- 'exit'. */
-#undef exit
-#define exit(status) abort ()
-
-
#include "../../error.c"
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/error_stop-1.f b/libgomp/testsuite/libgomp.oacc-fortran/error_stop-1.f
index de727749a53..3918d6853f6 100644
--- a/libgomp/testsuite/libgomp.oacc-fortran/error_stop-1.f
+++ b/libgomp/testsuite/libgomp.oacc-fortran/error_stop-1.f
@@ -16,14 +16,16 @@
END PROGRAM MAIN
! { dg-output "CheCKpOInT(\n|\r\n|\r)+" }
+
! { dg-output "ERROR STOP (\n|\r\n|\r)+" }
!
! In gfortran's main program, libfortran's set_options is called - which sets
! compiler_options.backtrace = 1 by default. For an offload libgfortran, this
! is never called and, hence, "Error termination." is never printed. Thus:
! { dg-output "Error termination.*" { target { ! { openacc_nvidia_accel_selected || openacc_radeon_accel_selected } } } }
-!
-! PR85463:
+
+! PR85463. The 'exit' implementation used with nvptx
+! offloading is a little bit different.
! { dg-output "libgomp: cuStreamSynchronize error.*" { target openacc_nvidia_accel_selected } }
-!
+
! { dg-shouldfail "" }
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/error_stop-2.f b/libgomp/testsuite/libgomp.oacc-fortran/error_stop-2.f
index 475c9cb5850..5951e8cbe64 100644
--- a/libgomp/testsuite/libgomp.oacc-fortran/error_stop-2.f
+++ b/libgomp/testsuite/libgomp.oacc-fortran/error_stop-2.f
@@ -16,14 +16,16 @@
END PROGRAM MAIN
! { dg-output "CheCKpOInT(\n|\r\n|\r)+" }
+
! { dg-output "ERROR STOP 35(\n|\r\n|\r)+" }
!
! In gfortran's main program, libfortran's set_options is called - which sets
! compiler_options.backtrace = 1 by default. For an offload libgfortran, this
! is never called and, hence, "Error termination." is never printed. Thus:
! { dg-output "Error termination.*" { target { ! { openacc_nvidia_accel_selected || openacc_radeon_accel_selected } } } }
-!
-! PR85463:
+
+! PR85463. The 'exit' implementation used with nvptx
+! offloading is a little bit different.
! { dg-output "libgomp: cuStreamSynchronize error.*" { target openacc_nvidia_accel_selected } }
-!
+
! { dg-shouldfail "" }
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/error_stop-3.f b/libgomp/testsuite/libgomp.oacc-fortran/error_stop-3.f
index ab63444ce34..15e02d8b744 100644
--- a/libgomp/testsuite/libgomp.oacc-fortran/error_stop-3.f
+++ b/libgomp/testsuite/libgomp.oacc-fortran/error_stop-3.f
@@ -16,14 +16,16 @@
END PROGRAM MAIN
! { dg-output "CheCKpOInT(\n|\r\n|\r)+" }
+
! { dg-output "ERROR STOP SiGN(\n|\r\n|\r)+" }
!
! In gfortran's main program, libfortran's set_options is called - which sets
! compiler_options.backtrace = 1 by default. For an offload libgfortran, this
! is never called and, hence, "Error termination." is never printed. Thus:
! { dg-output "Error termination.*" { target { ! { openacc_nvidia_accel_selected || openacc_radeon_accel_selected } } } }
-!
-! PR85463:
+
+! PR85463. The 'exit' implementation used with nvptx
+! offloading is a little bit different.
! { dg-output "libgomp: cuStreamSynchronize error.*" { target openacc_nvidia_accel_selected } }
-!
+
! { dg-shouldfail "" }
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/stop-1.f b/libgomp/testsuite/libgomp.oacc-fortran/stop-1.f
index 2c00d2e5bf8..590b3c97da4 100644
--- a/libgomp/testsuite/libgomp.oacc-fortran/stop-1.f
+++ b/libgomp/testsuite/libgomp.oacc-fortran/stop-1.f
@@ -16,11 +16,16 @@
END PROGRAM MAIN
! { dg-output "CheCKpOInT(\n|\r\n|\r)+" }
-! PR85463. The "minimal" libgfortran implementation used with nvptx
+
+! { dg-output "" }
+!
+! PR85463. The 'exit' implementation used with nvptx
! offloading is a little bit different.
! { dg-output "libgomp: cuStreamSynchronize error.*" { target openacc_nvidia_accel_selected } }
+
! { dg-output "$" }
+
! PR85463. STOP with code zero (as implied here) should actually
-! terminate the process normally, but doesn't in the "minimal"
-! libgfortran implementation used with nvptx offloading.
-! { dg-shouldfail "" { openacc_nvidia_accel_selected } }
+! terminate the process normally, but doesn't with the 'exit'
+! implementation used with nvptx offloading.
+! { dg-shouldfail PR85463 { openacc_nvidia_accel_selected } }
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/stop-2.f b/libgomp/testsuite/libgomp.oacc-fortran/stop-2.f
index adade54557c..fe7ee37813a 100644
--- a/libgomp/testsuite/libgomp.oacc-fortran/stop-2.f
+++ b/libgomp/testsuite/libgomp.oacc-fortran/stop-2.f
@@ -16,9 +16,13 @@
END PROGRAM MAIN
! { dg-output "CheCKpOInT(\n|\r\n|\r)+" }
+
! { dg-output "STOP 35(\n|\r\n|\r)+" }
-! PR85463. The "minimal" libgfortran implementation used with nvptx
+!
+! PR85463. The 'exit' implementation used with nvptx
! offloading is a little bit different.
! { dg-output "libgomp: cuStreamSynchronize error.*" { target openacc_nvidia_accel_selected } }
+
! { dg-output "$" }
+
! { dg-shouldfail "" }
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/stop-3.f b/libgomp/testsuite/libgomp.oacc-fortran/stop-3.f
index 157e369d4e7..b28989895b5 100644
--- a/libgomp/testsuite/libgomp.oacc-fortran/stop-3.f
+++ b/libgomp/testsuite/libgomp.oacc-fortran/stop-3.f
@@ -16,12 +16,16 @@
END PROGRAM MAIN
! { dg-output "CheCKpOInT(\n|\r\n|\r)+" }
+
! { dg-output "STOP SiGN(\n|\r\n|\r)+" }
-! PR85463. The "minimal" libgfortran implementation used with nvptx
+!
+! PR85463. The 'exit' implementation used with nvptx
! offloading is a little bit different.
! { dg-output "libgomp: cuStreamSynchronize error.*" { target openacc_nvidia_accel_selected } }
+
! { dg-output "$" }
+
! PR85463. STOP with code zero (as implied here) should actually
-! terminate the process normally, but doesn't in the "minimal"
-! libgfortran implementation used with nvptx offloading.
-! { dg-shouldfail "" { openacc_nvidia_accel_selected } }
+! terminate the process normally, but doesn't with the 'exit'
+! implementation used with nvptx offloading.
+! { dg-shouldfail PR85463 { openacc_nvidia_accel_selected } }
--
2.25.1
prev parent reply other threads:[~2023-01-20 20:12 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-04-04 9:30 [patch, libfortran, committed] Implement stop_numeric for minimal targets Thomas König
2018-04-19 9:06 ` PR85463 '[nvptx] "exit" in offloaded region doesn't terminate process' (was: [patch, libfortran, committed] Implement stop_numeric for minimal targets) Thomas Schwinge
2018-04-19 9:36 ` Jakub Jelinek
2018-04-19 9:19 ` Thomas Schwinge
2018-04-19 9:25 ` Jakub Jelinek
2018-04-19 9:36 ` Thomas Schwinge
2018-04-19 11:32 ` Thomas König
2018-04-19 11:59 ` Thomas Schwinge
2018-04-19 17:59 ` PR85463 '[nvptx] "exit" in offloaded region doesn't terminate process' Thomas König
2018-04-25 13:56 ` PR85463 '[nvptx] "exit" in offloaded region doesn't terminate process' (was: [patch, libfortran, committed] Implement stop_numeric for minimal targets) Martin Jambor
2018-04-26 10:47 ` PR85463 '[nvptx] "exit" in offloaded region doesn't terminate process' Thomas Schwinge
2018-04-26 12:39 ` Martin Jambor
[not found] ` <20230119220005.2002779-1-thomas@codesourcery.com>
2023-01-20 20:12 ` Thomas Schwinge [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87lelxotii.fsf@euler.schwinge.homeip.net \
--to=thomas@codesourcery.com \
--cc=fortran@gcc.gnu.org \
--cc=gcc-patches@gcc.gnu.org \
--cc=jakub@redhat.com \
--cc=tdevries@suse.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).