Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 44c4db1b authored by Songchun Fan's avatar Songchun Fan
Browse files

[am] respect ABI override when selecting ISA for new process

When starting a new process, we used to ignore the value of abi override.
This caused issues like b/169261423, when the abi override specified 32-bit,
but the new process was still running as 64-bit. This CL fixes that.

BUG: 169261423
BUG: 73555088
Test: (with ag/12720566 reverted)
Test: atest CtsAbiOverrideHostTestCases
Test: atest android.view.cts.ASurfaceControlTest#testSurfaceTransaction_setColorAndBuffer_bufferAlpha_0_5 -- --abi=armeabi-v7a
Test: atest android.extractnativelibs.cts.CtsExtractNativeLibsHostTestAbiOverride
Change-Id: I99a3c691c58948d6070c6ed9f81be746f492b84f
parent 83aefc5e
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -1918,7 +1918,9 @@ public final class ProcessList {

            String instructionSet = null;
            if (app.info.primaryCpuAbi != null) {
                instructionSet = VMRuntime.getInstructionSet(app.info.primaryCpuAbi);
                // If ABI override is specified, use the isa derived from the value of ABI override.
                // Otherwise, use the isa derived from primary ABI
                instructionSet = VMRuntime.getInstructionSet(requiredAbi);
            }

            app.gids = gids;
@@ -1927,7 +1929,7 @@ public final class ProcessList {

            // If instructionSet is non-null, this indicates that the system_server is spawning a
            // process with an ISA that may be different from its own. System (kernel and hardware)
            // compatililty for these features is checked in the decideTaggingLevel in the
            // compatibility for these features is checked in the decideTaggingLevel in the
            // system_server process (not the child process). As both MTE and TBI are only supported
            // in aarch64, we can simply ensure that the new process is also aarch64. This prevents
            // the mismatch where a 64-bit system server spawns a 32-bit child that thinks it should