Смешивание 64/32-битного пространства пользователя в arm64 linux (с использованием CONFIG_COMPAT)

Я смотрю на поддержку 32-битного пользовательского пространства в ядрах ARM64 Linux, и похоже, что включение CONFIG_COMPAT позволило бы мне это сделать.

Кто-нибудь может подсказать, будет ли включение CONFIG_COMPAT ОТКЛЮЧИТЬ запуск 64-битных приложений? Я спрашиваю об этом по следующим причинам:

  1. В документации не указано, что оба 64/32-битных приложения могут работать с одним и тем же ядром.
  2. Я посмотрел на fs / compat_binfmt_elf.c

    #ifdef   COMPAT_SET_PERSONALITY
    #undef   SET_PERSONALITY
    #define  SET_PERSONALITY      COMPAT_SET_PERSONALITY
    #endif
    

    Это, кажется, заставляет нить личности

    set_thread_flag(TIF_32BIT)    
    
  3. Когда load_elf_binary() в kernel/linux-3.14/fs/binfmt_elf.c вызывается, происходит вызов SET_PERSONALITY(loc->elf_ex);

  4. Таким образом, не влияет, когда CONFIG_COMPAT включен, все приложения пользовательского пространства принудительно помечены как 32-битные?

Спасибо

1 ответ

Обратите внимание, что compat_binfmt_elf.c включает в себя binfmt_elf.c в самом конце - он перекомпилирует код binfmt_elf.c в дополнительный объектный файл, после того как juggled определяет и настраивает некоторое переименование для глобально видимых символов.

Таким образом, все приложения, работающие на уровне Compat, запускаются как 32-разрядные, а все приложения, работающие изначально, как 64-разрядные.

Другие вопросы по тегам