Смешивание 64/32-битного пространства пользователя в arm64 linux (с использованием CONFIG_COMPAT)
Я смотрю на поддержку 32-битного пользовательского пространства в ядрах ARM64 Linux, и похоже, что включение CONFIG_COMPAT позволило бы мне это сделать.
Кто-нибудь может подсказать, будет ли включение CONFIG_COMPAT ОТКЛЮЧИТЬ запуск 64-битных приложений? Я спрашиваю об этом по следующим причинам:
- В документации не указано, что оба 64/32-битных приложения могут работать с одним и тем же ядром.
Я посмотрел на fs / compat_binfmt_elf.c
#ifdef COMPAT_SET_PERSONALITY #undef SET_PERSONALITY #define SET_PERSONALITY COMPAT_SET_PERSONALITY #endif
Это, кажется, заставляет нить личности
set_thread_flag(TIF_32BIT)
Когда load_elf_binary() в kernel/linux-3.14/fs/binfmt_elf.c вызывается, происходит вызов SET_PERSONALITY(loc->elf_ex);
Таким образом, не влияет, когда CONFIG_COMPAT включен, все приложения пользовательского пространства принудительно помечены как 32-битные?
Спасибо
1 ответ
Обратите внимание, что compat_binfmt_elf.c включает в себя binfmt_elf.c в самом конце - он перекомпилирует код binfmt_elf.c в дополнительный объектный файл, после того как juggled определяет и настраивает некоторое переименование для глобально видимых символов.
Таким образом, все приложения, работающие на уровне Compat, запускаются как 32-разрядные, а все приложения, работающие изначально, как 64-разрядные.