commit 878a3855c2b7fc5146cd8c38d2b25a7ed427c7e9 Author: Matthew Finkel sysrqb@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@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@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") %]'
tbb-commits@lists.torproject.org