golang: Use external linking for target Go
authorJeffery To <jeffery.to@gmail.com>
Sat, 3 Oct 2020 11:12:11 +0000 (19:12 +0800)
committerJeffery To <jeffery.to@gmail.com>
Tue, 6 Oct 2020 08:28:08 +0000 (16:28 +0800)
In Go 1.15, the linker now defaults to internal linking mode for
-buildmode=pie on amd64 and arm64[1], however this results in go tool
binaries with the wrong dynamic linker/interpreter.

External linking is still used when PIE is enabled for other platforms,
whereas internal linking is used when PIE is not enabled.

This changes target Go to always use external linking, to fix PIE
binaries for amd64/arm64 and for consistency.

[1]: https://golang.org/doc/go1.15#linker

Signed-off-by: Jeffery To <jeffery.to@gmail.com>
lang/golang/golang/Makefile

index 241ba1e3780a88a60e0637e6fa71d0c1e0c5b2d9..6990c249e2271e083c0f8aaf9c0a0031a5208842 100644 (file)
@@ -271,6 +271,8 @@ PKG_GO_VARS= \
 
 PKG_GO_LDFLAGS= \
        -buildid '$(SOURCE_DATE_EPOCH)' \
+       -linkmode external \
+       -extldflags '$(patsubst -z%,-Wl$(comma)-z$(comma)%,$(TARGET_LDFLAGS))' \
        $(if $(CONFIG_NO_STRIP)$(CONFIG_DEBUG),,-s -w)
 
 # setting -trimpath is not necessary here because the paths inside the