blob: 7dce19a9e3071a2868e8b6b8dcadf61f3241530b [file] [log] [blame]
Colin Crossaf98f582021-05-12 17:27:32 -07001// Copyright 2021 Google Inc. All rights reserved.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15package cc
16
17import (
Liz Kammerbb8d84f2021-06-21 12:53:03 -040018 "fmt"
Colin Cross3e5e7782022-06-17 22:17:05 +000019 "runtime"
Liz Kammerbb8d84f2021-06-21 12:53:03 -040020 "strings"
Colin Crossaf98f582021-05-12 17:27:32 -070021 "testing"
22
23 "android/soong/android"
24)
25
26var prepareForAsanTest = android.FixtureAddFile("asan/Android.bp", []byte(`
27 cc_library_shared {
Colin Cross4c4c1be2022-02-10 11:41:18 -080028 name: "libclang_rt.asan",
Colin Crossaf98f582021-05-12 17:27:32 -070029 }
30`))
31
32func TestAsan(t *testing.T) {
33 bp := `
34 cc_binary {
35 name: "bin_with_asan",
36 host_supported: true,
37 shared_libs: [
38 "libshared",
39 "libasan",
40 ],
41 static_libs: [
42 "libstatic",
43 "libnoasan",
Liz Kammerecc659c2022-10-28 16:27:13 -040044 "libstatic_asan",
Colin Crossaf98f582021-05-12 17:27:32 -070045 ],
46 sanitize: {
47 address: true,
48 }
49 }
50
51 cc_binary {
52 name: "bin_no_asan",
53 host_supported: true,
54 shared_libs: [
55 "libshared",
56 "libasan",
57 ],
58 static_libs: [
59 "libstatic",
60 "libnoasan",
Liz Kammerecc659c2022-10-28 16:27:13 -040061 "libstatic_asan",
Colin Crossaf98f582021-05-12 17:27:32 -070062 ],
63 }
64
65 cc_library_shared {
66 name: "libshared",
67 host_supported: true,
68 shared_libs: ["libtransitive"],
69 }
70
71 cc_library_shared {
72 name: "libasan",
73 host_supported: true,
74 shared_libs: ["libtransitive"],
75 sanitize: {
76 address: true,
77 }
78 }
79
80 cc_library_shared {
81 name: "libtransitive",
82 host_supported: true,
83 }
84
85 cc_library_static {
86 name: "libstatic",
87 host_supported: true,
88 }
89
90 cc_library_static {
91 name: "libnoasan",
92 host_supported: true,
93 sanitize: {
94 address: false,
95 }
96 }
Liz Kammerecc659c2022-10-28 16:27:13 -040097
98 cc_library_static {
99 name: "libstatic_asan",
100 host_supported: true,
101 sanitize: {
102 address: true,
103 }
104 }
105
Colin Crossaf98f582021-05-12 17:27:32 -0700106 `
107
108 result := android.GroupFixturePreparers(
109 prepareForCcTest,
110 prepareForAsanTest,
111 ).RunTestWithBp(t, bp)
112
113 check := func(t *testing.T, result *android.TestResult, variant string) {
114 asanVariant := variant + "_asan"
115 sharedVariant := variant + "_shared"
116 sharedAsanVariant := sharedVariant + "_asan"
117 staticVariant := variant + "_static"
118 staticAsanVariant := staticVariant + "_asan"
119
120 // The binaries, one with asan and one without
121 binWithAsan := result.ModuleForTests("bin_with_asan", asanVariant)
122 binNoAsan := result.ModuleForTests("bin_no_asan", variant)
123
124 // Shared libraries that don't request asan
125 libShared := result.ModuleForTests("libshared", sharedVariant)
126 libTransitive := result.ModuleForTests("libtransitive", sharedVariant)
127
128 // Shared library that requests asan
129 libAsan := result.ModuleForTests("libasan", sharedAsanVariant)
130
131 // Static library that uses an asan variant for bin_with_asan and a non-asan variant
132 // for bin_no_asan.
133 libStaticAsanVariant := result.ModuleForTests("libstatic", staticAsanVariant)
134 libStaticNoAsanVariant := result.ModuleForTests("libstatic", staticVariant)
135
136 // Static library that never uses asan.
137 libNoAsan := result.ModuleForTests("libnoasan", staticVariant)
138
Liz Kammerecc659c2022-10-28 16:27:13 -0400139 // Static library that specifies asan
140 libStaticAsan := result.ModuleForTests("libstatic_asan", staticAsanVariant)
141 libStaticAsanNoAsanVariant := result.ModuleForTests("libstatic_asan", staticVariant)
142
Colin Crossaf98f582021-05-12 17:27:32 -0700143 // expectSharedLinkDep verifies that the from module links against the to module as a
144 // shared library.
145 expectSharedLinkDep := func(from, to android.TestingModule) {
146 t.Helper()
147 fromLink := from.Description("link")
148 toLink := to.Description("strip")
149
150 if g, w := fromLink.OrderOnly.Strings(), toLink.Output.String(); !android.InList(w, g) {
151 t.Errorf("%s should link against %s, expected %q, got %q",
152 from.Module(), to.Module(), w, g)
153 }
154 }
155
156 // expectStaticLinkDep verifies that the from module links against the to module as a
157 // static library.
158 expectStaticLinkDep := func(from, to android.TestingModule) {
159 t.Helper()
160 fromLink := from.Description("link")
161 toLink := to.Description("static link")
162
163 if g, w := fromLink.Implicits.Strings(), toLink.Output.String(); !android.InList(w, g) {
164 t.Errorf("%s should link against %s, expected %q, got %q",
165 from.Module(), to.Module(), w, g)
166 }
167
168 }
169
170 // expectInstallDep verifies that the install rule of the from module depends on the
171 // install rule of the to module.
172 expectInstallDep := func(from, to android.TestingModule) {
173 t.Helper()
174 fromInstalled := from.Description("install")
175 toInstalled := to.Description("install")
176
177 // combine implicits and order-only dependencies, host uses implicit but device uses
178 // order-only.
179 got := append(fromInstalled.Implicits.Strings(), fromInstalled.OrderOnly.Strings()...)
180 want := toInstalled.Output.String()
181 if !android.InList(want, got) {
182 t.Errorf("%s installation should depend on %s, expected %q, got %q",
183 from.Module(), to.Module(), want, got)
184 }
185 }
186
187 expectSharedLinkDep(binWithAsan, libShared)
188 expectSharedLinkDep(binWithAsan, libAsan)
189 expectSharedLinkDep(libShared, libTransitive)
190 expectSharedLinkDep(libAsan, libTransitive)
191
192 expectStaticLinkDep(binWithAsan, libStaticAsanVariant)
193 expectStaticLinkDep(binWithAsan, libNoAsan)
Liz Kammerecc659c2022-10-28 16:27:13 -0400194 expectStaticLinkDep(binWithAsan, libStaticAsan)
Colin Crossaf98f582021-05-12 17:27:32 -0700195
196 expectInstallDep(binWithAsan, libShared)
197 expectInstallDep(binWithAsan, libAsan)
198 expectInstallDep(binWithAsan, libTransitive)
199 expectInstallDep(libShared, libTransitive)
200 expectInstallDep(libAsan, libTransitive)
201
202 expectSharedLinkDep(binNoAsan, libShared)
203 expectSharedLinkDep(binNoAsan, libAsan)
204 expectSharedLinkDep(libShared, libTransitive)
205 expectSharedLinkDep(libAsan, libTransitive)
206
207 expectStaticLinkDep(binNoAsan, libStaticNoAsanVariant)
208 expectStaticLinkDep(binNoAsan, libNoAsan)
Liz Kammerecc659c2022-10-28 16:27:13 -0400209 expectStaticLinkDep(binNoAsan, libStaticAsanNoAsanVariant)
Colin Crossaf98f582021-05-12 17:27:32 -0700210
211 expectInstallDep(binNoAsan, libShared)
212 expectInstallDep(binNoAsan, libAsan)
213 expectInstallDep(binNoAsan, libTransitive)
214 expectInstallDep(libShared, libTransitive)
215 expectInstallDep(libAsan, libTransitive)
216 }
217
218 t.Run("host", func(t *testing.T) { check(t, result, result.Config.BuildOSTarget.String()) })
219 t.Run("device", func(t *testing.T) { check(t, result, "android_arm64_armv8-a") })
220}
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400221
Colin Cross3e5e7782022-06-17 22:17:05 +0000222func TestUbsan(t *testing.T) {
223 if runtime.GOOS != "linux" {
224 t.Skip("requires linux")
225 }
226
227 bp := `
228 cc_binary {
229 name: "bin_with_ubsan",
230 host_supported: true,
231 shared_libs: [
232 "libshared",
233 ],
234 static_libs: [
235 "libstatic",
236 "libnoubsan",
237 ],
238 sanitize: {
239 undefined: true,
240 }
241 }
242
243 cc_binary {
Trevor Radcliffe99815552022-11-14 21:35:05 +0000244 name: "bin_depends_ubsan_static",
Colin Cross3e5e7782022-06-17 22:17:05 +0000245 host_supported: true,
246 shared_libs: [
247 "libshared",
248 ],
249 static_libs: [
250 "libstatic",
251 "libubsan",
252 "libnoubsan",
253 ],
254 }
255
256 cc_binary {
Trevor Radcliffe99815552022-11-14 21:35:05 +0000257 name: "bin_depends_ubsan_shared",
258 host_supported: true,
259 shared_libs: [
260 "libsharedubsan",
261 ],
262 }
263
264 cc_binary {
Colin Cross3e5e7782022-06-17 22:17:05 +0000265 name: "bin_no_ubsan",
266 host_supported: true,
267 shared_libs: [
268 "libshared",
269 ],
270 static_libs: [
271 "libstatic",
272 "libnoubsan",
273 ],
274 }
275
276 cc_library_shared {
277 name: "libshared",
278 host_supported: true,
279 shared_libs: ["libtransitive"],
280 }
281
282 cc_library_shared {
283 name: "libtransitive",
284 host_supported: true,
285 }
286
Trevor Radcliffe99815552022-11-14 21:35:05 +0000287 cc_library_shared {
288 name: "libsharedubsan",
289 host_supported: true,
290 sanitize: {
291 undefined: true,
292 }
293 }
294
Colin Cross3e5e7782022-06-17 22:17:05 +0000295 cc_library_static {
296 name: "libubsan",
297 host_supported: true,
298 sanitize: {
299 undefined: true,
300 }
301 }
302
303 cc_library_static {
304 name: "libstatic",
305 host_supported: true,
306 }
307
308 cc_library_static {
309 name: "libnoubsan",
310 host_supported: true,
311 }
312 `
313
314 result := android.GroupFixturePreparers(
315 prepareForCcTest,
316 ).RunTestWithBp(t, bp)
317
318 check := func(t *testing.T, result *android.TestResult, variant string) {
319 staticVariant := variant + "_static"
Trevor Radcliffe99815552022-11-14 21:35:05 +0000320 sharedVariant := variant + "_shared"
Colin Cross3e5e7782022-06-17 22:17:05 +0000321
322 minimalRuntime := result.ModuleForTests("libclang_rt.ubsan_minimal", staticVariant)
323
324 // The binaries, one with ubsan and one without
325 binWithUbsan := result.ModuleForTests("bin_with_ubsan", variant)
Trevor Radcliffe99815552022-11-14 21:35:05 +0000326 binDependsUbsan := result.ModuleForTests("bin_depends_ubsan_static", variant)
327 libSharedUbsan := result.ModuleForTests("libsharedubsan", sharedVariant)
328 binDependsUbsanShared := result.ModuleForTests("bin_depends_ubsan_shared", variant)
Colin Cross3e5e7782022-06-17 22:17:05 +0000329 binNoUbsan := result.ModuleForTests("bin_no_ubsan", variant)
330
331 android.AssertStringListContains(t, "missing libclang_rt.ubsan_minimal in bin_with_ubsan static libs",
332 strings.Split(binWithUbsan.Rule("ld").Args["libFlags"], " "),
333 minimalRuntime.OutputFiles(t, "")[0].String())
334
Trevor Radcliffe99815552022-11-14 21:35:05 +0000335 android.AssertStringListContains(t, "missing libclang_rt.ubsan_minimal in bin_depends_ubsan_static static libs",
Colin Cross3e5e7782022-06-17 22:17:05 +0000336 strings.Split(binDependsUbsan.Rule("ld").Args["libFlags"], " "),
337 minimalRuntime.OutputFiles(t, "")[0].String())
338
Trevor Radcliffe99815552022-11-14 21:35:05 +0000339 android.AssertStringListContains(t, "missing libclang_rt.ubsan_minimal in libsharedubsan static libs",
340 strings.Split(libSharedUbsan.Rule("ld").Args["libFlags"], " "),
341 minimalRuntime.OutputFiles(t, "")[0].String())
342
343 android.AssertStringListDoesNotContain(t, "unexpected libclang_rt.ubsan_minimal in bin_depends_ubsan_shared static libs",
344 strings.Split(binDependsUbsanShared.Rule("ld").Args["libFlags"], " "),
345 minimalRuntime.OutputFiles(t, "")[0].String())
346
Colin Cross3e5e7782022-06-17 22:17:05 +0000347 android.AssertStringListDoesNotContain(t, "unexpected libclang_rt.ubsan_minimal in bin_no_ubsan static libs",
348 strings.Split(binNoUbsan.Rule("ld").Args["libFlags"], " "),
349 minimalRuntime.OutputFiles(t, "")[0].String())
350
351 android.AssertStringListContains(t, "missing -Wl,--exclude-libs for minimal runtime in bin_with_ubsan",
352 strings.Split(binWithUbsan.Rule("ld").Args["ldFlags"], " "),
353 "-Wl,--exclude-libs="+minimalRuntime.OutputFiles(t, "")[0].Base())
354
Trevor Radcliffe99815552022-11-14 21:35:05 +0000355 android.AssertStringListContains(t, "missing -Wl,--exclude-libs for minimal runtime in bin_depends_ubsan_static static libs",
Colin Cross3e5e7782022-06-17 22:17:05 +0000356 strings.Split(binDependsUbsan.Rule("ld").Args["ldFlags"], " "),
357 "-Wl,--exclude-libs="+minimalRuntime.OutputFiles(t, "")[0].Base())
358
Trevor Radcliffe99815552022-11-14 21:35:05 +0000359 android.AssertStringListContains(t, "missing -Wl,--exclude-libs for minimal runtime in libsharedubsan static libs",
360 strings.Split(libSharedUbsan.Rule("ld").Args["ldFlags"], " "),
361 "-Wl,--exclude-libs="+minimalRuntime.OutputFiles(t, "")[0].Base())
362
363 android.AssertStringListDoesNotContain(t, "unexpected -Wl,--exclude-libs for minimal runtime in bin_depends_ubsan_shared static libs",
364 strings.Split(binDependsUbsanShared.Rule("ld").Args["ldFlags"], " "),
365 "-Wl,--exclude-libs="+minimalRuntime.OutputFiles(t, "")[0].Base())
366
Colin Cross3e5e7782022-06-17 22:17:05 +0000367 android.AssertStringListDoesNotContain(t, "unexpected -Wl,--exclude-libs for minimal runtime in bin_no_ubsan static libs",
368 strings.Split(binNoUbsan.Rule("ld").Args["ldFlags"], " "),
369 "-Wl,--exclude-libs="+minimalRuntime.OutputFiles(t, "")[0].Base())
370 }
371
372 t.Run("host", func(t *testing.T) { check(t, result, result.Config.BuildOSTarget.String()) })
373 t.Run("device", func(t *testing.T) { check(t, result, "android_arm64_armv8-a") })
374}
375
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400376type MemtagNoteType int
377
378const (
379 None MemtagNoteType = iota + 1
380 Sync
381 Async
382)
383
384func (t MemtagNoteType) str() string {
385 switch t {
386 case None:
387 return "none"
388 case Sync:
389 return "sync"
390 case Async:
391 return "async"
392 default:
Liz Kammerd56ddb52021-06-21 17:37:39 -0400393 panic("type_note_invalid")
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400394 }
395}
396
397func checkHasMemtagNote(t *testing.T, m android.TestingModule, expected MemtagNoteType) {
Liz Kammerd56ddb52021-06-21 17:37:39 -0400398 t.Helper()
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400399
400 found := None
Florian Mayerd8434a42022-08-31 20:57:03 +0000401 ldFlags := m.Rule("ld").Args["ldFlags"]
402 if strings.Contains(ldFlags, "-fsanitize-memtag-mode=async") {
403 found = Async
404 } else if strings.Contains(ldFlags, "-fsanitize-memtag-mode=sync") {
405 found = Sync
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400406 }
407
408 if found != expected {
409 t.Errorf("Wrong Memtag note in target %q: found %q, expected %q", m.Module().(*Module).Name(), found.str(), expected.str())
410 }
411}
412
413var prepareForTestWithMemtagHeap = android.GroupFixturePreparers(
414 android.FixtureModifyMockFS(func(fs android.MockFS) {
415 templateBp := `
416 cc_test {
Liz Kammerd56ddb52021-06-21 17:37:39 -0400417 name: "unset_test_%[1]s",
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400418 gtest: false,
419 }
420
421 cc_test {
Liz Kammerd56ddb52021-06-21 17:37:39 -0400422 name: "no_memtag_test_%[1]s",
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400423 gtest: false,
424 sanitize: { memtag_heap: false },
425 }
426
427 cc_test {
Liz Kammerd56ddb52021-06-21 17:37:39 -0400428 name: "set_memtag_test_%[1]s",
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400429 gtest: false,
430 sanitize: { memtag_heap: true },
431 }
432
433 cc_test {
Liz Kammerd56ddb52021-06-21 17:37:39 -0400434 name: "set_memtag_set_async_test_%[1]s",
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400435 gtest: false,
436 sanitize: { memtag_heap: true, diag: { memtag_heap: false } },
437 }
438
439 cc_test {
Liz Kammerd56ddb52021-06-21 17:37:39 -0400440 name: "set_memtag_set_sync_test_%[1]s",
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400441 gtest: false,
442 sanitize: { memtag_heap: true, diag: { memtag_heap: true } },
443 }
444
Liz Kammerd56ddb52021-06-21 17:37:39 -0400445 cc_test {
446 name: "unset_memtag_set_sync_test_%[1]s",
447 gtest: false,
448 sanitize: { diag: { memtag_heap: true } },
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400449 }
450
451 cc_binary {
Liz Kammerd56ddb52021-06-21 17:37:39 -0400452 name: "unset_binary_%[1]s",
453 }
454
455 cc_binary {
456 name: "no_memtag_binary_%[1]s",
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400457 sanitize: { memtag_heap: false },
458 }
459
460 cc_binary {
Liz Kammerd56ddb52021-06-21 17:37:39 -0400461 name: "set_memtag_binary_%[1]s",
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400462 sanitize: { memtag_heap: true },
463 }
464
465 cc_binary {
Liz Kammerd56ddb52021-06-21 17:37:39 -0400466 name: "set_memtag_set_async_binary_%[1]s",
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400467 sanitize: { memtag_heap: true, diag: { memtag_heap: false } },
468 }
469
470 cc_binary {
Liz Kammerd56ddb52021-06-21 17:37:39 -0400471 name: "set_memtag_set_sync_binary_%[1]s",
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400472 sanitize: { memtag_heap: true, diag: { memtag_heap: true } },
473 }
Liz Kammerd56ddb52021-06-21 17:37:39 -0400474
475 cc_binary {
476 name: "unset_memtag_set_sync_binary_%[1]s",
477 sanitize: { diag: { memtag_heap: true } },
478 }
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400479 `
Liz Kammerd56ddb52021-06-21 17:37:39 -0400480 subdirNoOverrideBp := fmt.Sprintf(templateBp, "no_override")
481 subdirOverrideDefaultDisableBp := fmt.Sprintf(templateBp, "override_default_disable")
482 subdirSyncBp := fmt.Sprintf(templateBp, "override_default_sync")
483 subdirAsyncBp := fmt.Sprintf(templateBp, "override_default_async")
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400484
485 fs.Merge(android.MockFS{
Liz Kammerd56ddb52021-06-21 17:37:39 -0400486 "subdir_no_override/Android.bp": []byte(subdirNoOverrideBp),
487 "subdir_override_default_disable/Android.bp": []byte(subdirOverrideDefaultDisableBp),
488 "subdir_sync/Android.bp": []byte(subdirSyncBp),
489 "subdir_async/Android.bp": []byte(subdirAsyncBp),
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400490 })
491 }),
492 android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
Liz Kammerd56ddb52021-06-21 17:37:39 -0400493 variables.MemtagHeapExcludePaths = []string{"subdir_override_default_disable"}
494 // "subdir_override_default_disable" is covered by both include and override_default_disable paths. override_default_disable wins.
495 variables.MemtagHeapSyncIncludePaths = []string{"subdir_sync", "subdir_override_default_disable"}
496 variables.MemtagHeapAsyncIncludePaths = []string{"subdir_async", "subdir_override_default_disable"}
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400497 }),
498)
499
500func TestSanitizeMemtagHeap(t *testing.T) {
501 variant := "android_arm64_armv8-a"
502
503 result := android.GroupFixturePreparers(
504 prepareForCcTest,
505 prepareForTestWithMemtagHeap,
506 ).RunTest(t)
507 ctx := result.TestContext
508
Liz Kammerd56ddb52021-06-21 17:37:39 -0400509 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_binary_no_override", variant), None)
510 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_binary_override_default_async", variant), None)
511 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_binary_override_default_disable", variant), None)
512 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_binary_override_default_sync", variant), None)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400513
Liz Kammerd56ddb52021-06-21 17:37:39 -0400514 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_test_no_override", variant), None)
515 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_test_override_default_async", variant), None)
516 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_test_override_default_disable", variant), None)
517 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_test_override_default_sync", variant), None)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400518
Liz Kammerd56ddb52021-06-21 17:37:39 -0400519 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_binary_no_override", variant), Async)
520 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_binary_override_default_async", variant), Async)
521 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_binary_override_default_disable", variant), Async)
522 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_binary_override_default_sync", variant), Sync)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400523
Liz Kammer7b920b42021-06-22 16:57:27 -0400524 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_test_no_override", variant), Sync)
525 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_test_override_default_async", variant), Sync)
526 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_test_override_default_disable", variant), Sync)
Liz Kammerd56ddb52021-06-21 17:37:39 -0400527 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_test_override_default_sync", variant), Sync)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400528
Liz Kammerd56ddb52021-06-21 17:37:39 -0400529 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_binary_no_override", variant), Async)
530 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_binary_override_default_async", variant), Async)
531 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_binary_override_default_disable", variant), Async)
532 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_binary_override_default_sync", variant), Async)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400533
Liz Kammerd56ddb52021-06-21 17:37:39 -0400534 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_test_no_override", variant), Async)
535 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_test_override_default_async", variant), Async)
536 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_test_override_default_disable", variant), Async)
537 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_test_override_default_sync", variant), Async)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400538
Liz Kammerd56ddb52021-06-21 17:37:39 -0400539 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_binary_no_override", variant), Sync)
540 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_binary_override_default_async", variant), Sync)
541 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_binary_override_default_disable", variant), Sync)
542 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_binary_override_default_sync", variant), Sync)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400543
Liz Kammerd56ddb52021-06-21 17:37:39 -0400544 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_test_no_override", variant), Sync)
545 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_test_override_default_async", variant), Sync)
546 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_test_override_default_disable", variant), Sync)
547 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_test_override_default_sync", variant), Sync)
548
549 // should sanitize: { diag: { memtag: true } } result in Sync instead of None here?
550 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_binary_no_override", variant), None)
551 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_binary_override_default_async", variant), Sync)
552 // should sanitize: { diag: { memtag: true } } result in Sync instead of None here?
553 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_binary_override_default_disable", variant), None)
554 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_binary_override_default_sync", variant), Sync)
555
556 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_test_no_override", variant), Sync)
557 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_test_override_default_async", variant), Sync)
558 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_test_override_default_disable", variant), Sync)
559 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_test_override_default_sync", variant), Sync)
560
561 checkHasMemtagNote(t, ctx.ModuleForTests("unset_binary_no_override", variant), None)
562 checkHasMemtagNote(t, ctx.ModuleForTests("unset_binary_override_default_async", variant), Async)
563 checkHasMemtagNote(t, ctx.ModuleForTests("unset_binary_override_default_disable", variant), None)
564 checkHasMemtagNote(t, ctx.ModuleForTests("unset_binary_override_default_sync", variant), Sync)
565
566 checkHasMemtagNote(t, ctx.ModuleForTests("unset_test_no_override", variant), Sync)
567 checkHasMemtagNote(t, ctx.ModuleForTests("unset_test_override_default_async", variant), Sync)
568 checkHasMemtagNote(t, ctx.ModuleForTests("unset_test_override_default_disable", variant), Sync)
569 checkHasMemtagNote(t, ctx.ModuleForTests("unset_test_override_default_sync", variant), Sync)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400570}
571
572func TestSanitizeMemtagHeapWithSanitizeDevice(t *testing.T) {
573 variant := "android_arm64_armv8-a"
574
575 result := android.GroupFixturePreparers(
576 prepareForCcTest,
577 prepareForTestWithMemtagHeap,
578 android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
579 variables.SanitizeDevice = []string{"memtag_heap"}
580 }),
581 ).RunTest(t)
582 ctx := result.TestContext
583
Liz Kammerd56ddb52021-06-21 17:37:39 -0400584 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_binary_no_override", variant), None)
585 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_binary_override_default_async", variant), None)
586 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_binary_override_default_disable", variant), None)
587 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_binary_override_default_sync", variant), None)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400588
Liz Kammerd56ddb52021-06-21 17:37:39 -0400589 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_test_no_override", variant), None)
590 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_test_override_default_async", variant), None)
591 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_test_override_default_disable", variant), None)
592 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_test_override_default_sync", variant), None)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400593
Liz Kammerd56ddb52021-06-21 17:37:39 -0400594 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_binary_no_override", variant), Async)
595 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_binary_override_default_async", variant), Async)
596 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_binary_override_default_disable", variant), Async)
597 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_binary_override_default_sync", variant), Sync)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400598
Liz Kammer7b920b42021-06-22 16:57:27 -0400599 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_test_no_override", variant), Sync)
600 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_test_override_default_async", variant), Sync)
601 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_test_override_default_disable", variant), Sync)
Liz Kammerd56ddb52021-06-21 17:37:39 -0400602 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_test_override_default_sync", variant), Sync)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400603
Liz Kammerd56ddb52021-06-21 17:37:39 -0400604 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_binary_no_override", variant), Async)
605 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_binary_override_default_async", variant), Async)
606 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_binary_override_default_disable", variant), Async)
607 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_binary_override_default_sync", variant), Async)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400608
Liz Kammerd56ddb52021-06-21 17:37:39 -0400609 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_test_no_override", variant), Async)
610 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_test_override_default_async", variant), Async)
611 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_test_override_default_disable", variant), Async)
612 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_test_override_default_sync", variant), Async)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400613
Liz Kammerd56ddb52021-06-21 17:37:39 -0400614 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_binary_no_override", variant), Sync)
615 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_binary_override_default_async", variant), Sync)
616 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_binary_override_default_disable", variant), Sync)
617 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_binary_override_default_sync", variant), Sync)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400618
Liz Kammerd56ddb52021-06-21 17:37:39 -0400619 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_test_no_override", variant), Sync)
620 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_test_override_default_async", variant), Sync)
621 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_test_override_default_disable", variant), Sync)
622 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_test_override_default_sync", variant), Sync)
623
624 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_binary_no_override", variant), Sync)
625 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_binary_override_default_async", variant), Sync)
626 // should sanitize: { diag: { memtag: true } } result in Sync instead of None here?
627 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_binary_override_default_disable", variant), None)
628 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_binary_override_default_sync", variant), Sync)
629
630 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_test_no_override", variant), Sync)
631 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_test_override_default_async", variant), Sync)
632 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_test_override_default_disable", variant), Sync)
633 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_test_override_default_sync", variant), Sync)
634
635 checkHasMemtagNote(t, ctx.ModuleForTests("unset_binary_no_override", variant), Async)
636 checkHasMemtagNote(t, ctx.ModuleForTests("unset_binary_override_default_async", variant), Async)
637 checkHasMemtagNote(t, ctx.ModuleForTests("unset_binary_override_default_disable", variant), None)
638 checkHasMemtagNote(t, ctx.ModuleForTests("unset_binary_override_default_sync", variant), Sync)
639
640 checkHasMemtagNote(t, ctx.ModuleForTests("unset_test_no_override", variant), Sync)
641 checkHasMemtagNote(t, ctx.ModuleForTests("unset_test_override_default_async", variant), Sync)
642 checkHasMemtagNote(t, ctx.ModuleForTests("unset_test_override_default_disable", variant), Sync)
643 checkHasMemtagNote(t, ctx.ModuleForTests("unset_test_override_default_sync", variant), Sync)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400644}
645
646func TestSanitizeMemtagHeapWithSanitizeDeviceDiag(t *testing.T) {
647 variant := "android_arm64_armv8-a"
648
649 result := android.GroupFixturePreparers(
650 prepareForCcTest,
651 prepareForTestWithMemtagHeap,
652 android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
653 variables.SanitizeDevice = []string{"memtag_heap"}
654 variables.SanitizeDeviceDiag = []string{"memtag_heap"}
655 }),
656 ).RunTest(t)
657 ctx := result.TestContext
658
Liz Kammerd56ddb52021-06-21 17:37:39 -0400659 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_binary_no_override", variant), None)
660 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_binary_override_default_async", variant), None)
661 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_binary_override_default_disable", variant), None)
662 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_binary_override_default_sync", variant), None)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400663
Liz Kammerd56ddb52021-06-21 17:37:39 -0400664 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_test_no_override", variant), None)
665 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_test_override_default_async", variant), None)
666 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_test_override_default_disable", variant), None)
667 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_test_override_default_sync", variant), None)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400668
Liz Kammerd56ddb52021-06-21 17:37:39 -0400669 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_binary_no_override", variant), Sync)
670 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_binary_override_default_async", variant), Sync)
671 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_binary_override_default_disable", variant), Sync)
672 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_binary_override_default_sync", variant), Sync)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400673
Liz Kammerd56ddb52021-06-21 17:37:39 -0400674 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_test_no_override", variant), Sync)
675 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_test_override_default_async", variant), Sync)
676 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_test_override_default_disable", variant), Sync)
677 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_test_override_default_sync", variant), Sync)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400678
Liz Kammerd56ddb52021-06-21 17:37:39 -0400679 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_binary_no_override", variant), Async)
680 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_binary_override_default_async", variant), Async)
681 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_binary_override_default_disable", variant), Async)
682 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_binary_override_default_sync", variant), Async)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400683
Liz Kammerd56ddb52021-06-21 17:37:39 -0400684 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_test_no_override", variant), Async)
685 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_test_override_default_async", variant), Async)
686 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_test_override_default_disable", variant), Async)
687 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_test_override_default_sync", variant), Async)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400688
Liz Kammerd56ddb52021-06-21 17:37:39 -0400689 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_binary_no_override", variant), Sync)
690 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_binary_override_default_async", variant), Sync)
691 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_binary_override_default_disable", variant), Sync)
692 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_binary_override_default_sync", variant), Sync)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400693
Liz Kammerd56ddb52021-06-21 17:37:39 -0400694 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_test_no_override", variant), Sync)
695 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_test_override_default_async", variant), Sync)
696 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_test_override_default_disable", variant), Sync)
697 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_test_override_default_sync", variant), Sync)
698
699 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_binary_no_override", variant), Sync)
700 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_binary_override_default_async", variant), Sync)
701 // should sanitize: { diag: { memtag: true } } result in Sync instead of None here?
702 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_binary_override_default_disable", variant), None)
703 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_binary_override_default_sync", variant), Sync)
704
705 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_test_no_override", variant), Sync)
706 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_test_override_default_async", variant), Sync)
707 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_test_override_default_disable", variant), Sync)
708 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_test_override_default_sync", variant), Sync)
709
710 checkHasMemtagNote(t, ctx.ModuleForTests("unset_binary_no_override", variant), Sync)
711 checkHasMemtagNote(t, ctx.ModuleForTests("unset_binary_override_default_async", variant), Sync)
712 checkHasMemtagNote(t, ctx.ModuleForTests("unset_binary_override_default_disable", variant), None)
713 checkHasMemtagNote(t, ctx.ModuleForTests("unset_binary_override_default_sync", variant), Sync)
714
715 checkHasMemtagNote(t, ctx.ModuleForTests("unset_test_no_override", variant), Sync)
716 checkHasMemtagNote(t, ctx.ModuleForTests("unset_test_override_default_async", variant), Sync)
717 checkHasMemtagNote(t, ctx.ModuleForTests("unset_test_override_default_disable", variant), Sync)
718 checkHasMemtagNote(t, ctx.ModuleForTests("unset_test_override_default_sync", variant), Sync)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400719}