From: Andrew Cooper <andrew.cooper3@citrix.com>
To: Jan Beulich <JBeulich@suse.com>
Cc: xen-devel <xen-devel@lists.xenproject.org>, Keir Fraser <keir@xen.org>
Subject: Re: [PATCH] x86: print relevant (tail) part of filename for warnings and crashes
Date: Wed, 16 Oct 2013 16:57:23 +0100 [thread overview]
Message-ID: <525EB763.6030104@citrix.com> (raw)
In-Reply-To: <525ECC1702000078000FB8D7@nat28.tlf.novell.com>
[-- Attachment #1.1: Type: text/plain, Size: 3391 bytes --]
On 16/10/13 16:25, Jan Beulich wrote:
> In particular when the origin construct is in a header file (and
> hence the file name is an absolute path instead of just the file name
> portion) the information can otherwise become rather useless when the
> build tree isn't sitting relatively close to the file system root.
>
> Signed-off-by: Jan Beulich <jbeulich@suse.com>
I had encountered similar frustrations in the past and had looked at a
different solution to the problem.
At the moment, __FILE__ is absolute, (and redundant many times in the
image, although I guess it should compress well).
I had investigated running a makefile rune to strip XEN_ROOT off
$(abspath $<) and provide this as a __FILENAME__ macro, but I wasn't
certain I had done it correctly.
This would cause a rather smaller data section and substantially less
printed in each of these cases. The only problem would then come if we
end up with more than 50 characters below XEN_ROOT, which is
substantially less likely
~Andrew
>
> --- a/xen/arch/x86/traps.c
> +++ b/xen/arch/x86/traps.c
> @@ -945,7 +945,7 @@ void do_invalid_op(struct cpu_user_regs
> {
> const struct bug_frame *bug;
> u8 bug_insn[2];
> - const char *filename, *predicate, *eip = (char *)regs->eip;
> + const char *prefix = "", *filename, *predicate, *eip = (char *)regs->eip;
> unsigned long fixup;
> int id, lineno;
> static const struct bug_frame *const stop_frames[] = {
> @@ -996,21 +996,27 @@ void do_invalid_op(struct cpu_user_regs
> filename = bug_ptr(bug);
> if ( !is_kernel(filename) )
> goto die;
> + fixup = strlen(filename);
> + if ( fixup > 50 )
> + {
> + filename += fixup - 47;
> + prefix = "...";
> + }
> lineno = bug_line(bug);
>
> switch ( id )
> {
> case BUGFRAME_warn:
> - printk("Xen WARN at %.50s:%d\n", filename, lineno);
> + printk("Xen WARN at %s%s:%d\n", prefix, filename, lineno);
> show_execution_state(regs);
> regs->eip = (unsigned long)eip;
> return;
>
> case BUGFRAME_bug:
> - printk("Xen BUG at %.50s:%d\n", filename, lineno);
> + printk("Xen BUG at %s%s:%d\n", prefix, filename, lineno);
> DEBUGGER_trap_fatal(TRAP_invalid_op, regs);
> show_execution_state(regs);
> - panic("Xen BUG at %.50s:%d\n", filename, lineno);
> + panic("Xen BUG at %s%s:%d\n", prefix, filename, lineno);
>
> case BUGFRAME_assert:
> /* ASSERT: decode the predicate string pointer. */
> @@ -1018,12 +1024,12 @@ void do_invalid_op(struct cpu_user_regs
> if ( !is_kernel(predicate) )
> predicate = "<unknown>";
>
> - printk("Assertion '%s' failed at %.50s:%d\n",
> - predicate, filename, lineno);
> + printk("Assertion '%s' failed at %s%s:%d\n",
> + predicate, prefix, filename, lineno);
> DEBUGGER_trap_fatal(TRAP_invalid_op, regs);
> show_execution_state(regs);
> - panic("Assertion '%s' failed at %.50s:%d\n",
> - predicate, filename, lineno);
> + panic("Assertion '%s' failed at %s%s:%d\n",
> + predicate, prefix, filename, lineno);
> }
>
> die:
>
>
>
>
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xen.org
> http://lists.xen.org/xen-devel
[-- Attachment #1.2: Type: text/html, Size: 4218 bytes --]
[-- Attachment #2: Type: text/plain, Size: 126 bytes --]
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel
prev parent reply other threads:[~2013-10-16 15:57 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-10-16 15:25 [PATCH] x86: print relevant (tail) part of filename for warnings and crashes Jan Beulich
2013-10-16 15:52 ` Keir Fraser
2013-10-16 15:57 ` Andrew Cooper [this message]
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=525EB763.6030104@citrix.com \
--to=andrew.cooper3@citrix.com \
--cc=JBeulich@suse.com \
--cc=keir@xen.org \
--cc=xen-devel@lists.xenproject.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).