[llvm-cvtres] Add support for ARM64

Also change some default cases into llvm_unreachable in
WindowsResourceCOFFWriter, to make it easier to find if they
are triggerd from within e.g. lld, which supported ARM64 earlier
than llvm-cvtres did.

Differential Revision: https://reviews.llvm.org/D39892

llvm-svn: 317942
This commit is contained in:
Martin Storsjo
2017-11-10 22:27:41 +00:00
parent 6b4a625438
commit ba664c1d04
3 changed files with 24 additions and 14 deletions

View File

@@ -441,19 +441,7 @@ std::unique_ptr<MemoryBuffer> WindowsResourceCOFFWriter::write() {
void WindowsResourceCOFFWriter::writeCOFFHeader() {
// Write the COFF header.
auto *Header = reinterpret_cast<coff_file_header *>(BufferStart);
switch (MachineType) {
case COFF::IMAGE_FILE_MACHINE_ARMNT:
Header->Machine = COFF::IMAGE_FILE_MACHINE_ARMNT;
break;
case COFF::IMAGE_FILE_MACHINE_AMD64:
Header->Machine = COFF::IMAGE_FILE_MACHINE_AMD64;
break;
case COFF::IMAGE_FILE_MACHINE_I386:
Header->Machine = COFF::IMAGE_FILE_MACHINE_I386;
break;
default:
Header->Machine = COFF::IMAGE_FILE_MACHINE_UNKNOWN;
}
Header->Machine = MachineType;
Header->NumberOfSections = 2;
Header->TimeDateStamp = getTime();
Header->PointerToSymbolTable = SymbolTableOffset;
@@ -714,8 +702,11 @@ void WindowsResourceCOFFWriter::writeFirstSectionRelocations() {
case COFF::IMAGE_FILE_MACHINE_I386:
Reloc->Type = COFF::IMAGE_REL_I386_DIR32NB;
break;
case COFF::IMAGE_FILE_MACHINE_ARM64:
Reloc->Type = COFF::IMAGE_REL_ARM64_ADDR32NB;
break;
default:
Reloc->Type = 0;
llvm_unreachable("unknown machine type");
}
CurrentOffset += sizeof(coff_relocation);
}