internal/fakecgo: let darwin pthread stacksize follow rlimit (#84)
This commit matches the changes at golang/go#7d3a5a5 Updates #12
- commit
- 9e27b968aa9a43c41e11aeae2b1d39079278c99d
- author
- TotallyGamerJet · · 2022-12-18 19:21 UTC
- committer
- GitHub · · 2022-12-18 19:21 UTC
- parent
- b4ba55d
- signature
- GPG Unverified
4AEE18F83AFDEB23The key is unknown
7 files · +54 -16
M internal/fakecgo/gen.go +3 -0
| @@ -117,7 +117,10 @@ var symbols = []Symbol{ | |||
| 117 | 117 | {"pthread_create", [5]Arg{{"thread", "*pthread_t"}, {"attr", "*pthread_attr_t"}, {"start", "unsafe.Pointer"}, {"arg", "unsafe.Pointer"}}, "int32"}, | |
| 118 | 118 | {"pthread_detach", [5]Arg{{"thread", "pthread_t"}}, "int32"}, | |
| 119 | 119 | {"pthread_sigmask", [5]Arg{{"how", "sighow"}, {"ign", "*sigset_t"}, {"oset", "*sigset_t"}}, "int32"}, | |
| 120 | + | {"pthread_self", [5]Arg{}, "pthread_t"}, | |
| 121 | + | {"pthread_get_stacksize_np", [5]Arg{{"thread", "pthread_t"}}, "size_t"}, | |
| 120 | 122 | {"pthread_attr_getstacksize", [5]Arg{{"attr", "*pthread_attr_t"}, {"stacksize", "*size_t"}}, "int32"}, | |
| 123 | + | {"pthread_attr_setstacksize", [5]Arg{{"attr", "*pthread_attr_t"}, {"size", "size_t"}}, "int32"}, | |
| 121 | 124 | {"pthread_attr_destroy", [5]Arg{{"attr", "*pthread_attr_t"}}, "int32"}, | |
| 122 | 125 | {"sigfillset", [5]Arg{{"set", "*sigset_t"}}, "int32"}, | |
| 123 | 126 | {"nanosleep", [5]Arg{{"ts", "*syscall.Timespec"}, {"rem", "*syscall.Timespec"}}, "int32"}, | |
| @@ -117,7 +117,10 @@ var symbols = []Symbol{ | |||||
| 117 | {"pthread_create", [5]Arg{{"thread", "*pthread_t"}, {"attr", "*pthread_attr_t"}, {"start", "unsafe.Pointer"}, {"arg", "unsafe.Pointer"}}, "int32"}, | 117 | {"pthread_create", [5]Arg{{"thread", "*pthread_t"}, {"attr", "*pthread_attr_t"}, {"start", "unsafe.Pointer"}, {"arg", "unsafe.Pointer"}}, "int32"}, | ||
| 118 | {"pthread_detach", [5]Arg{{"thread", "pthread_t"}}, "int32"}, | 118 | {"pthread_detach", [5]Arg{{"thread", "pthread_t"}}, "int32"}, | ||
| 119 | {"pthread_sigmask", [5]Arg{{"how", "sighow"}, {"ign", "*sigset_t"}, {"oset", "*sigset_t"}}, "int32"}, | 119 | {"pthread_sigmask", [5]Arg{{"how", "sighow"}, {"ign", "*sigset_t"}, {"oset", "*sigset_t"}}, "int32"}, | ||
| 120 | + | {"pthread_self", [5]Arg{}, "pthread_t"}, | |||
| 121 | + | {"pthread_get_stacksize_np", [5]Arg{{"thread", "pthread_t"}}, "size_t"}, | |||
| 120 | {"pthread_attr_getstacksize", [5]Arg{{"attr", "*pthread_attr_t"}, {"stacksize", "*size_t"}}, "int32"}, | 122 | {"pthread_attr_getstacksize", [5]Arg{{"attr", "*pthread_attr_t"}, {"stacksize", "*size_t"}}, "int32"}, | ||
| 123 | + | {"pthread_attr_setstacksize", [5]Arg{{"attr", "*pthread_attr_t"}, {"size", "size_t"}}, "int32"}, | |||
| 121 | {"pthread_attr_destroy", [5]Arg{{"attr", "*pthread_attr_t"}}, "int32"}, | 124 | {"pthread_attr_destroy", [5]Arg{{"attr", "*pthread_attr_t"}}, "int32"}, | ||
| 122 | {"sigfillset", [5]Arg{{"set", "*sigset_t"}}, "int32"}, | 125 | {"sigfillset", [5]Arg{{"set", "*sigset_t"}}, "int32"}, | ||
| 123 | {"nanosleep", [5]Arg{{"ts", "*syscall.Timespec"}, {"rem", "*syscall.Timespec"}}, "int32"}, | 126 | {"nanosleep", [5]Arg{{"ts", "*syscall.Timespec"}, {"rem", "*syscall.Timespec"}}, "int32"}, | ||
M internal/fakecgo/go_darwin_amd64.go +5 -7
| @@ -15,12 +15,12 @@ func _cgo_sys_thread_start(ts *ThreadStart) { | |||
| 15 | 15 | var size size_t | |
| 16 | 16 | var err int | |
| 17 | 17 | ||
| 18 | - | //fprintf(stderr, "runtime/cgo: _cgo_sys_thread_start: fn=%p, g=%p\n", ts->fn, ts->g); // debug | |
| 19 | 18 | sigfillset(&ign) | |
| 20 | 19 | pthread_sigmask(SIG_SETMASK, &ign, &oset) | |
| 21 | 20 | ||
| 21 | + | size = pthread_get_stacksize_np(pthread_self()) | |
| 22 | 22 | pthread_attr_init(&attr) | |
| 23 | - | pthread_attr_getstacksize(&attr, &size) | |
| 23 | + | pthread_attr_setstacksize(&attr, size) | |
| 24 | 24 | // Leave stacklo=0 and set stackhi=size; mstart will do the rest. | |
| 25 | 25 | ts.g.stackhi = uintptr(size) | |
| 26 | 26 | ||
| @@ -63,11 +63,9 @@ var setg_func uintptr | |||
| 63 | 63 | //go:norace | |
| 64 | 64 | func x_cgo_init(g *G, setg uintptr) { | |
| 65 | 65 | var size size_t | |
| 66 | - | var attr pthread_attr_t | |
| 67 | 66 | ||
| 68 | 67 | setg_func = setg | |
| 69 | - | pthread_attr_init(&attr) | |
| 70 | - | pthread_attr_getstacksize(&attr, &size) | |
| 71 | - | g.stacklo = uintptr(unsafe.Pointer(&size)) - uintptr(size) + 4096 | |
| 72 | - | pthread_attr_destroy(&attr) | |
| 68 | + | ||
| 69 | + | size = pthread_get_stacksize_np(pthread_self()) | |
| 70 | + | g.stacklo = uintptr(unsafe.Add(unsafe.Pointer(&size), -size+4096)) | |
| 73 | 71 | } | |
| @@ -15,12 +15,12 @@ func _cgo_sys_thread_start(ts *ThreadStart) { | |||||
| 15 | var size size_t | 15 | var size size_t | ||
| 16 | var err int | 16 | var err int | ||
| 17 | 17 | ||||
| 18 | - | //fprintf(stderr, "runtime/cgo: _cgo_sys_thread_start: fn=%p, g=%p\n", ts->fn, ts->g); // debug | |||
| 19 | sigfillset(&ign) | 18 | sigfillset(&ign) | ||
| 20 | pthread_sigmask(SIG_SETMASK, &ign, &oset) | 19 | pthread_sigmask(SIG_SETMASK, &ign, &oset) | ||
| 21 | 20 | ||||
| 21 | + | size = pthread_get_stacksize_np(pthread_self()) | |||
| 22 | pthread_attr_init(&attr) | 22 | pthread_attr_init(&attr) | ||
| 23 | - | pthread_attr_getstacksize(&attr, &size) | 23 | + | pthread_attr_setstacksize(&attr, size) |
| 24 | // Leave stacklo=0 and set stackhi=size; mstart will do the rest. | 24 | // Leave stacklo=0 and set stackhi=size; mstart will do the rest. | ||
| 25 | ts.g.stackhi = uintptr(size) | 25 | ts.g.stackhi = uintptr(size) | ||
| 26 | 26 | ||||
| @@ -63,11 +63,9 @@ var setg_func uintptr | |||||
| 63 | //go:norace | 63 | //go:norace | ||
| 64 | func x_cgo_init(g *G, setg uintptr) { | 64 | func x_cgo_init(g *G, setg uintptr) { | ||
| 65 | var size size_t | 65 | var size size_t | ||
| 66 | - | var attr pthread_attr_t | |||
| 67 | 66 | ||||
| 68 | setg_func = setg | 67 | setg_func = setg | ||
| 69 | - | pthread_attr_init(&attr) | 68 | + | |
| 70 | - | pthread_attr_getstacksize(&attr, &size) | 69 | + | size = pthread_get_stacksize_np(pthread_self()) |
| 71 | - | g.stacklo = uintptr(unsafe.Pointer(&size)) - uintptr(size) + 4096 | 70 | + | g.stacklo = uintptr(unsafe.Add(unsafe.Pointer(&size), -size+4096)) |
| 72 | - | pthread_attr_destroy(&attr) | |||
| 73 | } | 71 | } | ||
M internal/fakecgo/go_darwin_arm64.go +4 -7
| @@ -15,12 +15,12 @@ func _cgo_sys_thread_start(ts *ThreadStart) { | |||
| 15 | 15 | var size size_t | |
| 16 | 16 | var err int | |
| 17 | 17 | ||
| 18 | - | //fprintf(stderr, "runtime/cgo: _cgo_sys_thread_start: fn=%p, g=%p\n", ts->fn, ts->g); // debug | |
| 19 | 18 | sigfillset(&ign) | |
| 20 | 19 | pthread_sigmask(SIG_SETMASK, &ign, &oset) | |
| 21 | 20 | ||
| 21 | + | size = pthread_get_stacksize_np(pthread_self()) | |
| 22 | 22 | pthread_attr_init(&attr) | |
| 23 | - | pthread_attr_getstacksize(&attr, &size) | |
| 23 | + | pthread_attr_setstacksize(&attr, size) | |
| 24 | 24 | // Leave stacklo=0 and set stackhi=size; mstart will do the rest. | |
| 25 | 25 | ts.g.stackhi = uintptr(size) | |
| 26 | 26 | ||
| @@ -72,13 +72,10 @@ var setg_func uintptr | |||
| 72 | 72 | //go:norace | |
| 73 | 73 | func x_cgo_init(g *G, setg uintptr) { | |
| 74 | 74 | var size size_t | |
| 75 | - | var attr pthread_attr_t | |
| 76 | 75 | ||
| 77 | 76 | setg_func = setg | |
| 78 | - | pthread_attr_init(&attr) | |
| 79 | - | pthread_attr_getstacksize(&attr, &size) | |
| 80 | - | g.stacklo = uintptr(unsafe.Pointer(&size)) - uintptr(size) + 4096 | |
| 81 | - | pthread_attr_destroy(&attr) | |
| 77 | + | size = pthread_get_stacksize_np(pthread_self()) | |
| 78 | + | g.stacklo = uintptr(unsafe.Add(unsafe.Pointer(&size), -size+4096)) | |
| 82 | 79 | ||
| 83 | 80 | //TODO: support ios | |
| 84 | 81 | //#if TARGET_OS_IPHONE | |
| @@ -15,12 +15,12 @@ func _cgo_sys_thread_start(ts *ThreadStart) { | |||||
| 15 | var size size_t | 15 | var size size_t | ||
| 16 | var err int | 16 | var err int | ||
| 17 | 17 | ||||
| 18 | - | //fprintf(stderr, "runtime/cgo: _cgo_sys_thread_start: fn=%p, g=%p\n", ts->fn, ts->g); // debug | |||
| 19 | sigfillset(&ign) | 18 | sigfillset(&ign) | ||
| 20 | pthread_sigmask(SIG_SETMASK, &ign, &oset) | 19 | pthread_sigmask(SIG_SETMASK, &ign, &oset) | ||
| 21 | 20 | ||||
| 21 | + | size = pthread_get_stacksize_np(pthread_self()) | |||
| 22 | pthread_attr_init(&attr) | 22 | pthread_attr_init(&attr) | ||
| 23 | - | pthread_attr_getstacksize(&attr, &size) | 23 | + | pthread_attr_setstacksize(&attr, size) |
| 24 | // Leave stacklo=0 and set stackhi=size; mstart will do the rest. | 24 | // Leave stacklo=0 and set stackhi=size; mstart will do the rest. | ||
| 25 | ts.g.stackhi = uintptr(size) | 25 | ts.g.stackhi = uintptr(size) | ||
| 26 | 26 | ||||
| @@ -72,13 +72,10 @@ var setg_func uintptr | |||||
| 72 | //go:norace | 72 | //go:norace | ||
| 73 | func x_cgo_init(g *G, setg uintptr) { | 73 | func x_cgo_init(g *G, setg uintptr) { | ||
| 74 | var size size_t | 74 | var size size_t | ||
| 75 | - | var attr pthread_attr_t | |||
| 76 | 75 | ||||
| 77 | setg_func = setg | 76 | setg_func = setg | ||
| 78 | - | pthread_attr_init(&attr) | 77 | + | size = pthread_get_stacksize_np(pthread_self()) |
| 79 | - | pthread_attr_getstacksize(&attr, &size) | 78 | + | g.stacklo = uintptr(unsafe.Add(unsafe.Pointer(&size), -size+4096)) |
| 80 | - | g.stacklo = uintptr(unsafe.Pointer(&size)) - uintptr(size) + 4096 | |||
| 81 | - | pthread_attr_destroy(&attr) | |||
| 82 | 79 | ||||
| 83 | //TODO: support ios | 80 | //TODO: support ios | ||
| 84 | //#if TARGET_OS_IPHONE | 81 | //#if TARGET_OS_IPHONE | ||
M internal/fakecgo/symbols.go +24 -0
| @@ -55,10 +55,22 @@ func pthread_sigmask(how sighow, ign *sigset_t, oset *sigset_t) int32 { | |||
| 55 | 55 | return int32(call5(pthread_sigmaskABI0, uintptr(how), uintptr(unsafe.Pointer(ign)), uintptr(unsafe.Pointer(oset)), 0, 0)) | |
| 56 | 56 | } | |
| 57 | 57 | ||
| 58 | + | func pthread_self() pthread_t { | |
| 59 | + | return pthread_t(call5(pthread_selfABI0, 0, 0, 0, 0, 0)) | |
| 60 | + | } | |
| 61 | + | ||
| 62 | + | func pthread_get_stacksize_np(thread pthread_t) size_t { | |
| 63 | + | return size_t(call5(pthread_get_stacksize_npABI0, uintptr(thread), 0, 0, 0, 0)) | |
| 64 | + | } | |
| 65 | + | ||
| 58 | 66 | func pthread_attr_getstacksize(attr *pthread_attr_t, stacksize *size_t) int32 { | |
| 59 | 67 | return int32(call5(pthread_attr_getstacksizeABI0, uintptr(unsafe.Pointer(attr)), uintptr(unsafe.Pointer(stacksize)), 0, 0, 0)) | |
| 60 | 68 | } | |
| 61 | 69 | ||
| 70 | + | func pthread_attr_setstacksize(attr *pthread_attr_t, size size_t) int32 { | |
| 71 | + | return int32(call5(pthread_attr_setstacksizeABI0, uintptr(unsafe.Pointer(attr)), uintptr(size), 0, 0, 0)) | |
| 72 | + | } | |
| 73 | + | ||
| 62 | 74 | func pthread_attr_destroy(attr *pthread_attr_t) int32 { | |
| 63 | 75 | return int32(call5(pthread_attr_destroyABI0, uintptr(unsafe.Pointer(attr)), 0, 0, 0, 0)) | |
| 64 | 76 | } | |
| @@ -107,10 +119,22 @@ var pthread_detachABI0 = uintptr(unsafe.Pointer(&_pthread_detach)) | |||
| 107 | 119 | var _pthread_sigmask uintptr | |
| 108 | 120 | var pthread_sigmaskABI0 = uintptr(unsafe.Pointer(&_pthread_sigmask)) | |
| 109 | 121 | ||
| 122 | + | //go:linkname _pthread_self _pthread_self | |
| 123 | + | var _pthread_self uintptr | |
| 124 | + | var pthread_selfABI0 = uintptr(unsafe.Pointer(&_pthread_self)) | |
| 125 | + | ||
| 126 | + | //go:linkname _pthread_get_stacksize_np _pthread_get_stacksize_np | |
| 127 | + | var _pthread_get_stacksize_np uintptr | |
| 128 | + | var pthread_get_stacksize_npABI0 = uintptr(unsafe.Pointer(&_pthread_get_stacksize_np)) | |
| 129 | + | ||
| 110 | 130 | //go:linkname _pthread_attr_getstacksize _pthread_attr_getstacksize | |
| 111 | 131 | var _pthread_attr_getstacksize uintptr | |
| 112 | 132 | var pthread_attr_getstacksizeABI0 = uintptr(unsafe.Pointer(&_pthread_attr_getstacksize)) | |
| 113 | 133 | ||
| 134 | + | //go:linkname _pthread_attr_setstacksize _pthread_attr_setstacksize | |
| 135 | + | var _pthread_attr_setstacksize uintptr | |
| 136 | + | var pthread_attr_setstacksizeABI0 = uintptr(unsafe.Pointer(&_pthread_attr_setstacksize)) | |
| 137 | + | ||
| 114 | 138 | //go:linkname _pthread_attr_destroy _pthread_attr_destroy | |
| 115 | 139 | var _pthread_attr_destroy uintptr | |
| 116 | 140 | var pthread_attr_destroyABI0 = uintptr(unsafe.Pointer(&_pthread_attr_destroy)) | |
| @@ -55,10 +55,22 @@ func pthread_sigmask(how sighow, ign *sigset_t, oset *sigset_t) int32 { | |||||
| 55 | return int32(call5(pthread_sigmaskABI0, uintptr(how), uintptr(unsafe.Pointer(ign)), uintptr(unsafe.Pointer(oset)), 0, 0)) | 55 | return int32(call5(pthread_sigmaskABI0, uintptr(how), uintptr(unsafe.Pointer(ign)), uintptr(unsafe.Pointer(oset)), 0, 0)) | ||
| 56 | } | 56 | } | ||
| 57 | 57 | ||||
| 58 | + | func pthread_self() pthread_t { | |||
| 59 | + | return pthread_t(call5(pthread_selfABI0, 0, 0, 0, 0, 0)) | |||
| 60 | + | } | |||
| 61 | + | ||||
| 62 | + | func pthread_get_stacksize_np(thread pthread_t) size_t { | |||
| 63 | + | return size_t(call5(pthread_get_stacksize_npABI0, uintptr(thread), 0, 0, 0, 0)) | |||
| 64 | + | } | |||
| 65 | + | ||||
| 58 | func pthread_attr_getstacksize(attr *pthread_attr_t, stacksize *size_t) int32 { | 66 | func pthread_attr_getstacksize(attr *pthread_attr_t, stacksize *size_t) int32 { | ||
| 59 | return int32(call5(pthread_attr_getstacksizeABI0, uintptr(unsafe.Pointer(attr)), uintptr(unsafe.Pointer(stacksize)), 0, 0, 0)) | 67 | return int32(call5(pthread_attr_getstacksizeABI0, uintptr(unsafe.Pointer(attr)), uintptr(unsafe.Pointer(stacksize)), 0, 0, 0)) | ||
| 60 | } | 68 | } | ||
| 61 | 69 | ||||
| 70 | + | func pthread_attr_setstacksize(attr *pthread_attr_t, size size_t) int32 { | |||
| 71 | + | return int32(call5(pthread_attr_setstacksizeABI0, uintptr(unsafe.Pointer(attr)), uintptr(size), 0, 0, 0)) | |||
| 72 | + | } | |||
| 73 | + | ||||
| 62 | func pthread_attr_destroy(attr *pthread_attr_t) int32 { | 74 | func pthread_attr_destroy(attr *pthread_attr_t) int32 { | ||
| 63 | return int32(call5(pthread_attr_destroyABI0, uintptr(unsafe.Pointer(attr)), 0, 0, 0, 0)) | 75 | return int32(call5(pthread_attr_destroyABI0, uintptr(unsafe.Pointer(attr)), 0, 0, 0, 0)) | ||
| 64 | } | 76 | } | ||
| @@ -107,10 +119,22 @@ var pthread_detachABI0 = uintptr(unsafe.Pointer(&_pthread_detach)) | |||||
| 107 | var _pthread_sigmask uintptr | 119 | var _pthread_sigmask uintptr | ||
| 108 | var pthread_sigmaskABI0 = uintptr(unsafe.Pointer(&_pthread_sigmask)) | 120 | var pthread_sigmaskABI0 = uintptr(unsafe.Pointer(&_pthread_sigmask)) | ||
| 109 | 121 | ||||
| 122 | + | //go:linkname _pthread_self _pthread_self | |||
| 123 | + | var _pthread_self uintptr | |||
| 124 | + | var pthread_selfABI0 = uintptr(unsafe.Pointer(&_pthread_self)) | |||
| 125 | + | ||||
| 126 | + | //go:linkname _pthread_get_stacksize_np _pthread_get_stacksize_np | |||
| 127 | + | var _pthread_get_stacksize_np uintptr | |||
| 128 | + | var pthread_get_stacksize_npABI0 = uintptr(unsafe.Pointer(&_pthread_get_stacksize_np)) | |||
| 129 | + | ||||
| 110 | //go:linkname _pthread_attr_getstacksize _pthread_attr_getstacksize | 130 | //go:linkname _pthread_attr_getstacksize _pthread_attr_getstacksize | ||
| 111 | var _pthread_attr_getstacksize uintptr | 131 | var _pthread_attr_getstacksize uintptr | ||
| 112 | var pthread_attr_getstacksizeABI0 = uintptr(unsafe.Pointer(&_pthread_attr_getstacksize)) | 132 | var pthread_attr_getstacksizeABI0 = uintptr(unsafe.Pointer(&_pthread_attr_getstacksize)) | ||
| 113 | 133 | ||||
| 134 | + | //go:linkname _pthread_attr_setstacksize _pthread_attr_setstacksize | |||
| 135 | + | var _pthread_attr_setstacksize uintptr | |||
| 136 | + | var pthread_attr_setstacksizeABI0 = uintptr(unsafe.Pointer(&_pthread_attr_setstacksize)) | |||
| 137 | + | ||||
| 114 | //go:linkname _pthread_attr_destroy _pthread_attr_destroy | 138 | //go:linkname _pthread_attr_destroy _pthread_attr_destroy | ||
| 115 | var _pthread_attr_destroy uintptr | 139 | var _pthread_attr_destroy uintptr | ||
| 116 | var pthread_attr_destroyABI0 = uintptr(unsafe.Pointer(&_pthread_attr_destroy)) | 140 | var pthread_attr_destroyABI0 = uintptr(unsafe.Pointer(&_pthread_attr_destroy)) | ||
M internal/fakecgo/symbols_darwin.go +3 -0
| @@ -7,6 +7,9 @@ package fakecgo | |||
| 7 | 7 | //go:cgo_import_dynamic purego_free free "/usr/lib/libSystem.B.dylib" | |
| 8 | 8 | //go:cgo_import_dynamic purego_setenv setenv "/usr/lib/libSystem.B.dylib" | |
| 9 | 9 | //go:cgo_import_dynamic purego_unsetenv unsetenv "/usr/lib/libSystem.B.dylib" | |
| 10 | + | //go:cgo_import_dynamic purego_pthread_self pthread_self "/usr/lib/libSystem.B.dylib" | |
| 11 | + | //go:cgo_import_dynamic purego_pthread_get_stacksize_np pthread_get_stacksize_np "/usr/lib/libSystem.B.dylib" | |
| 12 | + | //go:cgo_import_dynamic purego_pthread_attr_setstacksize pthread_attr_setstacksize "/usr/lib/libSystem.B.dylib" | |
| 10 | 13 | //go:cgo_import_dynamic purego_pthread_attr_init pthread_attr_init "/usr/lib/libSystem.B.dylib" | |
| 11 | 14 | //go:cgo_import_dynamic purego_pthread_create pthread_create "/usr/lib/libSystem.B.dylib" | |
| 12 | 15 | //go:cgo_import_dynamic purego_pthread_detach pthread_detach "/usr/lib/libSystem.B.dylib" | |
| @@ -7,6 +7,9 @@ package fakecgo | |||||
| 7 | //go:cgo_import_dynamic purego_free free "/usr/lib/libSystem.B.dylib" | 7 | //go:cgo_import_dynamic purego_free free "/usr/lib/libSystem.B.dylib" | ||
| 8 | //go:cgo_import_dynamic purego_setenv setenv "/usr/lib/libSystem.B.dylib" | 8 | //go:cgo_import_dynamic purego_setenv setenv "/usr/lib/libSystem.B.dylib" | ||
| 9 | //go:cgo_import_dynamic purego_unsetenv unsetenv "/usr/lib/libSystem.B.dylib" | 9 | //go:cgo_import_dynamic purego_unsetenv unsetenv "/usr/lib/libSystem.B.dylib" | ||
| 10 | + | //go:cgo_import_dynamic purego_pthread_self pthread_self "/usr/lib/libSystem.B.dylib" | |||
| 11 | + | //go:cgo_import_dynamic purego_pthread_get_stacksize_np pthread_get_stacksize_np "/usr/lib/libSystem.B.dylib" | |||
| 12 | + | //go:cgo_import_dynamic purego_pthread_attr_setstacksize pthread_attr_setstacksize "/usr/lib/libSystem.B.dylib" | |||
| 10 | //go:cgo_import_dynamic purego_pthread_attr_init pthread_attr_init "/usr/lib/libSystem.B.dylib" | 13 | //go:cgo_import_dynamic purego_pthread_attr_init pthread_attr_init "/usr/lib/libSystem.B.dylib" | ||
| 11 | //go:cgo_import_dynamic purego_pthread_create pthread_create "/usr/lib/libSystem.B.dylib" | 14 | //go:cgo_import_dynamic purego_pthread_create pthread_create "/usr/lib/libSystem.B.dylib" | ||
| 12 | //go:cgo_import_dynamic purego_pthread_detach pthread_detach "/usr/lib/libSystem.B.dylib" | 15 | //go:cgo_import_dynamic purego_pthread_detach pthread_detach "/usr/lib/libSystem.B.dylib" | ||
M internal/fakecgo/trampolines_amd64.s +3 -2
| @@ -64,8 +64,9 @@ TEXT x_cgo_notify_runtime_init_done_trampoline(SB), NOSPLIT, $0 | |||
| 64 | 64 | // func setg_trampoline(setg uintptr, g uintptr) | |
| 65 | 65 | TEXT ·setg_trampoline(SB), NOSPLIT, $0-16 | |
| 66 | 66 | MOVQ G+8(FP), DI | |
| 67 | - | MOVQ setg+0(FP), AX | |
| 68 | - | CALL AX | |
| 67 | + | MOVQ setg+0(FP), BX | |
| 68 | + | XORL AX, AX | |
| 69 | + | CALL BX | |
| 69 | 70 | RET | |
| 70 | 71 | ||
| 71 | 72 | TEXT threadentry_trampoline(SB), NOSPLIT, $16 | |
| @@ -64,8 +64,9 @@ TEXT x_cgo_notify_runtime_init_done_trampoline(SB), NOSPLIT, $0 | |||||
| 64 | // func setg_trampoline(setg uintptr, g uintptr) | 64 | // func setg_trampoline(setg uintptr, g uintptr) | ||
| 65 | TEXT ·setg_trampoline(SB), NOSPLIT, $0-16 | 65 | TEXT ·setg_trampoline(SB), NOSPLIT, $0-16 | ||
| 66 | MOVQ G+8(FP), DI | 66 | MOVQ G+8(FP), DI | ||
| 67 | - | MOVQ setg+0(FP), AX | 67 | + | MOVQ setg+0(FP), BX |
| 68 | - | CALL AX | 68 | + | XORL AX, AX |
| 69 | + | CALL BX | |||
| 69 | RET | 70 | RET | ||
| 70 | 71 | ||||
| 71 | TEXT threadentry_trampoline(SB), NOSPLIT, $16 | 72 | TEXT threadentry_trampoline(SB), NOSPLIT, $16 | ||
M internal/fakecgo/trampolines_stubs.s +12 -0
| @@ -41,10 +41,22 @@ TEXT _pthread_sigmask(SB), NOSPLIT, $0-0 | |||
| 41 | 41 | JMP purego_pthread_sigmask(SB) | |
| 42 | 42 | RET | |
| 43 | 43 | ||
| 44 | + | TEXT _pthread_self(SB), NOSPLIT, $0-0 | |
| 45 | + | JMP purego_pthread_self(SB) | |
| 46 | + | RET | |
| 47 | + | ||
| 48 | + | TEXT _pthread_get_stacksize_np(SB), NOSPLIT, $0-0 | |
| 49 | + | JMP purego_pthread_get_stacksize_np(SB) | |
| 50 | + | RET | |
| 51 | + | ||
| 44 | 52 | TEXT _pthread_attr_getstacksize(SB), NOSPLIT, $0-0 | |
| 45 | 53 | JMP purego_pthread_attr_getstacksize(SB) | |
| 46 | 54 | RET | |
| 47 | 55 | ||
| 56 | + | TEXT _pthread_attr_setstacksize(SB), NOSPLIT, $0-0 | |
| 57 | + | JMP purego_pthread_attr_setstacksize(SB) | |
| 58 | + | RET | |
| 59 | + | ||
| 48 | 60 | TEXT _pthread_attr_destroy(SB), NOSPLIT, $0-0 | |
| 49 | 61 | JMP purego_pthread_attr_destroy(SB) | |
| 50 | 62 | RET | |
| @@ -41,10 +41,22 @@ TEXT _pthread_sigmask(SB), NOSPLIT, $0-0 | |||||
| 41 | JMP purego_pthread_sigmask(SB) | 41 | JMP purego_pthread_sigmask(SB) | ||
| 42 | RET | 42 | RET | ||
| 43 | 43 | ||||
| 44 | + | TEXT _pthread_self(SB), NOSPLIT, $0-0 | |||
| 45 | + | JMP purego_pthread_self(SB) | |||
| 46 | + | RET | |||
| 47 | + | ||||
| 48 | + | TEXT _pthread_get_stacksize_np(SB), NOSPLIT, $0-0 | |||
| 49 | + | JMP purego_pthread_get_stacksize_np(SB) | |||
| 50 | + | RET | |||
| 51 | + | ||||
| 44 | TEXT _pthread_attr_getstacksize(SB), NOSPLIT, $0-0 | 52 | TEXT _pthread_attr_getstacksize(SB), NOSPLIT, $0-0 | ||
| 45 | JMP purego_pthread_attr_getstacksize(SB) | 53 | JMP purego_pthread_attr_getstacksize(SB) | ||
| 46 | RET | 54 | RET | ||
| 47 | 55 | ||||
| 56 | + | TEXT _pthread_attr_setstacksize(SB), NOSPLIT, $0-0 | |||
| 57 | + | JMP purego_pthread_attr_setstacksize(SB) | |||
| 58 | + | RET | |||
| 59 | + | ||||
| 48 | TEXT _pthread_attr_destroy(SB), NOSPLIT, $0-0 | 60 | TEXT _pthread_attr_destroy(SB), NOSPLIT, $0-0 | ||
| 49 | JMP purego_pthread_attr_destroy(SB) | 61 | JMP purego_pthread_attr_destroy(SB) | ||
| 50 | RET | 62 | RET | ||