blob: 2393f3e18e28a8e0b7056e3667a850038497b82f [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 {
244 name: "bin_depends_ubsan",
245 host_supported: true,
246 shared_libs: [
247 "libshared",
248 ],
249 static_libs: [
250 "libstatic",
251 "libubsan",
252 "libnoubsan",
253 ],
254 }
255
256 cc_binary {
257 name: "bin_no_ubsan",
258 host_supported: true,
259 shared_libs: [
260 "libshared",
261 ],
262 static_libs: [
263 "libstatic",
264 "libnoubsan",
265 ],
266 }
267
268 cc_library_shared {
269 name: "libshared",
270 host_supported: true,
271 shared_libs: ["libtransitive"],
272 }
273
274 cc_library_shared {
275 name: "libtransitive",
276 host_supported: true,
277 }
278
279 cc_library_static {
280 name: "libubsan",
281 host_supported: true,
282 sanitize: {
283 undefined: true,
284 }
285 }
286
287 cc_library_static {
288 name: "libstatic",
289 host_supported: true,
290 }
291
292 cc_library_static {
293 name: "libnoubsan",
294 host_supported: true,
295 }
296 `
297
298 result := android.GroupFixturePreparers(
299 prepareForCcTest,
300 ).RunTestWithBp(t, bp)
301
302 check := func(t *testing.T, result *android.TestResult, variant string) {
303 staticVariant := variant + "_static"
304
305 minimalRuntime := result.ModuleForTests("libclang_rt.ubsan_minimal", staticVariant)
306
307 // The binaries, one with ubsan and one without
308 binWithUbsan := result.ModuleForTests("bin_with_ubsan", variant)
309 binDependsUbsan := result.ModuleForTests("bin_depends_ubsan", variant)
310 binNoUbsan := result.ModuleForTests("bin_no_ubsan", variant)
311
312 android.AssertStringListContains(t, "missing libclang_rt.ubsan_minimal in bin_with_ubsan static libs",
313 strings.Split(binWithUbsan.Rule("ld").Args["libFlags"], " "),
314 minimalRuntime.OutputFiles(t, "")[0].String())
315
316 android.AssertStringListContains(t, "missing libclang_rt.ubsan_minimal in bin_depends_ubsan static libs",
317 strings.Split(binDependsUbsan.Rule("ld").Args["libFlags"], " "),
318 minimalRuntime.OutputFiles(t, "")[0].String())
319
320 android.AssertStringListDoesNotContain(t, "unexpected libclang_rt.ubsan_minimal in bin_no_ubsan static libs",
321 strings.Split(binNoUbsan.Rule("ld").Args["libFlags"], " "),
322 minimalRuntime.OutputFiles(t, "")[0].String())
323
324 android.AssertStringListContains(t, "missing -Wl,--exclude-libs for minimal runtime in bin_with_ubsan",
325 strings.Split(binWithUbsan.Rule("ld").Args["ldFlags"], " "),
326 "-Wl,--exclude-libs="+minimalRuntime.OutputFiles(t, "")[0].Base())
327
328 android.AssertStringListContains(t, "missing -Wl,--exclude-libs for minimal runtime in bin_depends_ubsan static libs",
329 strings.Split(binDependsUbsan.Rule("ld").Args["ldFlags"], " "),
330 "-Wl,--exclude-libs="+minimalRuntime.OutputFiles(t, "")[0].Base())
331
332 android.AssertStringListDoesNotContain(t, "unexpected -Wl,--exclude-libs for minimal runtime in bin_no_ubsan static libs",
333 strings.Split(binNoUbsan.Rule("ld").Args["ldFlags"], " "),
334 "-Wl,--exclude-libs="+minimalRuntime.OutputFiles(t, "")[0].Base())
335 }
336
337 t.Run("host", func(t *testing.T) { check(t, result, result.Config.BuildOSTarget.String()) })
338 t.Run("device", func(t *testing.T) { check(t, result, "android_arm64_armv8-a") })
339}
340
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400341type MemtagNoteType int
342
343const (
344 None MemtagNoteType = iota + 1
345 Sync
346 Async
347)
348
349func (t MemtagNoteType) str() string {
350 switch t {
351 case None:
352 return "none"
353 case Sync:
354 return "sync"
355 case Async:
356 return "async"
357 default:
Liz Kammerd56ddb52021-06-21 17:37:39 -0400358 panic("type_note_invalid")
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400359 }
360}
361
362func checkHasMemtagNote(t *testing.T, m android.TestingModule, expected MemtagNoteType) {
Liz Kammerd56ddb52021-06-21 17:37:39 -0400363 t.Helper()
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400364
365 found := None
Florian Mayerd8434a42022-08-31 20:57:03 +0000366 ldFlags := m.Rule("ld").Args["ldFlags"]
367 if strings.Contains(ldFlags, "-fsanitize-memtag-mode=async") {
368 found = Async
369 } else if strings.Contains(ldFlags, "-fsanitize-memtag-mode=sync") {
370 found = Sync
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400371 }
372
373 if found != expected {
374 t.Errorf("Wrong Memtag note in target %q: found %q, expected %q", m.Module().(*Module).Name(), found.str(), expected.str())
375 }
376}
377
378var prepareForTestWithMemtagHeap = android.GroupFixturePreparers(
379 android.FixtureModifyMockFS(func(fs android.MockFS) {
380 templateBp := `
381 cc_test {
Liz Kammerd56ddb52021-06-21 17:37:39 -0400382 name: "unset_test_%[1]s",
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400383 gtest: false,
384 }
385
386 cc_test {
Liz Kammerd56ddb52021-06-21 17:37:39 -0400387 name: "no_memtag_test_%[1]s",
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400388 gtest: false,
389 sanitize: { memtag_heap: false },
390 }
391
392 cc_test {
Liz Kammerd56ddb52021-06-21 17:37:39 -0400393 name: "set_memtag_test_%[1]s",
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400394 gtest: false,
395 sanitize: { memtag_heap: true },
396 }
397
398 cc_test {
Liz Kammerd56ddb52021-06-21 17:37:39 -0400399 name: "set_memtag_set_async_test_%[1]s",
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400400 gtest: false,
401 sanitize: { memtag_heap: true, diag: { memtag_heap: false } },
402 }
403
404 cc_test {
Liz Kammerd56ddb52021-06-21 17:37:39 -0400405 name: "set_memtag_set_sync_test_%[1]s",
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400406 gtest: false,
407 sanitize: { memtag_heap: true, diag: { memtag_heap: true } },
408 }
409
Liz Kammerd56ddb52021-06-21 17:37:39 -0400410 cc_test {
411 name: "unset_memtag_set_sync_test_%[1]s",
412 gtest: false,
413 sanitize: { diag: { memtag_heap: true } },
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400414 }
415
416 cc_binary {
Liz Kammerd56ddb52021-06-21 17:37:39 -0400417 name: "unset_binary_%[1]s",
418 }
419
420 cc_binary {
421 name: "no_memtag_binary_%[1]s",
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400422 sanitize: { memtag_heap: false },
423 }
424
425 cc_binary {
Liz Kammerd56ddb52021-06-21 17:37:39 -0400426 name: "set_memtag_binary_%[1]s",
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400427 sanitize: { memtag_heap: true },
428 }
429
430 cc_binary {
Liz Kammerd56ddb52021-06-21 17:37:39 -0400431 name: "set_memtag_set_async_binary_%[1]s",
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400432 sanitize: { memtag_heap: true, diag: { memtag_heap: false } },
433 }
434
435 cc_binary {
Liz Kammerd56ddb52021-06-21 17:37:39 -0400436 name: "set_memtag_set_sync_binary_%[1]s",
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400437 sanitize: { memtag_heap: true, diag: { memtag_heap: true } },
438 }
Liz Kammerd56ddb52021-06-21 17:37:39 -0400439
440 cc_binary {
441 name: "unset_memtag_set_sync_binary_%[1]s",
442 sanitize: { diag: { memtag_heap: true } },
443 }
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400444 `
Liz Kammerd56ddb52021-06-21 17:37:39 -0400445 subdirNoOverrideBp := fmt.Sprintf(templateBp, "no_override")
446 subdirOverrideDefaultDisableBp := fmt.Sprintf(templateBp, "override_default_disable")
447 subdirSyncBp := fmt.Sprintf(templateBp, "override_default_sync")
448 subdirAsyncBp := fmt.Sprintf(templateBp, "override_default_async")
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400449
450 fs.Merge(android.MockFS{
Liz Kammerd56ddb52021-06-21 17:37:39 -0400451 "subdir_no_override/Android.bp": []byte(subdirNoOverrideBp),
452 "subdir_override_default_disable/Android.bp": []byte(subdirOverrideDefaultDisableBp),
453 "subdir_sync/Android.bp": []byte(subdirSyncBp),
454 "subdir_async/Android.bp": []byte(subdirAsyncBp),
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400455 })
456 }),
457 android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
Liz Kammerd56ddb52021-06-21 17:37:39 -0400458 variables.MemtagHeapExcludePaths = []string{"subdir_override_default_disable"}
459 // "subdir_override_default_disable" is covered by both include and override_default_disable paths. override_default_disable wins.
460 variables.MemtagHeapSyncIncludePaths = []string{"subdir_sync", "subdir_override_default_disable"}
461 variables.MemtagHeapAsyncIncludePaths = []string{"subdir_async", "subdir_override_default_disable"}
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400462 }),
463)
464
465func TestSanitizeMemtagHeap(t *testing.T) {
466 variant := "android_arm64_armv8-a"
467
468 result := android.GroupFixturePreparers(
469 prepareForCcTest,
470 prepareForTestWithMemtagHeap,
471 ).RunTest(t)
472 ctx := result.TestContext
473
Liz Kammerd56ddb52021-06-21 17:37:39 -0400474 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_binary_no_override", variant), None)
475 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_binary_override_default_async", variant), None)
476 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_binary_override_default_disable", variant), None)
477 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_binary_override_default_sync", variant), None)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400478
Liz Kammerd56ddb52021-06-21 17:37:39 -0400479 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_test_no_override", variant), None)
480 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_test_override_default_async", variant), None)
481 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_test_override_default_disable", variant), None)
482 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_test_override_default_sync", variant), None)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400483
Liz Kammerd56ddb52021-06-21 17:37:39 -0400484 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_binary_no_override", variant), Async)
485 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_binary_override_default_async", variant), Async)
486 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_binary_override_default_disable", variant), Async)
487 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_binary_override_default_sync", variant), Sync)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400488
Liz Kammer7b920b42021-06-22 16:57:27 -0400489 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_test_no_override", variant), Sync)
490 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_test_override_default_async", variant), Sync)
491 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_test_override_default_disable", variant), Sync)
Liz Kammerd56ddb52021-06-21 17:37:39 -0400492 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_test_override_default_sync", variant), Sync)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400493
Liz Kammerd56ddb52021-06-21 17:37:39 -0400494 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_binary_no_override", variant), Async)
495 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_binary_override_default_async", variant), Async)
496 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_binary_override_default_disable", variant), Async)
497 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_binary_override_default_sync", variant), Async)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400498
Liz Kammerd56ddb52021-06-21 17:37:39 -0400499 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_test_no_override", variant), Async)
500 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_test_override_default_async", variant), Async)
501 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_test_override_default_disable", variant), Async)
502 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_test_override_default_sync", variant), Async)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400503
Liz Kammerd56ddb52021-06-21 17:37:39 -0400504 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_binary_no_override", variant), Sync)
505 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_binary_override_default_async", variant), Sync)
506 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_binary_override_default_disable", variant), Sync)
507 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_binary_override_default_sync", variant), Sync)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400508
Liz Kammerd56ddb52021-06-21 17:37:39 -0400509 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_test_no_override", variant), Sync)
510 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_test_override_default_async", variant), Sync)
511 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_test_override_default_disable", variant), Sync)
512 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_test_override_default_sync", variant), Sync)
513
514 // should sanitize: { diag: { memtag: true } } result in Sync instead of None here?
515 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_binary_no_override", variant), None)
516 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_binary_override_default_async", variant), Sync)
517 // should sanitize: { diag: { memtag: true } } result in Sync instead of None here?
518 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_binary_override_default_disable", variant), None)
519 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_binary_override_default_sync", variant), Sync)
520
521 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_test_no_override", variant), Sync)
522 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_test_override_default_async", variant), Sync)
523 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_test_override_default_disable", variant), Sync)
524 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_test_override_default_sync", variant), Sync)
525
526 checkHasMemtagNote(t, ctx.ModuleForTests("unset_binary_no_override", variant), None)
527 checkHasMemtagNote(t, ctx.ModuleForTests("unset_binary_override_default_async", variant), Async)
528 checkHasMemtagNote(t, ctx.ModuleForTests("unset_binary_override_default_disable", variant), None)
529 checkHasMemtagNote(t, ctx.ModuleForTests("unset_binary_override_default_sync", variant), Sync)
530
531 checkHasMemtagNote(t, ctx.ModuleForTests("unset_test_no_override", variant), Sync)
532 checkHasMemtagNote(t, ctx.ModuleForTests("unset_test_override_default_async", variant), Sync)
533 checkHasMemtagNote(t, ctx.ModuleForTests("unset_test_override_default_disable", variant), Sync)
534 checkHasMemtagNote(t, ctx.ModuleForTests("unset_test_override_default_sync", variant), Sync)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400535}
536
537func TestSanitizeMemtagHeapWithSanitizeDevice(t *testing.T) {
538 variant := "android_arm64_armv8-a"
539
540 result := android.GroupFixturePreparers(
541 prepareForCcTest,
542 prepareForTestWithMemtagHeap,
543 android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
544 variables.SanitizeDevice = []string{"memtag_heap"}
545 }),
546 ).RunTest(t)
547 ctx := result.TestContext
548
Liz Kammerd56ddb52021-06-21 17:37:39 -0400549 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_binary_no_override", variant), None)
550 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_binary_override_default_async", variant), None)
551 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_binary_override_default_disable", variant), None)
552 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_binary_override_default_sync", variant), None)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400553
Liz Kammerd56ddb52021-06-21 17:37:39 -0400554 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_test_no_override", variant), None)
555 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_test_override_default_async", variant), None)
556 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_test_override_default_disable", variant), None)
557 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_test_override_default_sync", variant), None)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400558
Liz Kammerd56ddb52021-06-21 17:37:39 -0400559 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_binary_no_override", variant), Async)
560 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_binary_override_default_async", variant), Async)
561 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_binary_override_default_disable", variant), Async)
562 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_binary_override_default_sync", variant), Sync)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400563
Liz Kammer7b920b42021-06-22 16:57:27 -0400564 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_test_no_override", variant), Sync)
565 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_test_override_default_async", variant), Sync)
566 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_test_override_default_disable", variant), Sync)
Liz Kammerd56ddb52021-06-21 17:37:39 -0400567 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_test_override_default_sync", variant), Sync)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400568
Liz Kammerd56ddb52021-06-21 17:37:39 -0400569 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_binary_no_override", variant), Async)
570 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_binary_override_default_async", variant), Async)
571 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_binary_override_default_disable", variant), Async)
572 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_binary_override_default_sync", variant), Async)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400573
Liz Kammerd56ddb52021-06-21 17:37:39 -0400574 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_test_no_override", variant), Async)
575 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_test_override_default_async", variant), Async)
576 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_test_override_default_disable", variant), Async)
577 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_test_override_default_sync", variant), Async)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400578
Liz Kammerd56ddb52021-06-21 17:37:39 -0400579 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_binary_no_override", variant), Sync)
580 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_binary_override_default_async", variant), Sync)
581 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_binary_override_default_disable", variant), Sync)
582 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_binary_override_default_sync", variant), Sync)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400583
Liz Kammerd56ddb52021-06-21 17:37:39 -0400584 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_test_no_override", variant), Sync)
585 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_test_override_default_async", variant), Sync)
586 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_test_override_default_disable", variant), Sync)
587 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_test_override_default_sync", variant), Sync)
588
589 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_binary_no_override", variant), Sync)
590 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_binary_override_default_async", variant), Sync)
591 // should sanitize: { diag: { memtag: true } } result in Sync instead of None here?
592 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_binary_override_default_disable", variant), None)
593 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_binary_override_default_sync", variant), Sync)
594
595 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_test_no_override", variant), Sync)
596 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_test_override_default_async", variant), Sync)
597 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_test_override_default_disable", variant), Sync)
598 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_test_override_default_sync", variant), Sync)
599
600 checkHasMemtagNote(t, ctx.ModuleForTests("unset_binary_no_override", variant), Async)
601 checkHasMemtagNote(t, ctx.ModuleForTests("unset_binary_override_default_async", variant), Async)
602 checkHasMemtagNote(t, ctx.ModuleForTests("unset_binary_override_default_disable", variant), None)
603 checkHasMemtagNote(t, ctx.ModuleForTests("unset_binary_override_default_sync", variant), Sync)
604
605 checkHasMemtagNote(t, ctx.ModuleForTests("unset_test_no_override", variant), Sync)
606 checkHasMemtagNote(t, ctx.ModuleForTests("unset_test_override_default_async", variant), Sync)
607 checkHasMemtagNote(t, ctx.ModuleForTests("unset_test_override_default_disable", variant), Sync)
608 checkHasMemtagNote(t, ctx.ModuleForTests("unset_test_override_default_sync", variant), Sync)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400609}
610
611func TestSanitizeMemtagHeapWithSanitizeDeviceDiag(t *testing.T) {
612 variant := "android_arm64_armv8-a"
613
614 result := android.GroupFixturePreparers(
615 prepareForCcTest,
616 prepareForTestWithMemtagHeap,
617 android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
618 variables.SanitizeDevice = []string{"memtag_heap"}
619 variables.SanitizeDeviceDiag = []string{"memtag_heap"}
620 }),
621 ).RunTest(t)
622 ctx := result.TestContext
623
Liz Kammerd56ddb52021-06-21 17:37:39 -0400624 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_binary_no_override", variant), None)
625 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_binary_override_default_async", variant), None)
626 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_binary_override_default_disable", variant), None)
627 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_binary_override_default_sync", variant), None)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400628
Liz Kammerd56ddb52021-06-21 17:37:39 -0400629 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_test_no_override", variant), None)
630 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_test_override_default_async", variant), None)
631 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_test_override_default_disable", variant), None)
632 checkHasMemtagNote(t, ctx.ModuleForTests("no_memtag_test_override_default_sync", variant), None)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400633
Liz Kammerd56ddb52021-06-21 17:37:39 -0400634 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_binary_no_override", variant), Sync)
635 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_binary_override_default_async", variant), Sync)
636 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_binary_override_default_disable", variant), Sync)
637 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_binary_override_default_sync", variant), Sync)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400638
Liz Kammerd56ddb52021-06-21 17:37:39 -0400639 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_test_no_override", variant), Sync)
640 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_test_override_default_async", variant), Sync)
641 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_test_override_default_disable", variant), Sync)
642 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_test_override_default_sync", variant), Sync)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400643
Liz Kammerd56ddb52021-06-21 17:37:39 -0400644 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_binary_no_override", variant), Async)
645 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_binary_override_default_async", variant), Async)
646 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_binary_override_default_disable", variant), Async)
647 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_binary_override_default_sync", variant), Async)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400648
Liz Kammerd56ddb52021-06-21 17:37:39 -0400649 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_test_no_override", variant), Async)
650 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_test_override_default_async", variant), Async)
651 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_test_override_default_disable", variant), Async)
652 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_async_test_override_default_sync", variant), Async)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400653
Liz Kammerd56ddb52021-06-21 17:37:39 -0400654 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_binary_no_override", variant), Sync)
655 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_binary_override_default_async", variant), Sync)
656 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_binary_override_default_disable", variant), Sync)
657 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_binary_override_default_sync", variant), Sync)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400658
Liz Kammerd56ddb52021-06-21 17:37:39 -0400659 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_test_no_override", variant), Sync)
660 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_test_override_default_async", variant), Sync)
661 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_test_override_default_disable", variant), Sync)
662 checkHasMemtagNote(t, ctx.ModuleForTests("set_memtag_set_sync_test_override_default_sync", variant), Sync)
663
664 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_binary_no_override", variant), Sync)
665 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_binary_override_default_async", variant), Sync)
666 // should sanitize: { diag: { memtag: true } } result in Sync instead of None here?
667 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_binary_override_default_disable", variant), None)
668 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_binary_override_default_sync", variant), Sync)
669
670 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_test_no_override", variant), Sync)
671 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_test_override_default_async", variant), Sync)
672 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_test_override_default_disable", variant), Sync)
673 checkHasMemtagNote(t, ctx.ModuleForTests("unset_memtag_set_sync_test_override_default_sync", variant), Sync)
674
675 checkHasMemtagNote(t, ctx.ModuleForTests("unset_binary_no_override", variant), Sync)
676 checkHasMemtagNote(t, ctx.ModuleForTests("unset_binary_override_default_async", variant), Sync)
677 checkHasMemtagNote(t, ctx.ModuleForTests("unset_binary_override_default_disable", variant), None)
678 checkHasMemtagNote(t, ctx.ModuleForTests("unset_binary_override_default_sync", variant), Sync)
679
680 checkHasMemtagNote(t, ctx.ModuleForTests("unset_test_no_override", variant), Sync)
681 checkHasMemtagNote(t, ctx.ModuleForTests("unset_test_override_default_async", variant), Sync)
682 checkHasMemtagNote(t, ctx.ModuleForTests("unset_test_override_default_disable", variant), Sync)
683 checkHasMemtagNote(t, ctx.ModuleForTests("unset_test_override_default_sync", variant), Sync)
Liz Kammerbb8d84f2021-06-21 12:53:03 -0400684}