From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by sourceware.org (Postfix) with ESMTPS id D55CE3850864 for ; Wed, 15 Jun 2022 09:04:25 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org D55CE3850864 Received: from mail-wm1-f70.google.com (mail-wm1-f70.google.com [209.85.128.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-583-wHZeYUn-N4KCzbew5tr-yA-1; Wed, 15 Jun 2022 05:04:24 -0400 X-MC-Unique: wHZeYUn-N4KCzbew5tr-yA-1 Received: by mail-wm1-f70.google.com with SMTP id o2-20020a05600c510200b0039747b0216fso982890wms.0 for ; Wed, 15 Jun 2022 02:04:24 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=pnBdMght+IK0tnk0vwrA9We/7p8UWECqCpT5SDqlcC0=; b=uLTR8Jd0b+vMdZjaYS7CWtb5iv5bBUtD6yrR6iNWwtEUxG0W0IVGoywEJbWJWKyv5v wRFOk4q7nI553Qms9+z/ZTjyLxZgrYbxTBJ4SbrJZDCWA7tK1jQm81ExmZPpvOguyx0r h/5kt4XHQHA9wLsbiqn53xP3b+wG7nW/mW1nNog/BS2xxsgl7D4yLLyTm1HPpdsBG55E Q6Ygpvu+kRkcdrRSQwmj0e0CMAaYUERPLUinhWOgp4YPE1JxZ+zlpeztSWHU10fj+4lb hqcoSwDXKRy+B8ytA+fPmVJfRG1FsP6b+H1TEs9/xlzJd1icKEMVktHNS8FKnyX59Oon HTWA== X-Gm-Message-State: AJIora/UGE+V2SVL9zXAXWjsydl816JRQx+6j57iPtB/gJj+mVzqUm9V hpYAeBeZLpBcVpRMYUn6tq9Wozy01Gqw5TrIL66Zoh+N4+kcA8JFG8Bw8qLrKijDgL5l8fqGxA9 I5J9QeLGO5VjLH3OTSj8W8FnIMlolT2++OqkB95RErj28mNRnunC8wl1rYrMVfKbamYCJ9wvf+w == X-Received: by 2002:a05:6000:1f8d:b0:219:f3c7:fd27 with SMTP id bw13-20020a0560001f8d00b00219f3c7fd27mr8738795wrb.324.1655283862319; Wed, 15 Jun 2022 02:04:22 -0700 (PDT) X-Google-Smtp-Source: AGRyM1vPcfPCf9859e7QfryYXtwh3X8ASc9hJwvREjz//b5yT5HNAVVs8boJ0EwUcFymyHlZOFTVlg== X-Received: by 2002:a05:6000:1f8d:b0:219:f3c7:fd27 with SMTP id bw13-20020a0560001f8d00b00219f3c7fd27mr8738769wrb.324.1655283861964; Wed, 15 Jun 2022 02:04:21 -0700 (PDT) Received: from localhost (host109-154-20-145.range109-154.btcentralplus.com. [109.154.20.145]) by smtp.gmail.com with ESMTPSA id c186-20020a1c35c3000000b0039c948dbb61sm1674262wma.26.2022.06.15.02.04.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Jun 2022 02:04:21 -0700 (PDT) From: Andrew Burgess To: gdb-patches@sourceware.org Cc: Andrew Burgess Subject: [PUSHED 6/6] gdb: unify two dis_asm_read_memory functions in disasm.c Date: Wed, 15 Jun 2022 10:04:08 +0100 Message-Id: <75033d08412577fb8ffcf76971e8d0393d14a8aa.1655283628.git.aburgess@redhat.com> X-Mailer: git-send-email 2.25.4 In-Reply-To: References: MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset="US-ASCII"; x-default=true X-Spam-Status: No, score=-12.7 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) 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: Wed, 15 Jun 2022 09:04:27 -0000 After the recent restructuring of the disassembler code, GDB has ended up with two identical class static functions, both called dis_asm_read_memory, with identical implementations. My first thought was to move these out of their respective classes, and just make them global functions, then I'd only need a single copy. And maybe that's the right way to go. But I disliked that by doing that I loose the encapsulation of the method with the corresponding disassembler class. So, instead, I placed the static method into its own class, and had both the gdb_non_printing_memory_disassembler and gdb_disassembler classes inherit from this new class as an additional base-class. In terms of code generated, I don't think there's any significant difference with this approach, but I think this better reflects how the function is closely tied to the disassembler. There should be no user visible changes after this commit. --- gdb/disasm.c | 16 +++------------- gdb/disasm.h | 29 +++++++++++++++++------------ 2 files changed, 20 insertions(+), 25 deletions(-) diff --git a/gdb/disasm.c b/gdb/disasm.c index 53cd6f5b6bb..c6edc92930d 100644 --- a/gdb/disasm.c +++ b/gdb/disasm.c @@ -132,9 +132,9 @@ line_has_code_p (htab_t table, struct symtab *symtab, int line) /* Wrapper of target_read_code. */ int -gdb_disassembler::dis_asm_read_memory (bfd_vma memaddr, gdb_byte *myaddr, - unsigned int len, - struct disassemble_info *info) +gdb_disassembler_memory_reader::dis_asm_read_memory + (bfd_vma memaddr, gdb_byte *myaddr, unsigned int len, + struct disassemble_info *info) { return target_read_code (memaddr, myaddr, len); } @@ -1021,16 +1021,6 @@ gdb_non_printing_disassembler::null_fprintf_styled_func return 0; } -/* See disasm.h. */ - -int -gdb_non_printing_memory_disassembler::dis_asm_read_memory - (bfd_vma memaddr, bfd_byte *myaddr, unsigned int length, - struct disassemble_info *dinfo) -{ - return target_read_code (memaddr, myaddr, length); -} - /* A non-printing disassemble_info management class. The disassemble_info setup by this class will not print anything to the output stream (there is no output stream), and the instruction to be disassembled will be diff --git a/gdb/disasm.h b/gdb/disasm.h index ec5120351a1..da03e130526 100644 --- a/gdb/disasm.h +++ b/gdb/disasm.h @@ -165,31 +165,39 @@ struct gdb_non_printing_disassembler : public gdb_disassemble_info ATTRIBUTE_PRINTF(3,4); }; +/* This is a helper class, for use as an additional base-class, by some of + the disassembler classes below. This class just defines a static method + for reading from target memory, which can then be used by the various + disassembler sub-classes. */ + +struct gdb_disassembler_memory_reader +{ + /* Implements the read_memory_func disassemble_info callback. */ + static int dis_asm_read_memory (bfd_vma memaddr, gdb_byte *myaddr, + unsigned int len, + struct disassemble_info *info); +}; + /* A non-printing disassemble_info management class. The disassemble_info setup by this class will not print anything to the output stream (there is no output stream), and the instruction to be disassembled will be read from target memory. */ struct gdb_non_printing_memory_disassembler - : public gdb_non_printing_disassembler + : public gdb_non_printing_disassembler, + private gdb_disassembler_memory_reader { /* Constructor. GDBARCH is the architecture to disassemble for. */ gdb_non_printing_memory_disassembler (struct gdbarch *gdbarch) :gdb_non_printing_disassembler (gdbarch, dis_asm_read_memory) { /* Nothing. */ } - -private: - - /* Implements the read_memory_func disassemble_info callback. */ - static int dis_asm_read_memory (bfd_vma memaddr, gdb_byte *myaddr, - unsigned int len, - struct disassemble_info *info); }; /* A dissassembler class that provides 'print_insn', a method for disassembling a single instruction to the output stream. */ -struct gdb_disassembler : public gdb_printing_disassembler +struct gdb_disassembler : public gdb_printing_disassembler, + private gdb_disassembler_memory_reader { gdb_disassembler (struct gdbarch *gdbarch, struct ui_file *file) : gdb_disassembler (gdbarch, file, dis_asm_read_memory) @@ -239,9 +247,6 @@ struct gdb_disassembler : public gdb_printing_disassembler (currently just to addresses and symbols) as it goes. */ static bool use_ext_lang_colorization_p; - static int dis_asm_read_memory (bfd_vma memaddr, gdb_byte *myaddr, - unsigned int len, - struct disassemble_info *info); static void dis_asm_memory_error (int err, bfd_vma memaddr, struct disassemble_info *info); static void dis_asm_print_address (bfd_vma addr, -- 2.25.4