diff options
author | jia zhang <jia.zhang2008@gmail.com> | 2008-11-23 22:47:10 +0800 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-11-23 20:03:36 +0100 |
commit | 5f5db591326779a80cfe490c5d6b6ce9fac08b31 (patch) | |
tree | 4d599ae5e0439050c13023a47b2ee71443efd5e9 /arch/x86 | |
parent | f377fa123d0ec621e8e361ecc3f2a8ee70e81a2e (diff) | |
download | op-kernel-dev-5f5db591326779a80cfe490c5d6b6ce9fac08b31.zip op-kernel-dev-5f5db591326779a80cfe490c5d6b6ce9fac08b31.tar.gz |
x86, debug: remove the confusing entry in call trace
Impact: improve backtrace quality
avoid the confusion in call trace because of the lack of padding at the
tail of function.
When do_exit gets called, the return address behind call instruction is
pushed into stack. If something get wrong in do_exit, for x86_64, the
entry "kernel_execve +0x00/0xXX" rather than "child_rip +0xYY/0xZZ" is
in the call trace.
That looks confusing, so add a u2d to make the return address still part
of the original call site. (This also catches any instances of us returning
from that function somehow.)
Signed-off-by: jia zhang <jia.zhang2008@gmail.com>
Acked-by: Alexander van Heukelum <heukelum@fastmail.fm>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/x86')
-rw-r--r-- | arch/x86/kernel/entry_32.S | 1 | ||||
-rw-r--r-- | arch/x86/kernel/entry_64.S | 1 |
2 files changed, 2 insertions, 0 deletions
diff --git a/arch/x86/kernel/entry_32.S b/arch/x86/kernel/entry_32.S index 28b597e..f6402c4 100644 --- a/arch/x86/kernel/entry_32.S +++ b/arch/x86/kernel/entry_32.S @@ -1051,6 +1051,7 @@ ENTRY(kernel_thread_helper) push %eax CFI_ADJUST_CFA_OFFSET 4 call do_exit + ud2 # padding for call trace CFI_ENDPROC ENDPROC(kernel_thread_helper) diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S index ddeeb10..4a16bf3 100644 --- a/arch/x86/kernel/entry_64.S +++ b/arch/x86/kernel/entry_64.S @@ -1172,6 +1172,7 @@ child_rip: # exit mov %eax, %edi call do_exit + ud2 # padding for call trace CFI_ENDPROC ENDPROC(child_rip) |