diff options
author | Fred Grim <fgrim@apple.com> | 2024-04-18 15:52:05 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-04-18 15:52:05 -0700 |
commit | 23d88a825bf46922333a78dc0ea431b9e54e48c2 (patch) | |
tree | 260abdc75c38c8880b4d97b4e15ba673f37edf49 /llvm | |
parent | 8fb7ddf75fbfc62a91fa163ffb6333edcffab99a (diff) | |
download | llvm-23d88a825bf46922333a78dc0ea431b9e54e48c2.zip llvm-23d88a825bf46922333a78dc0ea431b9e54e48c2.tar.gz llvm-23d88a825bf46922333a78dc0ea431b9e54e48c2.tar.bz2 |
adds conversion functions for EI_OSABI in elf (#89280)
These are needed to populate elf headers in core files. This is part of
implementing process save-core in lldb
Diffstat (limited to 'llvm')
-rw-r--r-- | llvm/include/llvm/BinaryFormat/ELF.h | 6 | ||||
-rw-r--r-- | llvm/lib/BinaryFormat/ELF.cpp | 80 |
2 files changed, 86 insertions, 0 deletions
diff --git a/llvm/include/llvm/BinaryFormat/ELF.h b/llvm/include/llvm/BinaryFormat/ELF.h index ed267c1..56b5d4e 100644 --- a/llvm/include/llvm/BinaryFormat/ELF.h +++ b/llvm/include/llvm/BinaryFormat/ELF.h @@ -1939,6 +1939,12 @@ uint16_t convertArchNameToEMachine(StringRef Arch); /// Convert an ELF's e_machine value into an architecture name. StringRef convertEMachineToArchName(uint16_t EMachine); +/// Convert a OS into ELF's EI_OSABI value. +uint8_t convertOSToOSAbi(StringRef OS); + +/// Convert an ELF's e_machine value into an architecture name. +StringRef convertOSAbiToOS(uint8_t OSAbi); + } // end namespace ELF } // end namespace llvm diff --git a/llvm/lib/BinaryFormat/ELF.cpp b/llvm/lib/BinaryFormat/ELF.cpp index f4cedff..8c10ed1 100644 --- a/llvm/lib/BinaryFormat/ELF.cpp +++ b/llvm/lib/BinaryFormat/ELF.cpp @@ -567,3 +567,83 @@ StringRef ELF::convertEMachineToArchName(uint16_t EMachine) { return "None"; } } + +uint8_t ELF::convertOSToOSAbi(StringRef OS) { + std::string LowerOS = OS.lower(); + return StringSwitch<uint16_t>(LowerOS) + .StartsWith("hpux", ELFOSABI_HPUX) + .StartsWith("netbsd", ELFOSABI_NETBSD) + .StartsWith("linux", ELFOSABI_LINUX) + .StartsWith("hurd", ELFOSABI_HURD) + .StartsWith("solaris", ELFOSABI_SOLARIS) + .StartsWith("aix", ELFOSABI_AIX) + .StartsWith("irix", ELFOSABI_IRIX) + .StartsWith("freebsd", ELFOSABI_FREEBSD) + .StartsWith("tru64", ELFOSABI_TRU64) + .StartsWith("modesto", ELFOSABI_MODESTO) + .StartsWith("openbsd", ELFOSABI_OPENBSD) + .StartsWith("openvms", ELFOSABI_OPENVMS) + .StartsWith("nsk", ELFOSABI_NSK) + .StartsWith("aros", ELFOSABI_AROS) + .StartsWith("fenixos", ELFOSABI_FENIXOS) + .StartsWith("cloudabi", ELFOSABI_CLOUDABI) + .StartsWith("cuda", ELFOSABI_CUDA) + .StartsWith("amdhsa", ELFOSABI_AMDGPU_HSA) + .StartsWith("amdpal", ELFOSABI_AMDGPU_PAL) + .StartsWith("mesa3d", ELFOSABI_AMDGPU_MESA3D) + .StartsWith("arm", ELFOSABI_ARM) + .StartsWith("standalone", ELFOSABI_STANDALONE) + .StartsWith("none", ELFOSABI_NONE) + .Default(ELFOSABI_NONE); +} + +StringRef ELF::convertOSAbiToOS(uint8_t OSAbi) { + switch (OSAbi) { + case ELFOSABI_HPUX: + return "hpux"; + case ELFOSABI_NETBSD: + return "netbsd"; + case ELFOSABI_LINUX: + return "linux"; + case ELFOSABI_HURD: + return "hurd"; + case ELFOSABI_SOLARIS: + return "solaris"; + case ELFOSABI_AIX: + return "aix"; + case ELFOSABI_IRIX: + return "irix"; + case ELFOSABI_FREEBSD: + return "freebsd"; + case ELFOSABI_TRU64: + return "tru64"; + case ELFOSABI_MODESTO: + return "modesto"; + case ELFOSABI_OPENBSD: + return "openbsd"; + case ELFOSABI_OPENVMS: + return "openvms"; + case ELFOSABI_NSK: + return "nsk"; + case ELFOSABI_AROS: + return "aros"; + case ELFOSABI_FENIXOS: + return "fenixos"; + case ELFOSABI_CLOUDABI: + return "cloudabi"; + case ELFOSABI_CUDA: + return "cuda"; + case ELFOSABI_AMDGPU_HSA: + return "amdhsa"; + case ELFOSABI_AMDGPU_PAL: + return "amdpal"; + case ELFOSABI_AMDGPU_MESA3D: + return "mesa3d"; + case ELFOSABI_ARM: + return "arm"; + case ELFOSABI_STANDALONE: + return "standalone"; + default: + return "none"; + } +} |