aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog6
-rw-r--r--gdb/dwarfread.c31
2 files changed, 34 insertions, 3 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 37fd73a..b2f631d 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,9 @@
+Fri Feb 16 10:02:34 1996 Fred Fish <fnf@cygnus.com>
+
+ * dwarfread.c (free_utypes): New function.
+ (read_file_scope): Call free_utypes as cleanup, rather than just
+ freeing the utypes pointer.
+
Thu Feb 15 21:40:52 1996 Peter Schauer (pes@regent.e-technik.tu-muenchen.de)
* demangle.c (is_cplus_marker): New function, checks if a
diff --git a/gdb/dwarfread.c b/gdb/dwarfread.c
index 3d034e1..fb0234c 100644
--- a/gdb/dwarfread.c
+++ b/gdb/dwarfread.c
@@ -898,6 +898,33 @@ alloc_utype (die_ref, utypep)
LOCAL FUNCTION
+ free_utypes -- free the utypes array and reset pointer & count
+
+SYNOPSIS
+
+ static void free_utypes (PTR dummy)
+
+DESCRIPTION
+
+ Called via do_cleanups to free the utypes array, reset the pointer to NULL,
+ and set numutypes back to zero. This ensures that the utypes does not get
+ referenced after being freed.
+ */
+
+static void
+free_utypes (dummy)
+ PTR dummy;
+{
+ free (utypes);
+ utypes = NULL;
+ numutypes = 0;
+}
+
+
+/*
+
+LOCAL FUNCTION
+
decode_die_type -- return a type for a specified die
SYNOPSIS
@@ -1935,7 +1962,7 @@ read_file_scope (dip, thisdie, enddie, objfile)
}
numutypes = (enddie - thisdie) / 4;
utypes = (struct type **) xmalloc (numutypes * sizeof (struct type *));
- back_to = make_cleanup (free, utypes);
+ back_to = make_cleanup (free_utypes, NULL);
memset (utypes, 0, numutypes * sizeof (struct type *));
memset (ftypes, 0, FT_NUM_MEMBERS * sizeof (struct type *));
start_symtab (dip -> at_name, dip -> at_comp_dir, dip -> at_low_pc);
@@ -1948,8 +1975,6 @@ read_file_scope (dip, thisdie, enddie, objfile)
symtab -> language = cu_language;
}
do_cleanups (back_to);
- utypes = NULL;
- numutypes = 0;
}
/*