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 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 = ""; > > - 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