From e12af5a2d1eda2e448b279ac97eb635b4a29eef1 Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Tue, 28 Jul 2009 15:05:01 +0000 Subject: [PATCH] * bfd-target.c (target_bfd_xclose): Only close the bfd if the section tarble is not empty. (target_bfd_reopen): If the section table ends up empty, close the bfd here. --- gdb/ChangeLog | 7 +++++++ gdb/bfd-target.c | 11 ++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 48743fd..857456f 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,10 @@ +2009-07-28 Pedro Alves + + * bfd-target.c (target_bfd_xclose): Only close the bfd if the + section tarble is not empty. + (target_bfd_reopen): If the section table ends up empty, close the + bfd here. + 2009-07-28 Aleksandar Ristovski * nto-tdep.c (nto_thread_state_str): New array. diff --git a/gdb/bfd-target.c b/gdb/bfd-target.c index ffaa4ff..2b7894e 100644 --- a/gdb/bfd-target.c +++ b/gdb/bfd-target.c @@ -54,7 +54,10 @@ static void target_bfd_xclose (struct target_ops *t, int quitting) { struct target_section_table *table = t->to_data; - if (table->sections) + + /* If the target sections table is empty, the bfd had already been + closed. */ + if (table->sections != table->sections_end) bfd_close (table->sections->bfd); xfree (table->sections); xfree (table); @@ -70,6 +73,12 @@ target_bfd_reopen (struct bfd *bfd) table = XZALLOC (struct target_section_table); build_section_table (bfd, &table->sections, &table->sections_end); + /* No use keeping the bfd open if there are no target sections we + care about. This way, we avoid keeping the bfd pointer stored + somewhere so that target_bfd_xclose could use it. */ + if (table->sections == table->sections_end) + bfd_close (bfd); + t = XZALLOC (struct target_ops); t->to_shortname = "bfd"; t->to_longname = _("BFD backed target"); -- 2.7.4