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/gdb-xfree.h | |
parent | a6e7fea128b8e1da3ea99dc906df56f85589d335 (diff) | |
download | binutils-2bb7589ddf61e163f2e414e7033fad56ea17e784.zip binutils-2bb7589ddf61e163f2e414e7033fad56ea17e784.tar.gz binutils-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/gdb-xfree.h')
-rw-r--r-- | gdbsupport/gdb-xfree.h | 41 |
1 files changed, 41 insertions, 0 deletions
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 */ |