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

Commit 4917049f authored by Zhizhou Yang's avatar Zhizhou Yang
Browse files

Fix llvm-ar error caused by using lto and sanitizer together

LLVM-AR does not allow passing --plugin options more than once. The
--plugin ARFLAGS that lto want to add, may already exist if sanitizer is
also turned on.

Fixed this by adding a new bool Flags.ArGoldPlugin. Set this variable to
true whenever LLVM gold plugin is needed for ArFlags. In function
TransformObjToStaticLib(), add this option to arFlags using global value
${config.LLVMGoldPlugin} if the bool value is true.

Bug: http://b/73160350
Test: build the image with make and succeeded.

Change-Id: I62785829b0a4b663225926e4aed98defc1b6da2c
parent c72573dc
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -256,6 +256,7 @@ type builderFlags struct {
	systemIncludeFlags string

	groupStaticLibs bool
	arGoldPlugin    bool

	stripKeepSymbols       bool
	stripKeepMiniDebugInfo bool
@@ -512,6 +513,9 @@ func TransformObjToStaticLib(ctx android.ModuleContext, objFiles android.Paths,
	if !ctx.Darwin() {
		arFlags += " -format=gnu"
	}
	if flags.arGoldPlugin {
		arFlags += " --plugin ${config.LLVMGoldPlugin}"
	}
	if flags.arFlags != "" {
		arFlags += " " + flags.arFlags
	}
+1 −0
Original line number Diff line number Diff line
@@ -142,6 +142,7 @@ type Flags struct {
	LdFlagsDeps android.Paths // Files depended on by linker flags

	GroupStaticLibs bool
	ArGoldPlugin    bool // Whether LLVM gold plugin option is passed to llvm-ar
}

type ObjectLinkerProperties struct {
+1 −1
Original line number Diff line number Diff line
@@ -86,7 +86,7 @@ func (lto *lto) flags(ctx BaseModuleContext, flags Flags) Flags {
			// 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}")
		flags.ArGoldPlugin = true
	}
	return flags
}
+1 −2
Original line number Diff line number Diff line
@@ -38,7 +38,6 @@ var (
		"-fsanitize-blacklist=external/compiler-rt/lib/cfi/cfi_blacklist.txt"}
	cfiLdflags = []string{"-flto", "-fsanitize-cfi-cross-dso", "-fsanitize=cfi",
		"-Wl,-plugin-opt,O1"}
	cfiArflags         = []string{"--plugin ${config.ClangBin}/../lib64/LLVMgold.so"}
	cfiExportsMapPath  = "build/soong/cc/config/cfi_exports.map"
	cfiExportsMap      android.Path
	cfiStaticLibsMutex sync.Mutex
@@ -407,7 +406,7 @@ func (sanitize *sanitize) flags(ctx ModuleContext, flags Flags) Flags {
			// 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, cfiArflags...)
		flags.ArGoldPlugin = true
		if Bool(sanitize.Properties.Sanitize.Diag.Cfi) {
			diagSanitizers = append(diagSanitizers, "cfi")
		}
+1 −0
Original line number Diff line number Diff line
@@ -84,6 +84,7 @@ func flagsToBuilderFlags(in Flags) builderFlags {
		systemIncludeFlags: strings.Join(in.SystemIncludeFlags, " "),

		groupStaticLibs: in.GroupStaticLibs,
		arGoldPlugin:    in.ArGoldPlugin,
	}
}