diff options
-rw-r--r-- | gdb/ChangeLog | 12 | ||||
-rw-r--r-- | gdb/exec.c | 32 | ||||
-rw-r--r-- | gdb/exec.h | 5 | ||||
-rw-r--r-- | gdb/progspace.c | 3 |
4 files changed, 34 insertions, 18 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 93a89a9..c192812 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,15 @@ +2014-06-03 Doug Evans <dje@google.com> + + * exec.c (exec_close_1): Call clear_section_table instead of + resize_section_table. + (clear_section_table): New function. + (resize_section_table): Make static. Rename arg num_added to + adjustment. + * exec.h (clear_section_table): Declare. + (resize_section_table): Delete. + * progspace.c (release_program_space): Call clear_section_table + instead of resize_section_table. + 2014-06-03 Siva Chandra Reddy <sivachandra@google.com> * NEWS (Python Scripting): Add entry about the new xmethods @@ -125,12 +125,7 @@ exec_close_1 (struct target_ops *self) ALL_PSPACES (ss) { set_current_program_space (ss); - - /* Delete all target sections. */ - resize_section_table - (current_target_sections, - -resize_section_table (current_target_sections, 0)); - + clear_section_table (current_target_sections); exec_close (); } @@ -366,15 +361,29 @@ add_to_section_table (bfd *abfd, struct bfd_section *asect, (*table_pp)++; } -int -resize_section_table (struct target_section_table *table, int num_added) +/* See exec.h. */ + +void +clear_section_table (struct target_section_table *table) +{ + xfree (table->sections); + table->sections = table->sections_end = NULL; +} + +/* Resize section table TABLE by ADJUSTMENT. + ADJUSTMENT may be negative, in which case the caller must have already + removed the sections being deleted. + Returns the old size. */ + +static int +resize_section_table (struct target_section_table *table, int adjustment) { int old_count; int new_count; old_count = table->sections_end - table->sections; - new_count = num_added + old_count; + new_count = adjustment + old_count; if (new_count) { @@ -383,10 +392,7 @@ resize_section_table (struct target_section_table *table, int num_added) table->sections_end = table->sections + new_count; } else - { - xfree (table->sections); - table->sections = table->sections_end = NULL; - } + clear_section_table (table); return old_count; } @@ -41,10 +41,9 @@ extern struct target_ops exec_ops; extern int build_section_table (struct bfd *, struct target_section **, struct target_section **); -/* Resize the section table held by TABLE, by NUM_ADDED. Returns the - old size. */ +/* Remove all entries from TABLE. */ -extern int resize_section_table (struct target_section_table *, int); +extern void clear_section_table (struct target_section_table *table); /* Read from mappable read-only sections of BFD executable files. Return TARGET_XFER_OK, if read is successful. Return diff --git a/gdb/progspace.c b/gdb/progspace.c index 88f59f4..a74b6ab 100644 --- a/gdb/progspace.c +++ b/gdb/progspace.c @@ -160,8 +160,7 @@ release_program_space (struct program_space *pspace) free_all_objfiles (); if (!gdbarch_has_shared_address_space (target_gdbarch ())) free_address_space (pspace->aspace); - resize_section_table (&pspace->target_sections, - -resize_section_table (&pspace->target_sections, 0)); + clear_section_table (&pspace->target_sections); clear_program_space_solib_cache (pspace); /* Discard any data modules have associated with the PSPACE. */ program_space_free_data (pspace); |