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

@ -85,7 +85,7 @@ type GlobalConfig struct {
Dex2oatImageXmx string // max heap size for dex2oat for the boot image Dex2oatImageXmx string // max heap size for dex2oat for the boot image
Dex2oatImageXms string // initial heap size for dex2oat for the boot image Dex2oatImageXms string // initial heap size for dex2oat for the boot image
// If true, downgrade the compiler filter of dexpreopt to "extract" when verify_uses_libraries // If true, downgrade the compiler filter of dexpreopt to "verify" when verify_uses_libraries
// check fails, instead of failing the build. This will disable any AOT-compilation. // check fails, instead of failing the build. This will disable any AOT-compilation.
// //
// The intended use case for this flag is to have a smoother migration path for the Java // The intended use case for this flag is to have a smoother migration path for the Java

View file

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