[haiku-commits] BRANCH xyzzy-github.x86_64 - src/system/kernel/arch/x86/64 build/jam

  • From: xyzzy-github.x86_64 <community@xxxxxxxxxxxx>
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Thu, 5 Jul 2012 16:49:07 +0200 (CEST)

added 1 changeset to branch 'refs/remotes/xyzzy-github/x86_64'
old head: 0da10c8b51f9ec443a53873b37d07fab30a5734e
new head: 898b29e3628ba9252c527e6296b88cf71d37b863

----------------------------------------------------------------------------

898b29e: Added temporary stack trace function to x86_64.
  
  Will be merged with the x86 one later on. Requires -fno-omit-frame-pointer on
  the kernel build flags, GCC defaults to not generating stack frames on x86_64.

                                      [ Alex Smith <alex@xxxxxxxxxxxxxxxx> ]

----------------------------------------------------------------------------

Commit:      898b29e3628ba9252c527e6296b88cf71d37b863

Author:      Alex Smith <alex@xxxxxxxxxxxxxxxx>
Date:        Thu Jul  5 14:35:43 2012 UTC

----------------------------------------------------------------------------

3 files changed, 35 insertions(+), 2 deletions(-)
build/jam/BuildSetup                    |    6 ++++--
src/system/kernel/arch/x86/64/arch.S    |    7 +++++++
src/system/kernel/arch/x86/64/stubs.cpp |   24 ++++++++++++++++++++++++

----------------------------------------------------------------------------

diff --git a/build/jam/BuildSetup b/build/jam/BuildSetup
index 1e924f0..d089717 100644
--- a/build/jam/BuildSetup
+++ b/build/jam/BuildSetup
@@ -391,8 +391,10 @@ switch $(HAIKU_ARCH) {
                # Kernel lives in the top 2GB of the address space, use kernel 
code
                # model. Also disable the red zone, which cannot be used in 
kernel
                # code due to interrupts.
-               HAIKU_KERNEL_CCFLAGS += -mcmodel=kernel -mno-red-zone ;
-               HAIKU_KERNEL_C++FLAGS += -mcmodel=kernel -mno-red-zone ;
+               HAIKU_KERNEL_CCFLAGS += -mcmodel=kernel -mno-red-zone
+                       -fno-omit-frame-pointer ;
+               HAIKU_KERNEL_C++FLAGS += -mcmodel=kernel -mno-red-zone
+                       -fno-omit-frame-pointer ;
                HAIKU_KERNEL_PIC_LINKFLAGS += -z max-page-size=0x1000 ;
 
                # Bootloader is 32-bit.
diff --git a/src/system/kernel/arch/x86/64/arch.S 
b/src/system/kernel/arch/x86/64/arch.S
index fcf7d26..eb51f75 100644
--- a/src/system/kernel/arch/x86/64/arch.S
+++ b/src/system/kernel/arch/x86/64/arch.S
@@ -32,6 +32,13 @@ FUNCTION(x86_fxsave_swap):
 FUNCTION_END(x86_fxsave_swap)
 
 
+/* addr_t x86_read_ebp(); */
+FUNCTION(x86_read_ebp):
+       mov             %rbp, %rax
+       ret
+FUNCTION_END(x86_read_ebp)
+
+
 /* uint64 x86_read_msr(uint32 register); */
 FUNCTION(x86_read_msr):
        mov             %edi, %ecx
diff --git a/src/system/kernel/arch/x86/64/stubs.cpp 
b/src/system/kernel/arch/x86/64/stubs.cpp
index 1802e92..fc77e25 100644
--- a/src/system/kernel/arch/x86/64/stubs.cpp
+++ b/src/system/kernel/arch/x86/64/stubs.cpp
@@ -85,10 +85,32 @@ arch_debug_save_registers(struct arch_debug_registers* 
registers)
 }
 
 
+struct stack_frame {
+       struct stack_frame      *previous;
+       addr_t                          return_address;
+};
+
+
 void
 arch_debug_stack_trace(void)
 {
+       addr_t rbp = x86_read_ebp();
+
+       kprintf("frame                       caller\n");
+
+       for (int32 callIndex = 0;; callIndex++) {
+               if (rbp == 0)
+                       break;
 
+               stack_frame* frame = (stack_frame*)rbp;
+               if (frame->return_address == 0)
+                       break;
+
+               kprintf("%2d %016lx (+%4ld) %016lx\n", callIndex, rbp,
+                       (addr_t)frame->previous - rbp, frame->return_address);
+
+               rbp = (addr_t)frame->previous;
+       }
 }
 
 
@@ -168,6 +190,8 @@ arch_debug_call_with_fault_handler(cpu_ent* cpu, jmp_buf 
jumpBuffer,
        void (*function)(void*), void* parameter)
 {
        // To be implemented in asm, not here.
+
+       function(parameter);
 }
 
 


Other related posts:

  • » [haiku-commits] BRANCH xyzzy-github.x86_64 - src/system/kernel/arch/x86/64 build/jam - xyzzy-github . x86_64