gdbsupport: move xfree into its own file
authorAndrew Burgess <aburgess@redhat.com>
Mon, 8 Nov 2021 15:17:16 +0000 (15:17 +0000)
committerAndrew Burgess <aburgess@redhat.com>
Tue, 16 Nov 2021 17:45:44 +0000 (17:45 +0000)
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.

gdbsupport/common-utils.cc
gdbsupport/common-utils.h
gdbsupport/gdb-xfree.h [new file with mode: 0644]
gdbsupport/gdb_unique_ptr.h

index 8ce839a54ae72217d35b0965f72b38393dcb4bf2..7a8434538dcfb70f39323d9d1bc6a39802acb558 100644 (file)
@@ -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)
index 224e1f3122268b49e598f76158a5c5e84cc6ed5b..4a75e67079fdce2a40b7373399cc09da9fe933bb 100644 (file)
 /* 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 (file)
index 0000000..2028698
--- /dev/null
@@ -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 */
index 77aecb48e62959077f982bd8e04ffd4e5fed0d49..a4904ead57c39aea0b52ab9e1f87d20dfa9218be 100644 (file)
@@ -21,6 +21,7 @@
 #define COMMON_GDB_UNIQUE_PTR_H
 
 #include <memory>
+#include "gdbsupport/gdb-xfree.h"
 
 namespace gdb
 {