diff options
-rw-r--r-- | gdbsupport/common-utils.cc | 1 | ||||
-rw-r--r-- | gdbsupport/common-utils.h | 16 | ||||
-rw-r--r-- | gdbsupport/gdb-xfree.h | 41 | ||||
-rw-r--r-- | gdbsupport/gdb_unique_ptr.h | 1 |
4 files changed, 43 insertions, 16 deletions
diff --git a/gdbsupport/common-utils.cc b/gdbsupport/common-utils.cc index 8ce839a..7a84345 100644 --- a/gdbsupport/common-utils.cc +++ b/gdbsupport/common-utils.cc @@ -21,6 +21,7 @@ #include "common-utils.h" #include "host-defs.h" #include "safe-ctype.h" +#include "gdbsupport/gdb-xfree.h" void * xzalloc (size_t size) diff --git a/gdbsupport/common-utils.h b/gdbsupport/common-utils.h index 224e1f3..4a75e67 100644 --- a/gdbsupport/common-utils.h +++ b/gdbsupport/common-utils.h @@ -52,22 +52,6 @@ /* Like xmalloc, but zero the memory. */ void *xzalloc (size_t); -template <typename T> -static void -xfree (T *ptr) -{ - static_assert (IsFreeable<T>::value, "Trying to use xfree with a non-POD \ -data type. Use operator delete instead."); - - if (ptr != NULL) -#ifdef GNULIB_NAMESPACE - GNULIB_NAMESPACE::free (ptr); /* ARI: free */ -#else - free (ptr); /* ARI: free */ -#endif -} - - /* Like asprintf and vasprintf, but return the string, throw an error if no memory. */ char *xstrprintf (const char *format, ...) ATTRIBUTE_PRINTF (1, 2); diff --git a/gdbsupport/gdb-xfree.h b/gdbsupport/gdb-xfree.h new file mode 100644 index 0000000..2028698 --- /dev/null +++ b/gdbsupport/gdb-xfree.h @@ -0,0 +1,41 @@ +/* Copyright (C) 1986-2021 Free Software Foundation, Inc. + + This file is part of GDB. + + This program 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 of the License, or + (at your option) any later version. + + This program 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. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef GDBSUPPORT_GDB_XFREE_H +#define GDBSUPPORT_GDB_XFREE_H + +#include "gdbsupport/poison.h" + +/* GDB uses this instead of 'free', it detects when it is called on an + invalid type. */ + +template <typename T> +static void +xfree (T *ptr) +{ + static_assert (IsFreeable<T>::value, "Trying to use xfree with a non-POD \ +data type. Use operator delete instead."); + + if (ptr != NULL) +#ifdef GNULIB_NAMESPACE + GNULIB_NAMESPACE::free (ptr); /* ARI: free */ +#else + free (ptr); /* ARI: free */ +#endif +} + +#endif /* GDBSUPPORT_GDB_XFREE_H */ diff --git a/gdbsupport/gdb_unique_ptr.h b/gdbsupport/gdb_unique_ptr.h index 77aecb4..a4904ea 100644 --- a/gdbsupport/gdb_unique_ptr.h +++ b/gdbsupport/gdb_unique_ptr.h @@ -21,6 +21,7 @@ #define COMMON_GDB_UNIQUE_PTR_H #include <memory> +#include "gdbsupport/gdb-xfree.h" namespace gdb { |