From acd459728ac778fa9d758a381b35848d665a6e35 Mon Sep 17 00:00:00 2001 From: Justin Yun Date: Mon, 24 May 2021 18:17:33 +0900 Subject: [PATCH] Do not filter LLNDK lib from llndk.libraries.txt llndk.libraries.txt is used to list the LLNDKs for the linkerconfig. This is also required to define the VNDK snapshot modules of LLNDK stub libraries. The list had a filter for hwasan libraries, but the filter must be used only for the LLNDK_LIBRARIES make variable, but not for the llndk.libraries.txt file. Bug: 189070366 Bug: 188716508 Test: m nothing Test: LLNDK_LIBRARIES in make_vars-*.mk does not include hwasan. Change-Id: I820dd1161892dc76700aa1d696ea2643764d2052 Merged-In: I820dd1161892dc76700aa1d696ea2643764d2052 (cherry picked from commit 611e886ca73cdab96aaff32b5ff1f86222951dff) --- cc/cc_test.go | 9 ++++++++- cc/vndk.go | 44 +++++++++++++++++++++++++++++++------------- 2 files changed, 39 insertions(+), 14 deletions(-) diff --git a/cc/cc_test.go b/cc/cc_test.go index d82619a04..5acafbe2a 100644 --- a/cc/cc_test.go +++ b/cc/cc_test.go @@ -554,6 +554,13 @@ func TestVndk(t *testing.T) { } } + cc_library { + name: "libclang_rt.hwasan-llndk", + llndk: { + symbol_file: "libclang_rt.hwasan.map.txt", + } + } + cc_library_headers { name: "libllndk_headers", llndk: { @@ -661,7 +668,7 @@ func TestVndk(t *testing.T) { "VNDK-product: libvndk_product.so", "VNDK-product: libvndk_sp_product_private-x.so", }) - checkVndkLibrariesOutput(t, ctx, "llndk.libraries.txt", []string{"libc.so", "libdl.so", "libft2.so", "libllndk.so", "libm.so"}) + checkVndkLibrariesOutput(t, ctx, "llndk.libraries.txt", []string{"libc.so", "libclang_rt.hwasan-llndk.so", "libdl.so", "libft2.so", "libllndk.so", "libm.so"}) checkVndkLibrariesOutput(t, ctx, "vndkcore.libraries.txt", []string{"libvndk-private.so", "libvndk.so", "libvndk_product.so"}) checkVndkLibrariesOutput(t, ctx, "vndksp.libraries.txt", []string{"libc++.so", "libvndk_sp-x.so", "libvndk_sp_private-x.so", "libvndk_sp_product_private-x.so"}) checkVndkLibrariesOutput(t, ctx, "vndkprivate.libraries.txt", []string{"libft2.so", "libvndk-private.so", "libvndk_sp_private-x.so", "libvndk_sp_product_private-x.so"}) diff --git a/cc/vndk.go b/cc/vndk.go index 0254edc66..6a56c34db 100644 --- a/cc/vndk.go +++ b/cc/vndk.go @@ -234,7 +234,6 @@ type moduleListerFunc func(ctx android.SingletonContext) (moduleNames, fileNames var ( llndkLibraries = vndkModuleLister(func(m *Module) bool { return m.VendorProperties.IsLLNDK && !m.Header() }) - llndkLibrariesWithoutHWASAN = vndkModuleListRemover(llndkLibraries, "libclang_rt.hwasan-") vndkSPLibraries = vndkModuleLister(func(m *Module) bool { return m.VendorProperties.IsVNDKSP }) vndkCoreLibraries = vndkModuleLister(func(m *Module) bool { return m.VendorProperties.IsVNDKCore }) vndkPrivateLibraries = vndkModuleLister(func(m *Module) bool { return m.VendorProperties.IsVNDKPrivate }) @@ -419,10 +418,6 @@ func init() { } func RegisterVndkLibraryTxtTypes(ctx android.RegistrationContext) { - // Make uses LLNDK_LIBRARIES to determine which libraries to install. - // HWASAN is only part of the LL-NDK in builds in which libc depends on HWASAN. - // Therefore, by removing the library here, we cause it to only be installed if libc - // depends on it. ctx.RegisterSingletonModuleType("llndk_libraries_txt", llndkLibrariesTxtFactory) ctx.RegisterSingletonModuleType("vndksp_libraries_txt", vndkSPLibrariesTxtFactory) ctx.RegisterSingletonModuleType("vndkcore_libraries_txt", vndkCoreLibrariesTxtFactory) @@ -434,8 +429,9 @@ func RegisterVndkLibraryTxtTypes(ctx android.RegistrationContext) { type vndkLibrariesTxt struct { android.SingletonModuleBase - lister moduleListerFunc - makeVarName string + lister moduleListerFunc + makeVarName string + filterOutFromMakeVar string properties VndkLibrariesTxtProperties @@ -454,8 +450,12 @@ var _ android.OutputFileProducer = &vndkLibrariesTxt{} // llndk_libraries_txt is a singleton module whose content is a list of LLNDK libraries // generated by Soong but can be referenced by other modules. // For example, apex_vndk can depend on these files as prebuilt. +// Make uses LLNDK_LIBRARIES to determine which libraries to install. +// HWASAN is only part of the LL-NDK in builds in which libc depends on HWASAN. +// Therefore, by removing the library here, we cause it to only be installed if libc +// depends on it. func llndkLibrariesTxtFactory() android.SingletonModule { - return newVndkLibrariesTxt(llndkLibrariesWithoutHWASAN, "LLNDK_LIBRARIES") + return newVndkLibrariesWithMakeVarFilter(llndkLibraries, "LLNDK_LIBRARIES", "libclang_rt.hwasan-") } // vndksp_libraries_txt is a singleton module whose content is a list of VNDKSP libraries @@ -493,16 +493,21 @@ func vndkUsingCoreVariantLibrariesTxtFactory() android.SingletonModule { return newVndkLibrariesTxt(vndkUsingCoreVariantLibraries, "VNDK_USING_CORE_VARIANT_LIBRARIES") } -func newVndkLibrariesTxt(lister moduleListerFunc, makeVarName string) android.SingletonModule { +func newVndkLibrariesWithMakeVarFilter(lister moduleListerFunc, makeVarName string, filter string) android.SingletonModule { m := &vndkLibrariesTxt{ - lister: lister, - makeVarName: makeVarName, + lister: lister, + makeVarName: makeVarName, + filterOutFromMakeVar: filter, } m.AddProperties(&m.properties) android.InitAndroidModule(m) return m } +func newVndkLibrariesTxt(lister moduleListerFunc, makeVarName string) android.SingletonModule { + return newVndkLibrariesWithMakeVarFilter(lister, makeVarName, "") +} + func insertVndkVersion(filename string, vndkVersion string) string { if index := strings.LastIndex(filename, "."); index != -1 { return filename[:index] + "." + vndkVersion + filename[index:] @@ -542,8 +547,21 @@ func (txt *vndkLibrariesTxt) AndroidMkEntries() []android.AndroidMkEntries { } func (txt *vndkLibrariesTxt) MakeVars(ctx android.MakeVarsContext) { - ctx.Strict(txt.makeVarName, strings.Join(txt.moduleNames, " ")) - + filter := func(modules []string, prefix string) []string { + if prefix == "" { + return modules + } + var result []string + for _, module := range modules { + if strings.HasPrefix(module, prefix) { + continue + } else { + result = append(result, module) + } + } + return result + } + ctx.Strict(txt.makeVarName, strings.Join(filter(txt.moduleNames, txt.filterOutFromMakeVar), " ")) } // PrebuiltEtcModule interface