Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0dbb324a authored by Ivan Lozano's avatar Ivan Lozano Committed by Gerrit Code Review
Browse files

Merge "Allow Linux hosts to use ubsan runtime sanitizers."

parents a871ee20 dbc5000c
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -234,7 +234,7 @@ func (t *toolchainLinuxX8664) YasmFlags() string {
}

func (toolchainLinuxX86) LibclangRuntimeLibraryArch() string {
	return "i686"
	return "i386"
}

func (toolchainLinuxX8664) LibclangRuntimeLibraryArch() string {
+57 −34
Original line number Diff line number Diff line
@@ -334,8 +334,8 @@ func (sanitize *sanitize) begin(ctx BaseModuleContext) {
		s.Diag.Cfi = nil
	}

	// Disable sanitizers that depend on the UBSan runtime for host builds.
	if ctx.Host() {
	// Disable sanitizers that depend on the UBSan runtime for windows/darwin builds.
	if !ctx.Os().Linux() {
		s.Cfi = nil
		s.Diag.Cfi = nil
		s.Misc_undefined = nil
@@ -433,11 +433,18 @@ 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 ctx.Device() && sanitize.Properties.MinimalRuntimeDep {
	if 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
@@ -541,11 +548,15 @@ 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)
		} 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)
			if !ctx.toolchain().Bionic() {
				flags.libFlags = append([]string{builtinsRuntimePath}, flags.libFlags...)
				flags.Local.LdFlags = append(flags.Local.LdFlags, "-Wl,--exclude-libs,"+builtinsRuntimeLib)
			}
		}

@@ -887,7 +898,9 @@ func sanitizerRuntimeMutator(mctx android.BottomUpMutatorContext) {
			runtimeLibrary = config.UndefinedBehaviorSanitizerRuntimeLibrary(toolchain)
		}

		if mctx.Device() && runtimeLibrary != "" {
		if runtimeLibrary != "" {
			// Devices and LinuxBionic use the same libraries.
			if toolchain.Bionic() {
				if isLlndkLibrary(runtimeLibrary, mctx.Config()) && !c.static() && c.UseVndk() {
					runtimeLibrary = runtimeLibrary + llndkLibrarySuffix
				}
@@ -915,6 +928,16 @@ func sanitizerRuntimeMutator(mctx android.BottomUpMutatorContext) {
				// 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...)...)
				}
			}
		}
	}
}