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

Commit 6182d31c authored by Trevor Radcliffe's avatar Trevor Radcliffe Committed by Gerrit Code Review
Browse files

Merge "Supporting changes for CFI toolchain features"

parents 13ca1a92 391a25d7
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -390,6 +390,8 @@ var (
		"external/protobuf":/* recursive = */ false,
		"external/python/absl-py":/* recursive = */ true,

		"external/compiler-rt/lib/cfi":/* recursive = */ false,

		// this BUILD file is globbed by //external/icu/icu4c/source:icu4c_test_data's "data/**/*".
		"external/icu/icu4c/source/data/unidata/norm2":/* recursive = */ false,

+4 −0
Original line number Diff line number Diff line
@@ -313,6 +313,8 @@ var (
		"device/",
		"vendor/",
	}

	VersionScriptFlagPrefix = "-Wl,--version-script,"
)

// BazelCcToolchainVars generates bzl file content containing variables for
@@ -401,6 +403,8 @@ func init() {
	exportedVars.ExportString("ExperimentalCStdVersion", ExperimentalCStdVersion)
	exportedVars.ExportString("ExperimentalCppStdVersion", ExperimentalCppStdVersion)

	exportedVars.ExportString("VersionScriptFlagPrefix", VersionScriptFlagPrefix)

	// Everything in these lists is a crime against abstraction and dependency tracking.
	// Do not add anything to this list.
	commonGlobalIncludes := []string{
+6 −5
Original line number Diff line number Diff line
@@ -15,11 +15,12 @@
package cc

import (
	"android/soong/android"
	"android/soong/cc/config"
	"fmt"
	"path/filepath"

	"android/soong/android"
	"android/soong/cc/config"

	"github.com/google/blueprint"
	"github.com/google/blueprint/proptools"
)
@@ -542,13 +543,13 @@ func (linker *baseLinker) linkerFlags(ctx ModuleContext, flags Flags) Flags {
				ctx.PropertyErrorf("version_script", "Not supported on Darwin")
			} else {
				flags.Local.LdFlags = append(flags.Local.LdFlags,
					"-Wl,--version-script,"+versionScript.String())
					config.VersionScriptFlagPrefix+versionScript.String())
				flags.LdFlagsDeps = append(flags.LdFlagsDeps, versionScript.Path())

				if linker.sanitize.isSanitizerEnabled(cfi) {
					cfiExportsMap := android.PathForSource(ctx, cfiExportsMapPath)
					cfiExportsMap := android.PathForSource(ctx, cfiExportsMapPath+"/"+cfiExportsMapFilename)
					flags.Local.LdFlags = append(flags.Local.LdFlags,
						"-Wl,--version-script,"+cfiExportsMap.String())
						config.VersionScriptFlagPrefix+cfiExportsMap.String())
					flags.LdFlagsDeps = append(flags.LdFlagsDeps, cfiExportsMap)
				}
			}
+20 −4
Original line number Diff line number Diff line
@@ -62,14 +62,18 @@ var (
		"-fast-isel=false",
	}

	cfiBlocklistPath     = "external/compiler-rt/lib/cfi"
	cfiBlocklistFilename = "cfi_blocklist.txt"
	cfiCflags            = []string{"-flto", "-fsanitize-cfi-cross-dso",
		"-fsanitize-ignorelist=external/compiler-rt/lib/cfi/cfi_blocklist.txt"}
		"-fsanitize-ignorelist=" + cfiBlocklistPath + "/" + cfiBlocklistFilename}
	// -flto and -fvisibility are required by clang when -fsanitize=cfi is
	// used, but have no effect on assembly files
	cfiAsflags = []string{"-flto", "-fvisibility=default"}
	cfiLdflags = []string{"-flto", "-fsanitize-cfi-cross-dso", "-fsanitize=cfi",
		"-Wl,-plugin-opt,O1"}
	cfiExportsMapPath = "build/soong/cc/config/cfi_exports.map"
	cfiExportsMapPath      = "build/soong/cc/config"
	cfiExportsMapFilename  = "cfi_exports.map"
	cfiAssemblySupportFlag = "-fno-sanitize-cfi-canonical-jump-tables"

	intOverflowCflags = []string{"-fsanitize-ignorelist=build/soong/cc/config/integer_overflow_blocklist.txt"}

@@ -388,6 +392,18 @@ func init() {
	exportedVars.ExportStringListStaticVariable("HostOnlySanitizeFlags", hostOnlySanitizeFlags)
	exportedVars.ExportStringList("DeviceOnlySanitizeFlags", deviceOnlySanitizeFlags)

	// Leave out "-flto" from the slices exported to bazel, as we will use the
	// dedicated LTO feature for this
	exportedVars.ExportStringList("CfiCFlags", cfiCflags[1:])
	exportedVars.ExportStringList("CfiAsFlags", cfiAsflags[1:])
	exportedVars.ExportStringList("CfiLdFlags", cfiLdflags[1:])

	exportedVars.ExportString("CfiBlocklistPath", cfiBlocklistPath)
	exportedVars.ExportString("CfiBlocklistFilename", cfiBlocklistFilename)
	exportedVars.ExportString("CfiExportsMapPath", cfiExportsMapPath)
	exportedVars.ExportString("CfiExportsMapFilename", cfiExportsMapFilename)
	exportedVars.ExportString("CfiAssemblySupportFlag", cfiAssemblySupportFlag)

	android.RegisterMakeVarsProvider(pctx, cfiMakeVarsProvider)
	android.RegisterMakeVarsProvider(pctx, hwasanMakeVarsProvider)
}
@@ -810,7 +826,7 @@ func (s *sanitize) flags(ctx ModuleContext, flags Flags) Flags {
		flags.Local.CFlags = append(flags.Local.CFlags, cfiCflags...)
		flags.Local.AsFlags = append(flags.Local.AsFlags, cfiAsflags...)
		if Bool(s.Properties.Sanitize.Config.Cfi_assembly_support) {
			flags.Local.CFlags = append(flags.Local.CFlags, "-fno-sanitize-cfi-canonical-jump-tables")
			flags.Local.CFlags = append(flags.Local.CFlags, cfiAssemblySupportFlag)
		}
		// Only append the default visibility flag if -fvisibility has not already been set
		// to hidden.
+1 −0
Original line number Diff line number Diff line
@@ -91,6 +91,7 @@ function create_mock_soong {
  symlink_directory prebuilts/go
  symlink_directory prebuilts/build-tools
  symlink_directory prebuilts/clang/host
  symlink_directory external/compiler-rt
  symlink_directory external/go-cmp
  symlink_directory external/golang-protobuf
  symlink_directory external/starlark-go