asm_riscv64.s (go1.19.src) | : | asm_riscv64.s (go1.19.1.src) | ||
---|---|---|---|---|
skipping to change at line 161 | skipping to change at line 161 | |||
TEXT runtime·getcallerpc(SB),NOSPLIT|NOFRAME,$0-8 | TEXT runtime·getcallerpc(SB),NOSPLIT|NOFRAME,$0-8 | |||
MOV 0(X2), T0 // LR saved by caller | MOV 0(X2), T0 // LR saved by caller | |||
MOV T0, ret+0(FP) | MOV T0, ret+0(FP) | |||
RET | RET | |||
/* | /* | |||
* support for morestack | * support for morestack | |||
*/ | */ | |||
// Called during function prolog when more stack is needed. | // Called during function prolog when more stack is needed. | |||
// Caller has already loaded: | // Called with return address (i.e. caller's PC) in X5 (aka T0), | |||
// R1: framesize, R2: argsize, R3: LR | // and the LR register contains the caller's LR. | |||
// | // | |||
// The traceback routines see morestack on a g0 as being | // The traceback routines see morestack on a g0 as being | |||
// the top of a stack (for example, morestack calling newstack | // the top of a stack (for example, morestack calling newstack | |||
// calling the scheduler calling newm calling gc), so we must | // calling the scheduler calling newm calling gc), so we must | |||
// record an argument size. For that purpose, it has no arguments. | // record an argument size. For that purpose, it has no arguments. | |||
// func morestack() | // func morestack() | |||
TEXT runtime·morestack(SB),NOSPLIT|NOFRAME,$0-0 | TEXT runtime·morestack(SB),NOSPLIT|NOFRAME,$0-0 | |||
// Cannot grow scheduler stack (m->g0). | // Cannot grow scheduler stack (m->g0). | |||
MOV g_m(g), A0 | MOV g_m(g), A0 | |||
skipping to change at line 212 | skipping to change at line 212 | |||
MOV ZERO, -8(X2) // Zero saved LR in frame | MOV ZERO, -8(X2) // Zero saved LR in frame | |||
ADD $-8, X2 | ADD $-8, X2 | |||
CALL runtime·newstack(SB) | CALL runtime·newstack(SB) | |||
// Not reached, but make sure the return PC from the call to newstack | // Not reached, but make sure the return PC from the call to newstack | |||
// is still in this function, and not the beginning of the next. | // is still in this function, and not the beginning of the next. | |||
UNDEF | UNDEF | |||
// func morestack_noctxt() | // func morestack_noctxt() | |||
TEXT runtime·morestack_noctxt(SB),NOSPLIT|NOFRAME,$0-0 | TEXT runtime·morestack_noctxt(SB),NOSPLIT|NOFRAME,$0-0 | |||
// Force SPWRITE. This function doesn't actually write SP, | ||||
// but it is called with a special calling convention where | ||||
// the caller doesn't save LR on stack but passes it as a | ||||
// register, and the unwinder currently doesn't understand. | ||||
// Make it SPWRITE to stop unwinding. (See issue 54332) | ||||
MOV X2, X2 | ||||
MOV ZERO, CTXT | MOV ZERO, CTXT | |||
JMP runtime·morestack(SB) | JMP runtime·morestack(SB) | |||
// AES hashing not implemented for riscv64 | // AES hashing not implemented for riscv64 | |||
TEXT runtime·memhash<ABIInternal>(SB),NOSPLIT|NOFRAME,$0-32 | TEXT runtime·memhash<ABIInternal>(SB),NOSPLIT|NOFRAME,$0-32 | |||
JMP runtime·memhashFallback<ABIInternal>(SB) | JMP runtime·memhashFallback<ABIInternal>(SB) | |||
TEXT runtime·strhash<ABIInternal>(SB),NOSPLIT|NOFRAME,$0-24 | TEXT runtime·strhash<ABIInternal>(SB),NOSPLIT|NOFRAME,$0-24 | |||
JMP runtime·strhashFallback<ABIInternal>(SB) | JMP runtime·strhashFallback<ABIInternal>(SB) | |||
TEXT runtime·memhash32<ABIInternal>(SB),NOSPLIT|NOFRAME,$0-24 | TEXT runtime·memhash32<ABIInternal>(SB),NOSPLIT|NOFRAME,$0-24 | |||
JMP runtime·memhash32Fallback<ABIInternal>(SB) | JMP runtime·memhash32Fallback<ABIInternal>(SB) | |||
End of changes. 2 change blocks. | ||||
2 lines changed or deleted | 9 lines changed or added |