From patchwork Wed Mar 26 14:37:13 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Alex_Benn=C3=A9e?= X-Patchwork-Id: 27140 Return-Path: X-Original-To: linaro@patches.linaro.org Delivered-To: linaro@patches.linaro.org Received: from mail-ve0-f197.google.com (mail-ve0-f197.google.com [209.85.128.197]) by ip-10-151-82-157.ec2.internal (Postfix) with ESMTPS id BAA0720062 for ; Wed, 26 Mar 2014 14:40:12 +0000 (UTC) Received: by mail-ve0-f197.google.com with SMTP id pa12sf4766692veb.4 for ; Wed, 26 Mar 2014 07:40:12 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:delivered-to:from:to:date:message-id:in-reply-to :references:mime-version:cc:subject:precedence:list-id :list-unsubscribe:list-archive:list-post:list-help:list-subscribe :errors-to:sender:x-original-sender :x-original-authentication-results:mailing-list:content-type :content-transfer-encoding; bh=otpY9g2baWyT6xHzxF/Hh0zhug1/kx7Vw0meljVujo0=; b=gaKBOR2vmLkZsiGxj18rKS3RRa6rw9hCzFUauutQQiN5Om2Q94e2mxzZibrLGcbP03 iR7+U7Dq9n9kmYbihVYsYvCCyOf4F64ZbOkfGQIY6qB3RVMfYQLsZFIp3GfDFIRUZ4vt oPbAkX95QNIVN8L9w+dV6x3kx1TrDrDvB00g9J1F4VLzcTu9f8TMBMHku3bp6b4Vg4Rf UTZdcYPUzb+niIzVbt2rmHoltmN8sJHcmoM36Zmpy3yXhPb/qt8Z4WONEpliJOXS3Mkt o5+BzZ+zIq1E9emTKphzhPC/Xl+D5v7oa1paqV4RzQQuQ1jL+IAlc1vhlpzPZojgdzsn b6AA== X-Gm-Message-State: ALoCoQlxVNwB8uPo3OyLCiQZH1TLXSK3ktENpAWt4kL9p9Fc4w/79rG+OuI2qC7UFEAcYhIdUSjX X-Received: by 10.236.21.180 with SMTP id r40mr4442149yhr.48.1395844812497; Wed, 26 Mar 2014 07:40:12 -0700 (PDT) X-BeenThere: patchwork-forward@linaro.org Received: by 10.140.94.210 with SMTP id g76ls638311qge.69.gmail; Wed, 26 Mar 2014 07:40:12 -0700 (PDT) X-Received: by 10.58.207.74 with SMTP id lu10mr59846031vec.15.1395844812349; Wed, 26 Mar 2014 07:40:12 -0700 (PDT) Received: from mail-vc0-f179.google.com (mail-vc0-f179.google.com [209.85.220.179]) by mx.google.com with ESMTPS id sj4si4677767vdc.84.2014.03.26.07.40.12 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Wed, 26 Mar 2014 07:40:12 -0700 (PDT) Received-SPF: neutral (google.com: 209.85.220.179 is neither permitted nor denied by best guess record for domain of patch+caf_=patchwork-forward=linaro.org@linaro.org) client-ip=209.85.220.179; Received: by mail-vc0-f179.google.com with SMTP id ij19so2481140vcb.38 for ; Wed, 26 Mar 2014 07:40:12 -0700 (PDT) X-Received: by 10.53.11.37 with SMTP id ef5mr206386vdd.62.1395844812272; Wed, 26 Mar 2014 07:40:12 -0700 (PDT) X-Forwarded-To: patchwork-forward@linaro.org X-Forwarded-For: patch@linaro.org patchwork-forward@linaro.org Delivered-To: patch@linaro.org Received: by 10.220.78.9 with SMTP id i9csp51571vck; Wed, 26 Mar 2014 07:40:11 -0700 (PDT) X-Received: by 10.224.167.12 with SMTP id o12mr18460554qay.77.1395844810932; Wed, 26 Mar 2014 07:40:10 -0700 (PDT) Received: from lists.gnu.org (lists.gnu.org. [2001:4830:134:3::11]) by mx.google.com with ESMTPS id h5si8875369qas.165.2014.03.26.07.40.10 for (version=TLSv1 cipher=RC4-SHA bits=128/128); Wed, 26 Mar 2014 07:40:10 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) client-ip=2001:4830:134:3::11; Received: from localhost ([::1]:48425 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WSozy-0004KK-Ev for patch@linaro.org; Wed, 26 Mar 2014 10:40:10 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57680) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WSoxQ-0000uV-QS for qemu-devel@nongnu.org; Wed, 26 Mar 2014 10:37:37 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WSoxK-0004GI-G3 for qemu-devel@nongnu.org; Wed, 26 Mar 2014 10:37:32 -0400 Received: from static.88-198-71-155.clients.your-server.de ([88.198.71.155]:60659 helo=socrates.bennee.com) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WSoxK-0004GB-73 for qemu-devel@nongnu.org; Wed, 26 Mar 2014 10:37:26 -0400 Received: from localhost ([127.0.0.1] helo=zen.linaro.local) by socrates.bennee.com with esmtp (Exim 4.80) (envelope-from ) id 1WSoxf-00040a-HE; Wed, 26 Mar 2014 15:37:47 +0100 From: alex.bennee@linaro.org To: qemu-devel@nongnu.org Date: Wed, 26 Mar 2014 14:37:13 +0000 Message-Id: <1395844634-11729-4-git-send-email-alex.bennee@linaro.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1395844634-11729-1-git-send-email-alex.bennee@linaro.org> References: <1395844634-11729-1-git-send-email-alex.bennee@linaro.org> MIME-Version: 1.0 X-SA-Exim-Connect-IP: 127.0.0.1 X-SA-Exim-Mail-From: alex.bennee@linaro.org X-SA-Exim-Scanned: No (on socrates.bennee.com); SAEximRunCond expanded to false X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 88.198.71.155 Cc: Stefan Hajnoczi , "Michael S. Tsirkin" , Michael Tokarev , Markus Armbruster , Michael Walle , Anthony Liguori , Paolo Bonzini , =?UTF-8?q?Alex=20Benn=C3=A9e?= , =?UTF-8?q?Andreas=20F=C3=A4rber?= , Richard Henderson Subject: [Qemu-devel] [RFC PATCH 3/4] qemu-log: new option -dfilter to limit output X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: , List-Help: , List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: qemu-devel-bounces+patch=linaro.org@nongnu.org X-Removed-Original-Auth: Dkim didn't pass. X-Original-Sender: alex.bennee@linaro.org X-Original-Authentication-Results: mx.google.com; spf=neutral (google.com: 209.85.220.179 is neither permitted nor denied by best guess record for domain of patch+caf_=patchwork-forward=linaro.org@linaro.org) smtp.mail=patch+caf_=patchwork-forward=linaro.org@linaro.org Mailing-list: list patchwork-forward@linaro.org; contact patchwork-forward+owners@linaro.org X-Google-Group-Id: 836684582541 From: Alex Bennée When debugging big programs or system emulation sometimes you want both the verbosity of cpu,exec et all but don't want to generate lots of logs for unneeded stuff. This patch adds a new option -dfilter which allows you to specify interesting address ranges in the form: -dfilter 0x8000-0x9000,0xffffffc000080000+0x200,... Then logging code can use the new qemu_log_in_addr_range() function to decide if it will output logging information for the given range. Signed-off-by: Alex Bennée diff --git a/include/qemu/log.h b/include/qemu/log.h index d515424..25710ad 100644 --- a/include/qemu/log.h +++ b/include/qemu/log.h @@ -174,6 +174,8 @@ static inline void qemu_set_log(int log_flags) } void qemu_set_log_filename(const char *filename); +void qemu_set_dfilter_ranges(const char *ranges); +bool qemu_log_in_addr_range(uint64_t addr); int qemu_str_to_log_mask(const char *str); /* Print a usage message listing all the valid logging categories diff --git a/qemu-log.c b/qemu-log.c index 2897596..e2fa3fd 100644 --- a/qemu-log.c +++ b/qemu-log.c @@ -19,11 +19,13 @@ #include "qemu-common.h" #include "qemu/log.h" +#include "qemu/range.h" static char *logfilename; FILE *qemu_logfile; int qemu_loglevel; static int log_append = 0; +static GSList *debug_regions = NULL; void qemu_log(const char *fmt, ...) { @@ -103,6 +105,60 @@ void qemu_set_log_filename(const char *filename) qemu_set_log(qemu_loglevel); } +/* Returns true if addr is in our debug filter or no filter defined + */ +bool qemu_log_in_addr_range(uint64_t addr) +{ + if (debug_regions) { + GSList *region = debug_regions; + do { + struct Range *range = region->data; + if (addr >= range->begin && addr <= range->end) { + return true; + } + region = g_slist_next(region); + } while (region); + return false; + } else { + return true; + } +} + + +void qemu_set_dfilter_ranges(const char *filter_spec) +{ + gchar **ranges = g_strsplit(filter_spec, ",", 0); + if (ranges) { + gchar **next = ranges; + gchar *r = *next++; + while (r) { + gchar *delim = g_strrstr(r, "-"); + if (!delim) { + delim = g_strrstr(r, "+"); + } + if (delim) { + struct Range *range = g_malloc(sizeof(Range)); + range->begin = strtoul(r, NULL, 0); + switch (*delim) { + case '+': + range->end = range->begin + strtoul(delim+1, NULL, 0); + break; + case '-': + range->end = strtoul(delim+1, NULL, 0); + break; + default: + g_assert_not_reached(); + } + debug_regions = g_slist_append(debug_regions, range); + } else { + g_error("Bad range specifier in: %s", r); + } + r = *next++; + } + g_strfreev(ranges); + } +} + const QEMULogItem qemu_log_items[] = { { CPU_LOG_TB_OUT_ASM, "out_asm", "show generated host assembly code for each compiled TB" }, diff --git a/qemu-options.hx b/qemu-options.hx index ee5437b..a5cd095 100644 --- a/qemu-options.hx +++ b/qemu-options.hx @@ -2667,6 +2667,15 @@ STEXI Output log in @var{logfile} instead of to stderr ETEXI +DEF("dfilter", HAS_ARG, QEMU_OPTION_DFILTER, \ + "-dfilter range,.. filter debug output to range of addresses (useful for -d cpu,exec,etc..)\n", + QEMU_ARCH_ALL) +STEXI +@item -dfilter @var{range1}[,...] +@findex -dfilter +Filter debug output to that relevant to a range of target addresses +ETEXI + DEF("L", HAS_ARG, QEMU_OPTION_L, \ "-L path set the directory for the BIOS, VGA BIOS and keymaps\n", QEMU_ARCH_ALL) diff --git a/vl.c b/vl.c index 02bf8ec..c036367 100644 --- a/vl.c +++ b/vl.c @@ -3342,6 +3342,9 @@ int main(int argc, char **argv, char **envp) case QEMU_OPTION_D: log_file = optarg; break; + case QEMU_OPTION_DFILTER: + qemu_set_dfilter_ranges(optarg); + break; case QEMU_OPTION_s: add_device_config(DEV_GDB, "tcp::" DEFAULT_GDBSTUB_PORT); break;