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

Commit 5fa1ee77 authored by Nick Kralevich's avatar Nick Kralevich
Browse files

Don't use ADDR_COMPAT_LAYOUT on the emulator

For the emulator, we want people to see memory as it
actually is, not how we're hacking around buggy apps. Don't
set ADDR_COMPAT_LAYOUT on the emulator.

For reasons that I don't understand, personality(ADDR_COMPAT_LAYOUT)
does not persist across an exec on the emulator. app_main gets
into a tight loop restarting itself because of this. This change
also works around that bug.

Change-Id: Ia73a7d2d623c25cf39d248145d97307945d554da
parent f732108e
Loading
Loading
Loading
Loading
+10 −5
Original line number Diff line number Diff line
@@ -12,6 +12,7 @@
#include <utils/Log.h>
#include <cutils/process_name.h>
#include <cutils/memory.h>
#include <cutils/properties.h>
#include <android_runtime/AndroidRuntime.h>
#include <sys/personality.h>

@@ -143,12 +144,16 @@ int main(int argc, char* const argv[])
     * This breaks some programs which improperly embed
     * an out of date copy of Android's linker.
     */
    char value[PROPERTY_VALUE_MAX];
    property_get("ro.kernel.qemu", value, "");
    if (strcmp(value, "1") != 0) {
        int current = personality(0xFFFFFFFF);
        if ((current & ADDR_COMPAT_LAYOUT) == 0) {
            personality(current | ADDR_COMPAT_LAYOUT);
            execv("/system/bin/app_process", argv);
            return -1;
        }
    }
#endif

    // These are global variables in ProcessState.cpp