aboutsummaryrefslogtreecommitdiffstats
path: root/linker/linker.cpp
diff options
context:
space:
mode:
authorDmitriy Ivanov <dimitry@google.com>2015-01-07 15:05:49 -0800
committerDmitriy Ivanov <dimitry@google.com>2015-01-07 16:32:05 -0800
commitbfa15e464ecfb43d93e468f166d91e4e6265f300 (patch)
tree4e6d54ea790dcac6fe2f9fabae686ed65d5d5636 /linker/linker.cpp
parentd3de1ddef1427708581af4df02943486783f980d (diff)
downloadandroid_bionic-bfa15e464ecfb43d93e468f166d91e4e6265f300.tar.gz
android_bionic-bfa15e464ecfb43d93e468f166d91e4e6265f300.tar.bz2
android_bionic-bfa15e464ecfb43d93e468f166d91e4e6265f300.zip
Set linux 32bit personality for 32 bit processes
Bug: 18069809 Change-Id: Ie143d56b0f8f03510dc451649291067e1add1d2f
Diffstat (limited to 'linker/linker.cpp')
-rw-r--r--linker/linker.cpp7
1 files changed, 7 insertions, 0 deletions
diff --git a/linker/linker.cpp b/linker/linker.cpp
index babefeb3c..b8a88004d 100644
--- a/linker/linker.cpp
+++ b/linker/linker.cpp
@@ -36,6 +36,7 @@
#include <string.h>
#include <sys/mman.h>
#include <sys/param.h>
+#include <sys/personality.h>
#include <unistd.h>
#include <new>
@@ -2663,6 +2664,12 @@ static ElfW(Addr) __linker_init_post_relocation(KernelArgumentBlock& args, ElfW(
ldpreload_env = linker_env_get("LD_PRELOAD");
}
+#if !defined(__LP64__)
+ if (personality(PER_LINUX32) == -1) {
+ __libc_fatal("error setting PER_LINUX32 personality: %s", strerror(errno));
+ }
+#endif
+
INFO("[ android linker & debugger ]");
soinfo* si = soinfo_alloc(args.argv[0], nullptr, 0, RTLD_GLOBAL);