x32 ABIをサポートするLinux 6.7.2をコンパイルしようとしていますが、これが何を意味するのかわかりません。
Symbol: X86_X32_ABI [=n]
Type : bool
Defined at arch/x86/Kconfig:3007
Prompt: x32 ABI for 64-bit mode
Depends on: X86_64 [=y] && n
Location:
(3) -> Binary Emulations
-> x32 ABI for 64-bit mode (X86_X32_ABI [=n])
実際にこのオプションを有効にするには、n
inをどのように削除する必要がありますか?X86_64 [=y] && n
ベストアンサー1
参照位置:アーチ/x86/Kconfig:3007:
config X86_X32_ABI bool "x32 ABI for 64-bit mode" depends on X86_64 # llvm-objcopy does not convert x86_64 .note.gnu.property or # compressed debug sections to x86_x32 properly: # https://github.com/ClangBuiltLinux/linux/issues/514 # https://github.com/ClangBuiltLinux/linux/issues/1141 depends on $(success,$(OBJCOPY) --version | head -n1 | grep -qv llvm) help [...]
objcopyのLLVMバリアント(「一般的な」GNUバリアントではない)が、一部のオブジェクトをx86_64からx86_x32に正しく変換しないことを示しています。
したがって、このような事態を防ぐために、環境に応じたテストが追加されました。
通常、(GNU)はobjcopy
次のように始まります。
$ objcopy --version | head -n1
GNU objcopy (GNU Binutils for Debian) 2.40
LLVMは次のように起動します。
$ llvm-objcopy --version | head -n1
llvm-objcopy, compatible with GNU objcopy
success
上記はマクロです。これはLinuxソースコードで定義されています。:
[...]
if-success = $(shell,{ $(1); } >/dev/null 2>&1 && echo "$(2)" || echo "$(3)") # $(success,<command>) # Return y if <command> exits with 0, n otherwise success = $(if-success,$(1),y,n)
n
これはすべて、LLVMバリアントを使用するときobjcopy
、依存関係が失敗したとき、および評価するとき(現在はGNUバリアントを使用する必要があることを意味します)y
達成されます$(OBJCOPY) --version | head -n1 | grep -qv llvm
。
もう1つの注意:x86_x32 ABIサポートは、現在Clang / LLVMにコンパイルするときは使用できません。代わりにGCCを使用してください。