xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
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

      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).