From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa2.mentor.iphmx.com (esa2.mentor.iphmx.com [68.232.141.98]) by sourceware.org (Postfix) with ESMTPS id 02F2A3858D20; Fri, 20 Jan 2023 20:12:16 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 02F2A3858D20 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=mentor.com X-IronPort-AV: E=Sophos;i="5.97,233,1669104000"; d="scan'208,223";a="95182249" Received: from orw-gwy-01-in.mentorg.com ([192.94.38.165]) by esa2.mentor.iphmx.com with ESMTP; 20 Jan 2023 12:12:15 -0800 IronPort-SDR: MdfcPMPFKNbsbftBIrevfi0PWW1jNvQViGfRcMDuVo3DjNtVldv7JonDumQapgy1FlRR2ljE09 +IGCo1uLz/OP5nFwoonmAnTx9n99rbEpfPM7JfOEWcItkFkBs5mc6rfXODkenGNvPRbFJ8XKjv gEl5iwu6B8UxmNiULXAu+ougA1wcvYhRM+nRVdY3fA1wHpPhC8B1GRoW3O/qcM+2zLEdBMm/Ca x4rsp8WZoUsqr4y4hjn8ZjJ/VgKlpbYIZJD9bypMJOlKN4lMWKbyb3McyXv2CqfG7O8F2mZiv4 cbY= From: Thomas Schwinge To: CC: , Tom de Vries , Jakub Jelinek Subject: Clean up after newlib "nvptx: In offloading execution, map '_exit' to 'abort' [GCC PR85463]" In-Reply-To: <20230119220005.2002779-1-thomas@codesourcery.com> References: <87in8nsgz9.fsf@euler.schwinge.homeip.net> <20230119220005.2002779-1-thomas@codesourcery.com> User-Agent: Notmuch/0.29.3+94~g74c3f1b (https://notmuchmail.org) Emacs/28.2 (x86_64-pc-linux-gnu) Date: Fri, 20 Jan 2023 21:12:05 +0100 Message-ID: <87lelxotii.fsf@euler.schwinge.homeip.net> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Originating-IP: [137.202.0.90] X-ClientProxiedBy: svr-ies-mbx-13.mgc.mentorg.com (139.181.222.13) To svr-ies-mbx-10.mgc.mentorg.com (139.181.222.10) X-Spam-Status: No, score=-11.9 required=5.0 tests=BAYES_00,GIT_PATCH_0,HEADER_FROM_DIFFERENT_DOMAINS,KAM_DMARC_STATUS,KAM_SHORT,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --=-=-= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable 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 > '[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 =3D status; > - for (;;) > - asm ("exit;" ::: "memory"); > + { > + *__exitval_ptr =3D status; > + for (;;) > + asm ("exit;" ::: "memory"); > + } > + else /* offloading */ > + { > + /* Map to 'abort'; see > + '[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 'abo= rt' [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=C3=BC=C3=9Fe Thomas ----------------- Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstra=C3=9Fe 201= , 80634 M=C3=BCnchen; Gesellschaft mit beschr=C3=A4nkter Haftung; Gesch=C3= =A4ftsf=C3=BChrer: Thomas Heurung, Frank Th=C3=BCrauf; Sitz der Gesellschaf= t: M=C3=BCnchen; Registergericht M=C3=BCnchen, HRB 106955 --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename="0001-Clean-up-after-newlib-nvptx-In-offloading-execution-.patch" >From 094b379f461bb4b635327cde26eabc0966159fec Mon Sep 17 00:00:00 2001 From: Thomas Schwinge 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 + + 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 + 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 --=-=-=--