Subversion Repositories HelenOS-historic

Compare Revisions

Ignore whitespace Rev 665 → Rev 666

/kernel/trunk/tools/sparc64/gencontext.c
45,6 → 45,7
fprintf(f,"#define OFFSET_L5 0x%x\n",((int)&pctx->l5) - (int )pctx);
fprintf(f,"#define OFFSET_L6 0x%x\n",((int)&pctx->l6) - (int )pctx);
fprintf(f,"#define OFFSET_L7 0x%x\n",((int)&pctx->l7) - (int )pctx);
fprintf(f,"#define OFFSET_CLEANWIN 0x%x\n",((int)&pctx->cleanwin) - (int )pctx);
 
fclose(f);
 
/kernel/trunk/arch/sparc64/include/context_offset.h
18,3 → 18,4
#define OFFSET_L5 0x78
#define OFFSET_L6 0x80
#define OFFSET_L7 0x88
#define OFFSET_CLEANWIN 0x98
/kernel/trunk/arch/sparc64/include/trap/regwin.h
118,12 → 118,14
mov %r0, %l5
mov %r0, %l6
mov %r0, %l7
mov %r0, %i0
mov %r0, %i1
mov %r0, %i2
mov %r0, %i3
mov %r0, %i4
mov %r0, %i5
mov %r0, %o0
mov %r0, %o1
mov %r0, %o2
mov %r0, %o3
mov %r0, %o4
mov %r0, %o5
mov %r0, %o6
mov %r0, %o7
retry
.endm
#endif /* __ASM__ */
/kernel/trunk/arch/sparc64/include/trap/interrupt.h
34,6 → 34,7
#define __sparc64_INTERRUPT_H__
 
#include <arch/trap/trap_table.h>
#include <arch/stack.h>
 
#define TT_INTERRUPT_LEVEL_1 0x41
#define TT_INTERRUPT_LEVEL_2 0x42
58,12 → 59,10
 
#ifdef __ASM__
.macro INTERRUPT_LEVEL_N_HANDLER n
save %sp, -128, %sp
save %sp, -STACK_WINDOW_SAVE_AREA_SIZE, %sp
mov \n - 1, %o0
call exc_dispatch
mov %fp, %o1
restore
retry
SAVING_HANDLER exc_dispatch
.endm
 
.macro INTERRUPT_VECTOR_TRAP_HANDLER
/kernel/trunk/arch/sparc64/include/trap/trap_table.h
33,6 → 33,8
#include <arch/types.h>
#endif /* __ASM__ */
 
#include <arch/stack.h>
 
#define TRAP_TABLE_ENTRY_COUNT 1024
#define TRAP_TABLE_ENTRY_SIZE 32
#define TRAP_TABLE_SIZE (TRAP_TABLE_ENTRY_COUNT*TRAP_TABLE_ENTRY_SIZE)
48,4 → 50,32
extern trap_table_entry_t trap_table_save[TRAP_TABLE_ENTRY_COUNT];
#endif /* !__ASM__ */
 
#ifdef __ASM__
.macro SAVE_GLOBALS
mov %g1, %l1
mov %g2, %l2
mov %g3, %l3
mov %g4, %l4
mov %g5, %l5
mov %g6, %l6
mov %g7, %l7
.endm
 
.macro RESTORE_GLOBALS
mov %l1, %g1
mov %l2, %g2
mov %l3, %g3
mov %l4, %g4
mov %l5, %g5
mov %l6, %g6
mov %l7, %g7
.endm
 
.macro SAVING_HANDLER f
set \f, %l0
b saving_handler
nop
.endm
#endif /* __ASM__ */
 
#endif
/kernel/trunk/arch/sparc64/include/context.h
50,7 → 50,8
#define context_set(c, _pc, stack, size) \
(c)->pc = ((__address) _pc) - 8; \
(c)->sp = ((__address) stack) + ALIGN_UP((size), STACK_ALIGNMENT) - (STACK_BIAS + SP_DELTA); \
(c)->fp = -STACK_BIAS
(c)->fp = -STACK_BIAS; \
(c)->cleanwin = 0
 
/*
77,6 → 78,7
__u64 l6;
__u64 l7;
ipl_t ipl;
__u64 cleanwin;
};
 
#endif
/kernel/trunk/arch/sparc64/src/context.S
61,6 → 61,8
stx %l5, [\r + OFFSET_L5]
stx %l6, [\r + OFFSET_L6]
stx %l7, [\r + OFFSET_L7]
rdpr %cleanwin, %g1
stx %g1, [\r + OFFSET_CLEANWIN]
.endm
 
.macro CONTEXT_LOAD r
82,6 → 84,8
ldx [\r + OFFSET_L5], %l5
ldx [\r + OFFSET_L6], %l6
ldx [\r + OFFSET_L7], %l7
ldx [\r + OFFSET_CLEANWIN], %g1
wrpr %g1, %g0, %cleanwin
.endm
 
context_save_arch:
/kernel/trunk/arch/sparc64/src/trap/trap_table.S
37,7 → 37,12
* This arrangement is beneficial because kernel handlers stay on their
* link-time addresses which is good for debugging.
*/
 
.register %g2, #scratch
.register %g3, #scratch
.register %g6, #scratch
.register %g7, #scratch
 
.text
 
#include <arch/trap/trap_table.h>
202,3 → 207,20
.global trap_table_save
trap_table_save:
.space TABLE_SIZE, 0
 
 
/* Trap handler that explicitly saves global registers.
*
* Input registers:
* %l0 Address of function to call.
* Output registers:
* %l1 - %l7 Copy of %g1 - %g7
*/
.global saving_handler
saving_handler:
SAVE_GLOBALS
call %l0
nop
RESTORE_GLOBALS
restore /* matches the save instruction from the top-level handler */
retry
/kernel/trunk/arch/sparc64/src/panic.S
28,10 → 28,15
 
.text
 
#include <arch/stack.h>
 
.global panic_printf
panic_printf:
save %sp, -STACK_WINDOW_SAVE_AREA_SIZE, %sp
call printf
nop
call halt
nop
/* Not reached. */
restore