Hi! On 2023-12-23T10:17:57+0100, I wrote: > On 2023-12-21T13:58:23+0100, Jakub Jelinek <ja...@redhat.com> wrote: >> On Thu, Dec 21, 2023 at 01:31:19PM +0100, Thomas Schwinge wrote: >>> OK to push, for a start, the attached >>> "GCN, nvptx: Basic '__cxa_guard_{acquire,abort,release}' for C++ static >>> local variables support"? >>> That's now in libgcc not libgomp, so that it's also usable for GCN, nvptx >>> target testing, where we thus see a number of FAIL -> PASS progressions. >> >>> For now, for single-threaded GCN, nvptx target use only; extension for >>> multi-threaded offloading use to follow later. >>> >>> libgcc/ >>> * c++-minimal/README: New. >>> * c++-minimal/guard.c: New. >>> * config/gcn/t-amdgcn (LIB2ADD): Add it. >>> * config/nvptx/t-nvptx (LIB2ADD): Likewise.
>> [...] LGTM, but hope that one day we'll get rid of it again. > > Yep. ..., and here we are; GCN, nvptx now has libstdc++-v3/libsupc++ proper. > Pushed to master branch commit c0bf7ea189ecf252152fe15134f70f576bcd20b2 > "GCN, nvptx: Basic '__cxa_guard_{acquire,abort,release}' for C++ static local > variables support", > see attached. Pushed to trunk branch commit fad9d58e057e5f976cacdca90e2519ed5f0990ad 'Revert "GCN, nvptx: Basic '__cxa_guard_{acquire,abort,release}' for C++ static local variables support"', see attached. Grüße Thomas
>From fad9d58e057e5f976cacdca90e2519ed5f0990ad Mon Sep 17 00:00:00 2001 From: Thomas Schwinge <tho...@codesourcery.com> Date: Sat, 23 Dec 2023 11:01:08 +0100 Subject: [PATCH] Revert "GCN, nvptx: Basic '__cxa_guard_{acquire,abort,release}' for C++ static local variables support" GCN, nvptx now has libstdc++-v3/libsupc++ proper. This reverts commit c0bf7ea189ecf252152fe15134f70f576bcd20b2. --- libgcc/c++-minimal/README | 2 - libgcc/c++-minimal/guard.c | 97 ------------------------------------- libgcc/config/gcn/t-amdgcn | 3 -- libgcc/config/nvptx/t-nvptx | 3 -- 4 files changed, 105 deletions(-) delete mode 100644 libgcc/c++-minimal/README delete mode 100644 libgcc/c++-minimal/guard.c diff --git a/libgcc/c++-minimal/README b/libgcc/c++-minimal/README deleted file mode 100644 index 832f1265f7e..00000000000 --- a/libgcc/c++-minimal/README +++ /dev/null @@ -1,2 +0,0 @@ -Minimal hacked-up version of some C++ support for offload devices, until we -have libstdc++-v3/libsupc++ proper. diff --git a/libgcc/c++-minimal/guard.c b/libgcc/c++-minimal/guard.c deleted file mode 100644 index 98ac288c794..00000000000 --- a/libgcc/c++-minimal/guard.c +++ /dev/null @@ -1,97 +0,0 @@ -/* 'libstdc++-v3/libsupc++/guard.cc' for offload devices, until we have - libstdc++-v3/libsupc++ proper. - - Copyright (C) 2002-2025 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. - -Under Section 7 of GPL version 3, you are granted additional -permissions described in the GCC Runtime Library Exception, version -3.1, as published by the Free Software Foundation. - -You should have received a copy of the GNU General Public License and -a copy of the GCC Runtime Library Exception along with this program; -see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -<http://www.gnu.org/licenses/>. */ - -#if defined __AMDGCN__ -#elif defined __nvptx__ -#else -# error not ported -#endif - -#include "../../libstdc++-v3/config/cpu/generic/cxxabi_tweaks.h" - -/* Copy'n'paste/edit from 'libstdc++-v3/libsupc++/cxxabi.h'. */ - -int -__cxa_guard_acquire(__guard*); - -void -__cxa_guard_release(__guard*); - -void -__cxa_guard_abort(__guard*); - -/* Copy'n'paste/edit from 'libstdc++-v3/libsupc++/guard.cc'. */ - -#undef _GLIBCXX_GUARD_TEST_AND_ACQUIRE -#undef _GLIBCXX_GUARD_SET_AND_RELEASE -#define _GLIBCXX_GUARD_SET_AND_RELEASE(G) _GLIBCXX_GUARD_SET (G) - -static inline int -init_in_progress_flag(__guard* g) -{ return ((char *)g)[1]; } - -static inline void -set_init_in_progress_flag(__guard* g, int v) -{ ((char *)g)[1] = v; } - -static inline void -throw_recursive_init_exception(void) -{ - // Use __builtin_trap so we don't require abort(). - __builtin_trap(); -} - -// acquire() is a helper function used to acquire guard if thread support is -// not compiled in or is compiled in but not enabled at run-time. -static int -acquire(__guard *g) -{ - // Quit if the object is already initialized. - if (_GLIBCXX_GUARD_TEST(g)) - return 0; - - if (init_in_progress_flag(g)) - throw_recursive_init_exception(); - - set_init_in_progress_flag(g, 1); - return 1; -} - -int __cxa_guard_acquire (__guard *g) -{ - return acquire (g); -} - -void __cxa_guard_abort (__guard *g) -{ - set_init_in_progress_flag(g, 0); -} - -void __cxa_guard_release (__guard *g) -{ - set_init_in_progress_flag(g, 0); - _GLIBCXX_GUARD_SET_AND_RELEASE (g); -} diff --git a/libgcc/config/gcn/t-amdgcn b/libgcc/config/gcn/t-amdgcn index b00adc72bad..d1d9a4f92b5 100644 --- a/libgcc/config/gcn/t-amdgcn +++ b/libgcc/config/gcn/t-amdgcn @@ -8,9 +8,6 @@ LIB2ADD += $(srcdir)/config/gcn/atomic.c \ $(srcdir)/config/gcn/lib2-bswapti2.c \ $(srcdir)/config/gcn/unwind-gcn.c -# Until we have libstdc++-v3/libsupc++ proper. -LIB2ADD += $(srcdir)/c++-minimal/guard.c - LIB2ADDEH= LIB2FUNCS_EXCLUDE=__main diff --git a/libgcc/config/nvptx/t-nvptx b/libgcc/config/nvptx/t-nvptx index 1ff574c2982..f295898d69f 100644 --- a/libgcc/config/nvptx/t-nvptx +++ b/libgcc/config/nvptx/t-nvptx @@ -3,9 +3,6 @@ LIB2ADD=$(srcdir)/config/nvptx/reduction.c \ $(srcdir)/config/nvptx/atomic.c \ $(srcdir)/config/nvptx/unwind-nvptx.c -# Until we have libstdc++-v3/libsupc++ proper. -LIB2ADD += $(srcdir)/c++-minimal/guard.c - LIB2ADDEH= LIB2FUNCS_EXCLUDE= -- 2.34.1