From: Dave Hansen <dave.han...@linux.intel.com> This is the first in a series of MPX tracing patches. I've found these extremely useful in the process of debugging applications and the kernel code itself.
This exception hooks in to the bounds (#BR) exception very early and allows capturing the key registers which would influence how the exception is handled. Note that bndcfgu/bndstatus are technically still 64-bit registers even in 32-bit mode. Signed-off-by: Dave Hansen <dave.han...@linux.intel.com> Reviewed-by: Thomas Gleixner <t...@linutronix.de> --- b/arch/x86/include/asm/trace/mpx.h | 49 +++++++++++++++++++++++++++++++++++++ b/arch/x86/kernel/traps.c | 2 + b/arch/x86/mm/mpx.c | 3 ++ 3 files changed, 54 insertions(+) diff -puN /dev/null arch/x86/include/asm/trace/mpx.h --- /dev/null 2015-05-12 13:41:03.717682868 -0700 +++ b/arch/x86/include/asm/trace/mpx.h 2015-05-27 09:32:17.502579169 -0700 @@ -0,0 +1,49 @@ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM mpx + +#if !defined(_TRACE_MPX_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_MPX_H + +#include <linux/tracepoint.h> + +#ifdef CONFIG_X86_INTEL_MPX + +TRACE_EVENT(bounds_exception_mpx, + + TP_PROTO(struct bndcsr *bndcsr), + TP_ARGS(bndcsr), + + TP_STRUCT__entry( + __field(u64, bndcfgu) + __field(u64, bndstatus) + ), + + TP_fast_assign( + __entry->bndcfgu = bndcsr->bndcfgu; + __entry->bndstatus = bndcsr->bndstatus; + ), + + TP_printk("bndcfgu:0x%llx bndstatus:0x%llx", + __entry->bndcfgu, + __entry->bndstatus) +); + +#else + +/* + * This gets used outside of MPX-specific code, so we need a stub. + */ +static inline void trace_bounds_exception_mpx(struct bndcsr *bndcsr) +{ +} + +#endif /* CONFIG_X86_INTEL_MPX */ + +#undef TRACE_INCLUDE_PATH +#define TRACE_INCLUDE_PATH asm/trace/ +#undef TRACE_INCLUDE_FILE +#define TRACE_INCLUDE_FILE mpx +#endif /* _TRACE_MPX_H */ + +/* This part must be outside protection */ +#include <trace/define_trace.h> diff -puN arch/x86/kernel/traps.c~x86-br-exception-trace arch/x86/kernel/traps.c --- a/arch/x86/kernel/traps.c~x86-br-exception-trace 2015-05-27 09:32:17.497578943 -0700 +++ b/arch/x86/kernel/traps.c 2015-05-27 09:32:17.502579169 -0700 @@ -60,6 +60,7 @@ #include <asm/mach_traps.h> #include <asm/alternative.h> #include <asm/fpu/xstate.h> +#include <asm/trace/mpx.h> #include <asm/mpx.h> #ifdef CONFIG_X86_64 @@ -399,6 +400,7 @@ dotraplinkage void do_bounds(struct pt_r if (!bndcsr) goto exit_trap; + trace_bounds_exception_mpx(bndcsr); /* * The error code field of the BNDSTATUS register communicates status * information of a bound range exception #BR or operation involving diff -puN arch/x86/mm/mpx.c~x86-br-exception-trace arch/x86/mm/mpx.c --- a/arch/x86/mm/mpx.c~x86-br-exception-trace 2015-05-27 09:32:17.499579033 -0700 +++ b/arch/x86/mm/mpx.c 2015-05-27 09:32:17.503579214 -0700 @@ -17,6 +17,9 @@ #include <asm/processor.h> #include <asm/fpu/internal.h> +#define CREATE_TRACE_POINTS +#include <asm/trace/mpx.h> + static const char *mpx_mapping_name(struct vm_area_struct *vma) { return "[mpx]"; _ -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/