+2015-08-29 Patrick Palka <patrick@parcs.ath.cx>
+
+ * gdbarch.h (gdbarch_obstack_strdup): Declare.
+ * gdbarch.c (gdbarch_obstack_strdup): Define.
+ * gdbtypes.c (arch_type): Use it.
+
2015-08-29 Patrick Palka <patrick@parcs.ath.cx>
* gdbtypes.c (alloc_type_arch): Allocate the type on the given
return data;
}
+/* See gdbarch.h. */
+
+char *
+gdbarch_obstack_strdup (struct gdbarch *gdbarch, const char *string)
+{
+ char *obstring = gdbarch_obstack_zalloc (gdbarch, strlen (string) + 1);
+ strcpy (obstring, string);
+ return obstring;
+}
+
/* Free a gdbarch struct. This should never happen in normal
operation --- once you've created a gdbarch, you keep it around.
#define GDBARCH_OBSTACK_CALLOC(GDBARCH, NR, TYPE) ((TYPE *) gdbarch_obstack_zalloc ((GDBARCH), (NR) * sizeof (TYPE)))
#define GDBARCH_OBSTACK_ZALLOC(GDBARCH, TYPE) ((TYPE *) gdbarch_obstack_zalloc ((GDBARCH), sizeof (TYPE)))
+/* Duplicate STRING, returning an equivalent string that's allocated on the
+ obstack associated with GDBARCH. The string is freed when the corresponding
+ architecture is also freed. */
+
+extern char *gdbarch_obstack_strdup (struct gdbarch *gdbarch, const char *string);
/* Helper function. Force an update of the current architecture.
TYPE_LENGTH (type) = length;
if (name)
- TYPE_NAME (type) = xstrdup (name);
+ TYPE_NAME (type) = gdbarch_obstack_strdup (gdbarch, name);
return type;
}