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

Commit 9981555b authored by Trevor Radcliffe's avatar Trevor Radcliffe
Browse files

Add test that shared libs don't propagate ubsan rt

Bug: 253428057
Test: Run unit tests
Change-Id: I76903d646c848b01c27c13e2a4e9f12976c796f8
parent 442532a7
Loading
Loading
Loading
Loading
+39 −4
Original line number Diff line number Diff line
@@ -241,7 +241,7 @@ func TestUbsan(t *testing.T) {
		}

		cc_binary {
			name: "bin_depends_ubsan",
			name: "bin_depends_ubsan_static",
			host_supported: true,
			shared_libs: [
				"libshared",
@@ -253,6 +253,14 @@ func TestUbsan(t *testing.T) {
			],
		}

		cc_binary {
			name: "bin_depends_ubsan_shared",
			host_supported: true,
			shared_libs: [
				"libsharedubsan",
			],
		}

		cc_binary {
			name: "bin_no_ubsan",
			host_supported: true,
@@ -276,6 +284,14 @@ func TestUbsan(t *testing.T) {
			host_supported: true,
		}

		cc_library_shared {
			name: "libsharedubsan",
			host_supported: true,
			sanitize: {
				undefined: true,
			}
		}

		cc_library_static {
			name: "libubsan",
			host_supported: true,
@@ -301,22 +317,33 @@ func TestUbsan(t *testing.T) {

	check := func(t *testing.T, result *android.TestResult, variant string) {
		staticVariant := variant + "_static"
		sharedVariant := variant + "_shared"

		minimalRuntime := result.ModuleForTests("libclang_rt.ubsan_minimal", staticVariant)

		// The binaries, one with ubsan and one without
		binWithUbsan := result.ModuleForTests("bin_with_ubsan", variant)
		binDependsUbsan := result.ModuleForTests("bin_depends_ubsan", variant)
		binDependsUbsan := result.ModuleForTests("bin_depends_ubsan_static", variant)
		libSharedUbsan := result.ModuleForTests("libsharedubsan", sharedVariant)
		binDependsUbsanShared := result.ModuleForTests("bin_depends_ubsan_shared", variant)
		binNoUbsan := result.ModuleForTests("bin_no_ubsan", variant)

		android.AssertStringListContains(t, "missing libclang_rt.ubsan_minimal in bin_with_ubsan static libs",
			strings.Split(binWithUbsan.Rule("ld").Args["libFlags"], " "),
			minimalRuntime.OutputFiles(t, "")[0].String())

		android.AssertStringListContains(t, "missing libclang_rt.ubsan_minimal in bin_depends_ubsan static libs",
		android.AssertStringListContains(t, "missing libclang_rt.ubsan_minimal in bin_depends_ubsan_static static libs",
			strings.Split(binDependsUbsan.Rule("ld").Args["libFlags"], " "),
			minimalRuntime.OutputFiles(t, "")[0].String())

		android.AssertStringListContains(t, "missing libclang_rt.ubsan_minimal in libsharedubsan static libs",
			strings.Split(libSharedUbsan.Rule("ld").Args["libFlags"], " "),
			minimalRuntime.OutputFiles(t, "")[0].String())

		android.AssertStringListDoesNotContain(t, "unexpected libclang_rt.ubsan_minimal in bin_depends_ubsan_shared static libs",
			strings.Split(binDependsUbsanShared.Rule("ld").Args["libFlags"], " "),
			minimalRuntime.OutputFiles(t, "")[0].String())

		android.AssertStringListDoesNotContain(t, "unexpected libclang_rt.ubsan_minimal in bin_no_ubsan static libs",
			strings.Split(binNoUbsan.Rule("ld").Args["libFlags"], " "),
			minimalRuntime.OutputFiles(t, "")[0].String())
@@ -325,10 +352,18 @@ func TestUbsan(t *testing.T) {
			strings.Split(binWithUbsan.Rule("ld").Args["ldFlags"], " "),
			"-Wl,--exclude-libs="+minimalRuntime.OutputFiles(t, "")[0].Base())

		android.AssertStringListContains(t, "missing -Wl,--exclude-libs for minimal runtime in bin_depends_ubsan static libs",
		android.AssertStringListContains(t, "missing -Wl,--exclude-libs for minimal runtime in bin_depends_ubsan_static static libs",
			strings.Split(binDependsUbsan.Rule("ld").Args["ldFlags"], " "),
			"-Wl,--exclude-libs="+minimalRuntime.OutputFiles(t, "")[0].Base())

		android.AssertStringListContains(t, "missing -Wl,--exclude-libs for minimal runtime in libsharedubsan static libs",
			strings.Split(libSharedUbsan.Rule("ld").Args["ldFlags"], " "),
			"-Wl,--exclude-libs="+minimalRuntime.OutputFiles(t, "")[0].Base())

		android.AssertStringListDoesNotContain(t, "unexpected -Wl,--exclude-libs for minimal runtime in bin_depends_ubsan_shared static libs",
			strings.Split(binDependsUbsanShared.Rule("ld").Args["ldFlags"], " "),
			"-Wl,--exclude-libs="+minimalRuntime.OutputFiles(t, "")[0].Base())

		android.AssertStringListDoesNotContain(t, "unexpected -Wl,--exclude-libs for minimal runtime in bin_no_ubsan static libs",
			strings.Split(binNoUbsan.Rule("ld").Args["ldFlags"], " "),
			"-Wl,--exclude-libs="+minimalRuntime.OutputFiles(t, "")[0].Base())