Merge changes from topic "abigail-werror"

* changes:
  Disable ABI dumping for hwasan builds.
  Abort on abitidy errors.
This commit is contained in:
Dan Albert
2022-04-20 19:19:07 +00:00
committed by Gerrit Code Review
2 changed files with 30 additions and 6 deletions

View File

@@ -46,7 +46,7 @@ func (n *ndkAbiDumpSingleton) GenerateBuildActions(ctx android.SingletonContext)
if m, ok := module.(*Module); ok { if m, ok := module.(*Module); ok {
if installer, ok := m.installer.(*stubDecorator); ok { if installer, ok := m.installer.(*stubDecorator); ok {
if canDumpAbi() { if canDumpAbi(ctx.Config()) {
depPaths = append(depPaths, installer.abiDumpPath) depPaths = append(depPaths, installer.abiDumpPath)
} }
} }

View File

@@ -53,9 +53,9 @@ var (
abitidy = pctx.AndroidStaticRule("abitidy", abitidy = pctx.AndroidStaticRule("abitidy",
blueprint.RuleParams{ blueprint.RuleParams{
Command: "$abitidy --all -i $in -o $out", Command: "$abitidy --all $flags -i $in -o $out",
CommandDeps: []string{"$abitidy"}, CommandDeps: []string{"$abitidy"},
}) }, "flags")
abidiff = pctx.AndroidStaticRule("abidiff", abidiff = pctx.AndroidStaticRule("abidiff",
blueprint.RuleParams{ blueprint.RuleParams{
@@ -104,6 +104,12 @@ type libraryProperties struct {
// used. This is only needed to work around platform bugs like // used. This is only needed to work around platform bugs like
// https://github.com/android-ndk/ndk/issues/265. // https://github.com/android-ndk/ndk/issues/265.
Unversioned_until *string 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 { type stubDecorator struct {
@@ -315,8 +321,18 @@ func (this *stubDecorator) findPrebuiltAbiDump(ctx ModuleContext,
} }
// Feature flag. // Feature flag.
func canDumpAbi() bool { func canDumpAbi(config android.Config) bool {
return runtime.GOOS != "darwin" 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. // Feature flag to disable diffing against prebuilts.
@@ -339,14 +355,22 @@ func (this *stubDecorator) dumpAbi(ctx ModuleContext, symbolList android.Path) {
"symbolList": symbolList.String(), "symbolList": symbolList.String(),
}, },
}) })
this.abiDumpPath = getNdkAbiDumpInstallBase(ctx).Join(ctx, this.abiDumpPath = getNdkAbiDumpInstallBase(ctx).Join(ctx,
this.apiLevel.String(), ctx.Arch().ArchType.String(), this.apiLevel.String(), ctx.Arch().ArchType.String(),
this.libraryName(ctx), "abi.xml") 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{ ctx.Build(pctx, android.BuildParams{
Rule: abitidy, Rule: abitidy,
Description: fmt.Sprintf("abitidy %s", implementationLibrary), Description: fmt.Sprintf("abitidy %s", implementationLibrary),
Input: abiRawPath, Input: abiRawPath,
Output: this.abiDumpPath, Output: this.abiDumpPath,
Args: map[string]string{
"flags": untypedFlag,
},
}) })
} }
@@ -444,7 +468,7 @@ func (c *stubDecorator) compile(ctx ModuleContext, flags Flags, deps PathDeps) O
nativeAbiResult := parseNativeAbiDefinition(ctx, symbolFile, c.apiLevel, "") nativeAbiResult := parseNativeAbiDefinition(ctx, symbolFile, c.apiLevel, "")
objs := compileStubLibrary(ctx, flags, nativeAbiResult.stubSrc) objs := compileStubLibrary(ctx, flags, nativeAbiResult.stubSrc)
c.versionScriptPath = nativeAbiResult.versionScript c.versionScriptPath = nativeAbiResult.versionScript
if canDumpAbi() { if canDumpAbi(ctx.Config()) {
c.dumpAbi(ctx, nativeAbiResult.symbolList) c.dumpAbi(ctx, nativeAbiResult.symbolList)
if canDiffAbi() { if canDiffAbi() {
c.diffAbi(ctx) c.diffAbi(ctx)