From 1fe21bd1b6ca8b94c78fbf3666a1e8e0472355de Mon Sep 17 00:00:00 2001 From: Nick Kralevich Date: Fri, 15 Mar 2013 11:38:29 -0700 Subject: Never call app_main more than once Different kernels seem to handle ADDR_COMPAT_LAYOUT differently, sometimes passing it to its children, sometimes not. If it's not passed to its child successfully, we can end up in a restart loop. Instead of testing for the presence of ADDR_COMPAT_LAYOUT, use an environment variable instead, which is handled more predictably. Bug: 8392487 Change-Id: Ia531dd2abb4e1cd46f3430d844e644f53581f530 --- cmds/app_process/app_main.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/cmds/app_process/app_main.cpp b/cmds/app_process/app_main.cpp index b54774ee18f0..80df56873a3a 100644 --- a/cmds/app_process/app_main.cpp +++ b/cmds/app_process/app_main.cpp @@ -12,10 +12,10 @@ #include #include #include -#include #include #include +#include #include #include @@ -144,12 +144,11 @@ 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) { + if (getenv("NO_ADDR_COMPAT_LAYOUT_FIXUP") == NULL) { int current = personality(0xFFFFFFFF); if ((current & ADDR_COMPAT_LAYOUT) == 0) { personality(current | ADDR_COMPAT_LAYOUT); + setenv("NO_ADDR_COMPAT_LAYOUT_FIXUP", "1", 1); execv("/system/bin/app_process", argv); return -1; } -- cgit v1.2.3-59-g8ed1b