golang: Add support for ASLR/PIE for Go packages
authorJeffery To <jeffery.to@gmail.com>
Tue, 14 Jan 2020 14:17:21 +0000 (22:17 +0800)
committerJeffery To <jeffery.to@gmail.com>
Tue, 14 Jan 2020 14:17:21 +0000 (22:17 +0800)
This adds support to compile position-independent executables for
packages that use golang-package.mk.

Go packages will have PIE enabled if:
* Go supports PIE on the target platform;
* CONFIG_PKG_ASLR_PIE is selected; and
* PKG_ASLR_PIE (for the package) is not set to 0

Go 1.13 supports PIE for x86 and arm targets; mips support is in
progress[1].

[1]: https://github.com/golang/go/issues/21222#issuecomment-542064462

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

index ec7b0e99b154fda101283bc5a2bb2da7edcbfdbc..235585b206207030aa80aac2febe4d77b239f033 100644 (file)
@@ -120,6 +120,14 @@ GO_PKG_BUILD_BIN_DIR:=$(GO_PKG_BUILD_DIR)/bin$(if $(GO_HOST_TARGET_DIFFERENT),/$
 
 GO_PKG_BUILD_DEPENDS_SRC:=$(STAGING_DIR)$(GO_PKG_PATH)/src
 
+ifeq ($(CONFIG_PKG_ASLR_PIE),y)
+  ifeq ($(strip $(PKG_ASLR_PIE)),1)
+    ifeq ($(GO_TARGET_PIE_SUPPORTED),1)
+      GO_PKG_ENABLE_PIE:=1
+    endif
+  endif
+endif
+
 # sstrip causes corrupted section header size
 ifneq ($(CONFIG_USE_SSTRIP),)
   ifneq ($(CONFIG_DEBUG),)
@@ -281,6 +289,7 @@ define GoPackage/Build/Compile
                                pkg_ldflags="$$$$pkg_ldflags -X $$$$def" ; \
                        done ; \
                        go install \
+                               $(if $(GO_PKG_ENABLE_PIE),-buildmode pie) \
                                $$$${installsuffix:+-installsuffix $$$$installsuffix} \
                                -trimpath \
                                -ldflags "all=$$$$ldflags" \