Use compiler filter "verify" for dexpreopt w/o class loader context.

In cases when class loader context cannot be computed at build time and
verify_uses_libraries check is relaxed (RELAX_USES_LIBRARY_CHECK=true)
dexpreopt uses a special compiler filter that suppresses AOT-compilation
to native code and applies only those optimizations that do not require
class loader context. Previously the "extract" filter was used. Now ART
supports using "verify" filter in this configuration.

Bug: 132357300
Test: lunch cf_x86_64_phone-userdebug && m && launch_cvd \
      adb wait-for-device && adb root && adb logcat \
      | grep -E 'ClassLoaderContext [a-z ]+ mismatch'
      # empty grep output, no errors
Change-Id: Id4933aa94ea96894278355283383c16d103e98c9
This commit is contained in:
Ulya Trafimovich
2021-03-02 12:25:02 +00:00
parent fe927a265e
commit 4a13acb07d
2 changed files with 3 additions and 3 deletions

View File

@@ -369,11 +369,11 @@ func dexpreoptCommand(ctx android.PathContext, globalSoong *GlobalSoongConfig, g
}
if module.EnforceUsesLibraries {
// If the verify_uses_libraries check failed (in this case status file contains a
// non-empty error message), then use "extract" compiler filter to avoid compiling any
// non-empty error message), then use "verify" compiler filter to avoid compiling any
// code (it would be rejected on device because of a class loader context mismatch).
cmd.Text("--compiler-filter=$(if test -s ").
Input(module.EnforceUsesLibrariesStatusFile).
Text(" ; then echo extract ; else echo " + compilerFilter + " ; fi)")
Text(" ; then echo verify ; else echo " + compilerFilter + " ; fi)")
} else {
cmd.FlagWithArg("--compiler-filter=", compilerFilter)
}