aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/gdbarch.c13
-rw-r--r--gdb/gdbarch.h4
-rwxr-xr-xgdb/gdbarch.sh21
3 files changed, 38 insertions, 0 deletions
diff --git a/gdb/gdbarch.c b/gdb/gdbarch.c
index f33536d..b23ec91 100644
--- a/gdb/gdbarch.c
+++ b/gdb/gdbarch.c
@@ -357,6 +357,19 @@ gdbarch_alloc (const struct gdbarch_info *info,
}
+/* Free a gdbarch struct. This should never happen in normal
+ operation --- once you've created a gdbarch, you keep it around.
+ However, if an architecture's init function encounters an error
+ building the structure, it may need to clean up a partially
+ constructed gdbarch. */
+void
+gdbarch_free (struct gdbarch *arch)
+{
+ /* At the moment, this is trivial. */
+ free (arch);
+}
+
+
/* Ensure that all values in a GDBARCH are reasonable. */
static void
diff --git a/gdb/gdbarch.h b/gdb/gdbarch.h
index ee695ab..8d37120 100644
--- a/gdb/gdbarch.h
+++ b/gdb/gdbarch.h
@@ -909,6 +909,10 @@ extern struct gdbarch_list *gdbarch_list_lookup_by_info (struct gdbarch_list *ar
extern struct gdbarch *gdbarch_alloc (const struct gdbarch_info *info, struct gdbarch_tdep *tdep);
+/* Helper function. Free a partially-constructed ``struct gdbarch''. */
+extern void gdbarch_free (struct gdbarch *);
+
+
/* Helper function. Force an update of the current architecture. Used
by legacy targets that have added their own target specific
architecture manipulation commands.
diff --git a/gdb/gdbarch.sh b/gdb/gdbarch.sh
index 66e16c5..32b8d94 100755
--- a/gdb/gdbarch.sh
+++ b/gdb/gdbarch.sh
@@ -512,6 +512,10 @@ extern struct gdbarch_list *gdbarch_list_lookup_by_info (struct gdbarch_list *ar
extern struct gdbarch *gdbarch_alloc (const struct gdbarch_info *info, struct gdbarch_tdep *tdep);
+/* Helper function. Free a partially-constructed \`\`struct gdbarch''. */
+extern void gdbarch_free (struct gdbarch *);
+
+
/* Helper function. Force an update of the current architecture. Used
by legacy targets that have added their own target specific
architecture manipulation commands.
@@ -961,6 +965,23 @@ cat <<EOF
}
EOF
+# Free a gdbarch struct.
+echo ""
+echo ""
+cat <<EOF
+/* Free a gdbarch struct. This should never happen in normal
+ operation --- once you've created a gdbarch, you keep it around.
+ However, if an architecture's init function encounters an error
+ building the structure, it may need to clean up a partially
+ constructed gdbarch. */
+void
+gdbarch_free (struct gdbarch *arch)
+{
+ /* At the moment, this is trivial. */
+ free (arch);
+}
+EOF
+
# verify a new architecture
echo ""
echo ""