Changeset 414f59c in mainline
- Timestamp:
- 2005-12-01T20:27:22Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 8ac5fe7
- Parents:
- 22e10ab
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
arch/sparc64/include/context.h
r22e10ab r414f59c 48 48 #endif 49 49 50 #define context_set(c, _pc, stack, size) \ 51 (c)->pc = ((__address) _pc) - 8; \ 52 (c)->sp = ((__address) stack) + ALIGN((size), STACK_ALIGNMENT) - (STACK_BIAS + SP_DELTA) 50 #define context_set(c, _pc, stack, size) \ 51 (c)->pc = ((__address) _pc) - 8; \ 52 (c)->sp = ((__address) stack) + ALIGN((size), STACK_ALIGNMENT) - (STACK_BIAS + SP_DELTA); \ 53 (c)->fp = -STACK_BIAS 54 53 55 54 56 /* … … 65 67 __address sp; /* %o6 */ 66 68 __address pc; /* %o7 */ 69 __address fp; 67 70 ipl_t ipl; 68 71 }; -
arch/sparc64/include/context_offset.h
r22e10ab r414f59c 8 8 #define OFFSET_SP 0x28 9 9 #define OFFSET_PC 0x30 10 #define OFFSET_FP 0x38 -
arch/sparc64/src/context.S
r22e10ab r414f59c 29 29 #include <arch/context_offset.h> 30 30 #include <arch/stack.h> 31 32 /** 33 * Both context_save_arch() and context_restore_arch() are 34 * leaf-optimized procedures. Both of them touch %sp and 35 * %fp and thus break SCD 2.4 compliance. However, these 36 * functions are special enough to be allowed this 37 * kind of behavior. Moreover, this kind of optimization 38 * is very important and prevents any window spill/ 39 * fill/clean traps in these very core kernel functions. 40 */ 31 41 32 42 .text … … 36 46 37 47 .macro CONTEXT_STORE r 38 stx %o1, [\r + OFFSET_ I1]39 stx %o2, [\r + OFFSET_ I2]40 stx %o3, [\r + OFFSET_ I3]41 stx %o4, [\r + OFFSET_ I4]42 stx %o5, [\r + OFFSET_ I5]48 stx %o1, [\r + OFFSET_O1] 49 stx %o2, [\r + OFFSET_O2] 50 stx %o3, [\r + OFFSET_O3] 51 stx %o4, [\r + OFFSET_O4] 52 stx %o5, [\r + OFFSET_O5] 43 53 stx %o7, [\r + OFFSET_PC] 44 54 stx %sp, [\r + OFFSET_SP] 55 stx %fp, [\r + OFFSET_FP] 45 56 .endm 46 57 47 58 .macro CONTEXT_LOAD r 48 ldx [\r + OFFSET_ I1], %o149 ldx [\r + OFFSET_ I2], %o250 ldx [\r + OFFSET_ I3], %o351 ldx [\r + OFFSET_ I4], %o452 ldx [\r + OFFSET_ I5], %o559 ldx [\r + OFFSET_O1], %o1 60 ldx [\r + OFFSET_O2], %o2 61 ldx [\r + OFFSET_O3], %o3 62 ldx [\r + OFFSET_O4], %o4 63 ldx [\r + OFFSET_O5], %o5 53 64 ldx [\r + OFFSET_PC], %o7 54 65 ldx [\r + OFFSET_SP], %sp 66 ldx [\r + OFFSET_FP], %fp 55 67 .endm 56 68 57 58 69 context_save_arch: 59 70 CONTEXT_STORE %o0 60 61 # context_save returns 162 71 retl 63 mov 1, %o0 72 mov 1, %o0 ! context_save_arch returns 1 64 73 65 74 context_restore_arch: 75 # 76 # Flush all active windows. 77 # This is essential, because CONTEXT_LOAD overwrites 78 # %sp of CWP - 1 with the value written to %fp of CWP. 79 # Flushing all active windows mitigates this problem 80 # as CWP - 1 becomes the overlap window. 81 # 82 flushw 83 66 84 CONTEXT_LOAD %o0 67 68 # context_restore returns 069 85 retl 70 xor %o0, %o0, %o0 86 xor %o0, %o0, %o0 ! context_restore_arch returns 0 -
tools/sparc64/gencontext.c
r22e10ab r414f59c 35 35 fprintf(f,"#define OFFSET_SP 0x%x\n",((int)&pctx->sp) - (int )pctx); 36 36 fprintf(f,"#define OFFSET_PC 0x%x\n",((int)&pctx->pc) - (int )pctx); 37 fprintf(f,"#define OFFSET_FP 0x%x\n",((int)&pctx->fp) - (int )pctx); 37 38 38 39 fclose(f);
Note:
See TracChangeset
for help on using the changeset viewer.