From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 12376 invoked by alias); 28 Jul 2009 14:51:40 -0000 Received: (qmail 12365 invoked by uid 22791); 28 Jul 2009 14:51:39 -0000 X-SWARE-Spam-Status: No, hits=-2.3 required=5.0 tests=AWL,BAYES_00,SPF_PASS X-Spam-Check-By: sourceware.org Received: from mail.codesourcery.com (HELO mail.codesourcery.com) (65.74.133.4) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 28 Jul 2009 14:51:33 +0000 Received: (qmail 18695 invoked from network); 28 Jul 2009 14:51:31 -0000 Received: from unknown (HELO orlando) (pedro@127.0.0.2) by mail.codesourcery.com with ESMTPA; 28 Jul 2009 14:51:31 -0000 From: Pedro Alves To: gdb-patches@sourceware.org Subject: Re: [patch] Set bfd field in target_section Date: Tue, 28 Jul 2009 15:16:00 -0000 User-Agent: KMail/1.9.10 Cc: Aleksandar Ristovski References: <200907281534.41605.pedro@codesourcery.com> In-Reply-To: <200907281534.41605.pedro@codesourcery.com> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200907281551.29397.pedro@codesourcery.com> X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2009-07/txt/msg00680.txt.bz2 On Tuesday 28 July 2009 15:34:41, Pedro Alves wrote: > On Tuesday 28 July 2009 15:28:33, Aleksandar Ristovski wrote: > > Hello, > > > > I believe this is related to Pedro's patch from 03-Jun-09. I > > didn't see where we set target_section.bfd field - maybe I > > am overlooking something, but in bfd-target, in function > > target_bfd_xclose we will call bfd_close > > (table->sections->bfd); bfd_close doesn't like NULL argument. > > > > Am I missing something, or is this (the patch) missing? > > Doesn't add_to_section_table set the bfd in each new > target section? I think you've got yourself an executable without any ALLOC section, hence the section table ends up empty. I think something like this will fix the problem. I'll give a test spin and apply it. -- Pedro Alves --- gdb/bfd-target.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) Index: src/gdb/bfd-target.c =================================================================== --- src.orig/gdb/bfd-target.c 2009-07-28 15:43:27.000000000 +0100 +++ src/gdb/bfd-target.c 2009-07-28 15:47:33.000000000 +0100 @@ -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");