From 219968c9b3cdb73d653800cc44efb4b2d7addd42 Mon Sep 17 00:00:00 2001 From: Yo Chiang Date: Tue, 22 Sep 2020 18:45:04 +0800 Subject: [PATCH] soong: Exclude system shared libs from fix suggestions Pass the value of system_shared_libs to the Android.mk world, so that prebuilt ELF check can exclude them from fix suggestions. Bug: 141925662 Test: Write a bad cc_prebuilt_library module and check fix suggestions Change-Id: I0cc61821765507180ce6a582bf8125a192f83a57 --- cc/androidmk.go | 7 +++++++ cc/cc.go | 8 ++++++++ cc/linker.go | 16 ++++++++-------- 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/cc/androidmk.go b/cc/androidmk.go index 380b4e92f..fcaff557d 100644 --- a/cc/androidmk.go +++ b/cc/androidmk.go @@ -83,6 +83,13 @@ func (c *Module) AndroidMkEntries() []android.AndroidMkEntries { if len(c.Properties.Logtags) > 0 { entries.AddStrings("LOCAL_LOGTAGS_FILES", c.Properties.Logtags...) } + // Note: Pass the exact value of AndroidMkSystemSharedLibs to the Make + // world, even if it is an empty list. In the Make world, + // LOCAL_SYSTEM_SHARED_LIBRARIES defaults to "none", which is expanded + // to the default list of system shared libs by the build system. + // Soong computes the exact list of system shared libs, so we have to + // override the default value when the list of libs is actually empty. + entries.SetString("LOCAL_SYSTEM_SHARED_LIBRARIES", strings.Join(c.Properties.AndroidMkSystemSharedLibs, " ")) if len(c.Properties.AndroidMkSharedLibs) > 0 { entries.AddStrings("LOCAL_SHARED_LIBRARIES", c.Properties.AndroidMkSharedLibs...) } diff --git a/cc/cc.go b/cc/cc.go index 70229be5a..82321173c 100644 --- a/cc/cc.go +++ b/cc/cc.go @@ -99,6 +99,9 @@ type Deps struct { // Used for data dependencies adjacent to tests DataLibs []string + // Used by DepsMutator to pass system_shared_libs information to check_elf_file.py. + SystemSharedLibs []string + StaticUnwinderIfLegacy bool ReexportSharedLibHeaders, ReexportStaticLibHeaders, ReexportHeaderLibHeaders []string @@ -237,6 +240,9 @@ type BaseProperties struct { PreventInstall bool `blueprint:"mutated"` ApexesProvidingSharedLibs []string `blueprint:"mutated"` + // Set by DepsMutator. + AndroidMkSystemSharedLibs []string `blueprint:"mutated"` + ImageVariationPrefix string `blueprint:"mutated"` VndkVersion string `blueprint:"mutated"` SubName string `blueprint:"mutated"` @@ -1815,6 +1821,8 @@ func (c *Module) DepsMutator(actx android.BottomUpMutatorContext) { deps := c.deps(ctx) + c.Properties.AndroidMkSystemSharedLibs = deps.SystemSharedLibs + variantNdkLibs := []string{} variantLateNdkLibs := []string{} if ctx.Os() == android.Android { diff --git a/cc/linker.go b/cc/linker.go index 58f8a294e..12c8b2c59 100644 --- a/cc/linker.go +++ b/cc/linker.go @@ -278,19 +278,19 @@ func (linker *baseLinker) linkerDeps(ctx DepsContext, deps Deps) Deps { deps.LateStaticLibs = append(deps.LateStaticLibs, "libatomic") } - systemSharedLibs := linker.Properties.System_shared_libs - if systemSharedLibs == nil { + deps.SystemSharedLibs = linker.Properties.System_shared_libs + if deps.SystemSharedLibs == nil { // Provide a default system_shared_libs if it is unspecified. Note: If an // empty list [] is specified, it implies that the module declines the // default system_shared_libs. - systemSharedLibs = []string{"libc", "libm", "libdl"} + deps.SystemSharedLibs = []string{"libc", "libm", "libdl"} } if inList("libdl", deps.SharedLibs) { // If system_shared_libs has libc but not libdl, make sure shared_libs does not // have libdl to avoid loading libdl before libc. - if inList("libc", systemSharedLibs) { - if !inList("libdl", systemSharedLibs) { + if inList("libc", deps.SystemSharedLibs) { + if !inList("libdl", deps.SystemSharedLibs) { ctx.PropertyErrorf("shared_libs", "libdl must be in system_shared_libs, not shared_libs") } @@ -300,12 +300,12 @@ func (linker *baseLinker) linkerDeps(ctx DepsContext, deps Deps) Deps { // If libc and libdl are both in system_shared_libs make sure libdl comes after libc // to avoid loading libdl before libc. - if inList("libdl", systemSharedLibs) && inList("libc", systemSharedLibs) && - indexList("libdl", systemSharedLibs) < indexList("libc", systemSharedLibs) { + if inList("libdl", deps.SystemSharedLibs) && inList("libc", deps.SystemSharedLibs) && + indexList("libdl", deps.SystemSharedLibs) < indexList("libc", deps.SystemSharedLibs) { ctx.PropertyErrorf("system_shared_libs", "libdl must be after libc") } - deps.LateSharedLibs = append(deps.LateSharedLibs, systemSharedLibs...) + deps.LateSharedLibs = append(deps.LateSharedLibs, deps.SystemSharedLibs...) } if ctx.Fuchsia() {