compiler_wrapper: enable -mharden-sls=all on aarch64
Migrate straight-line speculation vulnerability.
Link: http://lists.llvm.org/pipermail/llvm-dev/2020-June/142109.html
BUG=chromium:1096302
TEST=https://docs.google.com/spreadsheets/d/1EZbTYUdq2Y6Jpgy5PrCACB3GrInFy0ahI40IPexBZDM/edit#gid=336625829
Change-Id: I35e8f3cce53b86159f1705429774ceb803264f7d
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/toolchain-utils/+/2436936
Reviewed-by: Manoj Gupta <manojgupta@chromium.org>
Tested-by: Jian Cai <jiancai@google.com>
diff --git a/compiler_wrapper/aarch64_flags.go b/compiler_wrapper/aarch64_flags.go
new file mode 100644
index 0000000..a0d0552
--- /dev/null
+++ b/compiler_wrapper/aarch64_flags.go
@@ -0,0 +1,11 @@
+// Copyright 2020 The Chromium OS Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package main
+
+func processAarch64Flags(builder *commandBuilder) {
+ if builder.target.arch == "aarch64" {
+ builder.addPreUserArgs("-mharden-sls=all")
+ }
+}
diff --git a/compiler_wrapper/aarch64_flags_test.go b/compiler_wrapper/aarch64_flags_test.go
new file mode 100644
index 0000000..0cb692e
--- /dev/null
+++ b/compiler_wrapper/aarch64_flags_test.go
@@ -0,0 +1,19 @@
+// Copyright 2020 The Chromium OS Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package main
+
+import (
+ "testing"
+)
+
+func TestAddSlsFlagOnAarch64(t *testing.T) {
+ withTestContext(t, func(ctx *testContext) {
+ cmd := ctx.must(callCompiler(ctx, ctx.cfg,
+ ctx.newCommand(clangAarch64, mainCc)))
+ if err := verifyArgOrder(cmd, "-mharden-sls=all", mainCc); err != nil {
+ t.Error(err)
+ }
+ })
+}
diff --git a/compiler_wrapper/compiler_wrapper.go b/compiler_wrapper/compiler_wrapper.go
index aa52dfd..49ee0eb 100644
--- a/compiler_wrapper/compiler_wrapper.go
+++ b/compiler_wrapper/compiler_wrapper.go
@@ -187,6 +187,7 @@
}
builder.addPostUserArgs(builder.cfg.clangPostFlags...)
calcCommonPreUserArgs(builder)
+ processAarch64Flags(builder)
return processClangFlags(builder)
}
diff --git a/compiler_wrapper/testutil_test.go b/compiler_wrapper/testutil_test.go
index 21b7169..8e2377e 100644
--- a/compiler_wrapper/testutil_test.go
+++ b/compiler_wrapper/testutil_test.go
@@ -22,6 +22,7 @@
clangAndroid = "./clang"
clangTidyAndroid = "./clang-tidy"
clangX86_64 = "./x86_64-cros-linux-gnu-clang"
+ clangAarch64 = "./aarch64-cros-linux-gnu-clang"
gccX86_64 = "./x86_64-cros-linux-gnu-gcc"
gccX86_64Eabi = "./x86_64-cros-eabi-gcc"
gccArmV7 = "./armv7m-cros-linux-gnu-gcc"