Merge "Publish Soong configuration to Make variables"
diff --git a/cc/cc.go b/cc/cc.go
index db2066a..e650435 100644
--- a/cc/cc.go
+++ b/cc/cc.go
@@ -1540,16 +1540,16 @@
 func (library *libraryLinker) linkStatic(ctx ModuleContext,
 	flags Flags, deps PathDeps, objFiles common.Paths) common.Path {
 
-	objFiles = append(objFiles, deps.WholeStaticLibObjFiles...)
-	library.objFiles = objFiles
+	library.objFiles = append(common.Paths{}, deps.WholeStaticLibObjFiles...)
+	library.objFiles = append(library.objFiles, objFiles...)
 
 	outputFile := common.PathForModuleOut(ctx,
 		ctx.ModuleName()+library.Properties.VariantName+staticLibraryExtension)
 
 	if ctx.Darwin() {
-		TransformDarwinObjToStaticLib(ctx, objFiles, flagsToBuilderFlags(flags), outputFile)
+		TransformDarwinObjToStaticLib(ctx, library.objFiles, flagsToBuilderFlags(flags), outputFile)
 	} else {
-		TransformObjToStaticLib(ctx, objFiles, flagsToBuilderFlags(flags), outputFile)
+		TransformObjToStaticLib(ctx, library.objFiles, flagsToBuilderFlags(flags), outputFile)
 	}
 
 	library.wholeStaticMissingDeps = ctx.GetMissingDependencies()
diff --git a/cc/sanitize.go b/cc/sanitize.go
index 670443b..94c56ce 100644
--- a/cc/sanitize.go
+++ b/cc/sanitize.go
@@ -59,6 +59,7 @@
 		All_undefined  bool     `android:"arch_variant"`
 		Misc_undefined []string `android:"arch_variant"`
 		Coverage       bool     `android:"arch_variant"`
+		SafeStack      bool     `android:"arch_variant"`
 
 		// value to pass to -fsantitize-recover=
 		Recover []string
@@ -127,15 +128,20 @@
 			sanitize.Properties.Sanitize.Coverage = true
 		}
 
+		if found, globalSanitizers = removeFromList("safe-stack", globalSanitizers); found {
+			sanitize.Properties.Sanitize.SafeStack = true
+		}
+
 		if len(globalSanitizers) > 0 {
 			ctx.ModuleErrorf("unknown global sanitizer option %s", globalSanitizers[0])
 		}
 		sanitize.Properties.SanitizerEnabled = true
 	}
 
-	if !ctx.toolchain().Is64Bit() && sanitize.Properties.Sanitize.Thread {
-		// TSAN is not supported on 32-bit architectures
+	if !ctx.toolchain().Is64Bit() {
+		// TSAN and SafeStack are not supported on 32-bit architectures
 		sanitize.Properties.Sanitize.Thread = false
+		sanitize.Properties.Sanitize.SafeStack = false
 		// TODO(ccross): error for compile_multilib = "32"?
 	}
 
@@ -239,6 +245,10 @@
 		flags.CFlags = append(flags.CFlags, "-fsanitize-coverage=edge,indirect-calls,8bit-counters,trace-cmp")
 	}
 
+	if sanitize.Properties.Sanitize.SafeStack {
+		sanitizers = append(sanitizers, "safe-stack")
+	}
+
 	if sanitize.Properties.Sanitize.Recover != nil {
 		flags.CFlags = append(flags.CFlags, "-fsanitize-recover="+
 			strings.Join(sanitize.Properties.Sanitize.Recover, ","))