diff options
Diffstat (limited to 'libgcc/c++-minimal/guard.c')
-rw-r--r-- | libgcc/c++-minimal/guard.c | 97 |
1 files changed, 0 insertions, 97 deletions
diff --git a/libgcc/c++-minimal/guard.c b/libgcc/c++-minimal/guard.c deleted file mode 100644 index 02c67bc..0000000 --- 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-2024 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); -} |