Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
avoid reflect method call panics with GOGARBLE=*
We were obfuscating reflect's package path and its declared names, but the toolchain wants to detect the presence of method reflection to turn down the aggressiveness of dead code elimination. Given that the obfuscation broke the detection, we could easily end up in crashes when making reflect calls: fatal error: unreachable method called. linker bug? goroutine 1 [running]: runtime.throw({0x50c9b3?, 0x2?}) runtime/panic.go:1047 +0x5d fp=0xc000063660 sp=0xc000063630 pc=0x43245d runtime.unreachableMethod() runtime/iface.go:532 +0x25 fp=0xc000063680 sp=0xc000063660 pc=0x40a845 runtime.call16(0xc00010a360, 0xc00000e0a8, 0x0, 0x0, 0x0, 0x8, 0xc000063bb0) runtime/wcS9OpRFL:728 +0x49 fp=0xc0000636a0 sp=0xc000063680 pc=0x45eae9 runtime.reflectcall(0xc00001c120?, 0x1?, 0x1?, 0x18110?, 0xc0?, 0x1?, 0x1?) <autogenerated>:1 +0x3c fp=0xc0000636e0 sp=0xc0000636a0 pc=0x462e9c Avoid obfuscating the three names which cause problems: "reflect", "Method", and "MethodByName". While here, we also teach obfuscatedImportPath to skip "runtime", as I also saw that the toolchain detects it for many reasons. That wasn't a problem yet, as we do not obfuscate the runtime, but it was likely going to become a problem in the future.
- Loading branch information