Lines Matching full:coff
10 // This file contains an implementation of a Win32 COFF object file writer.
29 #include "llvm/Support/COFF.h"
40 typedef SmallString<COFF::NameSize> name;
52 COFF::Auxiliary Aux;
60 COFF::symbol Data;
80 // This class contains staging data for a COFF relocation entry.
82 COFF::relocation Data;
86 static size_t size() { return COFF::RelocationSize; }
93 COFF::section Header;
105 // This class holds the COFF string table.
131 COFF::header Header;
162 void WriteFileHeader(const COFF::header &Header);
165 void WriteSectionHeader(const COFF::section &S);
166 void WriteRelocation(const COFF::relocation &R);
203 return COFF::SymbolSize + (Data.NumberOfAuxSymbols * COFF::SymbolSize);
253 return COFF::SectionSize;
340 /// and creates the associated COFF section staging object.
343 && "Got non-COFF section in the COFF backend!");
350 if (Sec.getSelection() != COFF::IMAGE_COMDAT_SELECT_ASSOCIATIVE) {
361 coff_symbol->Data.StorageClass = COFF::IMAGE_SYM_CLASS_STATIC;
373 case 1: Characteristics |= COFF::IMAGE_SCN_ALIGN_1BYTES; break;
374 case 2: Characteristics |= COFF::IMAGE_SCN_ALIGN_2BYTES; break;
375 case 4: Characteristics |= COFF::IMAGE_SCN_ALIGN_4BYTES; break;
376 case 8: Characteristics |= COFF::IMAGE_SCN_ALIGN_8BYTES; break;
377 case 16: Characteristics |= COFF::IMAGE_SCN_ALIGN_16BYTES; break;
378 case 32: Characteristics |= COFF::IMAGE_SCN_ALIGN_32BYTES; break;
379 case 64: Characteristics |= COFF::IMAGE_SCN_ALIGN_64BYTES; break;
380 case 128: Characteristics |= COFF::IMAGE_SCN_ALIGN_128BYTES; break;
381 case 256: Characteristics |= COFF::IMAGE_SCN_ALIGN_256BYTES; break;
382 case 512: Characteristics |= COFF::IMAGE_SCN_ALIGN_512BYTES; break;
383 case 1024: Characteristics |= COFF::IMAGE_SCN_ALIGN_1024BYTES; break;
384 case 2048: Characteristics |= COFF::IMAGE_SCN_ALIGN_2048BYTES; break;
385 case 4096: Characteristics |= COFF::IMAGE_SCN_ALIGN_4096BYTES; break;
386 case 8192: Characteristics |= COFF::IMAGE_SCN_ALIGN_8192BYTES; break;
391 // Bind internal COFF section to MC section.
409 /// and creates the associated COFF symbol staging object.
417 if (SymbolData.getFlags() & COFF::SF_WeakExternal) {
418 coff_symbol->Data.StorageClass = COFF::IMAGE_SYM_CLASS_WEAK_EXTERNAL;
433 WeakDefault->Data.SectionNumber = COFF::IMAGE_SYM_ABSOLUTE;
434 WeakDefault->Data.StorageClass = COFF::IMAGE_SYM_CLASS_EXTERNAL;
446 COFF::IMAGE_WEAK_EXTERN_SEARCH_LIBRARY;
462 external ? COFF::IMAGE_SYM_CLASS_EXTERNAL : COFF::IMAGE_SYM_CLASS_STATIC;
466 coff_symbol->Data.SectionNumber = COFF::IMAGE_SYM_ABSOLUTE;
514 if (S.Name.size() > COFF::NameSize) {
529 report_fatal_error("COFF string table is greater than 64 GB.");
540 if (S.Name.size() > COFF::NameSize) {
563 & COFF::IMAGE_SCN_CNT_UNINITIALIZED_DATA) == 0;
569 void WinCOFFObjectWriter::WriteFileHeader(const COFF::header &Header) {
580 WriteBytes(StringRef(S.Data.Name, COFF::NameSize));
630 void WinCOFFObjectWriter::WriteSectionHeader(const COFF::section &S) {
631 WriteBytes(StringRef(S.Name, COFF::NameSize));
644 void WinCOFFObjectWriter::WriteRelocation(const COFF::relocation &R) {
658 static_assert(sizeof(((COFF::AuxiliaryFile *)nullptr)->FileName) == COFF::SymbolSize,
659 "size mismatch for COFF::AuxiliaryFile::FileName");
663 unsigned Count = (FI->size() + COFF::SymbolSize - 1) / COFF::SymbolSize;
666 file->Data.SectionNumber = COFF::IMAGE_SYM_DEBUG;
667 file->Data.StorageClass = COFF::IMAGE_SYM_CLASS_FILE;
675 if (Length > COFF::SymbolSize) {
676 memcpy(Aux.Aux.File.FileName, FI->c_str() + Offset, COFF::SymbolSize);
677 Length = Length - COFF::SymbolSize;
680 memset(&Aux.Aux.File.FileName[Length], 0, COFF::SymbolSize - Length);
684 Offset = Offset + COFF::SymbolSize;
781 if ((Header.Machine == COFF::IMAGE_FILE_MACHINE_AMD64 &&
782 Reloc.Data.Type == COFF::IMAGE_REL_AMD64_REL32) ||
783 (Header.Machine == COFF::IMAGE_FILE_MACHINE_I386 &&
784 Reloc.Data.Type == COFF::IMAGE_REL_I386_REL32))
787 if (Header.Machine == COFF::IMAGE_FILE_MACHINE_ARMNT) {
789 case COFF::IMAGE_REL_ARM_ABSOLUTE:
790 case COFF::IMAGE_REL_ARM_ADDR32:
791 case COFF::IMAGE_REL_ARM_ADDR32NB:
792 case COFF::IMAGE_REL_ARM_TOKEN:
793 case COFF::IMAGE_REL_ARM_SECTION:
794 case COFF::IMAGE_REL_ARM_SECREL:
796 case COFF::IMAGE_REL_ARM_BRANCH11:
797 case COFF::IMAGE_REL_ARM_BLX11:
801 case COFF::IMAGE_REL_ARM_BRANCH24:
802 case COFF::IMAGE_REL_ARM_BLX24:
803 case COFF::IMAGE_REL_ARM_MOV32A:
811 case COFF::IMAGE_REL_ARM_MOV32T:
813 case COFF::IMAGE_REL_ARM_BRANCH20T:
814 case COFF::IMAGE_REL_ARM_BRANCH24T:
815 case COFF::IMAGE_REL_ARM_BLX23T:
872 COFF::IMAGE_COMDAT_SELECT_ASSOCIATIVE)
896 // Assign file offsets to COFF object file structures.
900 offset += COFF::HeaderSize;
901 offset += COFF::SectionSize * Header.NumberOfSections;
931 offset += COFF::RelocationSize;
934 offset += COFF::RelocationSize * Sec->Relocations.size();
969 Section->Header.Characteristics |= COFF::IMAGE_SCN_LNK_NRELOC_OVFL;
995 COFF::relocation r;