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])

실제로 이 옵션을 활성화하려면 nin을 어떻게 제거해야 합니까 ?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.

또 다른 참고 사항: x86_x32 ABI 지원은 현재 Clang/LLVM으로 컴파일할 때 사용할 수 없습니다. 대신 GCC를 사용하세요.

관련 정보