From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-oi1-x243.google.com (mail-oi1-x243.google.com [IPv6:2607:f8b0:4864:20::243]) by sourceware.org (Postfix) with ESMTPS id 559F6385B831 for ; Mon, 23 Mar 2020 16:14:25 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 559F6385B831 Received: by mail-oi1-x243.google.com with SMTP id q204so7455882oia.13 for ; Mon, 23 Mar 2020 09:14:25 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=siN4dGgbL2/W/VZSI91Ro8+rwo8WTlpPjONFafrQAww=; b=dS3GhTHfRRnet6gm0Lu8kIUWXHwQSRZJ2VZYqWRt5Zc7MIY+WUSeVinGzvZoY4iTG3 aW+nDE1Iw4OxKT04+A4heIUF24/MgL7LDB//d8JC+wTfBoeSPaV/+yVhOpzSlFRTip86 GxDa+L22Pss6FUSLTBkKct/CcJIsxpTTrDoDNK+UJzh12LoUKJExJGxdyQppvgxTmaN6 2gABxQZlE+ulK3EaSfKd8ZhbxJ66ja4WZuqwdNSg/R56wysgFLhO1brpE1aBfUSxQsAP c9PhvGC4YGkR2h3wPlLCLBAs+3YESW/0OmmnoFlvC5cLWdjzRO4RMaKrn41c7GNw1v7k SMMg== X-Gm-Message-State: ANhLgQ3Ohik5Ax37xzwYm1EyHcHOT26DFZYE7VolSPIEAa7aVJf0Y8W9 NXkO3ml9Rz8NjaIpSUb/TZhJkfCtRJmqmuImS7tFh7X2 X-Google-Smtp-Source: ADFU+vtJJvh6JyQeO7sk4NwGUqknfRY7XKD5prxZNzEhmh5/7bqQZHgM7yWuLupx70E6DujrgWSgY3dz2Byg/sJKQJA= X-Received: by 2002:aca:4c1:: with SMTP id 184mr82652oie.76.1584980064341; Mon, 23 Mar 2020 09:14:24 -0700 (PDT) MIME-Version: 1.0 References: <20200322184523.28959-1-tom@tromey.com> <20200322184523.28959-5-tom@tromey.com> In-Reply-To: <20200322184523.28959-5-tom@tromey.com> From: Christian Biesinger Date: Mon, 23 Mar 2020 11:13:47 -0500 Message-ID: Subject: Re: [PATCH 04/22] Split dwarf_decode_macros into two overloads To: Tom Tromey Cc: gdb-patches Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-43.7 required=5.0 tests=BAYES_00, DKIMWL_WL_MED, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, ENV_AND_HDR_SPF_MATCH, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, URIBL_CSS, URIBL_CSS_A, USER_IN_DEF_DKIM_WL, USER_IN_DEF_SPF_WL autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 23 Mar 2020 16:14:26 -0000 On Sun, Mar 22, 2020 at 1:45 PM Tom Tromey wrote: > > This splits dwarf_decode_macros into two overloads -- one that's > suitable for splitting into a separate file, and one that finds the > correct section and should remain in dwarf2/read.c. > > gdb/ChangeLog > 2020-03-22 Tom Tromey > > * dwarf2/read.c (dwarf_decode_macros): Split into two overloads. > --- > gdb/ChangeLog | 4 ++ > gdb/dwarf2/read.c | 102 +++++++++++++++++++++++++++------------------- > 2 files changed, 63 insertions(+), 43 deletions(-) > > diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c > index 1410dd48a2f..2d126461c74 100644 > --- a/gdb/dwarf2/read.c > +++ b/gdb/dwarf2/read.c > @@ -23753,56 +23753,18 @@ dwarf_decode_macro_bytes (struct dwarf2_per_objfile *dwarf2_per_objfile, > } > > static void > -dwarf_decode_macros (struct dwarf2_cu *cu, unsigned int offset, > - int section_is_gnu) > +dwarf_decode_macros (struct dwarf2_per_objfile *dwarf2_per_objfile, > + buildsym_compunit *builder, dwarf2_section_info *section, > + struct line_header *lh, unsigned int offset_size, > + unsigned int offset, int section_is_gnu) > { > - struct dwarf2_per_objfile *dwarf2_per_objfile > - = cu->per_cu->dwarf2_per_objfile; > - struct objfile *objfile = dwarf2_per_objfile->objfile; > - struct line_header *lh = cu->line_header; > bfd *abfd; > const gdb_byte *mac_ptr, *mac_end; > struct macro_source_file *current_file = 0; > enum dwarf_macro_record_type macinfo_type; > - unsigned int offset_size = cu->header.offset_size; > const gdb_byte *opcode_definitions[256]; > void **slot; > - struct dwarf2_section_info *section; > - const char *section_name; > > - if (cu->dwo_unit != NULL) > - { > - if (section_is_gnu) > - { > - section = &cu->dwo_unit->dwo_file->sections.macro; > - section_name = ".debug_macro.dwo"; > - } > - else > - { > - section = &cu->dwo_unit->dwo_file->sections.macinfo; > - section_name = ".debug_macinfo.dwo"; > - } > - } > - else > - { > - if (section_is_gnu) > - { > - section = &dwarf2_per_objfile->macro; > - section_name = ".debug_macro"; > - } > - else > - { > - section = &dwarf2_per_objfile->macinfo; > - section_name = ".debug_macinfo"; > - } > - } > - > - section->read (objfile); > - if (section->buffer == NULL) > - { > - complaint (_("missing %s section"), section_name); > - return; > - } > abfd = section->get_bfd_owner (); > > /* First pass: Find the name of the base filename. > @@ -23827,7 +23789,6 @@ dwarf_decode_macros (struct dwarf2_cu *cu, unsigned int offset, > return; > } > > - buildsym_compunit *builder = cu->get_builder (); > do > { > /* Do we at least have room for a macinfo type byte? */ > @@ -23949,6 +23910,61 @@ dwarf_decode_macros (struct dwarf2_cu *cu, unsigned int offset, > include_hash.get ()); > } > > +/* An overload of dwarf_decode_macros that finds the correct section > + and ensures it is read in before calling the other overload. */ > + > +static void > +dwarf_decode_macros (struct dwarf2_cu *cu, unsigned int offset, > + int section_is_gnu) > +{ > + struct dwarf2_per_objfile *dwarf2_per_objfile > + = cu->per_cu->dwarf2_per_objfile; > + struct objfile *objfile = dwarf2_per_objfile->objfile; > + struct line_header *lh = cu->line_header; > + unsigned int offset_size = cu->header.offset_size; > + struct dwarf2_section_info *section; > + const char *section_name; > + > + if (cu->dwo_unit != NULL) Since you're touching these lines, want to change NULL to nullptr? (in a few places) Christian > + { > + if (section_is_gnu) > + { > + section = &cu->dwo_unit->dwo_file->sections.macro; > + section_name = ".debug_macro.dwo"; > + } > + else > + { > + section = &cu->dwo_unit->dwo_file->sections.macinfo; > + section_name = ".debug_macinfo.dwo"; > + } > + } > + else > + { > + if (section_is_gnu) > + { > + section = &dwarf2_per_objfile->macro; > + section_name = ".debug_macro"; > + } > + else > + { > + section = &dwarf2_per_objfile->macinfo; > + section_name = ".debug_macinfo"; > + } > + } > + > + section->read (objfile); > + if (section->buffer == NULL) > + { > + complaint (_("missing %s section"), section_name); > + return; > + } > + > + buildsym_compunit *builder = cu->get_builder (); > + > + dwarf_decode_macros (dwarf2_per_objfile, builder, section, lh, > + offset_size, offset, section_is_gnu); > +} > + > /* Return the .debug_loc section to use for CU. > For DWO files use .debug_loc.dwo. */ > > -- > 2.17.2 >