diff options
author | Jacek Caban <jacek@codeweavers.com> | 2023-04-21 15:32:07 +0300 |
---|---|---|
committer | Martin Storsjö <martin@martin.st> | 2023-04-21 15:46:20 +0300 |
commit | cea5d2870f379e7f93ba9da01747a279e4225998 (patch) | |
tree | cb7aef44a3ed7066ddba72a4ffd653fce1ea80ec /llvm/lib/Object/COFFObjectFile.cpp | |
parent | 85a2c50ec4979b87267e4f2068f2921beb0b98f2 (diff) | |
download | llvm-cea5d2870f379e7f93ba9da01747a279e4225998.zip llvm-cea5d2870f379e7f93ba9da01747a279e4225998.tar.gz llvm-cea5d2870f379e7f93ba9da01747a279e4225998.tar.bz2 |
[llvm-lib] [llvm-readobj] [llvm-cvtres] Add Support for ARM64X object files.
Similar to D125411, but for ARM64X.
ARM64X PE binaries are hybrids containing both ARM64EC and pure ARM64
variants in one file. They are usually linked by passing separate
ARM64EC and ARM64 object files to linker. Linked binaries use ARM64
machine and contain additional CHPE metadata in their load config.
CHPE metadata support is not part of this patch, I plan to send that later.
Using ARM64X as a machine type of object files themselves is somewhat
ambiguous, but such files are allowed by MSVC. It treats them as ARM64
or ARM64EC object, depending on the context. Such objects can be
produced with cvtres.exe -machine:arm64x.
Reviewed By: efriedma
Differential Revision: https://reviews.llvm.org/D148517
Diffstat (limited to 'llvm/lib/Object/COFFObjectFile.cpp')
-rw-r--r-- | llvm/lib/Object/COFFObjectFile.cpp | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/llvm/lib/Object/COFFObjectFile.cpp b/llvm/lib/Object/COFFObjectFile.cpp index 726e255..1b7ab45 100644 --- a/llvm/lib/Object/COFFObjectFile.cpp +++ b/llvm/lib/Object/COFFObjectFile.cpp @@ -1016,6 +1016,8 @@ StringRef COFFObjectFile::getFileFormatName() const { return "COFF-ARM64"; case COFF::IMAGE_FILE_MACHINE_ARM64EC: return "COFF-ARM64EC"; + case COFF::IMAGE_FILE_MACHINE_ARM64X: + return "COFF-ARM64X"; default: return "COFF-<unknown arch>"; } @@ -1031,6 +1033,7 @@ Triple::ArchType COFFObjectFile::getArch() const { return Triple::thumb; case COFF::IMAGE_FILE_MACHINE_ARM64: case COFF::IMAGE_FILE_MACHINE_ARM64EC: + case COFF::IMAGE_FILE_MACHINE_ARM64X: return Triple::aarch64; default: return Triple::UnknownArch; @@ -1318,6 +1321,7 @@ StringRef COFFObjectFile::getRelocationTypeName(uint16_t Type) const { break; case COFF::IMAGE_FILE_MACHINE_ARM64: case COFF::IMAGE_FILE_MACHINE_ARM64EC: + case COFF::IMAGE_FILE_MACHINE_ARM64X: switch (Type) { LLVM_COFF_SWITCH_RELOC_TYPE_NAME(IMAGE_REL_ARM64_ABSOLUTE); LLVM_COFF_SWITCH_RELOC_TYPE_NAME(IMAGE_REL_ARM64_ADDR32); @@ -1901,6 +1905,7 @@ ResourceSectionRef::getContents(const coff_resource_data_entry &Entry) { break; case COFF::IMAGE_FILE_MACHINE_ARM64: case COFF::IMAGE_FILE_MACHINE_ARM64EC: + case COFF::IMAGE_FILE_MACHINE_ARM64X: RVAReloc = COFF::IMAGE_REL_ARM64_ADDR32NB; break; default: |