From 12e46e42ecd2e5e432385f40cbc4499f60442aa4 Mon Sep 17 00:00:00 2001 From: Keith Randall Date: Tue, 6 Aug 2013 14:33:55 -0700 Subject: [PATCH] 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 --- src/pkg/runtime/asm_386.s | 58 ++++++++++++++++++------------------- src/pkg/runtime/asm_amd64.s | 58 ++++++++++++++++++------------------- src/pkg/runtime/asm_arm.s | 58 ++++++++++++++++++------------------- 3 files changed, 87 insertions(+), 87 deletions(-) diff --git a/src/pkg/runtime/asm_386.s b/src/pkg/runtime/asm_386.s index 863bcc32f9..a441afc208 100644 --- a/src/pkg/runtime/asm_386.s +++ b/src/pkg/runtime/asm_386.s @@ -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. // diff --git a/src/pkg/runtime/asm_amd64.s b/src/pkg/runtime/asm_amd64.s index 8cb06d91bf..8280ac02a9 100644 --- a/src/pkg/runtime/asm_amd64.s +++ b/src/pkg/runtime/asm_amd64.s @@ -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. // diff --git a/src/pkg/runtime/asm_arm.s b/src/pkg/runtime/asm_arm.s index 313e7b84f2..b029674a47 100644 --- a/src/pkg/runtime/asm_arm.s +++ b/src/pkg/runtime/asm_arm.s @@ -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. -- 2.48.1