From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 73386 invoked by alias); 9 Feb 2020 23:56:10 -0000 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 Received: (qmail 73276 invoked by uid 89); 9 Feb 2020 23:56:10 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-29.4 required=5.0 tests=AWL,BAYES_00,ENV_AND_HDR_SPF_MATCH,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,HTML_MESSAGE,RCVD_IN_DNSWL_NONE,SPF_PASS,USER_IN_DEF_SPF_WL autolearn=ham version=3.3.1 spammy=objfiles, H*c:alternative, HX-HELO:sk:mail-ot X-HELO: mail-ot1-f66.google.com Received: from mail-ot1-f66.google.com (HELO mail-ot1-f66.google.com) (209.85.210.66) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sun, 09 Feb 2020 23:56:07 +0000 Received: by mail-ot1-f66.google.com with SMTP id 59so4616646otp.12 for ; Sun, 09 Feb 2020 15:56:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=HM2XU0saauilh969ilgtnSTyjHZOFIF4OzCUIwOEaY8=; b=EKLT7q54UwtD7JAEeoU2uhqZ3404+UVy5fU3hkZnRgvDt/7/80fhh73wbbJ3quA3QV r/OZfrsit2NXp3J3dH4ATavxKlERwkXd0tW7rZtk5+VizWGkuXP9ick3YIoafN9ok+si 1uVKij7qQS1b3e2bOuDLc9+qI72o20MDJ0NF5YLpkw02Ws3HkuwrpwwSsk5naOCVuwSu rVZbeAHeSHtIjK6D4grVpSi5bW7cyjuzWetJMcZqG6mRNBTBFVWBzhE/CE1OMuVzXTcn QkAgSF9LIE12ypCSkEs4UqYA3CRorjYL4KymHVfzuzidncnLcgQR5hoAQLM0x5pr4dw1 u5cA== MIME-Version: 1.0 References: <20200208152758.29385-1-tom@tromey.com> <20200208152758.29385-5-tom@tromey.com> In-Reply-To: <20200208152758.29385-5-tom@tromey.com> From: "Christian Biesinger via gdb-patches" Reply-To: Christian Biesinger Date: Sun, 09 Feb 2020 23:56:00 -0000 Message-ID: Subject: Re: [PATCH 4/8] Store the comp_unit instead of the FDE table To: Tom Tromey Cc: gdb-patches Content-Type: text/plain; charset="UTF-8" X-IsSubscribed: yes X-SW-Source: 2020-02/txt/msg00265.txt.bz2 On Sat, Feb 8, 2020, 10:28 Tom Tromey wrote: > This changes the DWARF frame code to store the comp_unit on the > objfile, rather than storing the FDE table. It also changes the > comp_unit to be heap-allocated using "new". > > This change makes it simpler for a later patch to add a field to the > comp_unit, and to have deallaction work properly. This in turn is > important for making the frame data be independent of the objfile. > > gdb/ChangeLog > 2020-02-08 Tom Tromey > > * dwarf2/frame.c (struct comp_unit): Add initializers. > (dwarf2_frame_objfile_data): Store a comp_unit. > (dwarf2_frame_find_fde): Update. > (dwarf2_build_frame_info): Use "new". > > Change-Id: Id339892824caf47e7909ed5ee7e2f0556d645dba > --- > gdb/ChangeLog | 7 +++++++ > gdb/dwarf2/frame.c | 43 ++++++++++++++++++++----------------------- > 2 files changed, 27 insertions(+), 23 deletions(-) > > diff --git a/gdb/dwarf2/frame.c b/gdb/dwarf2/frame.c > index 6d87e598345..0e74b8e7e68 100644 > --- a/gdb/dwarf2/frame.c > +++ b/gdb/dwarf2/frame.c > @@ -137,24 +137,27 @@ typedef std::vector dwarf2_fde_table; > struct comp_unit > { > /* Keep the bfd convenient. */ > - bfd *abfd; > + bfd *abfd = nullptr; > > - struct objfile *objfile; > + struct objfile *objfile = nullptr; > > /* Pointer to the .debug_frame section loaded into memory. */ > - const gdb_byte *dwarf_frame_buffer; > + const gdb_byte *dwarf_frame_buffer = nullptr; > > /* Length of the loaded .debug_frame section. */ > - bfd_size_type dwarf_frame_size; > + bfd_size_type dwarf_frame_size = 0; > > /* Pointer to the .debug_frame section. */ > - asection *dwarf_frame_section; > + asection *dwarf_frame_section = nullptr; > > /* Base for DW_EH_PE_datarel encodings. */ > - bfd_vma dbase; > + bfd_vma dbase = 0; > > /* Base for DW_EH_PE_textrel encodings. */ > - bfd_vma tbase; > + bfd_vma tbase = 0; > + > + /* The FDE table. */ > + dwarf2_fde_table fde_table; > }; > > static struct dwarf2_fde *dwarf2_frame_find_fde (CORE_ADDR *pc, > @@ -1467,7 +1470,7 @@ dwarf2_frame_cfa (struct frame_info *this_frame) > return get_frame_base (this_frame); > } > > -const struct objfile_key dwarf2_frame_objfile_data; > +const struct objfile_key dwarf2_frame_objfile_data; > > > > @@ -1630,18 +1633,18 @@ dwarf2_frame_find_fde (CORE_ADDR *pc, CORE_ADDR > *out_offset) > { > for (objfile *objfile : current_program_space->objfiles ()) > { > - dwarf2_fde_table *fde_table; > CORE_ADDR offset; > CORE_ADDR seek_pc; > > - fde_table = dwarf2_frame_objfile_data.get (objfile); > - if (fde_table == NULL) > + comp_unit *unit = dwarf2_frame_objfile_data.get (objfile); > + if (unit == NULL) > { > dwarf2_build_frame_info (objfile); > - fde_table = dwarf2_frame_objfile_data.get (objfile); > + unit = dwarf2_frame_objfile_data.get (objfile); > } > - gdb_assert (fde_table != NULL); > + gdb_assert (unit != NULL); > > + dwarf2_fde_table *fde_table = &unit->fde_table; > if (fde_table->empty ()) > continue; > > @@ -2120,14 +2123,11 @@ dwarf2_build_frame_info (struct objfile *objfile) > const gdb_byte *frame_ptr; > dwarf2_cie_table cie_table; > dwarf2_fde_table fde_table; > - dwarf2_fde_table *fde_table2; > > /* Build a minimal decoding of the DWARF2 compilation unit. */ > - unit = XOBNEW (&objfile->objfile_obstack, comp_unit); > + unit = new comp_unit; > Move the declaration here? unit->abfd = objfile->obfd; > unit->objfile = objfile; > These two could be constructor arguments? - unit->dbase = 0; > - unit->tbase = 0; > > if (objfile->separate_debug_objfile_backlink == NULL) > { > @@ -2202,9 +2202,6 @@ dwarf2_build_frame_info (struct objfile *objfile) > } > } > > - /* Copy fde_table to obstack: it is needed at runtime. */ > - fde_table2 = new dwarf2_fde_table; > - > if (!fde_table.empty ()) > { > struct dwarf2_fde *fde_prev = NULL; > @@ -2249,13 +2246,13 @@ dwarf2_build_frame_info (struct objfile *objfile) > && fde_prev->initial_location == fde->initial_location) > continue; > > - fde_table2->push_back (fde); > + unit->fde_table.push_back (fde); > fde_prev = fde; > } > - fde_table2->shrink_to_fit (); > + unit->fde_table.shrink_to_fit (); > } > > - dwarf2_frame_objfile_data.set (objfile, fde_table2); > + dwarf2_frame_objfile_data.set (objfile, unit); > } > > /* Handle 'maintenance show dwarf unwinders'. */ > -- > 2.17.2 > >