public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] Interrupt entry CONFIG_FRAME_POINTER fix
@ 2004-09-12  9:16 Tejun Heo
  2004-09-12 11:24 ` Andi Kleen
  0 siblings, 1 reply; 5+ messages in thread
From: Tejun Heo @ 2004-09-12  9:16 UTC (permalink / raw)
  To: linux-kernel; +Cc: ak

[-- Attachment #1: Type: text/plain, Size: 276 bytes --]

 On x86_64, rbp isn't saved on entering interrupt handler even when
CONFIG_FRAME_POINTER is turned on.  This breaks profile_pc()
(resulting in oops) which uses regs->rbp to track back to the original
stack.  Save full stack when CONFIG_FRAME_POINTER is specified.

-- 
tejun


[-- Attachment #2: x86_64_frame_pointer.patch --]
[-- Type: text/plain, Size: 1634 bytes --]

# This is a BitKeeper generated diff -Nru style patch.
#
# ChangeSet
#   2004/09/12 16:38:06+09:00 tj@htj.dyndns.org 
#   On x86_64, rbp isn't saved on entering interrupt handler even when
#   CONFIG_FRAME_POINTER is turned on.  This breaks profile_pc() which
#   uses regs->rbp to track back to the original stack.  Save full stack
#   when CONFIG_FRAME_POINTER is specified.
# 
# arch/x86_64/kernel/entry.S
#   2004/09/12 16:37:55+09:00 tj@htj.dyndns.org +10 -4
#   On x86_64, rbp isn't saved on entering interrupt handler even when
#   CONFIG_FRAME_POINTER is turned on.  This breaks profile_pc() which
#   uses regs->rbp to track back to the original stack.  Save full stack
#   when CONFIG_FRAME_POINTER is specified.
# 
diff -Nru a/arch/x86_64/kernel/entry.S b/arch/x86_64/kernel/entry.S
--- a/arch/x86_64/kernel/entry.S	2004-09-12 18:05:16 +09:00
+++ b/arch/x86_64/kernel/entry.S	2004-09-12 18:05:16 +09:00
@@ -410,8 +410,8 @@
 	CFI_REL_OFFSET	rsp,(RSP-ORIG_RAX)
 	CFI_REL_OFFSET	rip,(RIP-ORIG_RAX)
 	cld
-#ifdef CONFIG_DEBUG_INFO
-	SAVE_ALL	
+#if defined(CONFIG_DEBUG_INFO)
+	SAVE_ALL
 	movq %rsp,%rdi
 	/*
 	 * Setup a stack frame pointer.  This allows gdb to trace
@@ -419,10 +419,16 @@
 	 */
 	movq %rsp,%rbp
 	CFI_DEF_CFA_REGISTER	rbp
-#else		
+#elif defined(CONFIG_FRAME_POINTER)
+	/* Save full stack frame such that interrupt handlers can trace
+	 * back to the original stack using regs->rbp.  Currently,
+	 * profile_pc() uses it when CONFIG_SMP is also turned on. */
+	SAVE_ALL
+	movq %rsp,%rdi
+#else
 	SAVE_ARGS
 	leaq -ARGOFFSET(%rsp),%rdi	# arg1 for handler
-#endif	
+#endif
 	testl $3,CS(%rdi)
 	je 1f
 	swapgs	

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2004-09-12 18:11 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-09-12  9:16 [PATCH] Interrupt entry CONFIG_FRAME_POINTER fix Tejun Heo
2004-09-12 11:24 ` Andi Kleen
2004-09-12 14:38   ` Tejun Heo
2004-09-12 17:10   ` Zwane Mwaikambo
2004-09-12 18:11     ` Tejun Heo

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox