diff mbox

package/go: needs PIE support

Message ID 1469374783-22190-1-git-send-email-romain.naour@gmail.com
State Accepted
Headers show

Commit Message

Romain Naour July 24, 2016, 3:39 p.m. UTC
When build statically, runc try to link against Scrt1.o which is not
provided by uClibc ARM toolchain for static build only.

[...]arm-buildroot-linux-uclibcgnueabi/bin/ld: cannot find Scrt1.o: No such file or directory
collect2: error: ld returned 1 exit status

On ARM, Go forces the use of -pie, for some reason:

    pie := (goarch == "arm" && goos == "linux") || goos == "android"
    if pie { // we need to use -pie for Linux/ARM to get accurate imported sym
              cgoLDFLAGS = append(cgoLDFLAGS, "-pie")
    }

For this reason, add a dependency on BR2_TOOLCHAIN_SUPPORTS_PIE for ARM CPUs
to disable Go for such toolchains.

While at it, rewrap Go dependencies.

[1] http://lists.busybox.net/pipermail/buildroot/2016-July/167206.html

Signed-off-by: Romain Naour <romain.naour@gmail.com>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Cc: Christian Stewart <christian@paral.in>
---
Require https://patchwork.ozlabs.org/patch/646956/
---
 package/go/Config.in.host | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

Comments

Christian Stewart July 24, 2016, 7:37 p.m. UTC | #1
Romain,

On Sun, Jul 24, 2016 at 8:39 AM, Romain Naour <romain.naour@gmail.com> wrote:
> When build statically, runc try to link against Scrt1.o which is not
> provided by uClibc ARM toolchain for static build only.

Works fine, tested on aarch64, arm, and x86-64.

Tested-by: Christian Stewart <christian@paral.in>

Best,
Christian
Thomas Petazzoni July 24, 2016, 7:50 p.m. UTC | #2
Hello,

On Sun, 24 Jul 2016 17:39:43 +0200, Romain Naour wrote:
> When build statically, runc try to link against Scrt1.o which is not
> provided by uClibc ARM toolchain for static build only.
> 
> [...]arm-buildroot-linux-uclibcgnueabi/bin/ld: cannot find Scrt1.o: No such file or directory
> collect2: error: ld returned 1 exit status
> 
> On ARM, Go forces the use of -pie, for some reason:
> 
>     pie := (goarch == "arm" && goos == "linux") || goos == "android"
>     if pie { // we need to use -pie for Linux/ARM to get accurate imported sym
>               cgoLDFLAGS = append(cgoLDFLAGS, "-pie")
>     }
> 
> For this reason, add a dependency on BR2_TOOLCHAIN_SUPPORTS_PIE for ARM CPUs
> to disable Go for such toolchains.
> 
> While at it, rewrap Go dependencies.
> 
> [1] http://lists.busybox.net/pipermail/buildroot/2016-July/167206.html
> 
> Signed-off-by: Romain Naour <romain.naour@gmail.com>
> Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
> Cc: Christian Stewart <christian@paral.in>
> ---
> Require https://patchwork.ozlabs.org/patch/646956/
> ---
>  package/go/Config.in.host | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)

Applied to master, thanks.

Thomas
diff mbox

Patch

diff --git a/package/go/Config.in.host b/package/go/Config.in.host
index d6d35dc..d79c669 100644
--- a/package/go/Config.in.host
+++ b/package/go/Config.in.host
@@ -1,7 +1,9 @@ 
 config BR2_PACKAGE_HOST_GO_ARCH_SUPPORTS
 	bool
 	default y
-	depends on BR2_arm || BR2_aarch64 || BR2_i386 || BR2_x86_64 || BR2_powerpc64 || BR2_powerpc64le || BR2_mips64 || BR2_mips64el
+	depends on (BR2_arm && BR2_TOOLCHAIN_SUPPORTS_PIE) || BR2_aarch64 \
+		|| BR2_i386 || BR2_x86_64 || BR2_powerpc64 || BR2_powerpc64le \
+		|| BR2_mips64 || BR2_mips64el
 	depends on !BR2_ARM_CPU_ARMV4
 	# MIPS R6 support in Go has not yet been developed.
 	depends on !BR2_mips_64r6