aboutsummaryrefslogtreecommitdiff
path: root/llvm
diff options
context:
space:
mode:
authorFred Grim <fgrim@apple.com>2024-04-18 15:52:05 -0700
committerGitHub <noreply@github.com>2024-04-18 15:52:05 -0700
commit23d88a825bf46922333a78dc0ea431b9e54e48c2 (patch)
tree260abdc75c38c8880b4d97b4e15ba673f37edf49 /llvm
parent8fb7ddf75fbfc62a91fa163ffb6333edcffab99a (diff)
downloadllvm-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.h6
-rw-r--r--llvm/lib/BinaryFormat/ELF.cpp80
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";
+ }
+}