From 604086f988507b877e8e6aeb620b3c9a26630fb1 Mon Sep 17 00:00:00 2001 From: Dan Albert Date: Tue, 15 Jun 2021 13:23:44 -0700 Subject: [PATCH 1/2] Abort on abitidy errors. Test: m ndk Bug: http://b/190554910 Change-Id: Ie72b345942fef0d3dd740e50aa655408b790978a --- cc/ndk_library.go | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/cc/ndk_library.go b/cc/ndk_library.go index fc682ff70..5f0262d74 100644 --- a/cc/ndk_library.go +++ b/cc/ndk_library.go @@ -53,9 +53,9 @@ var ( abitidy = pctx.AndroidStaticRule("abitidy", blueprint.RuleParams{ - Command: "$abitidy --all -i $in -o $out", + Command: "$abitidy --all $flags -i $in -o $out", CommandDeps: []string{"$abitidy"}, - }) + }, "flags") abidiff = pctx.AndroidStaticRule("abidiff", blueprint.RuleParams{ @@ -104,6 +104,12 @@ type libraryProperties struct { // used. This is only needed to work around platform bugs like // https://github.com/android-ndk/ndk/issues/265. Unversioned_until *string + + // If true, does not emit errors when APIs lacking type information are + // found. This is false by default and should not be enabled outside bionic, + // where it is enabled pending a fix for http://b/190554910 (no debug info + // for asm implemented symbols). + Allow_untyped_symbols *bool } type stubDecorator struct { @@ -339,14 +345,22 @@ func (this *stubDecorator) dumpAbi(ctx ModuleContext, symbolList android.Path) { "symbolList": symbolList.String(), }, }) + this.abiDumpPath = getNdkAbiDumpInstallBase(ctx).Join(ctx, this.apiLevel.String(), ctx.Arch().ArchType.String(), this.libraryName(ctx), "abi.xml") + untypedFlag := "--abort-on-untyped-symbols" + if proptools.BoolDefault(this.properties.Allow_untyped_symbols, false) { + untypedFlag = "" + } ctx.Build(pctx, android.BuildParams{ Rule: abitidy, Description: fmt.Sprintf("abitidy %s", implementationLibrary), Input: abiRawPath, Output: this.abiDumpPath, + Args: map[string]string{ + "flags": untypedFlag, + }, }) } From f71006a96264a95938fe0b212751302d69dd9121 Mon Sep 17 00:00:00 2001 From: Dan Albert Date: Thu, 14 Apr 2022 23:08:51 +0000 Subject: [PATCH 2/2] Disable ABI dumping for hwasan builds. abidw doesn't currently handle top-byte-ignore correctly. Disable ABI dumping for those configs while we wait for a fix. We'll still have ABI checking coverage from non-hwasan builds. Bug: http://b/190554910 Test: treehugger Change-Id: I0e29979f8c212c43e0d1beea737abcd7fd0119d7 --- cc/ndk_abi.go | 2 +- cc/ndk_library.go | 16 +++++++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/cc/ndk_abi.go b/cc/ndk_abi.go index 927fa2ec5..3456c32bb 100644 --- a/cc/ndk_abi.go +++ b/cc/ndk_abi.go @@ -46,7 +46,7 @@ func (n *ndkAbiDumpSingleton) GenerateBuildActions(ctx android.SingletonContext) if m, ok := module.(*Module); ok { if installer, ok := m.installer.(*stubDecorator); ok { - if canDumpAbi() { + if canDumpAbi(ctx.Config()) { depPaths = append(depPaths, installer.abiDumpPath) } } diff --git a/cc/ndk_library.go b/cc/ndk_library.go index 5f0262d74..5ef41eae5 100644 --- a/cc/ndk_library.go +++ b/cc/ndk_library.go @@ -321,8 +321,18 @@ func (this *stubDecorator) findPrebuiltAbiDump(ctx ModuleContext, } // Feature flag. -func canDumpAbi() bool { - return runtime.GOOS != "darwin" +func canDumpAbi(config android.Config) bool { + if runtime.GOOS == "darwin" { + return false + } + // abidw doesn't currently handle top-byte-ignore correctly. Disable ABI + // dumping for those configs while we wait for a fix. We'll still have ABI + // checking coverage from non-hwasan builds. + // http://b/190554910 + if android.InList("hwaddress", config.SanitizeDevice()) { + return false + } + return true } // Feature flag to disable diffing against prebuilts. @@ -458,7 +468,7 @@ func (c *stubDecorator) compile(ctx ModuleContext, flags Flags, deps PathDeps) O nativeAbiResult := parseNativeAbiDefinition(ctx, symbolFile, c.apiLevel, "") objs := compileStubLibrary(ctx, flags, nativeAbiResult.stubSrc) c.versionScriptPath = nativeAbiResult.versionScript - if canDumpAbi() { + if canDumpAbi(ctx.Config()) { c.dumpAbi(ctx, nativeAbiResult.symbolList) if canDiffAbi() { c.diffAbi(ctx)