Fork us on GitHub Follow us on Facebook Follow us on Twitter

Changeset 08c88b84 in mainline


Ignore:
Timestamp:
2010-05-12T23:55:14Z (11 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master
Children:
989d3c2
Parents:
9929742
Message:

sparc64 kernel hooks for stack tracing.

Location:
kernel/arch/sparc64/src/debug
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/sparc64/src/debug/stacktrace.c

    r9929742 r08c88b84  
    3737#include <typedefs.h>
    3838
     39#include <arch/stack.h>
     40
     41#define FRAME_OFFSET_FP_PREV    14
     42#define FRAME_OFFSET_RA         15
     43
     44extern void alloc_window_and_flush(void);
     45
    3946bool kernel_frame_pointer_validate(uintptr_t fp)
    4047{
    41         return false;
     48        return fp != 0;
    4249}
    4350
    4451bool kernel_frame_pointer_prev(uintptr_t fp, uintptr_t *prev)
    4552{
    46         return false;
     53        uint64_t *stack = (void *) fp;
     54        alloc_window_and_flush();
     55        *prev = stack[FRAME_OFFSET_FP_PREV] + STACK_BIAS;
     56        return true;
    4757}
    4858
    4959bool kernel_return_address_get(uintptr_t fp, uintptr_t *ra)
    5060{
    51         return false;
     61        uint64_t *stack = (void *) fp;
     62        alloc_window_and_flush();
     63        *ra = stack[FRAME_OFFSET_RA];
     64        return true;
    5265}
    5366
  • kernel/arch/sparc64/src/debug/stacktrace_asm.S

    r9929742 r08c88b84  
    2727#
    2828
     29#include <arch/stack.h>
     30
    2931.text
    3032
    3133.global frame_pointer_get
    3234.global program_counter_get
     35.global alloc_window_and_flush
    3336
    3437frame_pointer_get:
     38        # Add the stack bias to %sp to get the actual address.
    3539        retl
    36         nop
     40        add %sp, STACK_BIAS, %o0
    3741
    3842program_counter_get:
    3943        retl
    40         nop
     44        mov %o7, %o0
    4145
     46alloc_window_and_flush:
     47        save %sp, -(STACK_WINDOW_SAVE_AREA_SIZE+STACK_ARG_SAVE_AREA_SIZE), %sp
     48        # Flush all other windows to memory so that we can read their contents.
     49        flushw
     50        ret
     51        restore
     52
Note: See TracChangeset for help on using the changeset viewer.