diff options
author | 2020-09-24 09:56:18 -0700 | |
---|---|---|
committer | 2020-09-30 21:17:59 +0000 | |
commit | e7257d2019602ad9f810f1da31fc4f6ecd7db384 (patch) | |
tree | 9ae0e10aeb6f09732ff731d9ef4b5a5e9f55ae9b /cc | |
parent | d48fe734cd052d08be02d4d847438795cd63c894 (diff) |
Add version dependencies to sanitizer runtime dependencies
The hwasan runtime has stubs, make the function to add all version
variants of a shared library available to the sanitizer mutator.
Test: m checkbuild
Change-Id: Ie4124022140f8520834d7bf7b59f0499cd381083
Diffstat (limited to 'cc')
-rw-r--r-- | cc/cc.go | 72 | ||||
-rw-r--r-- | cc/sanitize.go | 2 |
2 files changed, 45 insertions, 29 deletions
@@ -1863,6 +1863,42 @@ func GetCrtVariations(ctx android.BottomUpMutatorContext, } } +func (c *Module) addSharedLibDependenciesWithVersions(ctx android.BottomUpMutatorContext, + variations []blueprint.Variation, depTag libraryDependencyTag, name, version string, far bool) { + + variations = append([]blueprint.Variation(nil), variations...) + + if version != "" && VersionVariantAvailable(c) { + // Version is explicitly specified. i.e. libFoo#30 + variations = append(variations, blueprint.Variation{Mutator: "version", Variation: version}) + depTag.explicitlyVersioned = true + } + var deps []blueprint.Module + if far { + deps = ctx.AddFarVariationDependencies(variations, depTag, name) + } else { + deps = ctx.AddVariationDependencies(variations, depTag, name) + } + + // If the version is not specified, add dependency to all stubs libraries. + // The stubs library will be used when the depending module is built for APEX and + // the dependent module is not in the same APEX. + if version == "" && VersionVariantAvailable(c) { + if dep, ok := deps[0].(*Module); ok { + for _, ver := range dep.AllStubsVersions() { + // Note that depTag.ExplicitlyVersioned is false in this case. + versionVariations := append(variations, + blueprint.Variation{Mutator: "version", Variation: ver}) + if far { + ctx.AddFarVariationDependencies(versionVariations, depTag, name) + } else { + ctx.AddVariationDependencies(versionVariations, depTag, name) + } + } + } + } +} + func (c *Module) DepsMutator(actx android.BottomUpMutatorContext) { if !c.Enabled() { return @@ -2056,32 +2092,6 @@ func (c *Module) DepsMutator(actx android.BottomUpMutatorContext) { }, depTag, rewriteSnapshotLibs(lib, vendorSnapshotStaticLibs)) } - addSharedLibDependencies := func(depTag libraryDependencyTag, name string, version string) { - var variations []blueprint.Variation - variations = append(variations, blueprint.Variation{Mutator: "link", Variation: "shared"}) - if version != "" && VersionVariantAvailable(c) { - // Version is explicitly specified. i.e. libFoo#30 - variations = append(variations, blueprint.Variation{Mutator: "version", Variation: version}) - depTag.explicitlyVersioned = true - } - deps := actx.AddVariationDependencies(variations, depTag, name) - - // If the version is not specified, add dependency to all stubs libraries. - // The stubs library will be used when the depending module is built for APEX and - // the dependent module is not in the same APEX. - if version == "" && VersionVariantAvailable(c) { - if dep, ok := deps[0].(*Module); ok { - for _, ver := range dep.AllStubsVersions() { - // Note that depTag.ExplicitlyVersioned is false in this case. - ctx.AddVariationDependencies([]blueprint.Variation{ - {Mutator: "link", Variation: "shared"}, - {Mutator: "version", Variation: ver}, - }, depTag, name) - } - } - } - } - // shared lib names without the #version suffix var sharedLibNames []string @@ -2098,7 +2108,10 @@ func (c *Module) DepsMutator(actx android.BottomUpMutatorContext) { name, version := StubsLibNameAndVersion(lib) sharedLibNames = append(sharedLibNames, name) - addSharedLibDependencies(depTag, name, version) + variations := []blueprint.Variation{ + {Mutator: "link", Variation: "shared"}, + } + c.addSharedLibDependenciesWithVersions(ctx, variations, depTag, name, version, false) } for _, lib := range deps.LateSharedLibs { @@ -2109,7 +2122,10 @@ func (c *Module) DepsMutator(actx android.BottomUpMutatorContext) { continue } depTag := libraryDependencyTag{Kind: sharedLibraryDependency, Order: lateLibraryDependency} - addSharedLibDependencies(depTag, lib, "") + variations := []blueprint.Variation{ + {Mutator: "link", Variation: "shared"}, + } + c.addSharedLibDependenciesWithVersions(ctx, variations, depTag, lib, "", false) } actx.AddVariationDependencies([]blueprint.Variation{ diff --git a/cc/sanitize.go b/cc/sanitize.go index 8c3e97af3..43198c16e 100644 --- a/cc/sanitize.go +++ b/cc/sanitize.go @@ -1040,7 +1040,7 @@ func sanitizerRuntimeMutator(mctx android.BottomUpMutatorContext) { if c.Device() { variations = append(variations, c.ImageVariation()) } - mctx.AddFarVariationDependencies(variations, depTag, runtimeLibrary) + c.addSharedLibDependenciesWithVersions(mctx, variations, depTag, runtimeLibrary, "", true) } // static lib does not have dependency to the runtime library. The // dependency will be added to the executables or shared libs using |