我正在研究ARM64 linux内核中的32位用户空间支持,看起来启用CONFIG_COMPAT会让我这样做。
是否有人能够了解启用CONFIG_COMPAT是否会禁用64位应用程序的运行?我问这个原因有以下几点:
我看了一下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位?
由于
答案 0 :(得分:1)
请注意,compat_binfmt_elf.c最后包含binfmt_elf.c - 在将juggled定义并为全局可见符号设置一些重命名后,它会将binfmt_elf.c代码重新编译为另一个目标文件。
因此它强制在compat层下运行的所有应用程序以32位运行,并且所有本机运行的应用程序以64位运行。