summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Ivan Lozano <ivanlozano@google.com> 2020-02-11 20:23:36 +0000
committer Gerrit Code Review <noreply-gerritcodereview@google.com> 2020-02-11 20:23:36 +0000
commit2d743b54c76cf96f8bab77986140f5f166f9f5a5 (patch)
tree0a708c3a866bd671ef6ae54dfd692a493ac8d71e
parent70721007605ad619cccae154a5ac7a67452b64d3 (diff)
parent9e37faa3ab65355c28cfa734ab5a48a4b5694fca (diff)
Merge "Revert "Allow Linux hosts to use ubsan runtime sanitizers.""
-rw-r--r--cc/config/x86_linux_host.go2
-rw-r--r--cc/sanitize.go91
2 files changed, 35 insertions, 58 deletions
diff --git a/cc/config/x86_linux_host.go b/cc/config/x86_linux_host.go
index 13b55112a..f08a37987 100644
--- a/cc/config/x86_linux_host.go
+++ b/cc/config/x86_linux_host.go
@@ -234,7 +234,7 @@ func (t *toolchainLinuxX8664) YasmFlags() string {
}
func (toolchainLinuxX86) LibclangRuntimeLibraryArch() string {
- return "i386"
+ return "i686"
}
func (toolchainLinuxX8664) LibclangRuntimeLibraryArch() string {
diff --git a/cc/sanitize.go b/cc/sanitize.go
index 55d6c6505..6f9dbef63 100644
--- a/cc/sanitize.go
+++ b/cc/sanitize.go
@@ -334,8 +334,8 @@ func (sanitize *sanitize) begin(ctx BaseModuleContext) {
s.Diag.Cfi = nil
}
- // Disable sanitizers that depend on the UBSan runtime for windows/darwin builds.
- if !ctx.Os().Linux() {
+ // Disable sanitizers that depend on the UBSan runtime for host builds.
+ if ctx.Host() {
s.Cfi = nil
s.Diag.Cfi = nil
s.Misc_undefined = nil
@@ -433,18 +433,11 @@ func toDisableImplicitIntegerChange(flags []string) bool {
func (sanitize *sanitize) flags(ctx ModuleContext, flags Flags) Flags {
minimalRuntimeLib := config.UndefinedBehaviorSanitizerMinimalRuntimeLibrary(ctx.toolchain()) + ".a"
minimalRuntimePath := "${config.ClangAsanLibDir}/" + minimalRuntimeLib
- builtinsRuntimeLib := config.BuiltinsRuntimeLibrary(ctx.toolchain()) + ".a"
- builtinsRuntimePath := "${config.ClangAsanLibDir}/" + builtinsRuntimeLib
- if sanitize.Properties.MinimalRuntimeDep {
+ if ctx.Device() && sanitize.Properties.MinimalRuntimeDep {
flags.Local.LdFlags = append(flags.Local.LdFlags,
minimalRuntimePath,
"-Wl,--exclude-libs,"+minimalRuntimeLib)
- if ctx.Host() {
- flags.Local.LdFlags = append(flags.Local.LdFlags,
- builtinsRuntimePath,
- "-Wl,--exclude-libs,"+builtinsRuntimeLib)
- }
}
if !sanitize.Properties.SanitizerEnabled && !sanitize.Properties.UbsanRuntimeDep {
return flags
@@ -548,15 +541,11 @@ func (sanitize *sanitize) flags(ctx ModuleContext, flags Flags) Flags {
// there will always be undefined symbols in intermediate libraries.
_, flags.Global.LdFlags = removeFromList("-Wl,--no-undefined", flags.Global.LdFlags)
flags.Local.LdFlags = append(flags.Local.LdFlags, sanitizeArg)
- }
-
- if enableMinimalRuntime(sanitize) {
- flags.Local.CFlags = append(flags.Local.CFlags, strings.Join(minimalRuntimeFlags, " "))
- flags.libFlags = append([]string{minimalRuntimePath}, flags.libFlags...)
- flags.Local.LdFlags = append(flags.Local.LdFlags, "-Wl,--exclude-libs,"+minimalRuntimeLib)
- if !ctx.toolchain().Bionic() {
- flags.libFlags = append([]string{builtinsRuntimePath}, flags.libFlags...)
- flags.Local.LdFlags = append(flags.Local.LdFlags, "-Wl,--exclude-libs,"+builtinsRuntimeLib)
+ } else {
+ if enableMinimalRuntime(sanitize) {
+ flags.Local.CFlags = append(flags.Local.CFlags, strings.Join(minimalRuntimeFlags, " "))
+ flags.libFlags = append([]string{minimalRuntimePath}, flags.libFlags...)
+ flags.Local.LdFlags = append(flags.Local.LdFlags, "-Wl,--exclude-libs,"+minimalRuntimeLib)
}
}
@@ -898,46 +887,34 @@ func sanitizerRuntimeMutator(mctx android.BottomUpMutatorContext) {
runtimeLibrary = config.UndefinedBehaviorSanitizerRuntimeLibrary(toolchain)
}
- if runtimeLibrary != "" {
- // Devices and LinuxBionic use the same libraries.
- if toolchain.Bionic() {
- if isLlndkLibrary(runtimeLibrary, mctx.Config()) && !c.static() && c.UseVndk() {
- runtimeLibrary = runtimeLibrary + llndkLibrarySuffix
- }
+ if mctx.Device() && runtimeLibrary != "" {
+ if isLlndkLibrary(runtimeLibrary, mctx.Config()) && !c.static() && c.UseVndk() {
+ runtimeLibrary = runtimeLibrary + llndkLibrarySuffix
+ }
- // Adding dependency to the runtime library. We are using *FarVariation*
- // because the runtime libraries themselves are not mutated by sanitizer
- // mutators and thus don't have sanitizer variants whereas this module
- // has been already mutated.
- //
- // Note that by adding dependency with {static|shared}DepTag, the lib is
- // added to libFlags and LOCAL_SHARED_LIBRARIES by cc.Module
- if c.staticBinary() {
- // static executable gets static runtime libs
- mctx.AddFarVariationDependencies(append(mctx.Target().Variations(), []blueprint.Variation{
- {Mutator: "link", Variation: "static"},
- c.ImageVariation(),
- }...), StaticDepTag, append([]string{runtimeLibrary}, extraStaticDeps...)...)
- } else if !c.static() && !c.header() {
- // dynamic executable and shared libs get shared runtime libs
- mctx.AddFarVariationDependencies(append(mctx.Target().Variations(), []blueprint.Variation{
- {Mutator: "link", Variation: "shared"},
- c.ImageVariation(),
- }...), earlySharedDepTag, runtimeLibrary)
- }
- // static lib does not have dependency to the runtime library. The
- // dependency will be added to the executables or shared libs using
- // the static lib.
- } else {
- if c.sanitize.Properties.UbsanRuntimeDep {
- // Support UBSan runtime on host modules, which requires the builtins linked in as well.
- mctx.AddFarVariationDependencies(append(mctx.Target().Variations(), []blueprint.Variation{
- {Mutator: "link", Variation: "static"},
- c.ImageVariation(),
- }...), StaticDepTag, append([]string{runtimeLibrary, config.BuiltinsRuntimeLibrary(toolchain)},
- extraStaticDeps...)...)
- }
+ // Adding dependency to the runtime library. We are using *FarVariation*
+ // because the runtime libraries themselves are not mutated by sanitizer
+ // mutators and thus don't have sanitizer variants whereas this module
+ // has been already mutated.
+ //
+ // Note that by adding dependency with {static|shared}DepTag, the lib is
+ // added to libFlags and LOCAL_SHARED_LIBRARIES by cc.Module
+ if c.staticBinary() {
+ // static executable gets static runtime libs
+ mctx.AddFarVariationDependencies(append(mctx.Target().Variations(), []blueprint.Variation{
+ {Mutator: "link", Variation: "static"},
+ c.ImageVariation(),
+ }...), StaticDepTag, append([]string{runtimeLibrary}, extraStaticDeps...)...)
+ } else if !c.static() && !c.header() {
+ // dynamic executable and shared libs get shared runtime libs
+ mctx.AddFarVariationDependencies(append(mctx.Target().Variations(), []blueprint.Variation{
+ {Mutator: "link", Variation: "shared"},
+ c.ImageVariation(),
+ }...), earlySharedDepTag, runtimeLibrary)
}
+ // static lib does not have dependency to the runtime library. The
+ // dependency will be added to the executables or shared libs using
+ // the static lib.
}
}
}