From patchwork Mon Jan 16 10:02:56 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yao Qi X-Patchwork-Id: 18913 Received: (qmail 53320 invoked by alias); 16 Jan 2017 10:03:26 -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 53083 invoked by uid 89); 16 Jan 2017 10:03:23 -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=Hx-languages-length:1853, end_catch, CATCH, END_CATCH X-HELO: mail-pf0-f193.google.com Received: from mail-pf0-f193.google.com (HELO mail-pf0-f193.google.com) (209.85.192.193) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 16 Jan 2017 10:03:19 +0000 Received: by mail-pf0-f193.google.com with SMTP id e4so3548565pfg.0 for ; Mon, 16 Jan 2017 02:03:18 -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=hGCHRyeraq3s1ptVxngKN80UtywAoP5hPIy9PouNNSE=; b=B47wY0HpJO73ydWTjcHnt3xfiCcUFwKCHdJ3AlEERT/iRoqD7Nq7ETBaQdGDNXPyf3 OU1kCXCGTSYNZpvg2k4u+Crj29dC0rC1Fry+lGB6JUI2E/3mENNrY/fkDhuoc7HXQ5hn f4DYt6WzrDp9e5V06S3Eh8MobE2H9gBUd0MTXH3IlXr3VQW5OES0T9VJVhp5JgiANIRU zog4VsqKWW7lyX9l072ic9T07JQN1IcvVm6xtMPWzfkuwhzhzNDb/9JfCgxmltnqNXL9 A/Efaa9kPPlwxJjajVI8kl2ZS05wUtTKBdYKKQdyeJml9vGfG0B7hyKg0kVe6aKONy+8 FQtQ== X-Gm-Message-State: AIkVDXI+SQUOz7Tgr5VgoSVoUtzOJCCHVsiOvyt92IayPLCjMKIaNNkPgg9fBsBDQ3eajA== X-Received: by 10.99.62.73 with SMTP id l70mr37822165pga.97.1484560997440; Mon, 16 Jan 2017 02:03:17 -0800 (PST) Received: from E107787-LIN.cambridge.arm.com (gcc1-power7.osuosl.org. [140.211.15.137]) by smtp.gmail.com with ESMTPSA id g28sm9695206pgn.3.2017.01.16.02.03.16 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 16 Jan 2017 02:03:17 -0800 (PST) From: Yao Qi X-Google-Original-From: Yao Qi To: gdb-patches@sourceware.org Subject: [PATCH 5/6] Disassembly unit test: memory error Date: Mon, 16 Jan 2017 10:02:56 +0000 Message-Id: <1484560977-8693-6-git-send-email-yao.qi@linaro.org> In-Reply-To: <1484560977-8693-1-git-send-email-yao.qi@linaro.org> References: <1484051178-16013-1-git-send-email-yao.qi@linaro.org> <1484560977-8693-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. v2: - use null_stream, gdb: 2017-01-10 Yao Qi * disasm-selftests.c (gdb_disassembler_memory_error_test): New function. (_initialize_disasm_test): Register gdb_disassembler_memory_error_test. --- gdb/disasm-selftests.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/gdb/disasm-selftests.c b/gdb/disasm-selftests.c index 46a0a21..ad2b4eb 100644 --- a/gdb/disasm-selftests.c +++ b/gdb/disasm-selftests.c @@ -163,6 +163,48 @@ 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, null_stream (), + gdb_disassembler_test::read_memory) + { + } + + 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 */ @@ -174,5 +216,6 @@ _initialize_disasm_test (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 }