Skip to content

Commit 23d88a8

Browse files
authored
adds conversion functions for EI_OSABI in elf (llvm#89280)
These are needed to populate elf headers in core files. This is part of implementing process save-core in lldb
1 parent 8fb7ddf commit 23d88a8

File tree

2 files changed

+86
-0
lines changed

2 files changed

+86
-0
lines changed

llvm/include/llvm/BinaryFormat/ELF.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1939,6 +1939,12 @@ uint16_t convertArchNameToEMachine(StringRef Arch);
19391939
/// Convert an ELF's e_machine value into an architecture name.
19401940
StringRef convertEMachineToArchName(uint16_t EMachine);
19411941

1942+
/// Convert a OS into ELF's EI_OSABI value.
1943+
uint8_t convertOSToOSAbi(StringRef OS);
1944+
1945+
/// Convert an ELF's e_machine value into an architecture name.
1946+
StringRef convertOSAbiToOS(uint8_t OSAbi);
1947+
19421948
} // end namespace ELF
19431949
} // end namespace llvm
19441950

llvm/lib/BinaryFormat/ELF.cpp

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -567,3 +567,83 @@ StringRef ELF::convertEMachineToArchName(uint16_t EMachine) {
567567
return "None";
568568
}
569569
}
570+
571+
uint8_t ELF::convertOSToOSAbi(StringRef OS) {
572+
std::string LowerOS = OS.lower();
573+
return StringSwitch<uint16_t>(LowerOS)
574+
.StartsWith("hpux", ELFOSABI_HPUX)
575+
.StartsWith("netbsd", ELFOSABI_NETBSD)
576+
.StartsWith("linux", ELFOSABI_LINUX)
577+
.StartsWith("hurd", ELFOSABI_HURD)
578+
.StartsWith("solaris", ELFOSABI_SOLARIS)
579+
.StartsWith("aix", ELFOSABI_AIX)
580+
.StartsWith("irix", ELFOSABI_IRIX)
581+
.StartsWith("freebsd", ELFOSABI_FREEBSD)
582+
.StartsWith("tru64", ELFOSABI_TRU64)
583+
.StartsWith("modesto", ELFOSABI_MODESTO)
584+
.StartsWith("openbsd", ELFOSABI_OPENBSD)
585+
.StartsWith("openvms", ELFOSABI_OPENVMS)
586+
.StartsWith("nsk", ELFOSABI_NSK)
587+
.StartsWith("aros", ELFOSABI_AROS)
588+
.StartsWith("fenixos", ELFOSABI_FENIXOS)
589+
.StartsWith("cloudabi", ELFOSABI_CLOUDABI)
590+
.StartsWith("cuda", ELFOSABI_CUDA)
591+
.StartsWith("amdhsa", ELFOSABI_AMDGPU_HSA)
592+
.StartsWith("amdpal", ELFOSABI_AMDGPU_PAL)
593+
.StartsWith("mesa3d", ELFOSABI_AMDGPU_MESA3D)
594+
.StartsWith("arm", ELFOSABI_ARM)
595+
.StartsWith("standalone", ELFOSABI_STANDALONE)
596+
.StartsWith("none", ELFOSABI_NONE)
597+
.Default(ELFOSABI_NONE);
598+
}
599+
600+
StringRef ELF::convertOSAbiToOS(uint8_t OSAbi) {
601+
switch (OSAbi) {
602+
case ELFOSABI_HPUX:
603+
return "hpux";
604+
case ELFOSABI_NETBSD:
605+
return "netbsd";
606+
case ELFOSABI_LINUX:
607+
return "linux";
608+
case ELFOSABI_HURD:
609+
return "hurd";
610+
case ELFOSABI_SOLARIS:
611+
return "solaris";
612+
case ELFOSABI_AIX:
613+
return "aix";
614+
case ELFOSABI_IRIX:
615+
return "irix";
616+
case ELFOSABI_FREEBSD:
617+
return "freebsd";
618+
case ELFOSABI_TRU64:
619+
return "tru64";
620+
case ELFOSABI_MODESTO:
621+
return "modesto";
622+
case ELFOSABI_OPENBSD:
623+
return "openbsd";
624+
case ELFOSABI_OPENVMS:
625+
return "openvms";
626+
case ELFOSABI_NSK:
627+
return "nsk";
628+
case ELFOSABI_AROS:
629+
return "aros";
630+
case ELFOSABI_FENIXOS:
631+
return "fenixos";
632+
case ELFOSABI_CLOUDABI:
633+
return "cloudabi";
634+
case ELFOSABI_CUDA:
635+
return "cuda";
636+
case ELFOSABI_AMDGPU_HSA:
637+
return "amdhsa";
638+
case ELFOSABI_AMDGPU_PAL:
639+
return "amdpal";
640+
case ELFOSABI_AMDGPU_MESA3D:
641+
return "mesa3d";
642+
case ELFOSABI_ARM:
643+
return "arm";
644+
case ELFOSABI_STANDALONE:
645+
return "standalone";
646+
default:
647+
return "none";
648+
}
649+
}

0 commit comments

Comments
 (0)