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 F07D2385840C for ; Fri, 6 May 2022 17:17:36 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org F07D2385840C Received: from mail-ej1-f71.google.com (mail-ej1-f71.google.com [209.85.218.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-213-URuoZW4uOeetuy4hrVkKQQ-1; Fri, 06 May 2022 13:17:35 -0400 X-MC-Unique: URuoZW4uOeetuy4hrVkKQQ-1 Received: by mail-ej1-f71.google.com with SMTP id ga27-20020a1709070c1b00b006f43c161da4so4692708ejc.7 for ; Fri, 06 May 2022 10:17:35 -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=4AZL36xAQsbLTtNBXcOJ0EQIgcEpAzhTJ6d8VLPrChaMGpqSbahkZCdt1Kffh0XCuS hj57BWksfH/GZSvRrgtTDJbcqfv709j+nWQL8kmsmoG72GUJ++fYInjztFDFyqYEd08I IkyysmL65mrVJfVfpBByLvEtA2wnQirgZxxA8waBB2VQU0OTeclykqtB4EmsGc2YVBfj 1Op3F41V5ooDCCsM/bXyMh7QmwuYwcNXKTewu1kPVYQ2TB063ZOFHS4NH9YYMdX1wNoj HeKZ5ZCL93s7aqoYX7ojn20sHWLmRvkj2dt4Dlr7Vp+sHSDOY40mfRO2gc6mSp8AhO1D OKUA== X-Gm-Message-State: AOAM5329Sfe6PDaaMADBpOYChmnhoNCE6gvG9e44hRXq/1F1ZnIh7idJ DzMeenJwzntaqn15QLkD9XbGpNDIH6BcSIYRrsgC46l6Ce01b8POtY50G0R5FV6ST/l4vzC4i2q auzON4PQXiK6kgZo82m44MNRzy9VkJCQIbnI5r5JEP0N9zZqyfDQVQ1MCfZZ3kNJ4M5Jo/rA7sg == X-Received: by 2002:a17:907:7b89:b0:6f4:9b92:c2ac with SMTP id ne9-20020a1709077b8900b006f49b92c2acmr3826902ejc.409.1651857453999; Fri, 06 May 2022 10:17:33 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyVCWwfrHuZwsVMFTmVoMSGVmH5xeRw55i1qQD28hxm+Xvjaci/0E4o9gIPsqnn8jDCD92tvQ== X-Received: by 2002:a17:907:7b89:b0:6f4:9b92:c2ac with SMTP id ne9-20020a1709077b8900b006f49b92c2acmr3826877ejc.409.1651857453653; Fri, 06 May 2022 10:17:33 -0700 (PDT) Received: from localhost (92.40.178.210.threembb.co.uk. [92.40.178.210]) by smtp.gmail.com with ESMTPSA id w6-20020aa7dcc6000000b0042617ba63d7sm2467995edu.97.2022.05.06.10.17.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 May 2022 10:17:33 -0700 (PDT) From: Andrew Burgess To: gdb-patches@sourceware.org Cc: Andrew Burgess Subject: [PATCHv5 5/5] gdb: unify two dis_asm_read_memory functions in disasm.c Date: Fri, 6 May 2022 18:17:14 +0100 Message-Id: <20a8a3edabe3f57f4bb47912fcfba8a36413c020.1651857001.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=-10.8 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_BARRACUDACENTRAL, RCVD_IN_DNSWL_LOW, SPF_HELO_NONE, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) 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: Fri, 06 May 2022 17:17:38 -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