All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dimitris Aragiorgis <dimara@arrikto.com>
To: Stefan Hajnoczi <stefanha@redhat.com>
Cc: "Denis V. Lunev" <den@openvz.org>,
	Peter Maydell <peter.maydell@linaro.org>,
	Alex Pyrgiotis <apyrgio@arrikto.com>,
	qemu-devel@nongnu.org, Paolo Bonzini <pbonzini@redhat.com>
Subject: Re: [Qemu-devel] [PULL 10/13] log: move qemu-log.c into util/ directory
Date: Wed, 3 Feb 2016 19:38:54 +0200	[thread overview]
Message-ID: <20160203173854.GA12401@arr> (raw)
In-Reply-To: <1454514465-11856-11-git-send-email-stefanha@redhat.com>

[-- Attachment #1: Type: text/plain, Size: 13959 bytes --]

Hi all,

A while ago me and Alex [cc'ed] submitted a trivial patch related to
logging [1]. Since this patch set here moves the qemu-log.c under util/,
our patch will not apply any more. Should we rebase it and resend it
against current master?

Thanks a lot,
dimara

[1] https://lists.gnu.org/archive/html/qemu-devel/2015-12/msg02687.html


* Stefan Hajnoczi <stefanha@redhat.com> [2016-02-03 15:47:42 +0000]:

> From: "Denis V. Lunev" <den@openvz.org>
> 
> log will become common facility with tracepoints support in next step.
> 
> Signed-off-by: Denis V. Lunev <den@openvz.org>
> Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> Message-id: 1452174932-28657-9-git-send-email-den@openvz.org
> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
> ---
>  Makefile.objs      |   1 -
>  qemu-log.c         | 179 -----------------------------------------------------
>  util/Makefile.objs |   1 +
>  util/log.c         | 179 +++++++++++++++++++++++++++++++++++++++++++++++++++++
>  4 files changed, 180 insertions(+), 180 deletions(-)
>  delete mode 100644 qemu-log.c
>  create mode 100644 util/log.c
> 
> diff --git a/Makefile.objs b/Makefile.objs
> index 06b95c7..fbcaa74 100644
> --- a/Makefile.objs
> +++ b/Makefile.objs
> @@ -89,7 +89,6 @@ endif
>  
>  #######################################################################
>  # Target-independent parts used in system and user emulation
> -common-obj-y += qemu-log.o
>  common-obj-y += tcg-runtime.o
>  common-obj-y += hw/
>  common-obj-y += qom/
> diff --git a/qemu-log.c b/qemu-log.c
> deleted file mode 100644
> index 901b930..0000000
> --- a/qemu-log.c
> +++ /dev/null
> @@ -1,179 +0,0 @@
> -/*
> - * Logging support
> - *
> - *  Copyright (c) 2003 Fabrice Bellard
> - *
> - * This library is free software; you can redistribute it and/or
> - * modify it under the terms of the GNU Lesser General Public
> - * License as published by the Free Software Foundation; either
> - * version 2 of the License, or (at your option) any later version.
> - *
> - * This library is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> - * Lesser General Public License for more details.
> - *
> - * You should have received a copy of the GNU Lesser General Public
> - * License along with this library; if not, see <http://www.gnu.org/licenses/>.
> - */
> -
> -#include "qemu-common.h"
> -#include "qemu/log.h"
> -
> -static char *logfilename;
> -FILE *qemu_logfile;
> -int qemu_loglevel;
> -static int log_append = 0;
> -
> -void qemu_log(const char *fmt, ...)
> -{
> -    va_list ap;
> -
> -    va_start(ap, fmt);
> -    if (qemu_logfile) {
> -        vfprintf(qemu_logfile, fmt, ap);
> -    }
> -    va_end(ap);
> -}
> -
> -void qemu_log_mask(int mask, const char *fmt, ...)
> -{
> -    va_list ap;
> -
> -    va_start(ap, fmt);
> -    if ((qemu_loglevel & mask) && qemu_logfile) {
> -        vfprintf(qemu_logfile, fmt, ap);
> -    }
> -    va_end(ap);
> -}
> -
> -/* enable or disable low levels log */
> -void do_qemu_set_log(int log_flags, bool use_own_buffers)
> -{
> -    qemu_loglevel = log_flags;
> -    if (qemu_loglevel && !qemu_logfile) {
> -        if (logfilename) {
> -            qemu_logfile = fopen(logfilename, log_append ? "a" : "w");
> -            if (!qemu_logfile) {
> -                perror(logfilename);
> -                _exit(1);
> -            }
> -        } else {
> -            /* Default to stderr if no log file specified */
> -            qemu_logfile = stderr;
> -        }
> -        /* must avoid mmap() usage of glibc by setting a buffer "by hand" */
> -        if (use_own_buffers) {
> -            static char logfile_buf[4096];
> -
> -            setvbuf(qemu_logfile, logfile_buf, _IOLBF, sizeof(logfile_buf));
> -        } else {
> -#if defined(_WIN32)
> -            /* Win32 doesn't support line-buffering, so use unbuffered output. */
> -            setvbuf(qemu_logfile, NULL, _IONBF, 0);
> -#else
> -            setvbuf(qemu_logfile, NULL, _IOLBF, 0);
> -#endif
> -            log_append = 1;
> -        }
> -    }
> -    if (!qemu_loglevel && qemu_logfile) {
> -        qemu_log_close();
> -    }
> -}
> -
> -void qemu_set_log_filename(const char *filename)
> -{
> -    g_free(logfilename);
> -    logfilename = g_strdup(filename);
> -    qemu_log_close();
> -    qemu_set_log(qemu_loglevel);
> -}
> -
> -const QEMULogItem qemu_log_items[] = {
> -    { CPU_LOG_TB_OUT_ASM, "out_asm",
> -      "show generated host assembly code for each compiled TB" },
> -    { CPU_LOG_TB_IN_ASM, "in_asm",
> -      "show target assembly code for each compiled TB" },
> -    { CPU_LOG_TB_OP, "op",
> -      "show micro ops for each compiled TB" },
> -    { CPU_LOG_TB_OP_OPT, "op_opt",
> -      "show micro ops (x86 only: before eflags optimization) and\n"
> -      "after liveness analysis" },
> -    { CPU_LOG_INT, "int",
> -      "show interrupts/exceptions in short format" },
> -    { CPU_LOG_EXEC, "exec",
> -      "show trace before each executed TB (lots of logs)" },
> -    { CPU_LOG_TB_CPU, "cpu",
> -      "show CPU state before block translation" },
> -    { CPU_LOG_MMU, "mmu",
> -      "log MMU-related activities" },
> -    { CPU_LOG_PCALL, "pcall",
> -      "x86 only: show protected mode far calls/returns/exceptions" },
> -    { CPU_LOG_RESET, "cpu_reset",
> -      "show CPU state before CPU resets" },
> -    { LOG_UNIMP, "unimp",
> -      "log unimplemented functionality" },
> -    { LOG_GUEST_ERROR, "guest_errors",
> -      "log when the guest OS does something invalid (eg accessing a\n"
> -      "non-existent register)" },
> -    { CPU_LOG_PAGE, "page",
> -      "dump pages at beginning of user mode emulation" },
> -    { CPU_LOG_TB_NOCHAIN, "nochain",
> -      "do not chain compiled TBs so that \"exec\" and \"cpu\" show\n"
> -      "complete traces" },
> -    { 0, NULL, NULL },
> -};
> -
> -static int cmp1(const char *s1, int n, const char *s2)
> -{
> -    if (strlen(s2) != n) {
> -        return 0;
> -    }
> -    return memcmp(s1, s2, n) == 0;
> -}
> -
> -/* takes a comma separated list of log masks. Return 0 if error. */
> -int qemu_str_to_log_mask(const char *str)
> -{
> -    const QEMULogItem *item;
> -    int mask;
> -    const char *p, *p1;
> -
> -    p = str;
> -    mask = 0;
> -    for (;;) {
> -        p1 = strchr(p, ',');
> -        if (!p1) {
> -            p1 = p + strlen(p);
> -        }
> -        if (cmp1(p,p1-p,"all")) {
> -            for (item = qemu_log_items; item->mask != 0; item++) {
> -                mask |= item->mask;
> -            }
> -        } else {
> -            for (item = qemu_log_items; item->mask != 0; item++) {
> -                if (cmp1(p, p1 - p, item->name)) {
> -                    goto found;
> -                }
> -            }
> -            return 0;
> -        }
> -    found:
> -        mask |= item->mask;
> -        if (*p1 != ',') {
> -            break;
> -        }
> -        p = p1 + 1;
> -    }
> -    return mask;
> -}
> -
> -void qemu_print_log_usage(FILE *f)
> -{
> -    const QEMULogItem *item;
> -    fprintf(f, "Log items (comma separated):\n");
> -    for (item = qemu_log_items; item->mask != 0; item++) {
> -        fprintf(f, "%-10s %s\n", item->name, item->help);
> -    }
> -}
> diff --git a/util/Makefile.objs b/util/Makefile.objs
> index 8620a80..a8a777e 100644
> --- a/util/Makefile.objs
> +++ b/util/Makefile.objs
> @@ -31,3 +31,4 @@ util-obj-y += coroutine-$(CONFIG_COROUTINE_BACKEND).o
>  util-obj-y += buffer.o
>  util-obj-y += timed-average.o
>  util-obj-y += base64.o
> +util-obj-y += log.o
> diff --git a/util/log.c b/util/log.c
> new file mode 100644
> index 0000000..901b930
> --- /dev/null
> +++ b/util/log.c
> @@ -0,0 +1,179 @@
> +/*
> + * Logging support
> + *
> + *  Copyright (c) 2003 Fabrice Bellard
> + *
> + * This library is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU Lesser General Public
> + * License as published by the Free Software Foundation; either
> + * version 2 of the License, or (at your option) any later version.
> + *
> + * This library is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> + * Lesser General Public License for more details.
> + *
> + * You should have received a copy of the GNU Lesser General Public
> + * License along with this library; if not, see <http://www.gnu.org/licenses/>.
> + */
> +
> +#include "qemu-common.h"
> +#include "qemu/log.h"
> +
> +static char *logfilename;
> +FILE *qemu_logfile;
> +int qemu_loglevel;
> +static int log_append = 0;
> +
> +void qemu_log(const char *fmt, ...)
> +{
> +    va_list ap;
> +
> +    va_start(ap, fmt);
> +    if (qemu_logfile) {
> +        vfprintf(qemu_logfile, fmt, ap);
> +    }
> +    va_end(ap);
> +}
> +
> +void qemu_log_mask(int mask, const char *fmt, ...)
> +{
> +    va_list ap;
> +
> +    va_start(ap, fmt);
> +    if ((qemu_loglevel & mask) && qemu_logfile) {
> +        vfprintf(qemu_logfile, fmt, ap);
> +    }
> +    va_end(ap);
> +}
> +
> +/* enable or disable low levels log */
> +void do_qemu_set_log(int log_flags, bool use_own_buffers)
> +{
> +    qemu_loglevel = log_flags;
> +    if (qemu_loglevel && !qemu_logfile) {
> +        if (logfilename) {
> +            qemu_logfile = fopen(logfilename, log_append ? "a" : "w");
> +            if (!qemu_logfile) {
> +                perror(logfilename);
> +                _exit(1);
> +            }
> +        } else {
> +            /* Default to stderr if no log file specified */
> +            qemu_logfile = stderr;
> +        }
> +        /* must avoid mmap() usage of glibc by setting a buffer "by hand" */
> +        if (use_own_buffers) {
> +            static char logfile_buf[4096];
> +
> +            setvbuf(qemu_logfile, logfile_buf, _IOLBF, sizeof(logfile_buf));
> +        } else {
> +#if defined(_WIN32)
> +            /* Win32 doesn't support line-buffering, so use unbuffered output. */
> +            setvbuf(qemu_logfile, NULL, _IONBF, 0);
> +#else
> +            setvbuf(qemu_logfile, NULL, _IOLBF, 0);
> +#endif
> +            log_append = 1;
> +        }
> +    }
> +    if (!qemu_loglevel && qemu_logfile) {
> +        qemu_log_close();
> +    }
> +}
> +
> +void qemu_set_log_filename(const char *filename)
> +{
> +    g_free(logfilename);
> +    logfilename = g_strdup(filename);
> +    qemu_log_close();
> +    qemu_set_log(qemu_loglevel);
> +}
> +
> +const QEMULogItem qemu_log_items[] = {
> +    { CPU_LOG_TB_OUT_ASM, "out_asm",
> +      "show generated host assembly code for each compiled TB" },
> +    { CPU_LOG_TB_IN_ASM, "in_asm",
> +      "show target assembly code for each compiled TB" },
> +    { CPU_LOG_TB_OP, "op",
> +      "show micro ops for each compiled TB" },
> +    { CPU_LOG_TB_OP_OPT, "op_opt",
> +      "show micro ops (x86 only: before eflags optimization) and\n"
> +      "after liveness analysis" },
> +    { CPU_LOG_INT, "int",
> +      "show interrupts/exceptions in short format" },
> +    { CPU_LOG_EXEC, "exec",
> +      "show trace before each executed TB (lots of logs)" },
> +    { CPU_LOG_TB_CPU, "cpu",
> +      "show CPU state before block translation" },
> +    { CPU_LOG_MMU, "mmu",
> +      "log MMU-related activities" },
> +    { CPU_LOG_PCALL, "pcall",
> +      "x86 only: show protected mode far calls/returns/exceptions" },
> +    { CPU_LOG_RESET, "cpu_reset",
> +      "show CPU state before CPU resets" },
> +    { LOG_UNIMP, "unimp",
> +      "log unimplemented functionality" },
> +    { LOG_GUEST_ERROR, "guest_errors",
> +      "log when the guest OS does something invalid (eg accessing a\n"
> +      "non-existent register)" },
> +    { CPU_LOG_PAGE, "page",
> +      "dump pages at beginning of user mode emulation" },
> +    { CPU_LOG_TB_NOCHAIN, "nochain",
> +      "do not chain compiled TBs so that \"exec\" and \"cpu\" show\n"
> +      "complete traces" },
> +    { 0, NULL, NULL },
> +};
> +
> +static int cmp1(const char *s1, int n, const char *s2)
> +{
> +    if (strlen(s2) != n) {
> +        return 0;
> +    }
> +    return memcmp(s1, s2, n) == 0;
> +}
> +
> +/* takes a comma separated list of log masks. Return 0 if error. */
> +int qemu_str_to_log_mask(const char *str)
> +{
> +    const QEMULogItem *item;
> +    int mask;
> +    const char *p, *p1;
> +
> +    p = str;
> +    mask = 0;
> +    for (;;) {
> +        p1 = strchr(p, ',');
> +        if (!p1) {
> +            p1 = p + strlen(p);
> +        }
> +        if (cmp1(p,p1-p,"all")) {
> +            for (item = qemu_log_items; item->mask != 0; item++) {
> +                mask |= item->mask;
> +            }
> +        } else {
> +            for (item = qemu_log_items; item->mask != 0; item++) {
> +                if (cmp1(p, p1 - p, item->name)) {
> +                    goto found;
> +                }
> +            }
> +            return 0;
> +        }
> +    found:
> +        mask |= item->mask;
> +        if (*p1 != ',') {
> +            break;
> +        }
> +        p = p1 + 1;
> +    }
> +    return mask;
> +}
> +
> +void qemu_print_log_usage(FILE *f)
> +{
> +    const QEMULogItem *item;
> +    fprintf(f, "Log items (comma separated):\n");
> +    for (item = qemu_log_items; item->mask != 0; item++) {
> +        fprintf(f, "%-10s %s\n", item->name, item->help);
> +    }
> +}
> -- 
> 2.5.0
> 

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 490 bytes --]

  parent reply	other threads:[~2016-02-03 17:39 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-02-03 15:47 [Qemu-devel] [PULL 00/13] Tracing patches Stefan Hajnoczi
2016-02-03 15:47 ` [Qemu-devel] [PULL 01/13] trace: count number of enabled events Stefan Hajnoczi
2016-02-03 15:47 ` [Qemu-devel] [PULL 02/13] trace: track enabled events in a separate array Stefan Hajnoczi
2016-02-03 15:47 ` [Qemu-devel] [PULL 03/13] trace: fix documentation Stefan Hajnoczi
2016-02-03 15:47 ` [Qemu-devel] [PULL 04/13] trace: split trace_init_events out of trace_init_backends Stefan Hajnoczi
2016-02-03 15:47 ` [Qemu-devel] [PULL 05/13] trace: split trace_init_file " Stefan Hajnoczi
2016-02-08 18:43   ` Alex Bennée
2016-02-09 11:17     ` Denis V. Lunev
2016-02-09 12:28       ` Alex Bennée
2016-02-09 19:19         ` Denis V. Lunev
2016-02-03 15:47 ` [Qemu-devel] [PULL 06/13] trace: no need to call trace_backend_init in different branches now Stefan Hajnoczi
2016-02-03 15:47 ` [Qemu-devel] [PULL 07/13] trace: add "-trace enable=..." Stefan Hajnoczi
2016-02-03 15:47 ` [Qemu-devel] [PULL 08/13] trace: add "-trace help" Stefan Hajnoczi
2016-02-03 15:47 ` [Qemu-devel] [PULL 09/13] log: do not unnecessarily include qom/cpu.h Stefan Hajnoczi
2016-02-03 15:47 ` [Qemu-devel] [PULL 10/13] log: move qemu-log.c into util/ directory Stefan Hajnoczi
2016-02-03 16:03   ` Daniel P. Berrange
2016-02-03 16:15     ` Denis V. Lunev
2016-02-03 16:36     ` Eric Blake
2016-02-03 17:38   ` Dimitris Aragiorgis [this message]
2016-02-03 18:46     ` Paolo Bonzini
2016-02-03 15:47 ` [Qemu-devel] [PULL 11/13] trace: convert stderr backend to log Stefan Hajnoczi
2016-02-03 15:47 ` [Qemu-devel] [PULL 12/13] trace: switch default backend to "log" Stefan Hajnoczi
2016-02-03 15:47 ` [Qemu-devel] [PULL 13/13] log: add "-d trace:PATTERN" Stefan Hajnoczi
2016-02-03 17:55 ` [Qemu-devel] [PULL 00/13] Tracing patches Peter Maydell
2016-02-03 18:49   ` Paolo Bonzini
2016-02-04 11:05     ` Peter Maydell

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20160203173854.GA12401@arr \
    --to=dimara@arrikto.com \
    --cc=apyrgio@arrikto.com \
    --cc=den@openvz.org \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.