Kconfig 中的“&& n”是什么意思?

Kconfig 中的“&& n”是什么意思?

我正在尝试编译支持 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])

我如何摆脱ninX86_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、失败依赖关系以及y评估 时(当前应该意味着使用 GNU 变体)时得到的结果$(OBJCOPY) --version | head -n1 | grep -qv llvm

另有说明:目前使用 Clang/LLVM 编译时无法获得 x86_x32 ABI 支持:请改用 GCC。

相关内容