* Michal Suchánek: > On Wed, 31 Oct 2018 18:20:56 +0100 > Florian Weimer <fweimer@xxxxxxxxxx> wrote: > >> We tried to use Go to build PIE binaries, and while the Go toolchain >> is definitely not ready (it produces text relocations and problematic >> relocations in general), it exposed what could be an accidental >> userspace ABI change. >> >> With our 4.10-derived kernel, PIE binaries are mapped below 4 GiB, so >> relocations like R_PPC64_ADDR16_HA work: >> > ... > >> There are fewer mappings because the loader detects a relocation >> overflow and aborts (“error while loading shared libraries: >> R_PPC64_ADDR16_HA reloc at 0x0000000120f0983c for symbol `' out of >> range”), so I had to recover the mappings externally. Disabling ASLR >> does not help. >> > ... >> >> And it needs to be built with: >> >> go build -ldflags=-extldflags=-pie extld.go >> >> I'm not entirely sure what to make of this, but I'm worried that this >> could be a regression that matters to userspace. > > I encountered the same when trying to build go on ppc64le. I am not > familiar with the internals so I just let it be. > > It does not seem to matter to any other userspace. It would matter to C code which returns the address of a global variable in the main program through and (implicit) int return value. The old behavior hid some pointer truncation issues. > Maybe it would be good idea to generate 64bit relocations on 64bit > targets? Yes, the Go toolchain definitely needs fixing for PIE. I don't dispute that. Thanks, Florian