From patchwork Tue Jan 10 12:26:17 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yao Qi X-Patchwork-Id: 18839 Received: (qmail 90280 invoked by alias); 10 Jan 2017 12:26:45 -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 89865 invoked by uid 89); 10 Jan 2017 12:26:41 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.5 required=5.0 tests=AWL, BAYES_00, FREEMAIL_FROM, RCVD_IN_DNSWL_NONE, RCVD_IN_SORBS_SPAM, SPF_PASS autolearn=no version=3.3.2 spammy=selftests, Hx-languages-length:1895, UD:stream X-Spam-User: qpsmtpd, 2 recipients X-HELO: mail-pf0-f195.google.com Received: from mail-pf0-f195.google.com (HELO mail-pf0-f195.google.com) (209.85.192.195) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 10 Jan 2017 12:26:39 +0000 Received: by mail-pf0-f195.google.com with SMTP id f144so9893263pfa.2; Tue, 10 Jan 2017 04:26:39 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=vstP1J0Ds8EekbeDur1KW0h58m5zhaVr9eCxg/teSeA=; b=F2EfUwQMPKIR+MXvdPFoEDPIk+hDt82mpfbdkTccvGEEwKhhQdpAQrSO4hjNZzB6An rfJpJulmQNqWcrxTg4fw9pbn7cbtPDXMPPTyTJUk++wQGkNYsBI8xULzPfS+MrJzhfSE wynmeQghxQWeJzEtDXH1R0wus4LrUJP5TPKSCgNOZMJP63g+fnrR0Q6Ey8SIuh2y7WhE dLr+OseGqigp2X/3etbOCueS6F0FT3Rw8VU4UzfSRPIXVTJGXq3uabqwGd9CsCBA/PrF AcTsv3VV5W+3Cq2hY0guwWMvCRBeracqND8FGCOx9/b2tBnTm2GqIEShxrGH/y+80jGg Wdlw== X-Gm-Message-State: AIkVDXIx8jgMJlohELk/LE25B+U6hy4ukIbMWkW6VjolctCzFHs9Q3ZDp1etdfLKMfndDA== X-Received: by 10.84.150.129 with SMTP id h1mr4594983plh.3.1484051198233; Tue, 10 Jan 2017 04:26:38 -0800 (PST) Received: from E107787-LIN.cambridge.arm.com (gcc1-power7.osuosl.org. [140.211.15.137]) by smtp.gmail.com with ESMTPSA id r26sm5450661pgd.42.2017.01.10.04.26.36 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 10 Jan 2017 04:26:37 -0800 (PST) From: Yao Qi X-Google-Original-From: Yao Qi To: binutils@sourceware.org, gdb-patches@sourceware.org Subject: [PATCH 7/8] Disassembly unit test: memory error Date: Tue, 10 Jan 2017 12:26:17 +0000 Message-Id: <1484051178-16013-8-git-send-email-yao.qi@linaro.org> In-Reply-To: <1484051178-16013-1-git-send-email-yao.qi@linaro.org> References: <1484051178-16013-1-git-send-email-yao.qi@linaro.org> X-IsSubscribed: yes This patch adds a unit test about memory error occurs on reading memory, and check MEMORY_ERROR exception is always thrown. gdb: 2017-01-10 Yao Qi * disasm.c (gdb_disassembler_print_one_insn_test): (gdb_disassembler_memory_error_test): New function. (_initialize_disasm): Register gdb_disassembler_memory_error_test. --- gdb/disasm.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/gdb/disasm.c b/gdb/disasm.c index 6e403da..e908199 100644 --- a/gdb/disasm.c +++ b/gdb/disasm.c @@ -424,6 +424,53 @@ gdb_disassembler_print_one_insn_test (struct gdbarch *gdbarch) SELF_CHECK (di.print_insn (0) == len); } +/* Test disassembly on memory error. */ + +static void +gdb_disassembler_memory_error_test (struct gdbarch *gdbarch) +{ + class gdb_disassembler_test : public gdb_disassembler + { + public: + gdb_disassembler_test (struct gdbarch *gdbarch) + : gdb_disassembler (gdbarch, ui_file_new (), + gdb_disassembler_test::read_memory) + { + } + + ~gdb_disassembler_test () + { + ui_file_delete ((struct ui_file *) m_di.stream); + } + + static int read_memory (bfd_vma memaddr, gdb_byte *myaddr, + unsigned int len, + struct disassemble_info *info) + { + /* Always get an error. */ + return -1; + } + }; + + gdb_disassembler_test di (gdbarch); + bool see_memory_error = false; + + TRY + { + di.print_insn (0); + } + CATCH (ex, RETURN_MASK_ERROR) + { + if (ex.error == MEMORY_ERROR) + see_memory_error = true; + } + END_CATCH + + /* Expect MEMORY_ERROR. */ + SELF_CHECK (see_memory_error); + +} + } // namespace selftests #endif /* GDB_SELF_TEST */ @@ -1083,5 +1130,6 @@ _initialize_disasm (void) { #if GDB_SELF_TEST register_self_test (selftests::gdb_disassembler_print_one_insn_test); + register_self_test (selftests::gdb_disassembler_memory_error_test); #endif }