mirror of https://github.com/golang/go.git
runtime: don't mark the new call trampolines as NOSPLIT.
They may call other NOSPLIT routines, and that might overflow the stack. R=golang-dev, rsc CC=golang-dev https://golang.org/cl/12563043
This commit is contained in:
parent
b29d035fe6
commit
12e46e42ec
|
|
@ -336,8 +336,8 @@ TEXT reflect·call(SB), 7, $0-12
|
|||
MOVL $runtime·badreflectcall(SB), AX
|
||||
JMP AX
|
||||
|
||||
#define CALLFN(NAME,MAXSIZE,FLAGS) \
|
||||
TEXT runtime·NAME(SB), FLAGS, $MAXSIZE-12; \
|
||||
#define CALLFN(NAME,MAXSIZE) \
|
||||
TEXT runtime·NAME(SB), 0, $MAXSIZE-12; \
|
||||
/* copy arguments to stack */ \
|
||||
MOVL argptr+4(FP), SI; \
|
||||
MOVL argsize+8(FP), CX; \
|
||||
|
|
@ -353,33 +353,33 @@ TEXT runtime·NAME(SB), FLAGS, $MAXSIZE-12; \
|
|||
REP;MOVSB; \
|
||||
RET
|
||||
|
||||
CALLFN(call16, 16, 7)
|
||||
CALLFN(call32, 32, 7)
|
||||
CALLFN(call64, 64, 7)
|
||||
CALLFN(call128, 128, 0)
|
||||
CALLFN(call256, 256, 0)
|
||||
CALLFN(call512, 512, 0)
|
||||
CALLFN(call1024, 1024, 0)
|
||||
CALLFN(call2048, 2048, 0)
|
||||
CALLFN(call4096, 4096, 0)
|
||||
CALLFN(call8192, 8192, 0)
|
||||
CALLFN(call16384, 16384, 0)
|
||||
CALLFN(call32768, 32768, 0)
|
||||
CALLFN(call65536, 65536, 0)
|
||||
CALLFN(call131072, 131072, 0)
|
||||
CALLFN(call262144, 262144, 0)
|
||||
CALLFN(call524288, 524288, 0)
|
||||
CALLFN(call1048576, 1048576, 0)
|
||||
CALLFN(call2097152, 2097152, 0)
|
||||
CALLFN(call4194304, 4194304, 0)
|
||||
CALLFN(call8388608, 8388608, 0)
|
||||
CALLFN(call16777216, 16777216, 0)
|
||||
CALLFN(call33554432, 33554432, 0)
|
||||
CALLFN(call67108864, 67108864, 0)
|
||||
CALLFN(call134217728, 134217728, 0)
|
||||
CALLFN(call268435456, 268435456, 0)
|
||||
CALLFN(call536870912, 536870912, 0)
|
||||
CALLFN(call1073741824, 1073741824, 0)
|
||||
CALLFN(call16, 16)
|
||||
CALLFN(call32, 32)
|
||||
CALLFN(call64, 64)
|
||||
CALLFN(call128, 128)
|
||||
CALLFN(call256, 256)
|
||||
CALLFN(call512, 512)
|
||||
CALLFN(call1024, 1024)
|
||||
CALLFN(call2048, 2048)
|
||||
CALLFN(call4096, 4096)
|
||||
CALLFN(call8192, 8192)
|
||||
CALLFN(call16384, 16384)
|
||||
CALLFN(call32768, 32768)
|
||||
CALLFN(call65536, 65536)
|
||||
CALLFN(call131072, 131072)
|
||||
CALLFN(call262144, 262144)
|
||||
CALLFN(call524288, 524288)
|
||||
CALLFN(call1048576, 1048576)
|
||||
CALLFN(call2097152, 2097152)
|
||||
CALLFN(call4194304, 4194304)
|
||||
CALLFN(call8388608, 8388608)
|
||||
CALLFN(call16777216, 16777216)
|
||||
CALLFN(call33554432, 33554432)
|
||||
CALLFN(call67108864, 67108864)
|
||||
CALLFN(call134217728, 134217728)
|
||||
CALLFN(call268435456, 268435456)
|
||||
CALLFN(call536870912, 536870912)
|
||||
CALLFN(call1073741824, 1073741824)
|
||||
|
||||
// Return point when leaving stack.
|
||||
//
|
||||
|
|
|
|||
|
|
@ -317,8 +317,8 @@ TEXT reflect·call(SB), 7, $0-20
|
|||
MOVQ $runtime·badreflectcall(SB), AX
|
||||
JMP AX
|
||||
|
||||
#define CALLFN(NAME,MAXSIZE,FLAGS) \
|
||||
TEXT runtime·NAME(SB), FLAGS, $MAXSIZE-20; \
|
||||
#define CALLFN(NAME,MAXSIZE) \
|
||||
TEXT runtime·NAME(SB), 0, $MAXSIZE-20; \
|
||||
/* copy arguments to stack */ \
|
||||
MOVQ argptr+8(FP), SI; \
|
||||
MOVLQZX argsize+16(FP), CX; \
|
||||
|
|
@ -334,33 +334,33 @@ TEXT runtime·NAME(SB), FLAGS, $MAXSIZE-20; \
|
|||
REP;MOVSB; \
|
||||
RET
|
||||
|
||||
CALLFN(call16, 16, 7)
|
||||
CALLFN(call32, 32, 7)
|
||||
CALLFN(call64, 64, 7)
|
||||
CALLFN(call128, 128, 0)
|
||||
CALLFN(call256, 256, 0)
|
||||
CALLFN(call512, 512, 0)
|
||||
CALLFN(call1024, 1024, 0)
|
||||
CALLFN(call2048, 2048, 0)
|
||||
CALLFN(call4096, 4096, 0)
|
||||
CALLFN(call8192, 8192, 0)
|
||||
CALLFN(call16384, 16384, 0)
|
||||
CALLFN(call32768, 32768, 0)
|
||||
CALLFN(call65536, 65536, 0)
|
||||
CALLFN(call131072, 131072, 0)
|
||||
CALLFN(call262144, 262144, 0)
|
||||
CALLFN(call524288, 524288, 0)
|
||||
CALLFN(call1048576, 1048576, 0)
|
||||
CALLFN(call2097152, 2097152, 0)
|
||||
CALLFN(call4194304, 4194304, 0)
|
||||
CALLFN(call8388608, 8388608, 0)
|
||||
CALLFN(call16777216, 16777216, 0)
|
||||
CALLFN(call33554432, 33554432, 0)
|
||||
CALLFN(call67108864, 67108864, 0)
|
||||
CALLFN(call134217728, 134217728, 0)
|
||||
CALLFN(call268435456, 268435456, 0)
|
||||
CALLFN(call536870912, 536870912, 0)
|
||||
CALLFN(call1073741824, 1073741824, 0)
|
||||
CALLFN(call16, 16)
|
||||
CALLFN(call32, 32)
|
||||
CALLFN(call64, 64)
|
||||
CALLFN(call128, 128)
|
||||
CALLFN(call256, 256)
|
||||
CALLFN(call512, 512)
|
||||
CALLFN(call1024, 1024)
|
||||
CALLFN(call2048, 2048)
|
||||
CALLFN(call4096, 4096)
|
||||
CALLFN(call8192, 8192)
|
||||
CALLFN(call16384, 16384)
|
||||
CALLFN(call32768, 32768)
|
||||
CALLFN(call65536, 65536)
|
||||
CALLFN(call131072, 131072)
|
||||
CALLFN(call262144, 262144)
|
||||
CALLFN(call524288, 524288)
|
||||
CALLFN(call1048576, 1048576)
|
||||
CALLFN(call2097152, 2097152)
|
||||
CALLFN(call4194304, 4194304)
|
||||
CALLFN(call8388608, 8388608)
|
||||
CALLFN(call16777216, 16777216)
|
||||
CALLFN(call33554432, 33554432)
|
||||
CALLFN(call67108864, 67108864)
|
||||
CALLFN(call134217728, 134217728)
|
||||
CALLFN(call268435456, 268435456)
|
||||
CALLFN(call536870912, 536870912)
|
||||
CALLFN(call1073741824, 1073741824)
|
||||
|
||||
// Return point when leaving stack.
|
||||
//
|
||||
|
|
|
|||
|
|
@ -292,8 +292,8 @@ TEXT reflect·call(SB), 7, $-4-12
|
|||
MOVW $runtime·badreflectcall(SB), R1
|
||||
B (R1)
|
||||
|
||||
#define CALLFN(NAME,MAXSIZE,FLAGS) \
|
||||
TEXT runtime·NAME(SB), FLAGS, $MAXSIZE-12; \
|
||||
#define CALLFN(NAME,MAXSIZE) \
|
||||
TEXT runtime·NAME(SB), 0, $MAXSIZE-12; \
|
||||
/* copy arguments to stack */ \
|
||||
MOVW argptr+4(FP), R0; \
|
||||
MOVW argsize+8(FP), R2; \
|
||||
|
|
@ -319,33 +319,33 @@ TEXT runtime·NAME(SB), FLAGS, $MAXSIZE-12; \
|
|||
SUB $1, R2, R2; \
|
||||
B -5(PC) \
|
||||
|
||||
CALLFN(call16, 16, 7)
|
||||
CALLFN(call32, 32, 7)
|
||||
CALLFN(call64, 64, 7)
|
||||
CALLFN(call128, 128, 0)
|
||||
CALLFN(call256, 256, 0)
|
||||
CALLFN(call512, 512, 0)
|
||||
CALLFN(call1024, 1024, 0)
|
||||
CALLFN(call2048, 2048, 0)
|
||||
CALLFN(call4096, 4096, 0)
|
||||
CALLFN(call8192, 8192, 0)
|
||||
CALLFN(call16384, 16384, 0)
|
||||
CALLFN(call32768, 32768, 0)
|
||||
CALLFN(call65536, 65536, 0)
|
||||
CALLFN(call131072, 131072, 0)
|
||||
CALLFN(call262144, 262144, 0)
|
||||
CALLFN(call524288, 524288, 0)
|
||||
CALLFN(call1048576, 1048576, 0)
|
||||
CALLFN(call2097152, 2097152, 0)
|
||||
CALLFN(call4194304, 4194304, 0)
|
||||
CALLFN(call8388608, 8388608, 0)
|
||||
CALLFN(call16777216, 16777216, 0)
|
||||
CALLFN(call33554432, 33554432, 0)
|
||||
CALLFN(call67108864, 67108864, 0)
|
||||
CALLFN(call134217728, 134217728, 0)
|
||||
CALLFN(call268435456, 268435456, 0)
|
||||
CALLFN(call536870912, 536870912, 0)
|
||||
CALLFN(call1073741824, 1073741824, 0)
|
||||
CALLFN(call16, 16)
|
||||
CALLFN(call32, 32)
|
||||
CALLFN(call64, 64)
|
||||
CALLFN(call128, 128)
|
||||
CALLFN(call256, 256)
|
||||
CALLFN(call512, 512)
|
||||
CALLFN(call1024, 1024)
|
||||
CALLFN(call2048, 2048)
|
||||
CALLFN(call4096, 4096)
|
||||
CALLFN(call8192, 8192)
|
||||
CALLFN(call16384, 16384)
|
||||
CALLFN(call32768, 32768)
|
||||
CALLFN(call65536, 65536)
|
||||
CALLFN(call131072, 131072)
|
||||
CALLFN(call262144, 262144)
|
||||
CALLFN(call524288, 524288)
|
||||
CALLFN(call1048576, 1048576)
|
||||
CALLFN(call2097152, 2097152)
|
||||
CALLFN(call4194304, 4194304)
|
||||
CALLFN(call8388608, 8388608)
|
||||
CALLFN(call16777216, 16777216)
|
||||
CALLFN(call33554432, 33554432)
|
||||
CALLFN(call67108864, 67108864)
|
||||
CALLFN(call134217728, 134217728)
|
||||
CALLFN(call268435456, 268435456)
|
||||
CALLFN(call536870912, 536870912)
|
||||
CALLFN(call1073741824, 1073741824)
|
||||
|
||||
// Return point when leaving stack.
|
||||
// using frame size $-4 means do not save LR on stack.
|
||||
|
|
|
|||
Loading…
Reference in New Issue