aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/mm
diff options
context:
space:
mode:
authorAndi Kleen <ak@suse.de>2008-01-30 07:33:18 -0500
committerIngo Molnar <mingo@elte.hu>2008-01-30 07:33:18 -0500
commit03252919b79891063cf99145612360efbdf9500b (patch)
treea80dc0c89448308d75d247446a5a04c84cb708a6 /arch/x86/mm
parentd3432896dae72ee97deb850ad7bbc30329d32c0d (diff)
x86: print which shared library/executable faulted in segfault etc. messages v3
They now look like: hal-resmgr[13791]: segfault at 3c rip 2b9c8caec182 rsp 7fff1e825d30 error 4 in libacl.so.1.1.0[2b9c8caea000+6000] This makes it easier to pinpoint bugs to specific libraries. And printing the offset into a mapping also always allows to find the correct fault point in a library even with randomized mappings. Previously there was no way to actually find the correct code address inside the randomized mapping. Relies on earlier patch to shorten the printk formats. They are often now longer than 80 characters, but I think that's worth it. [includes fix from Eric Dumazet to check d_path error value] Signed-off-by: Andi Kleen <ak@suse.de> Signed-off-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'arch/x86/mm')
-rw-r--r--arch/x86/mm/fault_32.c4
-rw-r--r--arch/x86/mm/fault_64.c4
2 files changed, 6 insertions, 2 deletions
diff --git a/arch/x86/mm/fault_32.c b/arch/x86/mm/fault_32.c
index 13d295506a17..276863dc4bdd 100644
--- a/arch/x86/mm/fault_32.c
+++ b/arch/x86/mm/fault_32.c
@@ -514,11 +514,13 @@ bad_area_nosemaphore:
514#ifdef CONFIG_X86_32 514#ifdef CONFIG_X86_32
515 "%s%s[%d]: segfault at %lx ip %08lx sp %08lx error %lx", 515 "%s%s[%d]: segfault at %lx ip %08lx sp %08lx error %lx",
516#else 516#else
517 "%s%s[%d]: segfault at %lx ip %lx sp %lx error %lx\n", 517 "%s%s[%d]: segfault at %lx ip %lx sp %lx error %lx",
518#endif 518#endif
519 task_pid_nr(tsk) > 1 ? KERN_INFO : KERN_EMERG, 519 task_pid_nr(tsk) > 1 ? KERN_INFO : KERN_EMERG,
520 tsk->comm, task_pid_nr(tsk), address, regs->ip, 520 tsk->comm, task_pid_nr(tsk), address, regs->ip,
521 regs->sp, error_code); 521 regs->sp, error_code);
522 print_vma_addr(" in ", regs->ip);
523 printk("\n");
522 } 524 }
523 tsk->thread.cr2 = address; 525 tsk->thread.cr2 = address;
524 /* Kernel addresses are always protection faults */ 526 /* Kernel addresses are always protection faults */
diff --git a/arch/x86/mm/fault_64.c b/arch/x86/mm/fault_64.c
index b606bdefbb72..9ef0306efe9e 100644
--- a/arch/x86/mm/fault_64.c
+++ b/arch/x86/mm/fault_64.c
@@ -552,11 +552,13 @@ bad_area_nosemaphore:
552#ifdef CONFIG_X86_32 552#ifdef CONFIG_X86_32
553 "%s%s[%d]: segfault at %lx ip %08lx sp %08lx error %lx", 553 "%s%s[%d]: segfault at %lx ip %08lx sp %08lx error %lx",
554#else 554#else
555 "%s%s[%d]: segfault at %lx ip %lx sp %lx error %lx\n", 555 "%s%s[%d]: segfault at %lx ip %lx sp %lx error %lx",
556#endif 556#endif
557 task_pid_nr(tsk) > 1 ? KERN_INFO : KERN_EMERG, 557 task_pid_nr(tsk) > 1 ? KERN_INFO : KERN_EMERG,
558 tsk->comm, task_pid_nr(tsk), address, regs->ip, 558 tsk->comm, task_pid_nr(tsk), address, regs->ip,
559 regs->sp, error_code); 559 regs->sp, error_code);
560 print_vma_addr(" in ", regs->ip);
561 printk("\n");
560 } 562 }
561 563
562 tsk->thread.cr2 = address; 564 tsk->thread.cr2 = address;