From 59fdea2ac2ded9190eaa9ce81252cd809a2985cb Mon Sep 17 00:00:00 2001 From: Ivan Lozano Date: Thu, 10 May 2018 14:17:22 -0700 Subject: [PATCH] Don't export UBSan minimal runtime symbols. When linking in the UBSan minimal runtime, don't export the symbols. This was resulting in an edge case where symbols were sometimes undefined at runtime on address sanitized builds if static library dependencies were integer overflow sanitized. Bug: 78766744 Test: readelf on libraries show either inclusion of the shared library or no undefined symbols related to the minimal runtime. Change-Id: Ide85c8c6b53b400ce9166ccaf96d250797fe4b24 --- cc/sanitize.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/cc/sanitize.go b/cc/sanitize.go index a6898a2c3..a704cf1e5 100644 --- a/cc/sanitize.go +++ b/cc/sanitize.go @@ -307,10 +307,12 @@ func (sanitize *sanitize) deps(ctx BaseModuleContext, deps Deps) Deps { } func (sanitize *sanitize) flags(ctx ModuleContext, flags Flags) Flags { - minimalRuntimePath := "${config.ClangAsanLibDir}/" + config.UndefinedBehaviorSanitizerMinimalRuntimeLibrary(ctx.toolchain()) + ".a" + minimalRuntimeLib := config.UndefinedBehaviorSanitizerMinimalRuntimeLibrary(ctx.toolchain()) + ".a" + minimalRuntimePath := "${config.ClangAsanLibDir}/" + minimalRuntimeLib if ctx.Device() && sanitize.Properties.MinimalRuntimeDep { flags.LdFlags = append(flags.LdFlags, minimalRuntimePath) + flags.LdFlags = append(flags.LdFlags, "-Wl,--exclude-libs,"+minimalRuntimeLib) } if !sanitize.Properties.SanitizerEnabled && !sanitize.Properties.UbsanRuntimeDep { return flags @@ -448,6 +450,7 @@ func (sanitize *sanitize) flags(ctx ModuleContext, flags Flags) Flags { if enableMinimalRuntime(sanitize) { flags.CFlags = append(flags.CFlags, strings.Join(minimalRuntimeFlags, " ")) flags.libFlags = append([]string{minimalRuntimePath}, flags.libFlags...) + flags.LdFlags = append(flags.LdFlags, "-Wl,--exclude-libs,"+minimalRuntimeLib) } } }