aboutsummaryrefslogtreecommitdiffstats
path: root/cc/lto.go
diff options
context:
space:
mode:
authorRyan Prichard <rprichard@google.com>2018-02-05 23:45:16 -0800
committerRyan Prichard <rprichard@google.com>2018-02-06 15:11:38 -0800
commit3ed1f70414d71819eaafed49fe4237527b0ef824 (patch)
treebab3d14f6a866fde7c9c247e002522f61e0402a9 /cc/lto.go
parent03d383d038c867ca0430460f9341da6eca8d4d2b (diff)
downloadbuild_soong-3ed1f70414d71819eaafed49fe4237527b0ef824.tar.gz
build_soong-3ed1f70414d71819eaafed49fe4237527b0ef824.tar.bz2
build_soong-3ed1f70414d71819eaafed49fe4237527b0ef824.zip
Enable emutls with -flto for Android sanitize=cfi
-fsanitize=cfi requires LTO. Normally, the Clang driver automatically enables emutls, but it's broken with -flto, so work around it by passing -Wl,-plugin-opt=-emulated-tls. See https://buganizer.corp.google.com/issues/72706604#comment15 Enable the workaround with ctx.Device(), which is the same condition used in the existing I18acac41aac885fc6635fbd55f96ba7c845eb5e7 workaround. Bug: b/72706604 Bug: https://github.com/android-ndk/ndk/issues/498 Test: m libaudioflinger (on internal master); \ readelf -sW symbols/system/lib64/libaudioflinger.so | grep tlNBLogWriter check that __emutls_t.tlNBLogWriter exists check that no symbols of type TLS exist Change-Id: I2cf65574c52476843cc017ee176a7d6777e2ce0b
Diffstat (limited to 'cc/lto.go')
-rw-r--r--cc/lto.go3
1 files changed, 2 insertions, 1 deletions
diff --git a/cc/lto.go b/cc/lto.go
index 7bc22eca..91b11b53 100644
--- a/cc/lto.go
+++ b/cc/lto.go
@@ -82,7 +82,8 @@ func (lto *lto) flags(ctx BaseModuleContext, flags Flags) Flags {
flags.LdFlags = append(flags.LdFlags, ltoFlag)
if ctx.Device() {
// Work around bug in Clang that doesn't pass correct emulated
- // TLS option to target
+ // TLS option to target. See b/72706604 or
+ // https://github.com/android-ndk/ndk/issues/498.
flags.LdFlags = append(flags.LdFlags, "-Wl,-plugin-opt,-emulated-tls")
}
flags.ArFlags = append(flags.ArFlags, " --plugin ${config.LLVMGoldPlugin}")