[llvm] [LLVM] Update CUDA ELF flags for their new ABI (PR #149534)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Jul 21 04:36:21 PDT 2025
================
@@ -73,10 +73,17 @@ checkMachineImpl(const object::ELFObjectFile<ELFT> &ELFObj, uint16_t EMachine) {
EF_AMDGPU_MACH_AMDGCN_GFX9_4_GENERIC)
return createError("Unsupported AMDGPU architecture");
} else if (Header.e_machine == EM_CUDA) {
- if (~Header.e_flags & EF_CUDA_64BIT_ADDRESS)
- return createError("Invalid CUDA addressing mode");
- if ((Header.e_flags & EF_CUDA_SM) < EF_CUDA_SM35)
- return createError("Unsupported NVPTX architecture");
+ if (Header.e_ident[EI_ABIVERSION] != ELFABIVERSION_CUDA_V1) {
+ if (~Header.e_flags & EF_CUDA_64BIT_ADDRESS)
+ return createError("Invalid CUDA addressing mode");
+ if ((Header.e_flags & EF_CUDA_SM) < EF_CUDA_SM35)
+ return createError("Unsupported NVPTX architecture");
+ } else if (Header.e_ident[EI_ABIVERSION] != ELFABIVERSION_CUDA_V2) {
+ if ((Header.e_flags & EF_CUDA_SM) < EF_CUDA_SM100)
+ return createError("Unsupported NVPTX architecture");
+ } else {
+ return createError("Invalid CUDA ABI version");
+ }
----------------
jafudev wrote:
Here I don't understand the reason for flipping the comparison operator to `!=`. If we use `==` instead, then the checks for CUDAv1 are still the old behavior while for CUDAv2 we only check if the architecture if below 100 to create an error. To get the correct SM for CUDAv2 I think we should also change the flag to `EF_CUDA_SM_MASK`.
This way I can pass these checks with sm_120 on my machine. But please correct me if my logic is flawed.
```suggestion
if (Header.e_ident[EI_ABIVERSION] == ELFABIVERSION_CUDA_V1) {
if (~Header.e_flags & EF_CUDA_64BIT_ADDRESS)
return createError("Invalid CUDA addressing mode");
if ((Header.e_flags & EF_CUDA_SM) < EF_CUDA_SM35)
return createError("Unsupported NVPTX architecture");
} else if (Header.e_ident[EI_ABIVERSION] == ELFABIVERSION_CUDA_V2) {
if ((Header.e_flags & EF_CUDA_SM_MASK) < EF_CUDA_SM100)
return createError("Unsupported NVPTX architecture");
} else {
return createError("Invalid CUDA ABI version");
}
```
https://github.com/llvm/llvm-project/pull/149534
More information about the llvm-commits
mailing list