Skip to content

Commit 433498c

Browse files
authored
[llvm-readobj] Print the associated CUDA SM flags (#75664)
Summary: The architecture that the CUDA application was compiled for is stored in the ELF flags. This patch just adds some simple enum values to indicate this to the user in a readable way.
1 parent 7e4ae28 commit 433498c

File tree

1 file changed

+19
-0
lines changed

1 file changed

+19
-0
lines changed

llvm/tools/llvm-readobj/ELFDumper.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1693,6 +1693,19 @@ const EnumEntry<unsigned> ElfHeaderAMDGPUFlagsABIVersion4[] = {
16931693
LLVM_READOBJ_ENUM_ENT(ELF, EF_AMDGPU_FEATURE_SRAMECC_ON_V4),
16941694
};
16951695

1696+
const EnumEntry<unsigned> ElfHeaderNVPTXFlags[] = {
1697+
ENUM_ENT(EF_CUDA_SM20, "sm_20"), ENUM_ENT(EF_CUDA_SM21, "sm_21"),
1698+
ENUM_ENT(EF_CUDA_SM30, "sm_30"), ENUM_ENT(EF_CUDA_SM32, "sm_32"),
1699+
ENUM_ENT(EF_CUDA_SM35, "sm_35"), ENUM_ENT(EF_CUDA_SM37, "sm_37"),
1700+
ENUM_ENT(EF_CUDA_SM50, "sm_50"), ENUM_ENT(EF_CUDA_SM52, "sm_52"),
1701+
ENUM_ENT(EF_CUDA_SM53, "sm_53"), ENUM_ENT(EF_CUDA_SM60, "sm_60"),
1702+
ENUM_ENT(EF_CUDA_SM61, "sm_61"), ENUM_ENT(EF_CUDA_SM62, "sm_62"),
1703+
ENUM_ENT(EF_CUDA_SM70, "sm_70"), ENUM_ENT(EF_CUDA_SM72, "sm_72"),
1704+
ENUM_ENT(EF_CUDA_SM75, "sm_75"), ENUM_ENT(EF_CUDA_SM80, "sm_80"),
1705+
ENUM_ENT(EF_CUDA_SM86, "sm_86"), ENUM_ENT(EF_CUDA_SM87, "sm_87"),
1706+
ENUM_ENT(EF_CUDA_SM89, "sm_89"), ENUM_ENT(EF_CUDA_SM90, "sm_90"),
1707+
};
1708+
16961709
const EnumEntry<unsigned> ElfHeaderRISCVFlags[] = {
16971710
ENUM_ENT(EF_RISCV_RVC, "RVC"),
16981711
ENUM_ENT(EF_RISCV_FLOAT_ABI_SINGLE, "single-float ABI"),
@@ -3630,6 +3643,9 @@ template <class ELFT> void GNUELFDumper<ELFT>::printFileHeaders() {
36303643
else if (e.e_machine == EM_XTENSA)
36313644
ElfFlags = printFlags(e.e_flags, ArrayRef(ElfHeaderXtensaFlags),
36323645
unsigned(ELF::EF_XTENSA_MACH));
3646+
else if (e.e_machine == EM_CUDA)
3647+
ElfFlags = printFlags(e.e_flags, ArrayRef(ElfHeaderNVPTXFlags),
3648+
unsigned(ELF::EF_CUDA_SM));
36333649
Str = "0x" + utohexstr(e.e_flags);
36343650
if (!ElfFlags.empty())
36353651
Str = Str + ", " + ElfFlags;
@@ -6912,6 +6928,9 @@ template <class ELFT> void LLVMELFDumper<ELFT>::printFileHeaders() {
69126928
else if (E.e_machine == EM_XTENSA)
69136929
W.printFlags("Flags", E.e_flags, ArrayRef(ElfHeaderXtensaFlags),
69146930
unsigned(ELF::EF_XTENSA_MACH));
6931+
else if (E.e_machine == EM_CUDA)
6932+
W.printFlags("Flags", E.e_flags, ArrayRef(ElfHeaderNVPTXFlags),
6933+
unsigned(ELF::EF_CUDA_SM));
69156934
else
69166935
W.printFlags("Flags", E.e_flags);
69176936
W.printNumber("HeaderSize", E.e_ehsize);

0 commit comments

Comments
 (0)