On Tue, 30 Mar 2021, Thomas Bogendoerfer wrote:
I want a single go binary, which I can inspect about the FPXX thing and see how easy it would be to just patch the binary and make it run without this patch.
I have experimented with this a bit and unfortunately a command like:
$ objcopy --remove-section=.MIPS.abiflags go go-noabiflags
will indeed remove the MIPS ABI Flags section, but will leave an empty ABIFLAGS segment behind:
ABIFLAGS 0x000000 0x00400248 0x00000000 0x00000 0x00000 R 0x4
which the kernel will choke on in `arch_elf_pt_proc':
if (phdr32->p_filesz < sizeof(abiflags)) return -EINVAL;
or:
if (phdr64->p_filesz < sizeof(abiflags)) return -EINVAL;
which I think is another implementation bug; I think we should silently ignore an empty segment like say `readelf -A' does, that is:
if (!phdr32->p_filesz) return 0;
etc. Sadly there's no option for `objcopy' to explicitly handle segments anyhow including to remove empty ones.
There's the `--update-section' section option for `objcopy' that should work, but it requires more effort as an image of a patched .MIPS.abiflags section is required (still doable).
Maciej