[tbb-commits] [tor-browser-build/master] Bug 32303: Fix broken obfs4 on Android Q

gk at torproject.org gk at torproject.org
Thu Nov 7 10:13:38 UTC 2019


commit 878a3855c2b7fc5146cd8c38d2b25a7ed427c7e9
Author: Matthew Finkel <sysrqb at torproject.org>
Date:   Sat Oct 26 17:15:20 2019 +0000

    Bug 32303: Fix broken obfs4 on Android Q
    
    Backport go patch #29674 that drops the TLS section on Android.
---
 .../90a3ce02dc25adcf1598faf11a66b151ada3f637.patch | 57 ++++++++++++++++++++++
 projects/go/build                                  |  2 +
 projects/go/config                                 |  2 +
 3 files changed, 61 insertions(+)

diff --git a/projects/go/90a3ce02dc25adcf1598faf11a66b151ada3f637.patch b/projects/go/90a3ce02dc25adcf1598faf11a66b151ada3f637.patch
new file mode 100644
index 0000000..dc66809
--- /dev/null
+++ b/projects/go/90a3ce02dc25adcf1598faf11a66b151ada3f637.patch
@@ -0,0 +1,57 @@
+From 90a3ce02dc25adcf1598faf11a66b151ada3f637 Mon Sep 17 00:00:00 2001
+From: Elias Naur <mail at eliasnaur.com>
+Date: Wed, 27 Mar 2019 14:25:24 +0100
+Subject: [PATCH] cmd/link/internal/ld: skip TLS section on Android
+
+We don't use the TLS section on android, and dropping it avoids
+complaints about underalignment from the Android Q linker.
+
+Updates #29674
+
+Change-Id: I91dabf2a58e6eb1783872639a6a144858db09cef
+Reviewed-on: https://go-review.googlesource.com/c/go/+/169618
+Reviewed-by: Ian Lance Taylor <iant at golang.org>
+---
+ src/cmd/link/internal/ld/lib.go | 29 +++++++++++++++++------------
+ 1 file changed, 17 insertions(+), 12 deletions(-)
+
+diff --git a/src/cmd/link/internal/ld/lib.go b/src/cmd/link/internal/ld/lib.go
+index 1d44c0eb18b..b331e39fe3e 100644
+--- a/src/cmd/link/internal/ld/lib.go
++++ b/src/cmd/link/internal/ld/lib.go
+@@ -453,18 +453,23 @@ func (ctxt *Link) loadlib() {
+ 		}
+ 	}
+ 
+-	tlsg := ctxt.Syms.Lookup("runtime.tlsg", 0)
+-
+-	// runtime.tlsg is used for external linking on platforms that do not define
+-	// a variable to hold g in assembly (currently only intel).
+-	if tlsg.Type == 0 {
+-		tlsg.Type = sym.STLSBSS
+-		tlsg.Size = int64(ctxt.Arch.PtrSize)
+-	} else if tlsg.Type != sym.SDYNIMPORT {
+-		Errorf(nil, "runtime declared tlsg variable %v", tlsg.Type)
+-	}
+-	tlsg.Attr |= sym.AttrReachable
+-	ctxt.Tlsg = tlsg
++	// The Android Q linker started to complain about underalignment of the our TLS
++	// section. We don't actually use the section on android, so dont't
++	// generate it.
++	if objabi.GOOS != "android" {
++		tlsg := ctxt.Syms.Lookup("runtime.tlsg", 0)
++
++		// runtime.tlsg is used for external linking on platforms that do not define
++		// a variable to hold g in assembly (currently only intel).
++		if tlsg.Type == 0 {
++			tlsg.Type = sym.STLSBSS
++			tlsg.Size = int64(ctxt.Arch.PtrSize)
++		} else if tlsg.Type != sym.SDYNIMPORT {
++			Errorf(nil, "runtime declared tlsg variable %v", tlsg.Type)
++		}
++		tlsg.Attr |= sym.AttrReachable
++		ctxt.Tlsg = tlsg
++	}
+ 
+ 	var moduledata *sym.Symbol
+ 	if ctxt.BuildMode == BuildModePlugin {
diff --git a/projects/go/build b/projects/go/build
index aa092d6..2ebfd58 100644
--- a/projects/go/build
+++ b/projects/go/build
@@ -68,6 +68,8 @@ cd /var/tmp/dist/go/src
   CGO_ENABLED=1 CC_FOR_TARGET="$CC_FOR_TARGET" CC= CFLAGS= LDFLAGS= ./make.bash
 [% ELSIF c("var/android") -%]
   patch -p2 < $rootdir/0001-Use-fixed-go-build-tmp-directory.patch
+  # Obfs4 breaks on Android Q without this patch, see: #32303
+  patch -p2 < $rootdir/90a3ce02dc25adcf1598faf11a66b151ada3f637.patch
   CGO_ENABLED=1 CC_FOR_TARGET=[% c("var/CC") %] CGO_CFLAGS='-D__ANDROID_API__=[% c("var/android_min_api") %]' CC= CFLAGS= LDFLAGS= ./make.bash
 [% END -%]
 
diff --git a/projects/go/config b/projects/go/config
index 31c510a..cf95b90 100644
--- a/projects/go/config
+++ b/projects/go/config
@@ -118,3 +118,5 @@ input_files:
     sha256sum: 9947fc705b0b841b5938c48b22dc33e9647ec0752bae66e50278df4f23f64959
   - filename: 0001-Use-fixed-go-build-tmp-directory.patch
     enable: '[% c("var/android") %]'
+  - filename: 90a3ce02dc25adcf1598faf11a66b151ada3f637.patch
+    enable: '[% c("var/android") %]'





More information about the tbb-commits mailing list