
The only architecture that actually needs special support for scanning the stack is WebAssembly. All others allow raw access to the stack with a small bit of assembly. Therefore, don't manually keep track of all these objects on the stack manually and instead just use conservative stack scanning. This results in a massive code size decrease in the affected targets (only tested linux/amd64 for code size) - sometimes around 33%. It also allows for future improvements such as using proper stackful goroutines.
33 строки
767 Б
JSON
33 строки
767 Б
JSON
{
|
|
"llvm-target": "aarch64",
|
|
"build-tags": ["nintendoswitch", "arm64"],
|
|
"goos": "linux",
|
|
"goarch": "arm64",
|
|
"compiler": "clang",
|
|
"linker": "ld.lld",
|
|
"rtlib": "compiler-rt",
|
|
"libc": "picolibc",
|
|
"gc": "conservative",
|
|
"relocation-model": "pic",
|
|
"cflags": [
|
|
"-target", "aarch64-none-linux-gnu",
|
|
"-mtune=cortex-a57",
|
|
"-fPIE",
|
|
"-Werror",
|
|
"-Qunused-arguments",
|
|
"-fshort-enums",
|
|
"-fomit-frame-pointer",
|
|
"-fno-exceptions", "-fno-unwind-tables",
|
|
"-ffunction-sections", "-fdata-sections"
|
|
],
|
|
"ldflags": [
|
|
"-pie",
|
|
"-z", "notext"
|
|
],
|
|
"linkerscript": "targets/nintendoswitch.ld",
|
|
"extra-files": [
|
|
"targets/nintendoswitch.s",
|
|
"src/runtime/gc_arm64.S",
|
|
"src/runtime/runtime_nintendoswitch.s"
|
|
]
|
|
}
|