diff options
author | Ryan Prichard <rprichard@google.com> | 2018-02-05 23:45:16 -0800 |
---|---|---|
committer | Ryan Prichard <rprichard@google.com> | 2018-02-06 15:11:38 -0800 |
commit | 3ed1f70414d71819eaafed49fe4237527b0ef824 (patch) | |
tree | bab3d14f6a866fde7c9c247e002522f61e0402a9 /cc/lto.go | |
parent | 03d383d038c867ca0430460f9341da6eca8d4d2b (diff) | |
download | build_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.go | 3 |
1 files changed, 2 insertions, 1 deletions
@@ -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}") |