From 7b3fd0f06fb373191146f27003ae529f1e67cf11 Mon Sep 17 00:00:00 2001 From: Jonas 'Sortie' Termansen Date: Sat, 26 Jan 2013 00:15:15 +0100 Subject: [PATCH] Support doing kernel calltraces on another stack. --- sortix/calltrace.cpp | 8 ++++---- sortix/calltrace.h | 6 ++++-- sortix/x64/calltrace.s | 9 +++++++-- sortix/x86/calltrace.s | 9 +++++++-- 4 files changed, 22 insertions(+), 10 deletions(-) diff --git a/sortix/calltrace.cpp b/sortix/calltrace.cpp index d0a1d186..855d04b6 100644 --- a/sortix/calltrace.cpp +++ b/sortix/calltrace.cpp @@ -1,6 +1,6 @@ /******************************************************************************* - Copyright(C) Jonas 'Sortie' Termansen 2012. + Copyright(C) Jonas 'Sortie' Termansen 2012, 2013. This file is part of Sortix. @@ -28,16 +28,16 @@ namespace Sortix { namespace Calltrace { -extern "C" void calltrace(); +extern "C" void calltrace(unsigned long ptr); extern "C" void calltrace_print_function(size_t index, addr_t ip) { Log::PrintF("%zu: 0x%zx\n", index, ip); } -void Perform() +void Perform(unsigned long ptr) { Log::PrintF("Calltrace:\n"); - calltrace(); + calltrace(ptr); } } // namespace Calltrace diff --git a/sortix/calltrace.h b/sortix/calltrace.h index fefaf5ef..8ebfa420 100644 --- a/sortix/calltrace.h +++ b/sortix/calltrace.h @@ -1,6 +1,6 @@ /******************************************************************************* - Copyright(C) Jonas 'Sortie' Termansen 2012. + Copyright(C) Jonas 'Sortie' Termansen 2012, 2013. This file is part of Sortix. @@ -27,7 +27,9 @@ namespace Sortix { namespace Calltrace { -void Perform(); + +void Perform(unsigned long ptr = 0); + } // namespace Calltrace } // namespace Sortix diff --git a/sortix/x64/calltrace.s b/sortix/x64/calltrace.s index 418bf8d9..2cc976a2 100644 --- a/sortix/x64/calltrace.s +++ b/sortix/x64/calltrace.s @@ -1,6 +1,6 @@ /******************************************************************************* - Copyright(C) Jonas 'Sortie' Termansen 2011, 2012. + Copyright(C) Jonas 'Sortie' Termansen 2012, 2013. This file is part of Sortix. @@ -31,8 +31,13 @@ calltrace: push %rbp push %rbx movq %rsp, %rbp - xorl %edi, %edi + push %rbx + movq %rdi, %rbx + testq %rbx, %rbx + jnz 1f movq %rbp, %rbx +1: + xorl %edi, %edi calltrace_unwind: testq %rbx, %rbx diff --git a/sortix/x86/calltrace.s b/sortix/x86/calltrace.s index 08647bc8..6df77f49 100644 --- a/sortix/x86/calltrace.s +++ b/sortix/x86/calltrace.s @@ -1,6 +1,6 @@ /******************************************************************************* - Copyright(C) Jonas 'Sortie' Termansen 2011, 2012. + Copyright(C) Jonas 'Sortie' Termansen 2012, 2013. This file is part of Sortix. @@ -31,8 +31,13 @@ calltrace: push %ebp push %ebx movl %esp, %ebp - xorl %edi, %edi + push %ebx + movl 8(%ebp), %ebx + testl %ebx, %ebx + jnz 1f movl %ebp, %ebx +1: + xorl %edi, %edi calltrace_unwind: testl %ebx, %ebx