From patchwork Thu Jan 23 00:57:07 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 37509 Received: (qmail 83265 invoked by alias); 23 Jan 2020 00:57:57 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 81344 invoked by uid 89); 23 Jan 2020 00:57:42 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-20.5 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_STOCKGEN, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS autolearn=ham version=3.3.1 spammy= X-HELO: gateway30.websitewelcome.com Received: from gateway30.websitewelcome.com (HELO gateway30.websitewelcome.com) (192.185.198.26) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 23 Jan 2020 00:57:30 +0000 Received: from cm14.websitewelcome.com (cm14.websitewelcome.com [100.42.49.7]) by gateway30.websitewelcome.com (Postfix) with ESMTP id 79292BEE for ; Wed, 22 Jan 2020 18:57:28 -0600 (CST) Received: from box5379.bluehost.com ([162.241.216.53]) by cmsmtp with SMTP id uQoKigBFQNBC3uQoKiy0C4; Wed, 22 Jan 2020 18:57:28 -0600 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=tromey.com; s=default; h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From: Sender:Reply-To:MIME-Version:Content-Type:Content-Transfer-Encoding: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=sR2jw7aJb4XPFaUhssivZZT+W39tpWwC+nyshQ2KgEM=; b=RWiBjvGwzXpwer/b8DIVvyde69 UWDTkXWg5WnmmnjT/MaoF0lEWSErJmRd/LDuFJVRo/RipGXUjC1WY5xmwCDDwSoNBJzsbxQ5usmuq d29CVdj/nHAExppvQLLetg/nA; Received: from 75-166-123-50.hlrn.qwest.net ([75.166.123.50]:40832 helo=bapiya.Home) by box5379.bluehost.com with esmtpa (Exim 4.92) (envelope-from ) id 1iuQoK-004KqG-AC; Wed, 22 Jan 2020 17:57:28 -0700 From: Tom Tromey To: gdb-patches@sourceware.org Cc: Tom Tromey Subject: [PATCH 35/38] Convert read_address to a method on comp_unit_head Date: Wed, 22 Jan 2020 17:57:07 -0700 Message-Id: <20200123005710.7978-36-tom@tromey.com> In-Reply-To: <20200123005710.7978-1-tom@tromey.com> References: <20200123005710.7978-1-tom@tromey.com> This changes read_address to be a method on comp_unit_head. 2020-01-22 Tom Tromey * dwarf2/read.c (read_address): Move to comp-unit.c. (dwarf2_rnglists_process, dwarf2_ranges_process) (read_attribute_value, dwarf_decode_lines_1) (var_decode_location, decode_locdesc): Update. * dwarf2/comp-unit.c (comp_unit_head::read_address): Move from read.c. Remove "cu" parameter. * dwarf2/comp-unit.h (struct comp_unit_head) : New method. Change-Id: Ibd6c7235f2e4d5fd88c272cfd2c3d3328618cc56 --- gdb/ChangeLog | 11 ++++++ gdb/dwarf2/comp-unit.c | 50 ++++++++++++++++++++++++ gdb/dwarf2/comp-unit.h | 4 ++ gdb/dwarf2/read.c | 87 +++++++++--------------------------------- 4 files changed, 83 insertions(+), 69 deletions(-) diff --git a/gdb/dwarf2/comp-unit.c b/gdb/dwarf2/comp-unit.c index 847a148cbd2..0b6629f14ce 100644 --- a/gdb/dwarf2/comp-unit.c +++ b/gdb/dwarf2/comp-unit.c @@ -221,3 +221,53 @@ read_and_check_comp_unit_head (struct dwarf2_per_objfile *dwarf2_per_objfile, return info_ptr; } + +CORE_ADDR +comp_unit_head::read_address (bfd *abfd, const gdb_byte *buf, + unsigned int *bytes_read) const +{ + CORE_ADDR retval = 0; + + if (signed_addr_p) + { + switch (addr_size) + { + case 2: + retval = bfd_get_signed_16 (abfd, buf); + break; + case 4: + retval = bfd_get_signed_32 (abfd, buf); + break; + case 8: + retval = bfd_get_signed_64 (abfd, buf); + break; + default: + internal_error (__FILE__, __LINE__, + _("read_address: bad switch, signed [in module %s]"), + bfd_get_filename (abfd)); + } + } + else + { + switch (addr_size) + { + case 2: + retval = bfd_get_16 (abfd, buf); + break; + case 4: + retval = bfd_get_32 (abfd, buf); + break; + case 8: + retval = bfd_get_64 (abfd, buf); + break; + default: + internal_error (__FILE__, __LINE__, + _("read_address: bad switch, " + "unsigned [in module %s]"), + bfd_get_filename (abfd)); + } + } + + *bytes_read = addr_size; + return retval; +} diff --git a/gdb/dwarf2/comp-unit.h b/gdb/dwarf2/comp-unit.h index e61b1000b9e..2dd80901b8f 100644 --- a/gdb/dwarf2/comp-unit.h +++ b/gdb/dwarf2/comp-unit.h @@ -89,6 +89,10 @@ struct comp_unit_head *bytes_read = offset_size; return offset; } + + /* Read an address from BUF. BYTES_READ is updated. */ + CORE_ADDR read_address (bfd *abfd, const gdb_byte *buf, + unsigned int *bytes_read) const; }; /* Expected enum dwarf_unit_type for read_comp_unit_head. */ diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c index 7c0d1d21cb6..e47f7443a58 100644 --- a/gdb/dwarf2/read.c +++ b/gdb/dwarf2/read.c @@ -1243,9 +1243,6 @@ static void read_attribute_reprocess (const struct die_reader_specs *reader, static CORE_ADDR read_addr_index (struct dwarf2_cu *cu, unsigned int addr_index); -static CORE_ADDR read_address (bfd *, const gdb_byte *ptr, struct dwarf2_cu *, - unsigned int *); - static LONGEST read_checked_initial_length_and_offset (bfd *, const gdb_byte *, const struct comp_unit_head *, unsigned int *, unsigned int *); @@ -13559,7 +13556,7 @@ dwarf2_rnglists_process (unsigned offset, struct dwarf2_cu *cu, overflow = true; break; } - base = read_address (obfd, buffer, cu, &bytes_read); + base = cu->header.read_address (obfd, buffer, &bytes_read); found_base = 1; buffer += bytes_read; break; @@ -13569,7 +13566,8 @@ dwarf2_rnglists_process (unsigned offset, struct dwarf2_cu *cu, overflow = true; break; } - range_beginning = read_address (obfd, buffer, cu, &bytes_read); + range_beginning = cu->header.read_address (obfd, buffer, + &bytes_read); buffer += bytes_read; range_end = (range_beginning + read_unsigned_leb128 (obfd, buffer, &bytes_read)); @@ -13602,9 +13600,10 @@ dwarf2_rnglists_process (unsigned offset, struct dwarf2_cu *cu, overflow = true; break; } - range_beginning = read_address (obfd, buffer, cu, &bytes_read); + range_beginning = cu->header.read_address (obfd, buffer, + &bytes_read); buffer += bytes_read; - range_end = read_address (obfd, buffer, cu, &bytes_read); + range_end = cu->header.read_address (obfd, buffer, &bytes_read); buffer += bytes_read; break; default: @@ -13707,9 +13706,9 @@ dwarf2_ranges_process (unsigned offset, struct dwarf2_cu *cu, { CORE_ADDR range_beginning, range_end; - range_beginning = read_address (obfd, buffer, cu, &dummy); + range_beginning = cu->header.read_address (obfd, buffer, &dummy); buffer += addr_size; - range_end = read_address (obfd, buffer, cu, &dummy); + range_end = cu->header.read_address (obfd, buffer, &dummy); buffer += addr_size; offset += 2 * addr_size; @@ -18491,7 +18490,8 @@ read_attribute_value (const struct die_reader_specs *reader, { case DW_FORM_ref_addr: if (cu->header.version == 2) - DW_UNSND (attr) = read_address (abfd, info_ptr, cu, &bytes_read); + DW_UNSND (attr) = cu->header.read_address (abfd, info_ptr, + &bytes_read); else DW_UNSND (attr) = cu->header.read_offset (abfd, info_ptr, &bytes_read); @@ -18502,7 +18502,7 @@ read_attribute_value (const struct die_reader_specs *reader, info_ptr += bytes_read; break; case DW_FORM_addr: - DW_ADDR (attr) = read_address (abfd, info_ptr, cu, &bytes_read); + DW_ADDR (attr) = cu->header.read_address (abfd, info_ptr, &bytes_read); DW_ADDR (attr) = gdbarch_adjust_dwarf2_addr (gdbarch, DW_ADDR (attr)); info_ptr += bytes_read; break; @@ -18749,57 +18749,6 @@ read_attribute (const struct die_reader_specs *reader, need_reprocess); } -static CORE_ADDR -read_address (bfd *abfd, const gdb_byte *buf, struct dwarf2_cu *cu, - unsigned int *bytes_read) -{ - struct comp_unit_head *cu_header = &cu->header; - CORE_ADDR retval = 0; - - if (cu_header->signed_addr_p) - { - switch (cu_header->addr_size) - { - case 2: - retval = bfd_get_signed_16 (abfd, buf); - break; - case 4: - retval = bfd_get_signed_32 (abfd, buf); - break; - case 8: - retval = bfd_get_signed_64 (abfd, buf); - break; - default: - internal_error (__FILE__, __LINE__, - _("read_address: bad switch, signed [in module %s]"), - bfd_get_filename (abfd)); - } - } - else - { - switch (cu_header->addr_size) - { - case 2: - retval = bfd_get_16 (abfd, buf); - break; - case 4: - retval = bfd_get_32 (abfd, buf); - break; - case 8: - retval = bfd_get_64 (abfd, buf); - break; - default: - internal_error (__FILE__, __LINE__, - _("read_address: bad switch, " - "unsigned [in module %s]"), - bfd_get_filename (abfd)); - } - } - - *bytes_read = cu_header->addr_size; - return retval; -} - /* Cover function for read_initial_length. Returns the length of the object at BUF, and stores the size of the initial length in *BYTES_READ and stores the size that offsets will be in @@ -20247,7 +20196,7 @@ dwarf_decode_lines_1 (struct line_header *lh, struct dwarf2_cu *cu, case DW_LNE_set_address: { CORE_ADDR address - = read_address (abfd, line_ptr, cu, &bytes_read); + = cu->header.read_address (abfd, line_ptr, &bytes_read); line_ptr += bytes_read; state_machine.check_line_address (cu, line_ptr, @@ -20568,10 +20517,10 @@ var_decode_location (struct attribute *attr, struct symbol *sym, unsigned int dummy; if (DW_BLOCK (attr)->data[0] == DW_OP_addr) - SET_SYMBOL_VALUE_ADDRESS (sym, - read_address (objfile->obfd, - DW_BLOCK (attr)->data + 1, - cu, &dummy)); + SET_SYMBOL_VALUE_ADDRESS + (sym, cu->header.read_address (objfile->obfd, + DW_BLOCK (attr)->data + 1, + &dummy)); else SET_SYMBOL_VALUE_ADDRESS (sym, read_addr_index_from_leb128 (cu, DW_BLOCK (attr)->data + 1, @@ -23037,8 +22986,8 @@ decode_locdesc (struct dwarf_block *blk, struct dwarf2_cu *cu) break; case DW_OP_addr: - stack[++stacki] = read_address (objfile->obfd, &data[i], - cu, &bytes_read); + stack[++stacki] = cu->header.read_address (objfile->obfd, &data[i], + &bytes_read); i += bytes_read; break;