在arm64 linux中混合64/32位用户空间(使用CONFIG\u COMPAT)

在arm64 linux中混合64/32位用户空间(使用CONFIG\u COMPAT),c,linux,arm64,C,Linux,Arm64,我正在研究ARM64 linux内核中的32位用户空间支持,看起来启用CONFIG_COMPAT可以让我做到这一点 有人能插话说明启用CONFIG_COMPAT是否会禁用64位应用程序的运行吗?我提出这个问题的原因如下: 该文档没有说明两个64/32位应用程序都可以使用相同的内核运行 我查看了fs/compat_binfmt_elf.c #ifdef COMPAT_SET_PERSONALITY #undef SET_PERSONALITY #define SET_PERSONALIT

我正在研究ARM64 linux内核中的32位用户空间支持,看起来启用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)    
    
  • 在kernel/linux-3.14/fs/binfmt_elf.c中调用load_elf_binary()时,会调用SET_PERSONALITY(loc->elf_ex)

  • 那么无效吗,当启用CONFIG_COMPAT时,所有用户空间应用都被强制标记为32位


  • 感谢

    请注意,compat_binfmt_elf.c在最末端包括binfmt_elf.c-它在对全局可见符号进行定义和设置一些重命名后,将binfmt_elf.c代码重新编译到一个附加的对象文件中


    因此,它强制所有在兼容层下运行的应用程序都以32位的方式运行,所有在本机上运行的应用程序都以64位的方式运行。

    那么,您能将我的答案标记为已接受吗?