blob: 0e5552f8c4f7030f5921f30a3f609a5c9b35419d [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"
19 "strings"
Colin Crossaf98f582021-05-12 17:27:32 -070020 "testing"
21
22 "android/soong/android"
23)
24
25var prepareForAsanTest = android.FixtureAddFile("asan/Android.bp", []byte(`
26 cc_library_shared {
Colin Cross4c4c1be2022-02-10 11:41:18 -080027 name: "libclang_rt.asan",
Colin Crossaf98f582021-05-12 17:27:32 -070028 }
29`))
30
31func TestAsan(t *testing.T) {
32 bp := `
33 cc_binary {
34 name: "bin_with_asan",
35 host_supported: true,
36 shared_libs: [
37 "libshared",
38 "libasan",
39 ],
40 static_libs: [
41 "libstatic",
42 "libnoasan",
43 ],
44 sanitize: {
45 address: true,
46 }
47 }
48
49 cc_binary {
50 name: "bin_no_asan",
51 host_supported: true,
52 shared_libs: [
53 "libshared",
54 "libasan",
55 ],
56 static_libs: [
57 "libstatic",
58 "libnoasan",
59 ],
60 }
61
62 cc_library_shared {
63 name: "libshared",
64 host_supported: true,
65 shared_libs: ["libtransitive"],
66 }
67
68 cc_library_shared {
69 name: "libasan",
70 host_supported: true,
71 shared_libs: ["libtransitive"],
72 sanitize: {
73 address: true,
74 }
75 }
76
77 cc_library_shared {
78 name: "libtransitive",
79 host_supported: true,
80 }
81
82 cc_library_static {
83 name: "libstatic",
84 host_supported: true,
85 }
86
87 cc_library_static {
88 name: "libnoasan",
89 host_supported: true,
90 sanitize: {
91 address: false,
92 }
93 }
94 `
95
96 result := android.GroupFixturePreparers(
97 prepareForCcTest,
98 prepareForAsanTest,
99 ).RunTestWithBp(t, bp)
100
101 check := func(t *testing.T, result *android.TestResult, variant string) {
102 asanVariant := variant + "_asan"
103 sharedVariant := variant + "_shared"
104 sharedAsanVariant := sharedVariant + "_asan"
105 staticVariant := variant + "_static"
106 staticAsanVariant := staticVariant + "_asan"
107
108 // The binaries, one with asan and one without
109 binWithAsan := result.ModuleForTests("bin_with_asan", asanVariant)
110 binNoAsan := result.ModuleForTests("bin_no_asan", variant)
111
112 // Shared libraries that don't request asan
113 libShared := result.ModuleForTests("libshared", sharedVariant)
114 libTransitive := result.ModuleForTests("libtransitive", sharedVariant)
115
116 // Shared library that requests asan
117 libAsan := result.ModuleForTests("libasan", sharedAsanVariant)
118
119 // Static library that uses an asan variant for bin_with_asan and a non-asan variant
120 // for bin_no_asan.
121 libStaticAsanVariant := result.ModuleForTests("libstatic", staticAsanVariant)
122 libStaticNoAsanVariant := result.ModuleForTests("libstatic", staticVariant)
123
124 // Static library that never uses asan.
125 libNoAsan := result.ModuleForTests("libnoasan", staticVariant)
126
127 // expectSharedLinkDep verifies that the from module links against the to module as a
128 // shared library.
129 expectSharedLinkDep := func(from, to android.TestingModule) {
130 t.Helper()
131 fromLink := from.Description("link")
132 toLink := to.Description("strip")
133
134 if g, w := fromLink.OrderOnly.Strings(), toLink.Output.String(); !android.InList(w, g) {
135 t.Errorf("%s should link against %s, expected %q, got %q",
136 from.Module(), to.Module(), w, g)
137 }
138 }
139
140 // expectStaticLinkDep verifies that the from module links against the to module as a
141 // static library.
142 expectStaticLinkDep := func(from, to android.TestingModule) {
143 t.Helper()
144 fromLink := from.Description("link")
145 toLink := to.Description("static link")
146
147 if g, w := fromLink.Implicits.Strings(), toLink.Output.String(); !android.InList(w, g) {
148 t.Errorf("%s should link against %s, expected %q, got %q",
149 from.Module(), to.Module(), w, g)
150 }
151
152 }
153
154 // expectInstallDep verifies that the install rule of the from module depends on the
155 // install rule of the to module.
156 expectInstallDep := func(from, to android.TestingModule) {
157 t.Helper()
158 fromInstalled := from.Description("install")
159 toInstalled := to.Description("install")
160
161 // combine implicits and order-only dependencies, host uses implicit but device uses
162 // order-only.
163 got := append(fromInstalled.Implicits.Strings(), fromInstalled.OrderOnly.Strings()...)
164 want := toInstalled.Output.String()
165 if !android.InList(want, got) {
166 t.Errorf("%s installation should depend on %s, expected %q, got %q",
167 from.Module(), to.Module(), want, got)
168 }
169 }
170
171 expectSharedLinkDep(binWithAsan, libShared)
172 expectSharedLinkDep(binWithAsan, libAsan)
173 expectSharedLinkDep(libShared, libTransitive)
174 expectSharedLinkDep(libAsan, libTransitive)
175
176 expectStaticLinkDep(binWithAsan, libStaticAsanVariant)
177 expectStaticLinkDep(binWithAsan, libNoAsan)
178
179 expectInstallDep(binWithAsan, libShared)
180 expectInstallDep(binWithAsan, libAsan)
181 expectInstallDep(binWithAsan, libTransitive)
182 expectInstallDep(libShared, libTransitive)
183 expectInstallDep(libAsan, libTransitive)
184
185 expectSharedLinkDep(binNoAsan, libShared)
186 expectSharedLinkDep(binNoAsan, libAsan)
187 expectSharedLinkDep(libShared, libTransitive)
188 expectSharedLinkDep(libAsan, libTransitive)
189
190 expectStaticLinkDep(binNoAsan, libStaticNoAsanVariant)
191 expectStaticLinkDep(binNoAsan, libNoAsan)
192
193 expectInstallDep(binNoAsan, libShared)
194 expectInstallDep(binNoAsan, libAsan)
195 expectInstallDep(binNoAsan, libTransitive)
196 expectInstallDep(libShared, libTransitive)
197 expectInstallDep(libAsan, libTransitive)
198 }
199
200 t.Run("host", func(t *testing.T) { check(t, result, result.Config.BuildOSTarget.String()) })
201 t.Run("device", func(t *testing.T) { check(t, result, "android_arm64_armv8-a") })
202}
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400203
Colin Cross59de2802022-06-13 14:24:18 -0700204func TestUbsan(t *testing.T) {
205 bp := `
206 cc_binary {
207 name: "bin_with_ubsan",
208 host_supported: true,
209 shared_libs: [
210 "libshared",
211 ],
212 static_libs: [
213 "libstatic",
214 "libnoubsan",
215 ],
216 sanitize: {
217 undefined: true,
218 }
219 }
220
221 cc_binary {
222 name: "bin_depends_ubsan",
223 host_supported: true,
224 shared_libs: [
225 "libshared",
226 ],
227 static_libs: [
228 "libstatic",
229 "libubsan",
230 "libnoubsan",
231 ],
232 }
233
234 cc_binary {
235 name: "bin_no_ubsan",
236 host_supported: true,
237 shared_libs: [
238 "libshared",
239 ],
240 static_libs: [
241 "libstatic",
242 "libnoubsan",
243 ],
244 }
245
246 cc_library_shared {
247 name: "libshared",
248 host_supported: true,
249 shared_libs: ["libtransitive"],
250 }
251
252 cc_library_shared {
253 name: "libtransitive",
254 host_supported: true,
255 }
256
257 cc_library_static {
258 name: "libubsan",
259 host_supported: true,
260 sanitize: {
261 undefined: true,
262 }
263 }
264
265 cc_library_static {
266 name: "libstatic",
267 host_supported: true,
268 }
269
270 cc_library_static {
271 name: "libnoubsan",
272 host_supported: true,
273 }
274 `
275
276 result := android.GroupFixturePreparers(
277 prepareForCcTest,
278 ).RunTestWithBp(t, bp)
279
280 check := func(t *testing.T, result *android.TestResult, variant string) {
281 staticVariant := variant + "_static"
282
283 minimalRuntime := result.ModuleForTests("libclang_rt.ubsan_minimal", staticVariant)
284
285 // The binaries, one with ubsan and one without
286 binWithUbsan := result.ModuleForTests("bin_with_ubsan", variant)
287 binDependsUbsan := result.ModuleForTests("bin_depends_ubsan", variant)
288 binNoUbsan := result.ModuleForTests("bin_no_ubsan", variant)
289
290 android.AssertStringListContains(t, "missing libclang_rt.ubsan_minimal in bin_with_ubsan static libs",
291 strings.Split(binWithUbsan.Rule("ld").Args["libFlags"], " "),
292 minimalRuntime.OutputFiles(t, "")[0].String())
293
294 android.AssertStringListContains(t, "missing libclang_rt.ubsan_minimal in bin_depends_ubsan static libs",
295 strings.Split(binDependsUbsan.Rule("ld").Args["libFlags"], " "),
296 minimalRuntime.OutputFiles(t, "")[0].String())
297
298 android.AssertStringListDoesNotContain(t, "unexpected libclang_rt.ubsan_minimal in bin_no_ubsan static libs",
299 strings.Split(binNoUbsan.Rule("ld").Args["libFlags"], " "),
300 minimalRuntime.OutputFiles(t, "")[0].String())
301
302 android.AssertStringListContains(t, "missing -Wl,--exclude-libs for minimal runtime in bin_with_ubsan",
303 strings.Split(binWithUbsan.Rule("ld").Args["ldFlags"], " "),
304 "-Wl,--exclude-libs="+minimalRuntime.OutputFiles(t, "")[0].Base())
305
306 android.AssertStringListContains(t, "missing -Wl,--exclude-libs for minimal runtime in bin_depends_ubsan static libs",
307 strings.Split(binDependsUbsan.Rule("ld").Args["ldFlags"], " "),
308 "-Wl,--exclude-libs="+minimalRuntime.OutputFiles(t, "")[0].Base())
309
310 android.AssertStringListDoesNotContain(t, "unexpected -Wl,--exclude-libs for minimal runtime in bin_no_ubsan static libs",
311 strings.Split(binNoUbsan.Rule("ld").Args["ldFlags"], " "),
312 "-Wl,--exclude-libs="+minimalRuntime.OutputFiles(t, "")[0].Base())
313 }
314
315 t.Run("host", func(t *testing.T) { check(t, result, result.Config.BuildOSTarget.String()) })
316 t.Run("device", func(t *testing.T) { check(t, result, "android_arm64_armv8-a") })
317}
318
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400319type MemtagNoteType int
320
321const (
322 None MemtagNoteType = iota + 1
323 Sync
324 Async
325)
326
327func (t MemtagNoteType) str() string {
328 switch t {
329 case None:
330 return "none"
331 case Sync:
332 return "sync"
333 case Async:
334 return "async"
335 default:
Liz Kammerd56ddb52021-06-21 17:37:39 -0400336 panic("type_note_invalid")
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400337 }
338}
339
340func checkHasMemtagNote(t *testing.T, m android.TestingModule, expected MemtagNoteType) {
Liz Kammerd56ddb52021-06-21 17:37:39 -0400341 t.Helper()
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400342 note_async := "note_memtag_heap_async"
343 note_sync := "note_memtag_heap_sync"
344
345 found := None
346 implicits := m.Rule("ld").Implicits
347 for _, lib := range implicits {
348 if strings.Contains(lib.Rel(), note_async) {
349 found = Async
350 break
351 } else if strings.Contains(lib.Rel(), note_sync) {
352 found = Sync
353 break
354 }
355 }
356
357 if found != expected {
358 t.Errorf("Wrong Memtag note in target %q: found %q, expected %q", m.Module().(*Module).Name(), found.str(), expected.str())
359 }
360}
361
362var prepareForTestWithMemtagHeap = android.GroupFixturePreparers(
363 android.FixtureModifyMockFS(func(fs android.MockFS) {
364 templateBp := `
365 cc_test {
Liz Kammerd56ddb52021-06-21 17:37:39 -0400366 name: "unset_test_%[1]s",
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400367 gtest: false,
368 }
369
370 cc_test {
Liz Kammerd56ddb52021-06-21 17:37:39 -0400371 name: "no_memtag_test_%[1]s",
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400372 gtest: false,
373 sanitize: { memtag_heap: false },
374 }
375
376 cc_test {
Liz Kammerd56ddb52021-06-21 17:37:39 -0400377 name: "set_memtag_test_%[1]s",
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400378 gtest: false,
379 sanitize: { memtag_heap: true },
380 }
381
382 cc_test {
Liz Kammerd56ddb52021-06-21 17:37:39 -0400383 name: "set_memtag_set_async_test_%[1]s",
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400384 gtest: false,
385 sanitize: { memtag_heap: true, diag: { memtag_heap: false } },
386 }
387
388 cc_test {
Liz Kammerd56ddb52021-06-21 17:37:39 -0400389 name: "set_memtag_set_sync_test_%[1]s",
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400390 gtest: false,
391 sanitize: { memtag_heap: true, diag: { memtag_heap: true } },
392 }
393
Liz Kammerd56ddb52021-06-21 17:37:39 -0400394 cc_test {
395 name: "unset_memtag_set_sync_test_%[1]s",
396 gtest: false,
397 sanitize: { diag: { memtag_heap: true } },
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400398 }
399
400 cc_binary {
Liz Kammerd56ddb52021-06-21 17:37:39 -0400401 name: "unset_binary_%[1]s",
402 }
403
404 cc_binary {
405 name: "no_memtag_binary_%[1]s",
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400406 sanitize: { memtag_heap: false },
407 }
408
409 cc_binary {
Liz Kammerd56ddb52021-06-21 17:37:39 -0400410 name: "set_memtag_binary_%[1]s",
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400411 sanitize: { memtag_heap: true },
412 }
413
414 cc_binary {
Liz Kammerd56ddb52021-06-21 17:37:39 -0400415 name: "set_memtag_set_async_binary_%[1]s",
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400416 sanitize: { memtag_heap: true, diag: { memtag_heap: false } },
417 }
418
419 cc_binary {
Liz Kammerd56ddb52021-06-21 17:37:39 -0400420 name: "set_memtag_set_sync_binary_%[1]s",
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400421 sanitize: { memtag_heap: true, diag: { memtag_heap: true } },
422 }
Liz Kammerd56ddb52021-06-21 17:37:39 -0400423
424 cc_binary {
425 name: "unset_memtag_set_sync_binary_%[1]s",
426 sanitize: { diag: { memtag_heap: true } },
427 }
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400428 `
Liz Kammerd56ddb52021-06-21 17:37:39 -0400429 subdirNoOverrideBp := fmt.Sprintf(templateBp, "no_override")
430 subdirOverrideDefaultDisableBp := fmt.Sprintf(templateBp, "override_default_disable")
431 subdirSyncBp := fmt.Sprintf(templateBp, "override_default_sync")
432 subdirAsyncBp := fmt.Sprintf(templateBp, "override_default_async")
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400433
434 fs.Merge(android.MockFS{
Liz Kammerd56ddb52021-06-21 17:37:39 -0400435 "subdir_no_override/Android.bp": []byte(subdirNoOverrideBp),
436 "subdir_override_default_disable/Android.bp": []byte(subdirOverrideDefaultDisableBp),
437 "subdir_sync/Android.bp": []byte(subdirSyncBp),
438 "subdir_async/Android.bp": []byte(subdirAsyncBp),
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400439 })
440 }),
441 android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
Liz Kammerd56ddb52021-06-21 17:37:39 -0400442 variables.MemtagHeapExcludePaths = []string{"subdir_override_default_disable"}
443 // "subdir_override_default_disable" is covered by both include and override_default_disable paths. override_default_disable wins.
444 variables.MemtagHeapSyncIncludePaths = []string{"subdir_sync", "subdir_override_default_disable"}
445 variables.MemtagHeapAsyncIncludePaths = []string{"subdir_async", "subdir_override_default_disable"}
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400446 }),
447)
448
449func TestSanitizeMemtagHeap(t *testing.T) {
450 variant := "android_arm64_armv8-a"
451
452 result := android.GroupFixturePreparers(
453 prepareForCcTest,
454 prepareForTestWithMemtagHeap,
455 ).RunTest(t)
456 ctx := result.TestContext
457
Liz Kammerd56ddb52021-06-21 17:37:39 -0400458 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_binary_no_override", variant), None)
459 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_binary_override_default_async", variant), None)
460 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_binary_override_default_disable", variant), None)
461 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_binary_override_default_sync", variant), None)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400462
Liz Kammerd56ddb52021-06-21 17:37:39 -0400463 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_test_no_override", variant), None)
464 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_test_override_default_async", variant), None)
465 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_test_override_default_disable", variant), None)
466 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_test_override_default_sync", variant), None)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400467
Liz Kammerd56ddb52021-06-21 17:37:39 -0400468 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_binary_no_override", variant), Async)
469 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_binary_override_default_async", variant), Async)
470 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_binary_override_default_disable", variant), Async)
471 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_binary_override_default_sync", variant), Sync)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400472
Liz Kammer7b920b42021-06-22 16:57:27 -0400473 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_test_no_override", variant), Sync)
474 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_test_override_default_async", variant), Sync)
475 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_test_override_default_disable", variant), Sync)
Liz Kammerd56ddb52021-06-21 17:37:39 -0400476 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_test_override_default_sync", variant), Sync)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400477
Liz Kammerd56ddb52021-06-21 17:37:39 -0400478 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_binary_no_override", variant), Async)
479 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_binary_override_default_async", variant), Async)
480 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_binary_override_default_disable", variant), Async)
481 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_binary_override_default_sync", variant), Async)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400482
Liz Kammerd56ddb52021-06-21 17:37:39 -0400483 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_test_no_override", variant), Async)
484 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_test_override_default_async", variant), Async)
485 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_test_override_default_disable", variant), Async)
486 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_test_override_default_sync", variant), Async)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400487
Liz Kammerd56ddb52021-06-21 17:37:39 -0400488 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_binary_no_override", variant), Sync)
489 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_binary_override_default_async", variant), Sync)
490 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_binary_override_default_disable", variant), Sync)
491 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_binary_override_default_sync", variant), Sync)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400492
Liz Kammerd56ddb52021-06-21 17:37:39 -0400493 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_test_no_override", variant), Sync)
494 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_test_override_default_async", variant), Sync)
495 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_test_override_default_disable", variant), Sync)
496 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_test_override_default_sync", variant), Sync)
497
498 // should sanitize: { diag: { memtag: true } } result in Sync instead of None here?
499 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_binary_no_override", variant), None)
500 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_binary_override_default_async", variant), Sync)
501 // should sanitize: { diag: { memtag: true } } result in Sync instead of None here?
502 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_binary_override_default_disable", variant), None)
503 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_binary_override_default_sync", variant), Sync)
504
505 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_test_no_override", variant), Sync)
506 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_test_override_default_async", variant), Sync)
507 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_test_override_default_disable", variant), Sync)
508 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_test_override_default_sync", variant), Sync)
509
510 checkHasMemtagNote(t, ctx.ModuleForTests("unset_binary_no_override", variant), None)
511 checkHasMemtagNote(t, ctx.ModuleForTests("unset_binary_override_default_async", variant), Async)
512 checkHasMemtagNote(t, ctx.ModuleForTests("unset_binary_override_default_disable", variant), None)
513 checkHasMemtagNote(t, ctx.ModuleForTests("unset_binary_override_default_sync", variant), Sync)
514
515 checkHasMemtagNote(t, ctx.ModuleForTests("unset_test_no_override", variant), Sync)
516 checkHasMemtagNote(t, ctx.ModuleForTests("unset_test_override_default_async", variant), Sync)
517 checkHasMemtagNote(t, ctx.ModuleForTests("unset_test_override_default_disable", variant), Sync)
518 checkHasMemtagNote(t, ctx.ModuleForTests("unset_test_override_default_sync", variant), Sync)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400519}
520
521func TestSanitizeMemtagHeapWithSanitizeDevice(t *testing.T) {
522 variant := "android_arm64_armv8-a"
523
524 result := android.GroupFixturePreparers(
525 prepareForCcTest,
526 prepareForTestWithMemtagHeap,
527 android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
528 variables.SanitizeDevice = []string{"memtag_heap"}
529 }),
530 ).RunTest(t)
531 ctx := result.TestContext
532
Liz Kammerd56ddb52021-06-21 17:37:39 -0400533 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_binary_no_override", variant), None)
534 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_binary_override_default_async", variant), None)
535 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_binary_override_default_disable", variant), None)
536 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_binary_override_default_sync", variant), None)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400537
Liz Kammerd56ddb52021-06-21 17:37:39 -0400538 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_test_no_override", variant), None)
539 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_test_override_default_async", variant), None)
540 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_test_override_default_disable", variant), None)
541 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_test_override_default_sync", variant), None)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400542
Liz Kammerd56ddb52021-06-21 17:37:39 -0400543 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_binary_no_override", variant), Async)
544 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_binary_override_default_async", variant), Async)
545 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_binary_override_default_disable", variant), Async)
546 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_binary_override_default_sync", variant), Sync)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400547
Liz Kammer7b920b42021-06-22 16:57:27 -0400548 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_test_no_override", variant), Sync)
549 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_test_override_default_async", variant), Sync)
550 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_test_override_default_disable", variant), Sync)
Liz Kammerd56ddb52021-06-21 17:37:39 -0400551 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_test_override_default_sync", variant), Sync)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400552
Liz Kammerd56ddb52021-06-21 17:37:39 -0400553 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_binary_no_override", variant), Async)
554 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_binary_override_default_async", variant), Async)
555 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_binary_override_default_disable", variant), Async)
556 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_binary_override_default_sync", variant), Async)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400557
Liz Kammerd56ddb52021-06-21 17:37:39 -0400558 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_test_no_override", variant), Async)
559 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_test_override_default_async", variant), Async)
560 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_test_override_default_disable", variant), Async)
561 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_test_override_default_sync", variant), Async)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400562
Liz Kammerd56ddb52021-06-21 17:37:39 -0400563 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_binary_no_override", variant), Sync)
564 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_binary_override_default_async", variant), Sync)
565 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_binary_override_default_disable", variant), Sync)
566 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_binary_override_default_sync", variant), Sync)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400567
Liz Kammerd56ddb52021-06-21 17:37:39 -0400568 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_test_no_override", variant), Sync)
569 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_test_override_default_async", variant), Sync)
570 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_test_override_default_disable", variant), Sync)
571 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_test_override_default_sync", variant), Sync)
572
573 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_binary_no_override", variant), Sync)
574 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_binary_override_default_async", variant), Sync)
575 // should sanitize: { diag: { memtag: true } } result in Sync instead of None here?
576 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_binary_override_default_disable", variant), None)
577 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_binary_override_default_sync", variant), Sync)
578
579 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_test_no_override", variant), Sync)
580 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_test_override_default_async", variant), Sync)
581 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_test_override_default_disable", variant), Sync)
582 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_test_override_default_sync", variant), Sync)
583
584 checkHasMemtagNote(t, ctx.ModuleForTests("unset_binary_no_override", variant), Async)
585 checkHasMemtagNote(t, ctx.ModuleForTests("unset_binary_override_default_async", variant), Async)
586 checkHasMemtagNote(t, ctx.ModuleForTests("unset_binary_override_default_disable", variant), None)
587 checkHasMemtagNote(t, ctx.ModuleForTests("unset_binary_override_default_sync", variant), Sync)
588
589 checkHasMemtagNote(t, ctx.ModuleForTests("unset_test_no_override", variant), Sync)
590 checkHasMemtagNote(t, ctx.ModuleForTests("unset_test_override_default_async", variant), Sync)
591 checkHasMemtagNote(t, ctx.ModuleForTests("unset_test_override_default_disable", variant), Sync)
592 checkHasMemtagNote(t, ctx.ModuleForTests("unset_test_override_default_sync", variant), Sync)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400593}
594
595func TestSanitizeMemtagHeapWithSanitizeDeviceDiag(t *testing.T) {
596 variant := "android_arm64_armv8-a"
597
598 result := android.GroupFixturePreparers(
599 prepareForCcTest,
600 prepareForTestWithMemtagHeap,
601 android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
602 variables.SanitizeDevice = []string{"memtag_heap"}
603 variables.SanitizeDeviceDiag = []string{"memtag_heap"}
604 }),
605 ).RunTest(t)
606 ctx := result.TestContext
607
Liz Kammerd56ddb52021-06-21 17:37:39 -0400608 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_binary_no_override", variant), None)
609 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_binary_override_default_async", variant), None)
610 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_binary_override_default_disable", variant), None)
611 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_binary_override_default_sync", variant), None)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400612
Liz Kammerd56ddb52021-06-21 17:37:39 -0400613 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_test_no_override", variant), None)
614 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_test_override_default_async", variant), None)
615 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_test_override_default_disable", variant), None)
616 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_test_override_default_sync", variant), None)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400617
Liz Kammerd56ddb52021-06-21 17:37:39 -0400618 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_binary_no_override", variant), Sync)
619 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_binary_override_default_async", variant), Sync)
620 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_binary_override_default_disable", variant), Sync)
621 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_binary_override_default_sync", variant), Sync)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400622
Liz Kammerd56ddb52021-06-21 17:37:39 -0400623 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_test_no_override", variant), Sync)
624 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_test_override_default_async", variant), Sync)
625 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_test_override_default_disable", variant), Sync)
626 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_test_override_default_sync", variant), Sync)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400627
Liz Kammerd56ddb52021-06-21 17:37:39 -0400628 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_binary_no_override", variant), Async)
629 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_binary_override_default_async", variant), Async)
630 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_binary_override_default_disable", variant), Async)
631 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_binary_override_default_sync", variant), Async)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400632
Liz Kammerd56ddb52021-06-21 17:37:39 -0400633 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_test_no_override", variant), Async)
634 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_test_override_default_async", variant), Async)
635 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_test_override_default_disable", variant), Async)
636 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_test_override_default_sync", variant), Async)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400637
Liz Kammerd56ddb52021-06-21 17:37:39 -0400638 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_binary_no_override", variant), Sync)
639 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_binary_override_default_async", variant), Sync)
640 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_binary_override_default_disable", variant), Sync)
641 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_binary_override_default_sync", variant), Sync)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400642
Liz Kammerd56ddb52021-06-21 17:37:39 -0400643 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_test_no_override", variant), Sync)
644 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_test_override_default_async", variant), Sync)
645 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_test_override_default_disable", variant), Sync)
646 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_test_override_default_sync", variant), Sync)
647
648 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_binary_no_override", variant), Sync)
649 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_binary_override_default_async", variant), Sync)
650 // should sanitize: { diag: { memtag: true } } result in Sync instead of None here?
651 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_binary_override_default_disable", variant), None)
652 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_binary_override_default_sync", variant), Sync)
653
654 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_test_no_override", variant), Sync)
655 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_test_override_default_async", variant), Sync)
656 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_test_override_default_disable", variant), Sync)
657 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_test_override_default_sync", variant), Sync)
658
659 checkHasMemtagNote(t, ctx.ModuleForTests("unset_binary_no_override", variant), Sync)
660 checkHasMemtagNote(t, ctx.ModuleForTests("unset_binary_override_default_async", variant), Sync)
661 checkHasMemtagNote(t, ctx.ModuleForTests("unset_binary_override_default_disable", variant), None)
662 checkHasMemtagNote(t, ctx.ModuleForTests("unset_binary_override_default_sync", variant), Sync)
663
664 checkHasMemtagNote(t, ctx.ModuleForTests("unset_test_no_override", variant), Sync)
665 checkHasMemtagNote(t, ctx.ModuleForTests("unset_test_override_default_async", variant), Sync)
666 checkHasMemtagNote(t, ctx.ModuleForTests("unset_test_override_default_disable", variant), Sync)
667 checkHasMemtagNote(t, ctx.ModuleForTests("unset_test_override_default_sync", variant), Sync)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400668}