Home | History | Annotate | Download | only in MC

Lines Matching full:coff

10 // This file contains an implementation of a Win32 COFF object file writer.
32 #include "llvm/Support/COFF.h"
46 typedef SmallString<COFF::NameSize> name;
58 COFF::Auxiliary Aux;
66 COFF::symbol Data;
90 // This class contains staging data for a COFF relocation entry.
92 COFF::relocation Data;
96 static size_t size() { return COFF::RelocationSize; }
103 COFF::section Header;
125 COFF::header Header;
169 void WriteFileHeader(const COFF::header &Header);
172 void writeSectionHeader(const COFF::section &S);
173 void WriteRelocation(const COFF::relocation &R);
265 /// and creates the associated COFF section staging object.
269 if (Sec.getSelection() != COFF::IMAGE_COMDAT_SELECT_ASSOCIATIVE) {
280 coff_symbol->Data.StorageClass = COFF::IMAGE_SYM_CLASS_STATIC;
293 Characteristics |= COFF::IMAGE_SCN_ALIGN_1BYTES;
296 Characteristics |= COFF::IMAGE_SCN_ALIGN_2BYTES;
299 Characteristics |= COFF::IMAGE_SCN_ALIGN_4BYTES;
302 Characteristics |= COFF::IMAGE_SCN_ALIGN_8BYTES;
305 Characteristics |= COFF::IMAGE_SCN_ALIGN_16BYTES;
308 Characteristics |= COFF::IMAGE_SCN_ALIGN_32BYTES;
311 Characteristics |= COFF::IMAGE_SCN_ALIGN_64BYTES;
314 Characteristics |= COFF::IMAGE_SCN_ALIGN_128BYTES;
317 Characteristics |= COFF::IMAGE_SCN_ALIGN_256BYTES;
320 Characteristics |= COFF::IMAGE_SCN_ALIGN_512BYTES;
323 Characteristics |= COFF::IMAGE_SCN_ALIGN_1024BYTES;
326 Characteristics |= COFF::IMAGE_SCN_ALIGN_2048BYTES;
329 Characteristics |= COFF::IMAGE_SCN_ALIGN_4096BYTES;
332 Characteristics |= COFF::IMAGE_SCN_ALIGN_8192BYTES;
338 // Bind internal COFF section to MC section.
371 /// and creates the associated COFF symbol staging object.
386 coff_symbol->Data.StorageClass = COFF::IMAGE_SYM_CLASS_WEAK_EXTERNAL;
393 WeakDefault->Data.SectionNumber = COFF::IMAGE_SYM_ABSOLUTE;
407 COFF::IMAGE_WEAK_EXTERN_SEARCH_LIBRARY;
410 coff_symbol->Data.SectionNumber = COFF::IMAGE_SYM_ABSOLUTE;
424 if (Local->Data.StorageClass == COFF::IMAGE_SYM_CLASS_NULL) {
428 Local->Data.StorageClass = IsExternal ? COFF::IMAGE_SYM_CLASS_EXTERNAL
429 : COFF::IMAGE_SYM_CLASS_STATIC;
463 if (S.Name.size() > COFF::NameSize) {
467 SmallVector<char, COFF::NameSize> Buffer;
469 assert(Buffer.size() <= COFF::NameSize && Buffer.size() >= 2);
476 report_fatal_error("COFF string table is greater than 64 GB.");
484 if (S.Name.size() > COFF::NameSize)
491 return (S->Header.Characteristics & COFF::IMAGE_SCN_CNT_UNINITIALIZED_DATA) ==
498 void WinCOFFObjectWriter::WriteFileHeader(const COFF::header &Header) {
500 writeLE16(COFF::IMAGE_FILE_MACHINE_UNKNOWN);
502 writeLE16(COFF::BigObjHeader::MinBigObjectVersion);
505 writeBytes(StringRef(COFF::BigObjMagic, sizeof(COFF::BigObjMagic)));
525 writeBytes(StringRef(S.Data.Name, COFF::NameSize));
548 WriteZeros(COFF::Symbol32Size - COFF::Symbol16Size);
557 WriteZeros(COFF::Symbol32Size - COFF::Symbol16Size);
564 WriteZeros(COFF::Symbol32Size - COFF::Symbol16Size);
569 UseBigObj ? COFF::Symbol32Size : COFF::Symbol16Size));
581 WriteZeros(COFF::Symbol32Size - COFF::Symbol16Size);
587 void WinCOFFObjectWriter::writeSectionHeader(const COFF::section &S) {
588 writeBytes(StringRef(S.Name, COFF::NameSize));
601 void WinCOFFObjectWriter::WriteRelocation(const COFF::relocation &R) {
630 (Type >> COFF::SCT_COMPLEX_TYPE_SHIFT) == COFF::IMAGE_SYM_DTYPE_FUNCTION)
647 // It looks like for COFF it is invalid to replace a reference to a global
751 if ((Header.Machine == COFF::IMAGE_FILE_MACHINE_AMD64 &&
752 Reloc.Data.Type == COFF::IMAGE_REL_AMD64_REL32) ||
753 (Header.Machine == COFF::IMAGE_FILE_MACHINE_I386 &&
754 Reloc.Data.Type == COFF::IMAGE_REL_I386_REL32))
757 if (Header.Machine == COFF::IMAGE_FILE_MACHINE_ARMNT) {
759 case COFF::IMAGE_REL_ARM_ABSOLUTE:
760 case COFF::IMAGE_REL_ARM_ADDR32:
761 case COFF::IMAGE_REL_ARM_ADDR32NB:
762 case COFF::IMAGE_REL_ARM_TOKEN:
763 case COFF::IMAGE_REL_ARM_SECTION:
764 case COFF::IMAGE_REL_ARM_SECREL:
766 case COFF::IMAGE_REL_ARM_BRANCH11:
767 case COFF::IMAGE_REL_ARM_BLX11:
771 case COFF::IMAGE_REL_ARM_BRANCH24:
772 case COFF::IMAGE_REL_ARM_BLX24:
773 case COFF::IMAGE_REL_ARM_MOV32A:
781 case COFF::IMAGE_REL_ARM_MOV32T:
783 case COFF::IMAGE_REL_ARM_BRANCH20T:
784 case COFF::IMAGE_REL_ARM_BRANCH24T:
785 case COFF::IMAGE_REL_ARM_BLX23T:
808 "PE COFF object files can't have more than 2147483647 sections");
813 UseBigObj = NumberOfSections > COFF::MaxNumberOfSections16;
829 unsigned SymbolSize = UseBigObj ? COFF::Symbol32Size : COFF::Symbol16Size;
833 file->Data.SectionNumber = COFF::IMAGE_SYM_DEBUG;
834 file->Data.StorageClass = COFF::IMAGE_SYM_CLASS_FILE;
867 if (S->Name.size() > COFF::NameSize)
870 if (S->Name.size() > COFF::NameSize)
894 COFF::IMAGE_COMDAT_SELECT_ASSOCIATIVE)
916 // Assign file offsets to COFF object file structures.
921 offset += COFF::Header32Size;
923 offset += COFF::Header16Size;
924 offset += COFF::SectionSize * Header.NumberOfSections;
956 offset += COFF::RelocationSize;
959 offset += COFF::RelocationSize * Sec->Relocations.size();
1003 Section->Header.Characteristics |= COFF::IMAGE_SCN_LNK_NRELOC_OVFL;
1063 COFF::relocation r;