OXIESEC PANEL
- Current Dir:
/
/
opt
/
golang
/
1.22.0
/
src
/
runtime
Server IP: 2a02:4780:11:1084:0:327f:3464:10
Upload:
Create Dir:
Name
Size
Modified
Perms
📁
..
-
02/02/2024 06:09:55 PM
rwxr-xr-x
📄
HACKING.md
13.85 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
Makefile
178 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
abi_test.go
2.83 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
alg.go
10.99 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
align_runtime_test.go
1.82 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
align_test.go
5.37 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
arena.go
31.66 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
arena_test.go
13.39 KB
02/02/2024 06:09:55 PM
rw-r--r--
📁
asan
-
02/02/2024 06:09:55 PM
rwxr-xr-x
📄
asan.go
1.55 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
asan0.go
760 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
asan_amd64.s
2.45 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
asan_arm64.s
2.14 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
asan_loong64.s
2.12 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
asan_ppc64le.s
2.75 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
asan_riscv64.s
1.92 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
asm.s
719 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
asm_386.s
42.54 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
asm_amd64.h
631 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
asm_amd64.s
60.09 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
asm_arm.s
31.58 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
asm_arm64.s
43.33 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
asm_loong64.s
27.58 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
asm_mips64x.s
24.34 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
asm_mipsx.s
25.82 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
asm_ppc64x.h
1.93 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
asm_ppc64x.s
45.19 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
asm_riscv64.s
26.97 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
asm_s390x.s
27.55 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
asm_wasm.s
11.82 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
atomic_arm64.s
259 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
atomic_loong64.s
245 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
atomic_mips64x.s
300 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
atomic_mipsx.s
262 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
atomic_pointer.go
3.66 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
atomic_ppc64x.s
437 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
atomic_riscv64.s
275 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
auxv_none.go
298 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
callers_test.go
12.13 KB
02/02/2024 06:09:55 PM
rw-r--r--
📁
cgo
-
02/02/2024 06:09:55 PM
rwxr-xr-x
📄
cgo.go
2.5 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
cgo_mmap.go
2.42 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
cgo_ppc64x.go
418 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
cgo_sigaction.go
3.28 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
cgocall.go
23.23 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
cgocallback.go
317 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
cgocheck.go
7.97 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
chan.go
23.74 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
chan_test.go
23.44 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
chanbarrier_test.go
1.4 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
checkptr.go
3.29 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
checkptr_test.go
2.86 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
closure_test.go
937 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
compiler.go
410 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
complex.go
1.59 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
complex_test.go
1.05 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
conv_wasm_test.go
2.96 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
coro.go
4.92 KB
02/02/2024 06:09:55 PM
rw-r--r--
📁
coverage
-
02/02/2024 06:09:55 PM
rwxr-xr-x
📄
covercounter.go
749 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
covermeta.go
2.4 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
cpuflags.go
810 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
cpuflags_amd64.go
533 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
cpuflags_arm64.go
312 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
cpuprof.go
7.94 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
cputicks.go
437 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
crash_cgo_test.go
23.35 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
crash_test.go
23.12 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
crash_unix_test.go
9.19 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
create_file_nounix.go
305 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
create_file_unix.go
368 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📁
debug
-
02/02/2024 06:09:55 PM
rwxr-xr-x
📄
debug.go
3.53 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
debug_test.go
7.99 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
debugcall.go
6.75 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
debuglog.go
18.24 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
debuglog_off.go
357 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
debuglog_on.go
1.09 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
debuglog_test.go
4.9 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
defer_test.go
11.4 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
defs1_linux.go
845 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
defs1_netbsd_386.go
2.91 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
defs1_netbsd_amd64.go
3.14 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
defs1_netbsd_arm.go
3.03 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
defs1_netbsd_arm64.go
3.25 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
defs1_solaris_amd64.go
4.01 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
defs2_linux.go
3.22 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
defs3_linux.go
1.09 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
defs_aix.go
4.17 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
defs_aix_ppc64.go
3.63 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
defs_arm_linux.go
2.67 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
defs_darwin.go
4.18 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
defs_darwin_amd64.go
6.34 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
defs_darwin_arm64.go
4.17 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
defs_dragonfly.go
2.73 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
defs_dragonfly_amd64.go
3.41 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
defs_freebsd.go
3.96 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
defs_freebsd_386.go
4.52 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
defs_freebsd_amd64.go
4.79 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
defs_freebsd_arm.go
3.92 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
defs_freebsd_arm64.go
4.18 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
defs_freebsd_riscv64.go
4.19 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
defs_illumos_amd64.go
285 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
defs_linux.go
2.92 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
defs_linux_386.go
4.2 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
defs_linux_amd64.go
4.7 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
defs_linux_arm.go
3.89 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
defs_linux_arm64.go
3.62 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
defs_linux_loong64.go
3.43 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
defs_linux_mips64x.go
3.6 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
defs_linux_mipsx.go
3.6 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
defs_linux_ppc64.go
3.69 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
defs_linux_ppc64le.go
3.69 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
defs_linux_riscv64.go
3.81 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
defs_linux_s390x.go
3.16 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
defs_netbsd.go
2.83 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
defs_netbsd_386.go
855 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
defs_netbsd_amd64.go
1.01 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
defs_netbsd_arm.go
764 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
defs_openbsd.go
3.06 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
defs_openbsd_386.go
2.91 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
defs_openbsd_amd64.go
3.11 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
defs_openbsd_arm.go
3.03 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
defs_openbsd_arm64.go
2.78 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
defs_openbsd_mips64.go
2.75 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
defs_openbsd_ppc64.go
3 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
defs_openbsd_riscv64.go
2.89 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
defs_plan9_386.go
1.63 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
defs_plan9_amd64.go
1.82 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
defs_plan9_arm.go
1.73 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
defs_solaris.go
3.32 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
defs_solaris_amd64.go
1004 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
defs_windows.go
2.25 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
defs_windows_386.go
2.28 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
defs_windows_amd64.go
3.19 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
defs_windows_arm.go
2.57 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
defs_windows_arm64.go
3.07 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
duff_386.s
8.24 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
duff_amd64.s
5.64 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
duff_arm.s
7.11 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
duff_arm64.s
5.27 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
duff_loong64.s
11.9 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
duff_mips64x.s
11.28 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
duff_ppc64x.s
7.06 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
duff_riscv64.s
11.4 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
duff_s390x.s
507 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
ehooks_test.go
2.04 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
env_plan9.go
3 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
env_posix.go
1.56 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
env_test.go
1.16 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
error.go
9.29 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
example_test.go
1.55 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
exithook.go
2.32 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
export_aix_test.go
207 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
export_arm_test.go
226 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
export_darwin_test.go
207 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
export_debug_amd64_test.go
3.6 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
export_debug_arm64_test.go
3.49 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
export_debug_ppc64le_test.go
3.5 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
export_debug_test.go
5.07 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
export_debuglog_test.go
1.27 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
export_linux_test.go
378 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
export_mmap_test.go
429 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
export_pipe2_test.go
310 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
export_pipe_test.go
219 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
export_test.go
50.52 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
export_unix_test.go
2.27 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
export_windows_test.go
903 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
extern.go
18.58 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
fastlog2.go
1.22 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
fastlog2_test.go
784 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
fastlog2table.go
904 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
fds_nonunix.go
256 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
fds_test.go
1.43 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
fds_unix.go
1.27 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
float.go
1.35 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
float_test.go
699 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
funcdata.h
2.53 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
gc_test.go
20.32 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
gcinfo_test.go
5.95 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
go_tls.h
366 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
hash32.go
1.58 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
hash64.go
1.95 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
hash_test.go
17.24 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
heap_test.go
529 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
heapdump.go
17.88 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
histogram.go
7.3 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
histogram_test.go
3.51 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
iface.go
20.92 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
iface_test.go
7.45 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
import_test.go
1.42 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
importx_test.go
763 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📁
internal
-
02/02/2024 06:09:55 PM
rwxr-xr-x
📄
lfstack.go
2.03 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
lfstack_test.go
2.74 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
libfuzzer.go
6.34 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
libfuzzer_amd64.s
5.03 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
libfuzzer_arm64.s
3.15 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
lock_futex.go
5.4 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
lock_js.go
7.28 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
lock_sema.go
6.75 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
lock_wasip1.go
2.01 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
lockrank.go
18.19 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
lockrank_off.go
1.17 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
lockrank_on.go
10.27 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
lockrank_test.go
856 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
malloc.go
58.5 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
malloc_test.go
10.64 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
map.go
52.17 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
map_benchmark_test.go
10.59 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
map_fast32.go
12.74 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
map_fast64.go
12.92 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
map_faststr.go
14.32 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
map_test.go
31.75 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
mbarrier.go
13.78 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
mbitmap.go
22.54 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
mbitmap_allocheaders.go
44.67 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
mbitmap_noallocheaders.go
28.95 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
mcache.go
10 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
mcentral.go
8.05 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
mcheckmark.go
2.85 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
mem.go
6.72 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
mem_aix.go
2.01 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
mem_bsd.go
2.21 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
mem_darwin.go
1.96 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
mem_js.go
457 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
mem_linux.go
4.98 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
mem_plan9.go
447 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
mem_sbrk.go
4.19 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
mem_wasip1.go
392 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
mem_wasm.go
488 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
mem_windows.go
3.88 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
memclr_386.s
2.38 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
memclr_amd64.s
4.91 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
memclr_arm.s
2.6 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
memclr_arm64.s
3.62 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
memclr_loong64.s
843 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
memclr_mips64x.s
1.72 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
memclr_mipsx.s
1.32 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
memclr_plan9_386.s
983 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
memclr_plan9_amd64.s
511 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
memclr_ppc64x.s
4.44 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
memclr_riscv64.s
1.71 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
memclr_s390x.s
1.96 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
memclr_wasm.s
485 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
memmove_386.s
4.42 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
memmove_amd64.s
12.48 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
memmove_arm.s
5.9 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
memmove_arm64.s
5.96 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
memmove_linux_amd64_test.go
1.53 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
memmove_loong64.s
1.87 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
memmove_mips64x.s
1.83 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
memmove_mipsx.s
4.4 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
memmove_plan9_386.s
3.06 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
memmove_plan9_amd64.s
3.04 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
memmove_ppc64x.s
4.91 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
memmove_riscv64.s
5.46 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
memmove_s390x.s
2.92 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
memmove_test.go
21.23 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
memmove_wasm.s
479 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📁
metrics
-
02/02/2024 06:09:55 PM
rwxr-xr-x
📄
metrics.go
26.01 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
metrics_test.go
42.46 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
mfinal.go
18.91 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
mfinal_test.go
5.57 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
mfixalloc.go
3.13 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
mgc.go
59.29 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
mgclimit.go
17.28 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
mgclimit_test.go
9.02 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
mgcmark.go
53.07 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
mgcpacer.go
55.36 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
mgcpacer_test.go
39.26 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
mgcscavenge.go
52.32 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
mgcscavenge_test.go
25.2 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
mgcstack.go
10.58 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
mgcsweep.go
32.26 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
mgcwork.go
12.89 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
mheap.go
72.64 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
minmax.go
1.46 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
minmax_test.go
3.31 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
mkduff.go
8.04 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
mkfastlog2table.go
3.08 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
mklockrank.go
9 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
mkpreempt.go
15.33 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
mksizeclasses.go
9.52 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
mmap.go
844 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
mpagealloc.go
39.23 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
mpagealloc_32bit.go
4.56 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
mpagealloc_64bit.go
9.34 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
mpagealloc_test.go
32.59 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
mpagecache.go
5.59 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
mpagecache_test.go
10.79 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
mpallocbits.go
12.58 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
mpallocbits_test.go
13.69 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
mprof.go
47.4 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
mranges.go
14.46 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
mranges_test.go
5.68 KB
02/02/2024 06:09:55 PM
rw-r--r--
📁
msan
-
02/02/2024 06:09:55 PM
rwxr-xr-x
📄
msan.go
1.5 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
msan0.go
725 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
msan_amd64.s
2.3 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
msan_arm64.s
1.98 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
msan_loong64.s
1.96 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
msize_allocheaders.go
1.32 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
msize_noallocheaders.go
915 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
mspanset.go
13.12 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
mstats.go
33.81 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
mwbbuf.go
8.13 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
nbpipe_pipe.go
405 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
nbpipe_pipe2.go
344 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
nbpipe_pipe_test.go
706 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
nbpipe_test.go
1.99 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
net_plan9.go
645 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
netpoll.go
20.55 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
netpoll_aix.go
5.06 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
netpoll_epoll.go
4.4 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
netpoll_fake.go
664 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
netpoll_kqueue.go
5.62 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
netpoll_os_test.go
520 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
netpoll_solaris.go
11.2 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
netpoll_stub.go
1.48 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
netpoll_wasip1.go
6.08 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
netpoll_windows.go
4.01 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
nonwindows_stub.go
729 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
norace_linux_test.go
915 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
norace_test.go
983 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
numcpu_freebsd_test.go
381 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
os2_aix.go
20.88 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
os2_freebsd.go
302 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
os2_openbsd.go
296 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
os2_plan9.go
1.48 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
os2_solaris.go
320 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
os3_plan9.go
3.94 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
os3_solaris.go
17.59 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
os_aix.go
8.89 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
os_android.go
463 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
os_darwin.go
11.92 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
os_darwin_arm64.go
329 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
os_dragonfly.go
7.14 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
os_freebsd.go
11.64 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
os_freebsd2.go
603 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
os_freebsd_amd64.go
658 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
os_freebsd_arm.go
1.45 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
os_freebsd_arm64.go
320 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
os_freebsd_noauxv.go
241 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
os_freebsd_riscv64.go
198 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
os_illumos.go
3.93 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
os_js.go
767 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
os_linux.go
25.71 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
os_linux_arm.go
1.51 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
os_linux_arm64.go
478 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
os_linux_be64.go
806 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
os_linux_generic.go
870 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
os_linux_loong64.go
263 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
os_linux_mips64x.go
996 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
os_linux_mipsx.go
987 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
os_linux_noauxv.go
337 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
os_linux_novdso.go
347 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
os_linux_ppc64x.go
526 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
os_linux_riscv64.go
198 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
os_linux_s390x.go
825 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
os_linux_x86.go
234 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
os_netbsd.go
10.12 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
os_netbsd_386.go
617 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
os_netbsd_amd64.go
614 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
os_netbsd_arm.go
1.07 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
os_netbsd_arm64.go
769 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
os_nonopenbsd.go
437 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
os_only_solaris.go
357 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
os_openbsd.go
6.23 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
os_openbsd_arm.go
662 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
os_openbsd_arm64.go
329 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
os_openbsd_libc.go
1.49 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
os_openbsd_mips64.go
329 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
os_openbsd_syscall.go
1.36 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
os_openbsd_syscall1.go
441 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
os_openbsd_syscall2.go
2.51 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
os_plan9.go
10.18 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
os_plan9_arm.go
375 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
os_solaris.go
6.62 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
os_unix.go
436 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
os_unix_nonlinux.go
374 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
os_wasip1.go
7 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
os_wasm.go
3.15 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
os_windows.go
41.39 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
os_windows_arm.go
511 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
os_windows_arm64.go
339 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
pagetrace_off.go
550 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
pagetrace_on.go
10.36 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
panic.go
41.85 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
panic32.go
4.8 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
panic_test.go
1.71 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
panicnil_test.go
1.25 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
pinner.go
10.98 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
pinner_test.go
11.04 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
plugin.go
4.37 KB
02/02/2024 06:09:55 PM
rw-r--r--
📁
pprof
-
02/02/2024 06:09:55 PM
rwxr-xr-x
📄
preempt.go
15.03 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
preempt_386.s
824 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
preempt_amd64.s
1.67 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
preempt_arm.s
1.49 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
preempt_arm64.s
1.97 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
preempt_loong64.s
2.41 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
preempt_mips64x.s
2.72 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
preempt_mipsx.s
2.68 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
preempt_nonwindows.go
290 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
preempt_ppc64x.s
2.72 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
preempt_riscv64.s
2.26 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
preempt_s390x.s
1.01 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
preempt_wasm.s
176 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
print.go
5.92 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
proc.go
204.28 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
proc_runtime_test.go
1.38 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
proc_test.go
25.85 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
profbuf.go
18.26 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
profbuf_test.go
8.54 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
proflabel.go
1.52 KB
02/02/2024 06:09:55 PM
rw-r--r--
📁
race
-
02/02/2024 06:09:55 PM
rwxr-xr-x
📄
race.go
18.81 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
race0.go
2.79 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
race_amd64.s
13.94 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
race_arm64.s
14.21 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
race_ppc64le.s
15.93 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
race_s390x.s
11.99 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
rand.go
7.11 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
rand_test.go
1.95 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
rdebug.go
550 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
retry.go
760 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
rt0_aix_ppc64.s
4.09 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
rt0_android_386.s
822 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
rt0_android_amd64.s
754 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
rt0_android_arm.s
843 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
rt0_android_arm64.s
941 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
rt0_darwin_amd64.s
399 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
rt0_darwin_arm64.s
1.69 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
rt0_dragonfly_amd64.s
448 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
rt0_freebsd_386.s
454 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
rt0_freebsd_amd64.s
442 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
rt0_freebsd_arm.s
298 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
rt0_freebsd_arm64.s
1.88 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
rt0_freebsd_riscv64.s
2.72 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
rt0_illumos_amd64.s
311 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
rt0_ios_amd64.s
425 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
rt0_ios_arm64.s
425 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
rt0_js_wasm.s
1.53 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
rt0_linux_386.s
450 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
rt0_linux_amd64.s
307 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
rt0_linux_arm.s
1007 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
rt0_linux_arm64.s
1.81 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
rt0_linux_loong64.s
2.01 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
rt0_linux_mips64x.s
1014 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
rt0_linux_mipsx.s
797 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
rt0_linux_ppc64.s
847 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
rt0_linux_ppc64le.s
2.89 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
rt0_linux_riscv64.s
2.65 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
rt0_linux_s390x.s
676 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
rt0_netbsd_386.s
452 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
rt0_netbsd_amd64.s
309 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
rt0_netbsd_arm.s
296 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
rt0_netbsd_arm64.s
1.8 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
rt0_openbsd_386.s
454 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
rt0_openbsd_amd64.s
311 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
rt0_openbsd_arm.s
298 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
rt0_openbsd_arm64.s
1.96 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
rt0_openbsd_mips64.s
976 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
rt0_openbsd_ppc64.s
370 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
rt0_openbsd_riscv64.s
372 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
rt0_plan9_386.s
523 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
rt0_plan9_amd64.s
481 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
rt0_plan9_arm.s
397 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
rt0_solaris_amd64.s
311 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
rt0_wasip1_wasm.s
387 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
rt0_windows_386.s
1.28 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
rt0_windows_amd64.s
1.14 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
rt0_windows_arm.s
386 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
rt0_windows_arm64.s
733 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
runtime-gdb.py
15.44 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
runtime-gdb_test.go
24.04 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
runtime-gdb_unix_test.go
9.4 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
runtime-lldb_test.go
4.95 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
runtime-seh_windows_test.go
4.7 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
runtime.go
7.1 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
runtime1.go
16.66 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
runtime2.go
46.16 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
runtime_boring.go
606 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
runtime_linux_test.go
1.77 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
runtime_mmap_test.go
1.77 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
runtime_test.go
11.81 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
runtime_unix_test.go
1.22 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
rwmutex.go
5 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
rwmutex_test.go
4.21 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
security_aix.go
449 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
security_issetugid.go
502 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
security_linux.go
335 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
security_nonunix.go
256 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
security_test.go
4.09 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
security_unix.go
818 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
select.go
14.82 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
sema.go
18.43 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
sema_test.go
4.21 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
semasleep_test.go
3.46 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
sigaction.go
489 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
signal_386.go
1.72 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
signal_aix_ppc64.go
3.54 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
signal_amd64.go
2.73 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
signal_arm.go
2.54 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
signal_arm64.go
3.83 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
signal_darwin.go
2.13 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
signal_darwin_amd64.go
4 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
signal_darwin_arm64.go
3.6 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
signal_dragonfly.go
2.17 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
signal_dragonfly_amd64.go
2.01 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
signal_freebsd.go
2.2 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
signal_freebsd_386.go
1.55 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
signal_freebsd_amd64.go
2.03 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
signal_freebsd_arm.go
2.18 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
signal_freebsd_arm64.go
3.24 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
signal_freebsd_riscv64.go
3.08 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
signal_linux_386.go
1.59 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
signal_linux_amd64.go
2.05 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
signal_linux_arm.go
2.12 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
signal_linux_arm64.go
2.95 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
signal_linux_loong64.go
3.22 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
signal_linux_mips64x.go
3.35 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
signal_linux_mipsx.go
3.67 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
signal_linux_ppc64x.go
3.5 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
signal_linux_riscv64.go
2.92 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
signal_linux_s390x.go
4.49 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
signal_loong64.go
3.01 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
signal_mips64x.go
3.18 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
signal_mipsx.go
3.06 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
signal_netbsd.go
2.18 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
signal_netbsd_386.go
1.76 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
signal_netbsd_amd64.go
2.33 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
signal_netbsd_arm.go
2.3 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
signal_netbsd_arm64.go
3.4 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
signal_openbsd.go
2.18 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
signal_openbsd_386.go
1.58 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
signal_openbsd_amd64.go
2.04 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
signal_openbsd_arm.go
2.12 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
signal_openbsd_arm64.go
3.39 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
signal_openbsd_mips64.go
3.28 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
signal_openbsd_ppc64.go
3.53 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
signal_openbsd_riscv64.go
3.12 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
signal_plan9.go
1.93 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
signal_ppc64x.go
3.71 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
signal_riscv64.go
2.91 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
signal_solaris.go
4.5 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
signal_solaris_amd64.go
2.47 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
signal_unix.go
44.11 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
signal_windows.go
14.48 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
signal_windows_test.go
8.98 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
sigqueue.go
7.62 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
sigqueue_note.go
648 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
sigqueue_plan9.go
3.25 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
sigtab_aix.go
11.3 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
sigtab_linux_generic.go
3.52 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
sigtab_linux_mipsx.go
5.95 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
sizeclasses.go
9.17 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
sizeof_test.go
1003 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
slice.go
11.23 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
slice_test.go
10.32 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
softfloat64.go
11.54 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
softfloat64_test.go
4.04 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
stack.go
40.02 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
stack_test.go
23.14 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
start_line_amd64_test.go
647 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
start_line_test.go
2.58 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
stkframe.go
9.88 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
string.go
13.35 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
string_test.go
13.33 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
stubs.go
17.39 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
stubs2.go
1.15 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
stubs3.go
324 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
stubs_386.go
708 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
stubs_amd64.go
1.38 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
stubs_arm.go
689 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
stubs_arm64.go
700 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
stubs_linux.go
650 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
stubs_loong64.go
638 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
stubs_mips64x.go
522 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
stubs_mipsx.go
441 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
stubs_nonlinux.go
298 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
stubs_ppc64.go
302 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
stubs_ppc64x.go
688 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
stubs_riscv64.go
695 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
stubs_s390x.go
414 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
symtab.go
34.76 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
symtab_test.go
7.48 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
symtabinl.go
3.81 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
symtabinl_test.go
2.97 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
sys_aix_ppc64.s
7.42 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
sys_arm.go
521 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
sys_arm64.go
469 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
sys_darwin.go
22.56 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
sys_darwin_amd64.s
19.65 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
sys_darwin_arm64.go
1.74 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
sys_darwin_arm64.s
18.28 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
sys_dragonfly_amd64.s
8.31 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
sys_freebsd_386.s
9.41 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
sys_freebsd_amd64.s
12.67 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
sys_freebsd_arm.s
10.38 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
sys_freebsd_arm64.s
9.49 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
sys_freebsd_riscv64.s
8.92 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
sys_libc.go
1.84 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
sys_linux_386.s
17.89 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
sys_linux_amd64.s
15.74 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
sys_linux_arm.s
13.5 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
sys_linux_arm64.s
16.71 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
sys_linux_loong64.s
14.16 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
sys_linux_mips64x.s
11.96 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
sys_linux_mipsx.s
9.69 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
sys_linux_ppc64x.s
18.09 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
sys_linux_riscv64.s
11.48 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
sys_linux_s390x.s
12.49 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
sys_loong64.go
489 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
sys_mips64x.go
500 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
sys_mipsx.go
496 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
sys_netbsd_386.s
9.61 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
sys_netbsd_amd64.s
9.78 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
sys_netbsd_arm.s
10.58 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
sys_netbsd_arm64.s
9.47 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
sys_nonppc64x.go
245 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
sys_openbsd.go
2.59 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
sys_openbsd1.go
1.23 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
sys_openbsd2.go
8.67 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
sys_openbsd3.go
3.37 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
sys_openbsd_386.s
20.4 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
sys_openbsd_amd64.s
15.54 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
sys_openbsd_arm.s
18.46 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
sys_openbsd_arm64.s
15.05 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
sys_openbsd_mips64.s
8.81 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
sys_openbsd_ppc64.s
15.3 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
sys_openbsd_riscv64.s
16.8 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
sys_plan9_386.s
4.48 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
sys_plan9_amd64.s
4.56 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
sys_plan9_arm.s
7.03 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
sys_ppc64x.go
532 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
sys_riscv64.go
469 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
sys_s390x.go
469 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
sys_solaris_amd64.s
6.42 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
sys_wasm.go
758 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
sys_wasm.s
1.43 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
sys_windows_386.s
6.46 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
sys_windows_amd64.s
8.41 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
sys_windows_arm.s
7.72 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
sys_windows_arm64.s
6.8 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
sys_x86.go
552 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall2_solaris.go
1.85 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_aix.go
6.33 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_solaris.go
8.38 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_unix_test.go
635 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_windows.go
16.57 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
syscall_windows_test.go
32.45 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
tagptr.go
496 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
tagptr_32bit.go
927 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
tagptr_64bit.go
3.23 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
test_amd64.go
196 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
test_amd64.s
316 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
test_stubs.go
218 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📁
testdata
-
02/02/2024 06:09:55 PM
rwxr-xr-x
📄
textflag.h
1.47 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
time.go
30.57 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
time_fake.go
2.5 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
time_linux_amd64.s
2.02 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
time_nofake.go
709 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
time_test.go
2.04 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
time_windows.h
753 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
time_windows_386.s
1.71 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
time_windows_amd64.s
786 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
time_windows_arm.s
1.97 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
time_windows_arm64.s
906 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
timeasm.go
418 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
timestub.go
532 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
timestub2.go
363 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
tls_arm.s
3.45 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
tls_arm64.h
1.1 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
tls_arm64.s
1.2 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
tls_loong64.s
589 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
tls_mips64x.s
733 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
tls_mipsx.s
710 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
tls_ppc64x.s
1.52 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
tls_riscv64.s
615 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
tls_s390x.s
1.55 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
tls_stub.go
260 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
tls_windows_amd64.go
294 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📁
trace
-
02/02/2024 06:09:55 PM
rwxr-xr-x
📄
trace.go
62.76 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
trace2.go
33.81 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
trace2buf.go
6.58 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
trace2cpu.go
8.87 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
trace2event.go
8.39 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
trace2map.go
4.36 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
trace2region.go
1.68 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
trace2runtime.go
24.2 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
trace2stack.go
9.45 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
trace2status.go
7.24 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
trace2string.go
2.59 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
trace2time.go
3.21 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
trace_cgo_test.go
4.47 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
traceback.go
54.61 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
traceback_test.go
22.95 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
tracebackx_test.go
509 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
type.go
12.1 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
typekind.go
743 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
unsafe.go
2.97 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
unsafepoint_test.go
3.27 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
utf8.go
3.39 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
vdso_elf32.go
2.76 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
vdso_elf64.go
2.84 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
vdso_freebsd.go
2.44 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
vdso_freebsd_arm.go
454 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
vdso_freebsd_arm64.go
454 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
vdso_freebsd_riscv64.go
429 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
vdso_freebsd_x86.go
1.86 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
vdso_in_none.go
443 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
vdso_linux.go
7.77 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
vdso_linux_386.go
669 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
vdso_linux_amd64.go
685 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
vdso_linux_arm.go
669 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
vdso_linux_arm64.go
670 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
vdso_linux_loong64.go
793 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
vdso_linux_mips64x.go
850 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
vdso_linux_ppc64x.go
672 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
vdso_linux_riscv64.go
666 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
vdso_linux_s390x.go
659 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
vdso_test.go
3.71 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
vlop_386.s
2.02 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
vlop_arm.s
7.06 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
vlop_arm_test.go
3.75 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
vlrt.go
6.71 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
wincallback.go
3.45 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
write_err.go
291 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
write_err_android.go
4.65 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zcallback_windows.go
155 bytes
02/02/2024 06:09:55 PM
rw-r--r--
📄
zcallback_windows.s
63.06 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zcallback_windows_arm.s
89.32 KB
02/02/2024 06:09:55 PM
rw-r--r--
📄
zcallback_windows_arm64.s
89.32 KB
02/02/2024 06:09:55 PM
rw-r--r--
Editing: os_windows.go
Close
// Copyright 2009 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package runtime import ( "internal/abi" "internal/goarch" "runtime/internal/atomic" "unsafe" ) // TODO(brainman): should not need those const ( _NSIG = 65 ) //go:cgo_import_dynamic runtime._AddVectoredContinueHandler AddVectoredContinueHandler%2 "kernel32.dll" //go:cgo_import_dynamic runtime._AddVectoredExceptionHandler AddVectoredExceptionHandler%2 "kernel32.dll" //go:cgo_import_dynamic runtime._CloseHandle CloseHandle%1 "kernel32.dll" //go:cgo_import_dynamic runtime._CreateEventA CreateEventA%4 "kernel32.dll" //go:cgo_import_dynamic runtime._CreateFileA CreateFileA%7 "kernel32.dll" //go:cgo_import_dynamic runtime._CreateIoCompletionPort CreateIoCompletionPort%4 "kernel32.dll" //go:cgo_import_dynamic runtime._CreateThread CreateThread%6 "kernel32.dll" //go:cgo_import_dynamic runtime._CreateWaitableTimerA CreateWaitableTimerA%3 "kernel32.dll" //go:cgo_import_dynamic runtime._CreateWaitableTimerExW CreateWaitableTimerExW%4 "kernel32.dll" //go:cgo_import_dynamic runtime._DuplicateHandle DuplicateHandle%7 "kernel32.dll" //go:cgo_import_dynamic runtime._ExitProcess ExitProcess%1 "kernel32.dll" //go:cgo_import_dynamic runtime._FreeEnvironmentStringsW FreeEnvironmentStringsW%1 "kernel32.dll" //go:cgo_import_dynamic runtime._GetConsoleMode GetConsoleMode%2 "kernel32.dll" //go:cgo_import_dynamic runtime._GetCurrentThreadId GetCurrentThreadId%0 "kernel32.dll" //go:cgo_import_dynamic runtime._GetEnvironmentStringsW GetEnvironmentStringsW%0 "kernel32.dll" //go:cgo_import_dynamic runtime._GetErrorMode GetErrorMode%0 "kernel32.dll" //go:cgo_import_dynamic runtime._GetProcAddress GetProcAddress%2 "kernel32.dll" //go:cgo_import_dynamic runtime._GetProcessAffinityMask GetProcessAffinityMask%3 "kernel32.dll" //go:cgo_import_dynamic runtime._GetQueuedCompletionStatusEx GetQueuedCompletionStatusEx%6 "kernel32.dll" //go:cgo_import_dynamic runtime._GetStdHandle GetStdHandle%1 "kernel32.dll" //go:cgo_import_dynamic runtime._GetSystemDirectoryA GetSystemDirectoryA%2 "kernel32.dll" //go:cgo_import_dynamic runtime._GetSystemInfo GetSystemInfo%1 "kernel32.dll" //go:cgo_import_dynamic runtime._GetThreadContext GetThreadContext%2 "kernel32.dll" //go:cgo_import_dynamic runtime._SetThreadContext SetThreadContext%2 "kernel32.dll" //go:cgo_import_dynamic runtime._LoadLibraryExW LoadLibraryExW%3 "kernel32.dll" //go:cgo_import_dynamic runtime._LoadLibraryW LoadLibraryW%1 "kernel32.dll" //go:cgo_import_dynamic runtime._PostQueuedCompletionStatus PostQueuedCompletionStatus%4 "kernel32.dll" //go:cgo_import_dynamic runtime._QueryPerformanceCounter QueryPerformanceCounter%1 "kernel32.dll" //go:cgo_import_dynamic runtime._RaiseFailFastException RaiseFailFastException%3 "kernel32.dll" //go:cgo_import_dynamic runtime._ResumeThread ResumeThread%1 "kernel32.dll" //go:cgo_import_dynamic runtime._RtlLookupFunctionEntry RtlLookupFunctionEntry%3 "kernel32.dll" //go:cgo_import_dynamic runtime._RtlVirtualUnwind RtlVirtualUnwind%8 "kernel32.dll" //go:cgo_import_dynamic runtime._SetConsoleCtrlHandler SetConsoleCtrlHandler%2 "kernel32.dll" //go:cgo_import_dynamic runtime._SetErrorMode SetErrorMode%1 "kernel32.dll" //go:cgo_import_dynamic runtime._SetEvent SetEvent%1 "kernel32.dll" //go:cgo_import_dynamic runtime._SetProcessPriorityBoost SetProcessPriorityBoost%2 "kernel32.dll" //go:cgo_import_dynamic runtime._SetThreadPriority SetThreadPriority%2 "kernel32.dll" //go:cgo_import_dynamic runtime._SetUnhandledExceptionFilter SetUnhandledExceptionFilter%1 "kernel32.dll" //go:cgo_import_dynamic runtime._SetWaitableTimer SetWaitableTimer%6 "kernel32.dll" //go:cgo_import_dynamic runtime._SuspendThread SuspendThread%1 "kernel32.dll" //go:cgo_import_dynamic runtime._SwitchToThread SwitchToThread%0 "kernel32.dll" //go:cgo_import_dynamic runtime._TlsAlloc TlsAlloc%0 "kernel32.dll" //go:cgo_import_dynamic runtime._VirtualAlloc VirtualAlloc%4 "kernel32.dll" //go:cgo_import_dynamic runtime._VirtualFree VirtualFree%3 "kernel32.dll" //go:cgo_import_dynamic runtime._VirtualQuery VirtualQuery%3 "kernel32.dll" //go:cgo_import_dynamic runtime._WaitForSingleObject WaitForSingleObject%2 "kernel32.dll" //go:cgo_import_dynamic runtime._WaitForMultipleObjects WaitForMultipleObjects%4 "kernel32.dll" //go:cgo_import_dynamic runtime._WerGetFlags WerGetFlags%2 "kernel32.dll" //go:cgo_import_dynamic runtime._WerSetFlags WerSetFlags%1 "kernel32.dll" //go:cgo_import_dynamic runtime._WriteConsoleW WriteConsoleW%5 "kernel32.dll" //go:cgo_import_dynamic runtime._WriteFile WriteFile%5 "kernel32.dll" type stdFunction unsafe.Pointer var ( // Following syscalls are available on every Windows PC. // All these variables are set by the Windows executable // loader before the Go program starts. _AddVectoredContinueHandler, _AddVectoredExceptionHandler, _CloseHandle, _CreateEventA, _CreateFileA, _CreateIoCompletionPort, _CreateThread, _CreateWaitableTimerA, _CreateWaitableTimerExW, _DuplicateHandle, _ExitProcess, _FreeEnvironmentStringsW, _GetConsoleMode, _GetCurrentThreadId, _GetEnvironmentStringsW, _GetErrorMode, _GetProcAddress, _GetProcessAffinityMask, _GetQueuedCompletionStatusEx, _GetStdHandle, _GetSystemDirectoryA, _GetSystemInfo, _GetThreadContext, _SetThreadContext, _LoadLibraryExW, _LoadLibraryW, _PostQueuedCompletionStatus, _QueryPerformanceCounter, _RaiseFailFastException, _ResumeThread, _RtlLookupFunctionEntry, _RtlVirtualUnwind, _SetConsoleCtrlHandler, _SetErrorMode, _SetEvent, _SetProcessPriorityBoost, _SetThreadPriority, _SetUnhandledExceptionFilter, _SetWaitableTimer, _SuspendThread, _SwitchToThread, _TlsAlloc, _VirtualAlloc, _VirtualFree, _VirtualQuery, _WaitForSingleObject, _WaitForMultipleObjects, _WerGetFlags, _WerSetFlags, _WriteConsoleW, _WriteFile, _ stdFunction // Use ProcessPrng to generate cryptographically random data. _ProcessPrng stdFunction // Load ntdll.dll manually during startup, otherwise Mingw // links wrong printf function to cgo executable (see issue // 12030 for details). _RtlGetCurrentPeb stdFunction _RtlGetNtVersionNumbers stdFunction // These are from non-kernel32.dll, so we prefer to LoadLibraryEx them. _timeBeginPeriod, _timeEndPeriod, _WSAGetOverlappedResult, _ stdFunction ) var ( bcryptprimitivesdll = [...]uint16{'b', 'c', 'r', 'y', 'p', 't', 'p', 'r', 'i', 'm', 'i', 't', 'i', 'v', 'e', 's', '.', 'd', 'l', 'l', 0} ntdlldll = [...]uint16{'n', 't', 'd', 'l', 'l', '.', 'd', 'l', 'l', 0} powrprofdll = [...]uint16{'p', 'o', 'w', 'r', 'p', 'r', 'o', 'f', '.', 'd', 'l', 'l', 0} winmmdll = [...]uint16{'w', 'i', 'n', 'm', 'm', '.', 'd', 'l', 'l', 0} ws2_32dll = [...]uint16{'w', 's', '2', '_', '3', '2', '.', 'd', 'l', 'l', 0} ) // Function to be called by windows CreateThread // to start new os thread. func tstart_stdcall(newm *m) // Init-time helper func wintls() type mOS struct { threadLock mutex // protects "thread" and prevents closing thread uintptr // thread handle waitsema uintptr // semaphore for parking on locks resumesema uintptr // semaphore to indicate suspend/resume highResTimer uintptr // high resolution timer handle used in usleep // preemptExtLock synchronizes preemptM with entry/exit from // external C code. // // This protects against races between preemptM calling // SuspendThread and external code on this thread calling // ExitProcess. If these happen concurrently, it's possible to // exit the suspending thread and suspend the exiting thread, // leading to deadlock. // // 0 indicates this M is not being preempted or in external // code. Entering external code CASes this from 0 to 1. If // this fails, a preemption is in progress, so the thread must // wait for the preemption. preemptM also CASes this from 0 to // 1. If this fails, the preemption fails (as it would if the // PC weren't in Go code). The value is reset to 0 when // returning from external code or after a preemption is // complete. // // TODO(austin): We may not need this if preemption were more // tightly synchronized on the G/P status and preemption // blocked transition into _Gsyscall/_Psyscall. preemptExtLock uint32 } // Stubs so tests can link correctly. These should never be called. func open(name *byte, mode, perm int32) int32 { throw("unimplemented") return -1 } func closefd(fd int32) int32 { throw("unimplemented") return -1 } func read(fd int32, p unsafe.Pointer, n int32) int32 { throw("unimplemented") return -1 } type sigset struct{} // Call a Windows function with stdcall conventions, // and switch to os stack during the call. func asmstdcall(fn unsafe.Pointer) var asmstdcallAddr unsafe.Pointer func windowsFindfunc(lib uintptr, name []byte) stdFunction { if name[len(name)-1] != 0 { throw("usage") } f := stdcall2(_GetProcAddress, lib, uintptr(unsafe.Pointer(&name[0]))) return stdFunction(unsafe.Pointer(f)) } const _MAX_PATH = 260 // https://docs.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation var sysDirectory [_MAX_PATH + 1]byte var sysDirectoryLen uintptr func initSysDirectory() { l := stdcall2(_GetSystemDirectoryA, uintptr(unsafe.Pointer(&sysDirectory[0])), uintptr(len(sysDirectory)-1)) if l == 0 || l > uintptr(len(sysDirectory)-1) { throw("Unable to determine system directory") } sysDirectory[l] = '\\' sysDirectoryLen = l + 1 } //go:linkname windows_GetSystemDirectory internal/syscall/windows.GetSystemDirectory func windows_GetSystemDirectory() string { return unsafe.String(&sysDirectory[0], sysDirectoryLen) } func windowsLoadSystemLib(name []uint16) uintptr { return stdcall3(_LoadLibraryExW, uintptr(unsafe.Pointer(&name[0])), 0, _LOAD_LIBRARY_SEARCH_SYSTEM32) } func loadOptionalSyscalls() { bcryptPrimitives := windowsLoadSystemLib(bcryptprimitivesdll[:]) if bcryptPrimitives == 0 { throw("bcryptprimitives.dll not found") } _ProcessPrng = windowsFindfunc(bcryptPrimitives, []byte("ProcessPrng\000")) n32 := windowsLoadSystemLib(ntdlldll[:]) if n32 == 0 { throw("ntdll.dll not found") } _RtlGetCurrentPeb = windowsFindfunc(n32, []byte("RtlGetCurrentPeb\000")) _RtlGetNtVersionNumbers = windowsFindfunc(n32, []byte("RtlGetNtVersionNumbers\000")) m32 := windowsLoadSystemLib(winmmdll[:]) if m32 == 0 { throw("winmm.dll not found") } _timeBeginPeriod = windowsFindfunc(m32, []byte("timeBeginPeriod\000")) _timeEndPeriod = windowsFindfunc(m32, []byte("timeEndPeriod\000")) if _timeBeginPeriod == nil || _timeEndPeriod == nil { throw("timeBegin/EndPeriod not found") } ws232 := windowsLoadSystemLib(ws2_32dll[:]) if ws232 == 0 { throw("ws2_32.dll not found") } _WSAGetOverlappedResult = windowsFindfunc(ws232, []byte("WSAGetOverlappedResult\000")) if _WSAGetOverlappedResult == nil { throw("WSAGetOverlappedResult not found") } } func monitorSuspendResume() { const ( _DEVICE_NOTIFY_CALLBACK = 2 ) type _DEVICE_NOTIFY_SUBSCRIBE_PARAMETERS struct { callback uintptr context uintptr } powrprof := windowsLoadSystemLib(powrprofdll[:]) if powrprof == 0 { return // Running on Windows 7, where we don't need it anyway. } powerRegisterSuspendResumeNotification := windowsFindfunc(powrprof, []byte("PowerRegisterSuspendResumeNotification\000")) if powerRegisterSuspendResumeNotification == nil { return // Running on Windows 7, where we don't need it anyway. } var fn any = func(context uintptr, changeType uint32, setting uintptr) uintptr { for mp := (*m)(atomic.Loadp(unsafe.Pointer(&allm))); mp != nil; mp = mp.alllink { if mp.resumesema != 0 { stdcall1(_SetEvent, mp.resumesema) } } return 0 } params := _DEVICE_NOTIFY_SUBSCRIBE_PARAMETERS{ callback: compileCallback(*efaceOf(&fn), true), } handle := uintptr(0) stdcall3(powerRegisterSuspendResumeNotification, _DEVICE_NOTIFY_CALLBACK, uintptr(unsafe.Pointer(¶ms)), uintptr(unsafe.Pointer(&handle))) } //go:nosplit func getLoadLibrary() uintptr { return uintptr(unsafe.Pointer(_LoadLibraryW)) } //go:nosplit func getLoadLibraryEx() uintptr { return uintptr(unsafe.Pointer(_LoadLibraryExW)) } //go:nosplit func getGetProcAddress() uintptr { return uintptr(unsafe.Pointer(_GetProcAddress)) } func getproccount() int32 { var mask, sysmask uintptr ret := stdcall3(_GetProcessAffinityMask, currentProcess, uintptr(unsafe.Pointer(&mask)), uintptr(unsafe.Pointer(&sysmask))) if ret != 0 { n := 0 maskbits := int(unsafe.Sizeof(mask) * 8) for i := 0; i < maskbits; i++ { if mask&(1<<uint(i)) != 0 { n++ } } if n != 0 { return int32(n) } } // use GetSystemInfo if GetProcessAffinityMask fails var info systeminfo stdcall1(_GetSystemInfo, uintptr(unsafe.Pointer(&info))) return int32(info.dwnumberofprocessors) } func getPageSize() uintptr { var info systeminfo stdcall1(_GetSystemInfo, uintptr(unsafe.Pointer(&info))) return uintptr(info.dwpagesize) } const ( currentProcess = ^uintptr(0) // -1 = current process currentThread = ^uintptr(1) // -2 = current thread ) // in sys_windows_386.s and sys_windows_amd64.s: func getlasterror() uint32 var timeBeginPeriodRetValue uint32 // osRelaxMinNS indicates that sysmon shouldn't osRelax if the next // timer is less than 60 ms from now. Since osRelaxing may reduce // timer resolution to 15.6 ms, this keeps timer error under roughly 1 // part in 4. const osRelaxMinNS = 60 * 1e6 // osRelax is called by the scheduler when transitioning to and from // all Ps being idle. // // Some versions of Windows have high resolution timer. For those // versions osRelax is noop. // For Windows versions without high resolution timer, osRelax // adjusts the system-wide timer resolution. Go needs a // high resolution timer while running and there's little extra cost // if we're already using the CPU, but if all Ps are idle there's no // need to consume extra power to drive the high-res timer. func osRelax(relax bool) uint32 { if haveHighResTimer { // If the high resolution timer is available, the runtime uses the timer // to sleep for short durations. This means there's no need to adjust // the global clock frequency. return 0 } if relax { return uint32(stdcall1(_timeEndPeriod, 1)) } else { return uint32(stdcall1(_timeBeginPeriod, 1)) } } // haveHighResTimer indicates that the CreateWaitableTimerEx // CREATE_WAITABLE_TIMER_HIGH_RESOLUTION flag is available. var haveHighResTimer = false // createHighResTimer calls CreateWaitableTimerEx with // CREATE_WAITABLE_TIMER_HIGH_RESOLUTION flag to create high // resolution timer. createHighResTimer returns new timer // handle or 0, if CreateWaitableTimerEx failed. func createHighResTimer() uintptr { const ( // As per @jstarks, see // https://github.com/golang/go/issues/8687#issuecomment-656259353 _CREATE_WAITABLE_TIMER_HIGH_RESOLUTION = 0x00000002 _SYNCHRONIZE = 0x00100000 _TIMER_QUERY_STATE = 0x0001 _TIMER_MODIFY_STATE = 0x0002 ) return stdcall4(_CreateWaitableTimerExW, 0, 0, _CREATE_WAITABLE_TIMER_HIGH_RESOLUTION, _SYNCHRONIZE|_TIMER_QUERY_STATE|_TIMER_MODIFY_STATE) } func initHighResTimer() { h := createHighResTimer() if h != 0 { haveHighResTimer = true stdcall1(_CloseHandle, h) } } //go:linkname canUseLongPaths os.canUseLongPaths var canUseLongPaths bool // We want this to be large enough to hold the contents of sysDirectory, *plus* // a slash and another component that itself is greater than MAX_PATH. var longFileName [(_MAX_PATH+1)*2 + 1]byte // initLongPathSupport initializes the canUseLongPaths variable, which is // linked into os.canUseLongPaths for determining whether or not long paths // need to be fixed up. In the best case, this function is running on newer // Windows 10 builds, which have a bit field member of the PEB called // "IsLongPathAwareProcess." When this is set, we don't need to go through the // error-prone fixup function in order to access long paths. So this init // function first checks the Windows build number, sets the flag, and then // tests to see if it's actually working. If everything checks out, then // canUseLongPaths is set to true, and later when called, os.fixLongPath // returns early without doing work. func initLongPathSupport() { const ( IsLongPathAwareProcess = 0x80 PebBitFieldOffset = 3 OPEN_EXISTING = 3 ERROR_PATH_NOT_FOUND = 3 ) // Check that we're ≥ 10.0.15063. var maj, min, build uint32 stdcall3(_RtlGetNtVersionNumbers, uintptr(unsafe.Pointer(&maj)), uintptr(unsafe.Pointer(&min)), uintptr(unsafe.Pointer(&build))) if maj < 10 || (maj == 10 && min == 0 && build&0xffff < 15063) { return } // Set the IsLongPathAwareProcess flag of the PEB's bit field. bitField := (*byte)(unsafe.Pointer(stdcall0(_RtlGetCurrentPeb) + PebBitFieldOffset)) originalBitField := *bitField *bitField |= IsLongPathAwareProcess // Check that this actually has an effect, by constructing a large file // path and seeing whether we get ERROR_PATH_NOT_FOUND, rather than // some other error, which would indicate the path is too long, and // hence long path support is not successful. This whole section is NOT // strictly necessary, but is a nice validity check for the near to // medium term, when this functionality is still relatively new in // Windows. targ := longFileName[len(longFileName)-33 : len(longFileName)-1] if readRandom(targ) != len(targ) { readTimeRandom(targ) } start := copy(longFileName[:], sysDirectory[:sysDirectoryLen]) const dig = "0123456789abcdef" for i := 0; i < 32; i++ { longFileName[start+i*2] = dig[longFileName[len(longFileName)-33+i]>>4] longFileName[start+i*2+1] = dig[longFileName[len(longFileName)-33+i]&0xf] } start += 64 for i := start; i < len(longFileName)-1; i++ { longFileName[i] = 'A' } stdcall7(_CreateFileA, uintptr(unsafe.Pointer(&longFileName[0])), 0, 0, 0, OPEN_EXISTING, 0, 0) // The ERROR_PATH_NOT_FOUND error value is distinct from // ERROR_FILE_NOT_FOUND or ERROR_INVALID_NAME, the latter of which we // expect here due to the final component being too long. if getlasterror() == ERROR_PATH_NOT_FOUND { *bitField = originalBitField println("runtime: warning: IsLongPathAwareProcess failed to enable long paths; proceeding in fixup mode") return } canUseLongPaths = true } func osinit() { asmstdcallAddr = unsafe.Pointer(abi.FuncPCABI0(asmstdcall)) loadOptionalSyscalls() preventErrorDialogs() initExceptionHandler() initHighResTimer() timeBeginPeriodRetValue = osRelax(false) initSysDirectory() initLongPathSupport() ncpu = getproccount() physPageSize = getPageSize() // Windows dynamic priority boosting assumes that a process has different types // of dedicated threads -- GUI, IO, computational, etc. Go processes use // equivalent threads that all do a mix of GUI, IO, computations, etc. // In such context dynamic priority boosting does nothing but harm, so we turn it off. stdcall2(_SetProcessPriorityBoost, currentProcess, 1) } //go:nosplit func readRandom(r []byte) int { n := 0 if stdcall2(_ProcessPrng, uintptr(unsafe.Pointer(&r[0])), uintptr(len(r)))&0xff != 0 { n = len(r) } return n } func goenvs() { // strings is a pointer to environment variable pairs in the form: // "envA=valA\x00envB=valB\x00\x00" (in UTF-16) // Two consecutive zero bytes end the list. strings := unsafe.Pointer(stdcall0(_GetEnvironmentStringsW)) p := (*[1 << 24]uint16)(strings)[:] n := 0 for from, i := 0, 0; true; i++ { if p[i] == 0 { // empty string marks the end if i == from { break } from = i + 1 n++ } } envs = make([]string, n) for i := range envs { envs[i] = gostringw(&p[0]) for p[0] != 0 { p = p[1:] } p = p[1:] // skip nil byte } stdcall1(_FreeEnvironmentStringsW, uintptr(strings)) // We call these all the way here, late in init, so that malloc works // for the callback functions these generate. var fn any = ctrlHandler ctrlHandlerPC := compileCallback(*efaceOf(&fn), true) stdcall2(_SetConsoleCtrlHandler, ctrlHandlerPC, 1) monitorSuspendResume() } // exiting is set to non-zero when the process is exiting. var exiting uint32 //go:nosplit func exit(code int32) { // Disallow thread suspension for preemption. Otherwise, // ExitProcess and SuspendThread can race: SuspendThread // queues a suspension request for this thread, ExitProcess // kills the suspending thread, and then this thread suspends. lock(&suspendLock) atomic.Store(&exiting, 1) stdcall1(_ExitProcess, uintptr(code)) } // write1 must be nosplit because it's used as a last resort in // functions like badmorestackg0. In such cases, we'll always take the // ASCII path. // //go:nosplit func write1(fd uintptr, buf unsafe.Pointer, n int32) int32 { const ( _STD_OUTPUT_HANDLE = ^uintptr(10) // -11 _STD_ERROR_HANDLE = ^uintptr(11) // -12 ) var handle uintptr switch fd { case 1: handle = stdcall1(_GetStdHandle, _STD_OUTPUT_HANDLE) case 2: handle = stdcall1(_GetStdHandle, _STD_ERROR_HANDLE) default: // assume fd is real windows handle. handle = fd } isASCII := true b := (*[1 << 30]byte)(buf)[:n] for _, x := range b { if x >= 0x80 { isASCII = false break } } if !isASCII { var m uint32 isConsole := stdcall2(_GetConsoleMode, handle, uintptr(unsafe.Pointer(&m))) != 0 // If this is a console output, various non-unicode code pages can be in use. // Use the dedicated WriteConsole call to ensure unicode is printed correctly. if isConsole { return int32(writeConsole(handle, buf, n)) } } var written uint32 stdcall5(_WriteFile, handle, uintptr(buf), uintptr(n), uintptr(unsafe.Pointer(&written)), 0) return int32(written) } var ( utf16ConsoleBack [1000]uint16 utf16ConsoleBackLock mutex ) // writeConsole writes bufLen bytes from buf to the console File. // It returns the number of bytes written. func writeConsole(handle uintptr, buf unsafe.Pointer, bufLen int32) int { const surr2 = (surrogateMin + surrogateMax + 1) / 2 // Do not use defer for unlock. May cause issues when printing a panic. lock(&utf16ConsoleBackLock) b := (*[1 << 30]byte)(buf)[:bufLen] s := *(*string)(unsafe.Pointer(&b)) utf16tmp := utf16ConsoleBack[:] total := len(s) w := 0 for _, r := range s { if w >= len(utf16tmp)-2 { writeConsoleUTF16(handle, utf16tmp[:w]) w = 0 } if r < 0x10000 { utf16tmp[w] = uint16(r) w++ } else { r -= 0x10000 utf16tmp[w] = surrogateMin + uint16(r>>10)&0x3ff utf16tmp[w+1] = surr2 + uint16(r)&0x3ff w += 2 } } writeConsoleUTF16(handle, utf16tmp[:w]) unlock(&utf16ConsoleBackLock) return total } // writeConsoleUTF16 is the dedicated windows calls that correctly prints // to the console regardless of the current code page. Input is utf-16 code points. // The handle must be a console handle. func writeConsoleUTF16(handle uintptr, b []uint16) { l := uint32(len(b)) if l == 0 { return } var written uint32 stdcall5(_WriteConsoleW, handle, uintptr(unsafe.Pointer(&b[0])), uintptr(l), uintptr(unsafe.Pointer(&written)), 0, ) return } //go:nosplit func semasleep(ns int64) int32 { const ( _WAIT_ABANDONED = 0x00000080 _WAIT_OBJECT_0 = 0x00000000 _WAIT_TIMEOUT = 0x00000102 _WAIT_FAILED = 0xFFFFFFFF ) var result uintptr if ns < 0 { result = stdcall2(_WaitForSingleObject, getg().m.waitsema, uintptr(_INFINITE)) } else { start := nanotime() elapsed := int64(0) for { ms := int64(timediv(ns-elapsed, 1000000, nil)) if ms == 0 { ms = 1 } result = stdcall4(_WaitForMultipleObjects, 2, uintptr(unsafe.Pointer(&[2]uintptr{getg().m.waitsema, getg().m.resumesema})), 0, uintptr(ms)) if result != _WAIT_OBJECT_0+1 { // Not a suspend/resume event break } elapsed = nanotime() - start if elapsed >= ns { return -1 } } } switch result { case _WAIT_OBJECT_0: // Signaled return 0 case _WAIT_TIMEOUT: return -1 case _WAIT_ABANDONED: systemstack(func() { throw("runtime.semasleep wait_abandoned") }) case _WAIT_FAILED: systemstack(func() { print("runtime: waitforsingleobject wait_failed; errno=", getlasterror(), "\n") throw("runtime.semasleep wait_failed") }) default: systemstack(func() { print("runtime: waitforsingleobject unexpected; result=", result, "\n") throw("runtime.semasleep unexpected") }) } return -1 // unreachable } //go:nosplit func semawakeup(mp *m) { if stdcall1(_SetEvent, mp.waitsema) == 0 { systemstack(func() { print("runtime: setevent failed; errno=", getlasterror(), "\n") throw("runtime.semawakeup") }) } } //go:nosplit func semacreate(mp *m) { if mp.waitsema != 0 { return } mp.waitsema = stdcall4(_CreateEventA, 0, 0, 0, 0) if mp.waitsema == 0 { systemstack(func() { print("runtime: createevent failed; errno=", getlasterror(), "\n") throw("runtime.semacreate") }) } mp.resumesema = stdcall4(_CreateEventA, 0, 0, 0, 0) if mp.resumesema == 0 { systemstack(func() { print("runtime: createevent failed; errno=", getlasterror(), "\n") throw("runtime.semacreate") }) stdcall1(_CloseHandle, mp.waitsema) mp.waitsema = 0 } } // May run with m.p==nil, so write barriers are not allowed. This // function is called by newosproc0, so it is also required to // operate without stack guards. // //go:nowritebarrierrec //go:nosplit func newosproc(mp *m) { // We pass 0 for the stack size to use the default for this binary. thandle := stdcall6(_CreateThread, 0, 0, abi.FuncPCABI0(tstart_stdcall), uintptr(unsafe.Pointer(mp)), 0, 0) if thandle == 0 { if atomic.Load(&exiting) != 0 { // CreateThread may fail if called // concurrently with ExitProcess. If this // happens, just freeze this thread and let // the process exit. See issue #18253. lock(&deadlock) lock(&deadlock) } print("runtime: failed to create new OS thread (have ", mcount(), " already; errno=", getlasterror(), ")\n") throw("runtime.newosproc") } // Close thandle to avoid leaking the thread object if it exits. stdcall1(_CloseHandle, thandle) } // Used by the C library build mode. On Linux this function would allocate a // stack, but that's not necessary for Windows. No stack guards are present // and the GC has not been initialized, so write barriers will fail. // //go:nowritebarrierrec //go:nosplit func newosproc0(mp *m, stk unsafe.Pointer) { // TODO: this is completely broken. The args passed to newosproc0 (in asm_amd64.s) // are stacksize and function, not *m and stack. // Check os_linux.go for an implementation that might actually work. throw("bad newosproc0") } func exitThread(wait *atomic.Uint32) { // We should never reach exitThread on Windows because we let // the OS clean up threads. throw("exitThread") } // Called to initialize a new m (including the bootstrap m). // Called on the parent thread (main thread in case of bootstrap), can allocate memory. func mpreinit(mp *m) { } //go:nosplit func sigsave(p *sigset) { } //go:nosplit func msigrestore(sigmask sigset) { } //go:nosplit //go:nowritebarrierrec func clearSignalHandlers() { } //go:nosplit func sigblock(exiting bool) { } // Called to initialize a new m (including the bootstrap m). // Called on the new thread, cannot allocate memory. func minit() { var thandle uintptr if stdcall7(_DuplicateHandle, currentProcess, currentThread, currentProcess, uintptr(unsafe.Pointer(&thandle)), 0, 0, _DUPLICATE_SAME_ACCESS) == 0 { print("runtime.minit: duplicatehandle failed; errno=", getlasterror(), "\n") throw("runtime.minit: duplicatehandle failed") } mp := getg().m lock(&mp.threadLock) mp.thread = thandle mp.procid = uint64(stdcall0(_GetCurrentThreadId)) // Configure usleep timer, if possible. if mp.highResTimer == 0 && haveHighResTimer { mp.highResTimer = createHighResTimer() if mp.highResTimer == 0 { print("runtime: CreateWaitableTimerEx failed; errno=", getlasterror(), "\n") throw("CreateWaitableTimerEx when creating timer failed") } } unlock(&mp.threadLock) // Query the true stack base from the OS. Currently we're // running on a small assumed stack. var mbi memoryBasicInformation res := stdcall3(_VirtualQuery, uintptr(unsafe.Pointer(&mbi)), uintptr(unsafe.Pointer(&mbi)), unsafe.Sizeof(mbi)) if res == 0 { print("runtime: VirtualQuery failed; errno=", getlasterror(), "\n") throw("VirtualQuery for stack base failed") } // The system leaves an 8K PAGE_GUARD region at the bottom of // the stack (in theory VirtualQuery isn't supposed to include // that, but it does). Add an additional 8K of slop for // calling C functions that don't have stack checks and for // lastcontinuehandler. We shouldn't be anywhere near this // bound anyway. base := mbi.allocationBase + 16<<10 // Sanity check the stack bounds. g0 := getg() if base > g0.stack.hi || g0.stack.hi-base > 64<<20 { print("runtime: g0 stack [", hex(base), ",", hex(g0.stack.hi), ")\n") throw("bad g0 stack") } g0.stack.lo = base g0.stackguard0 = g0.stack.lo + stackGuard g0.stackguard1 = g0.stackguard0 // Sanity check the SP. stackcheck() } // Called from dropm to undo the effect of an minit. // //go:nosplit func unminit() { mp := getg().m lock(&mp.threadLock) if mp.thread != 0 { stdcall1(_CloseHandle, mp.thread) mp.thread = 0 } unlock(&mp.threadLock) mp.procid = 0 } // Called from exitm, but not from drop, to undo the effect of thread-owned // resources in minit, semacreate, or elsewhere. Do not take locks after calling this. // //go:nosplit func mdestroy(mp *m) { if mp.highResTimer != 0 { stdcall1(_CloseHandle, mp.highResTimer) mp.highResTimer = 0 } if mp.waitsema != 0 { stdcall1(_CloseHandle, mp.waitsema) mp.waitsema = 0 } if mp.resumesema != 0 { stdcall1(_CloseHandle, mp.resumesema) mp.resumesema = 0 } } // asmstdcall_trampoline calls asmstdcall converting from Go to C calling convention. func asmstdcall_trampoline(args unsafe.Pointer) // stdcall_no_g calls asmstdcall on os stack without using g. // //go:nosplit func stdcall_no_g(fn stdFunction, n int, args uintptr) uintptr { libcall := libcall{ fn: uintptr(unsafe.Pointer(fn)), n: uintptr(n), args: args, } asmstdcall_trampoline(noescape(unsafe.Pointer(&libcall))) return libcall.r1 } // Calling stdcall on os stack. // May run during STW, so write barriers are not allowed. // //go:nowritebarrier //go:nosplit func stdcall(fn stdFunction) uintptr { gp := getg() mp := gp.m mp.libcall.fn = uintptr(unsafe.Pointer(fn)) resetLibcall := false if mp.profilehz != 0 && mp.libcallsp == 0 { // leave pc/sp for cpu profiler mp.libcallg.set(gp) mp.libcallpc = getcallerpc() // sp must be the last, because once async cpu profiler finds // all three values to be non-zero, it will use them mp.libcallsp = getcallersp() resetLibcall = true // See comment in sys_darwin.go:libcCall } asmcgocall(asmstdcallAddr, unsafe.Pointer(&mp.libcall)) if resetLibcall { mp.libcallsp = 0 } return mp.libcall.r1 } //go:nosplit func stdcall0(fn stdFunction) uintptr { mp := getg().m mp.libcall.n = 0 mp.libcall.args = 0 return stdcall(fn) } //go:nosplit //go:cgo_unsafe_args func stdcall1(fn stdFunction, a0 uintptr) uintptr { mp := getg().m mp.libcall.n = 1 mp.libcall.args = uintptr(noescape(unsafe.Pointer(&a0))) return stdcall(fn) } //go:nosplit //go:cgo_unsafe_args func stdcall2(fn stdFunction, a0, a1 uintptr) uintptr { mp := getg().m mp.libcall.n = 2 mp.libcall.args = uintptr(noescape(unsafe.Pointer(&a0))) return stdcall(fn) } //go:nosplit //go:cgo_unsafe_args func stdcall3(fn stdFunction, a0, a1, a2 uintptr) uintptr { mp := getg().m mp.libcall.n = 3 mp.libcall.args = uintptr(noescape(unsafe.Pointer(&a0))) return stdcall(fn) } //go:nosplit //go:cgo_unsafe_args func stdcall4(fn stdFunction, a0, a1, a2, a3 uintptr) uintptr { mp := getg().m mp.libcall.n = 4 mp.libcall.args = uintptr(noescape(unsafe.Pointer(&a0))) return stdcall(fn) } //go:nosplit //go:cgo_unsafe_args func stdcall5(fn stdFunction, a0, a1, a2, a3, a4 uintptr) uintptr { mp := getg().m mp.libcall.n = 5 mp.libcall.args = uintptr(noescape(unsafe.Pointer(&a0))) return stdcall(fn) } //go:nosplit //go:cgo_unsafe_args func stdcall6(fn stdFunction, a0, a1, a2, a3, a4, a5 uintptr) uintptr { mp := getg().m mp.libcall.n = 6 mp.libcall.args = uintptr(noescape(unsafe.Pointer(&a0))) return stdcall(fn) } //go:nosplit //go:cgo_unsafe_args func stdcall7(fn stdFunction, a0, a1, a2, a3, a4, a5, a6 uintptr) uintptr { mp := getg().m mp.libcall.n = 7 mp.libcall.args = uintptr(noescape(unsafe.Pointer(&a0))) return stdcall(fn) } //go:nosplit //go:cgo_unsafe_args func stdcall8(fn stdFunction, a0, a1, a2, a3, a4, a5, a6, a7 uintptr) uintptr { mp := getg().m mp.libcall.n = 8 mp.libcall.args = uintptr(noescape(unsafe.Pointer(&a0))) return stdcall(fn) } // These must run on the system stack only. //go:nosplit func osyield_no_g() { stdcall_no_g(_SwitchToThread, 0, 0) } //go:nosplit func osyield() { systemstack(func() { stdcall0(_SwitchToThread) }) } //go:nosplit func usleep_no_g(us uint32) { timeout := uintptr(us) / 1000 // ms units args := [...]uintptr{_INVALID_HANDLE_VALUE, timeout} stdcall_no_g(_WaitForSingleObject, len(args), uintptr(noescape(unsafe.Pointer(&args[0])))) } //go:nosplit func usleep(us uint32) { systemstack(func() { var h, timeout uintptr // If the high-res timer is available and its handle has been allocated for this m, use it. // Otherwise fall back to the low-res one, which doesn't need a handle. if haveHighResTimer && getg().m.highResTimer != 0 { h = getg().m.highResTimer dt := -10 * int64(us) // relative sleep (negative), 100ns units stdcall6(_SetWaitableTimer, h, uintptr(unsafe.Pointer(&dt)), 0, 0, 0, 0) timeout = _INFINITE } else { h = _INVALID_HANDLE_VALUE timeout = uintptr(us) / 1000 // ms units } stdcall2(_WaitForSingleObject, h, timeout) }) } func ctrlHandler(_type uint32) uintptr { var s uint32 switch _type { case _CTRL_C_EVENT, _CTRL_BREAK_EVENT: s = _SIGINT case _CTRL_CLOSE_EVENT, _CTRL_LOGOFF_EVENT, _CTRL_SHUTDOWN_EVENT: s = _SIGTERM default: return 0 } if sigsend(s) { if s == _SIGTERM { // Windows terminates the process after this handler returns. // Block indefinitely to give signal handlers a chance to clean up, // but make sure to be properly parked first, so the rest of the // program can continue executing. block() } return 1 } return 0 } // called from zcallback_windows_*.s to sys_windows_*.s func callbackasm1() var profiletimer uintptr func profilem(mp *m, thread uintptr) { // Align Context to 16 bytes. var c *context var cbuf [unsafe.Sizeof(*c) + 15]byte c = (*context)(unsafe.Pointer((uintptr(unsafe.Pointer(&cbuf[15]))) &^ 15)) c.contextflags = _CONTEXT_CONTROL stdcall2(_GetThreadContext, thread, uintptr(unsafe.Pointer(c))) gp := gFromSP(mp, c.sp()) sigprof(c.ip(), c.sp(), c.lr(), gp, mp) } func gFromSP(mp *m, sp uintptr) *g { if gp := mp.g0; gp != nil && gp.stack.lo < sp && sp < gp.stack.hi { return gp } if gp := mp.gsignal; gp != nil && gp.stack.lo < sp && sp < gp.stack.hi { return gp } if gp := mp.curg; gp != nil && gp.stack.lo < sp && sp < gp.stack.hi { return gp } return nil } func profileLoop() { stdcall2(_SetThreadPriority, currentThread, _THREAD_PRIORITY_HIGHEST) for { stdcall2(_WaitForSingleObject, profiletimer, _INFINITE) first := (*m)(atomic.Loadp(unsafe.Pointer(&allm))) for mp := first; mp != nil; mp = mp.alllink { if mp == getg().m { // Don't profile ourselves. continue } lock(&mp.threadLock) // Do not profile threads blocked on Notes, // this includes idle worker threads, // idle timer thread, idle heap scavenger, etc. if mp.thread == 0 || mp.profilehz == 0 || mp.blocked { unlock(&mp.threadLock) continue } // Acquire our own handle to the thread. var thread uintptr if stdcall7(_DuplicateHandle, currentProcess, mp.thread, currentProcess, uintptr(unsafe.Pointer(&thread)), 0, 0, _DUPLICATE_SAME_ACCESS) == 0 { print("runtime: duplicatehandle failed; errno=", getlasterror(), "\n") throw("duplicatehandle failed") } unlock(&mp.threadLock) // mp may exit between the DuplicateHandle // above and the SuspendThread. The handle // will remain valid, but SuspendThread may // fail. if int32(stdcall1(_SuspendThread, thread)) == -1 { // The thread no longer exists. stdcall1(_CloseHandle, thread) continue } if mp.profilehz != 0 && !mp.blocked { // Pass the thread handle in case mp // was in the process of shutting down. profilem(mp, thread) } stdcall1(_ResumeThread, thread) stdcall1(_CloseHandle, thread) } } } func setProcessCPUProfiler(hz int32) { if profiletimer == 0 { var timer uintptr if haveHighResTimer { timer = createHighResTimer() } else { timer = stdcall3(_CreateWaitableTimerA, 0, 0, 0) } atomic.Storeuintptr(&profiletimer, timer) newm(profileLoop, nil, -1) } } func setThreadCPUProfiler(hz int32) { ms := int32(0) due := ^int64(^uint64(1 << 63)) if hz > 0 { ms = 1000 / hz if ms == 0 { ms = 1 } due = int64(ms) * -10000 } stdcall6(_SetWaitableTimer, profiletimer, uintptr(unsafe.Pointer(&due)), uintptr(ms), 0, 0, 0) atomic.Store((*uint32)(unsafe.Pointer(&getg().m.profilehz)), uint32(hz)) } const preemptMSupported = true // suspendLock protects simultaneous SuspendThread operations from // suspending each other. var suspendLock mutex func preemptM(mp *m) { if mp == getg().m { throw("self-preempt") } // Synchronize with external code that may try to ExitProcess. if !atomic.Cas(&mp.preemptExtLock, 0, 1) { // External code is running. Fail the preemption // attempt. mp.preemptGen.Add(1) return } // Acquire our own handle to mp's thread. lock(&mp.threadLock) if mp.thread == 0 { // The M hasn't been minit'd yet (or was just unminit'd). unlock(&mp.threadLock) atomic.Store(&mp.preemptExtLock, 0) mp.preemptGen.Add(1) return } var thread uintptr if stdcall7(_DuplicateHandle, currentProcess, mp.thread, currentProcess, uintptr(unsafe.Pointer(&thread)), 0, 0, _DUPLICATE_SAME_ACCESS) == 0 { print("runtime.preemptM: duplicatehandle failed; errno=", getlasterror(), "\n") throw("runtime.preemptM: duplicatehandle failed") } unlock(&mp.threadLock) // Prepare thread context buffer. This must be aligned to 16 bytes. var c *context var cbuf [unsafe.Sizeof(*c) + 15]byte c = (*context)(unsafe.Pointer((uintptr(unsafe.Pointer(&cbuf[15]))) &^ 15)) c.contextflags = _CONTEXT_CONTROL // Serialize thread suspension. SuspendThread is asynchronous, // so it's otherwise possible for two threads to suspend each // other and deadlock. We must hold this lock until after // GetThreadContext, since that blocks until the thread is // actually suspended. lock(&suspendLock) // Suspend the thread. if int32(stdcall1(_SuspendThread, thread)) == -1 { unlock(&suspendLock) stdcall1(_CloseHandle, thread) atomic.Store(&mp.preemptExtLock, 0) // The thread no longer exists. This shouldn't be // possible, but just acknowledge the request. mp.preemptGen.Add(1) return } // We have to be very careful between this point and once // we've shown mp is at an async safe-point. This is like a // signal handler in the sense that mp could have been doing // anything when we stopped it, including holding arbitrary // locks. // We have to get the thread context before inspecting the M // because SuspendThread only requests a suspend. // GetThreadContext actually blocks until it's suspended. stdcall2(_GetThreadContext, thread, uintptr(unsafe.Pointer(c))) unlock(&suspendLock) // Does it want a preemption and is it safe to preempt? gp := gFromSP(mp, c.sp()) if gp != nil && wantAsyncPreempt(gp) { if ok, newpc := isAsyncSafePoint(gp, c.ip(), c.sp(), c.lr()); ok { // Inject call to asyncPreempt targetPC := abi.FuncPCABI0(asyncPreempt) switch GOARCH { default: throw("unsupported architecture") case "386", "amd64": // Make it look like the thread called targetPC. sp := c.sp() sp -= goarch.PtrSize *(*uintptr)(unsafe.Pointer(sp)) = newpc c.set_sp(sp) c.set_ip(targetPC) case "arm": // Push LR. The injected call is responsible // for restoring LR. gentraceback is aware of // this extra slot. See sigctxt.pushCall in // signal_arm.go, which is similar except we // subtract 1 from IP here. sp := c.sp() sp -= goarch.PtrSize c.set_sp(sp) *(*uint32)(unsafe.Pointer(sp)) = uint32(c.lr()) c.set_lr(newpc - 1) c.set_ip(targetPC) case "arm64": // Push LR. The injected call is responsible // for restoring LR. gentraceback is aware of // this extra slot. See sigctxt.pushCall in // signal_arm64.go. sp := c.sp() - 16 // SP needs 16-byte alignment c.set_sp(sp) *(*uint64)(unsafe.Pointer(sp)) = uint64(c.lr()) c.set_lr(newpc) c.set_ip(targetPC) } stdcall2(_SetThreadContext, thread, uintptr(unsafe.Pointer(c))) } } atomic.Store(&mp.preemptExtLock, 0) // Acknowledge the preemption. mp.preemptGen.Add(1) stdcall1(_ResumeThread, thread) stdcall1(_CloseHandle, thread) } // osPreemptExtEnter is called before entering external code that may // call ExitProcess. // // This must be nosplit because it may be called from a syscall with // untyped stack slots, so the stack must not be grown or scanned. // //go:nosplit func osPreemptExtEnter(mp *m) { for !atomic.Cas(&mp.preemptExtLock, 0, 1) { // An asynchronous preemption is in progress. It's not // safe to enter external code because it may call // ExitProcess and deadlock with SuspendThread. // Ideally we would do the preemption ourselves, but // can't since there may be untyped syscall arguments // on the stack. Instead, just wait and encourage the // SuspendThread APC to run. The preemption should be // done shortly. osyield() } // Asynchronous preemption is now blocked. } // osPreemptExtExit is called after returning from external code that // may call ExitProcess. // // See osPreemptExtEnter for why this is nosplit. // //go:nosplit func osPreemptExtExit(mp *m) { atomic.Store(&mp.preemptExtLock, 0) }