diff options
author | Andrew Burgess <aburgess@redhat.com> | 2021-11-08 15:17:16 +0000 |
---|---|---|
committer | Andrew Burgess <aburgess@redhat.com> | 2021-11-16 17:45:44 +0000 |
commit | 2bb7589ddf61e163f2e414e7033fad56ea17e784 (patch) | |
tree | 8b026bfba1304d7ea6460407593771a75a5c5309 /gdbsupport | |
parent | a6e7fea128b8e1da3ea99dc906df56f85589d335 (diff) | |
download | gdb-2bb7589ddf61e163f2e414e7033fad56ea17e784.zip gdb-2bb7589ddf61e163f2e414e7033fad56ea17e784.tar.gz gdb-2bb7589ddf61e163f2e414e7033fad56ea17e784.tar.bz2 |
gdbsupport: move xfree into its own file
In the next commit I'd like to reference gdb_unique_ptr within the
common-utils.h file. However, this requires that I include
gdb_unique_ptr.h, which requires that xfree be defined.
Interestingly, gdb_unique_ptr.h doesn't actually include anything that
defines xfree, but I was finding that when I added a gdb_unique_ptr.h
include to common-utils.h I was getting a dependency cycle; before my
change xfree was defined when gdb_unique_ptr.h was processed, while
after my change it was not, and this made g++ unhappy.
To break this cycle, I propose to move xfree into its own header file,
gdb-xfree.h, which I'll then include into gdb_unique_ptr.h and
common-utils.cc.
Diffstat (limited to 'gdbsupport')
-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 { |