kernel_optimize_test/arch/x86_64/kernel
John Blackwood 01b8faaef5 [PATCH] x86_64: Report hardware breakpoints in user space when triggered by the kernel
I would like to throw out a suggestion for a possible change in the way that
the debug register traps are handled in do_debug() when the trap occurs
in kernel-mode.

In the x86_64 version of do_debug(), the code will skip around sending
a SIGTRAP to the current task if the trap occurred while in kernel mode.

On the i386-side of things, if the access happens to occur in kernel mode
(say during a read(2) of user's buffer that matches the address of a
debug register trap), then the do_debug() routine for i386 will go ahead
and call send_sigtrap() and send the SIGTRAP signal.  The send_sigtrap()
code will also set the info.si_addr to NULL in this case (even though I
don't understand why, since the SIGTRAP siginfo processing doesn't use
the si_addr field...).

So I would like to suggest that the x86_64 do_debug() routine also
follow this type of behavior and have it go ahead and send the
SIGTRAP signal to the current task, even if the debug register trap
happens to have occurred in kernel mode.  I have taken a stab at
a patch for this change below.  (It includes the i386-ish change
for setting si_addr to NULL when the trap occurred in kernel mode.)

It seems like a useful feature to be able to 'watch' a user location that
might also be modified in the kernel via a system service call, and have the
debugger report that information back to the user, rather than to just
silently ignore the trap.

Additionally, I realize that users that pull in a kernel debugger such as
KGDB into their kernel might want to remove this change below when they add
in KGDB support.  However, they could alternatively look at the current
task's thread.debugreg[] values to see if the trap occurred due to KGDB
or instead because of a user-space debugger trap, and still honor the
user SIGTRAP processing (instead of the KGDB breakpoint processing)
if the trap matches up with the thread.debugreg[] registers.

Signed-off-by: Andi Kleen <ak@suse.de>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2006-01-11 19:04:54 -08:00
..
acpi [PATCH] x86-64: more gratitious linux/irq.h includes 2005-09-12 10:50:58 -07:00
cpufreq Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
aperture.c [PATCH] x86_64: Fix gcc 4 warning in aperture.c 2005-11-14 19:55:14 -08:00
apic.c [PATCH] x86_64: Support for AMD specific MCE Threshold. 2005-11-14 19:55:13 -08:00
asm-offsets.c [PATCH] x86_64: Implement is_compat_task the right way 2006-01-11 19:04:53 -08:00
crash_dump.c [PATCH] kdump: read previous kernel's memory 2006-01-10 08:01:28 -08:00
crash.c [PATCH] kdump: x86_64 save cpu registers upon crash 2006-01-10 08:01:28 -08:00
e820.c [PATCH] kdump: x86_64: add memmmap command line option 2006-01-10 08:01:27 -08:00
early_printk.c [PATCH] x86-64: Add simnow console 2005-09-12 10:49:58 -07:00
entry.S [PATCH] x86_64: Implement is_compat_task the right way 2006-01-11 19:04:53 -08:00
genapic_cluster.c [PATCH] x86_64/i386: Remove preempt disable calls in lowlevel IPI 2006-01-11 19:01:57 -08:00
genapic_flat.c [PATCH] x86_64/i386: Remove preempt disable calls in lowlevel IPI 2006-01-11 19:01:57 -08:00
genapic.c [PATCH] x86-64: Use physflat on Intel for < 8 CPUs with CPU hotplug 2005-09-12 10:50:56 -07:00
head64.c [PATCH] x86_64: Only use asm/sections.h to declare section symbols 2005-11-14 19:55:14 -08:00
head.S [PATCH] x86_64: Align and pad x86_64 GDT on page boundary 2006-01-11 19:04:53 -08:00
i387.c [PATCH] x86_64: Change init sections for CPU hotplug support 2005-06-25 16:24:30 -07:00
i8259.c Merge x86-64 update from Andi 2005-11-14 19:56:02 -08:00
init_task.c [PATCH] Change maxaligned_in_smp alignemnt macros to internodealigned_in_smp macros 2006-01-08 20:13:38 -08:00
io_apic.c [PATCH] x86_64: Dont't disable early PCI scan with apic 2006-01-11 19:01:12 -08:00
ioport.c [PATCH] capable/capability.h (arch/) 2006-01-11 18:42:14 -08:00
irq.c [PATCH] Remove unnecessary BUG_ON in irq.c 2005-09-12 10:50:55 -07:00
kprobes.c [PATCH] kprobes: fix race in recovery of reentrant probe 2006-01-11 18:42:12 -08:00
ldt.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
machine_kexec.c [PATCH] x86_64 machine_kexec: Use standard pagetable helpers 2005-07-29 13:12:49 -07:00
Makefile [PATCH] x86_64: Generalize DMI and enable for x86-64 2006-01-11 19:04:51 -08:00
mce_amd.c [PATCH] x86_64: Support for AMD specific MCE Threshold. 2005-11-14 19:55:13 -08:00
mce_intel.c [PATCH] x86_64: Change init sections for CPU hotplug support 2005-06-25 16:24:30 -07:00
mce.c [PATCH] x86_64: increase MCE bank counts 2006-01-11 19:01:57 -08:00
module.c [PATCH] uml: kludgy compilation fixes for x86-64 subarch modules support 2005-05-05 16:36:33 -07:00
mpparse.c [PATCH] x86_64: Increase the maximum number of local APICs to the maximum 2005-11-14 19:55:17 -08:00
nmi.c [PATCH] x86_64: NMI watchdog frequency calculation adjustments 2005-09-13 08:22:33 -07:00
pci-dma.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
pci-gart.c [PATCH] x86_64: Add missing newline in IOMMU error message 2006-01-11 19:04:51 -08:00
pci-nommu.c [PATCH] gfp_t: dma-mapping (amd64) 2005-10-28 08:16:48 -07:00
pmtimer.c [PATCH] x86_64: Add pmtimer support 2005-05-17 07:59:15 -07:00
process.c [PATCH] x86_64: Remove enable/disable_hlt 2006-01-11 19:01:12 -08:00
ptrace.c [PATCH] consolidate sys_ptrace() 2005-11-07 07:53:42 -08:00
reboot.c [PATCH] i386/x86-64: Don't IPI to offline cpus on shutdown 2006-01-11 19:04:50 -08:00
relocate_kernel.S [PATCH] kexec: x86_64 kexec implementation 2005-06-25 16:24:50 -07:00
setup64.c [PATCH] x86_64: Align and pad x86_64 GDT on page boundary 2006-01-11 19:04:53 -08:00
setup.c [PATCH] x86_64: Generalize DMI and enable for x86-64 2006-01-11 19:04:51 -08:00
signal.c [PATCH] x86_64: Save/restore CS in 64bit signal handlers and force __USER_CS for CS 2005-11-14 19:55:15 -08:00
smp.c [PATCH] x86_64: Don't enable interrupt unconditionally in reboot path 2005-11-14 19:55:16 -08:00
smpboot.c [PATCH] x86_64: Align and pad x86_64 GDT on page boundary 2006-01-11 19:04:53 -08:00
suspend_asm.S [PATCH] x86_64: Set up safe page tables during resume 2005-10-10 08:36:46 -07:00
suspend.c [PATCH] x86_64: Align and pad x86_64 GDT on page boundary 2006-01-11 19:04:53 -08:00
sys_x86_64.c [PATCH] x86_64: Use common sys_time64 2005-11-14 19:55:17 -08:00
syscall.c [PATCH] x86/x86_64: mark rodata section read-only: make some datastructures const 2006-01-06 08:33:36 -08:00
time.c [PATCH] move rtc_interrupt() prototype to rtc.h 2006-01-08 20:13:47 -08:00
trampoline.S Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
traps.c [PATCH] x86_64: Report hardware breakpoints in user space when triggered by the kernel 2006-01-11 19:04:54 -08:00
vmlinux.lds.S [PATCH] x86_64: Allow compilation on a 32bit biarch toolchain 2006-01-11 19:04:52 -08:00
vsyscall.c [PATCH] x86-64: Prevent gcc 4 from optimizing away vsyscalls 2005-09-12 10:50:56 -07:00
x8664_ksyms.c [PATCH] don't include ioctl32.h in drivers 2006-01-10 08:01:34 -08:00