Home | History | Annotate | Download | only in MC

Lines Matching refs: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;
126 COFF::header Header;
168 void WriteFileHeader(const COFF::header &Header);
171 void writeSectionHeader(const COFF::section &S);
172 void WriteRelocation(const COFF::relocation &R);
225 size_t COFFSection::size() { return COFF::SectionSize; }
266 /// and creates the associated COFF section staging object.
270 if (Sec.getSelection() != COFF::IMAGE_COMDAT_SELECT_ASSOCIATIVE) {
281 coff_symbol->Data.StorageClass = COFF::IMAGE_SYM_CLASS_STATIC;
294 Characteristics |= COFF::IMAGE_SCN_ALIGN_1BYTES;
297 Characteristics |= COFF::IMAGE_SCN_ALIGN_2BYTES;
300 Characteristics |= COFF::IMAGE_SCN_ALIGN_4BYTES;
303 Characteristics |= COFF::IMAGE_SCN_ALIGN_8BYTES;
306 Characteristics |= COFF::IMAGE_SCN_ALIGN_16BYTES;
309 Characteristics |= COFF::IMAGE_SCN_ALIGN_32BYTES;
312 Characteristics |= COFF::IMAGE_SCN_ALIGN_64BYTES;
315 Characteristics |= COFF::IMAGE_SCN_ALIGN_128BYTES;
318 Characteristics |= COFF::IMAGE_SCN_ALIGN_256BYTES;
321 Characteristics |= COFF::IMAGE_SCN_ALIGN_512BYTES;
324 Characteristics |= COFF::IMAGE_SCN_ALIGN_1024BYTES;
327 Characteristics |= COFF::IMAGE_SCN_ALIGN_2048BYTES;
330 Characteristics |= COFF::IMAGE_SCN_ALIGN_4096BYTES;
333 Characteristics |= COFF::IMAGE_SCN_ALIGN_8192BYTES;
339 // Bind internal COFF section to MC section.
357 /// and creates the associated COFF symbol staging object.
364 coff_symbol->Data.StorageClass = COFF::IMAGE_SYM_CLASS_WEAK_EXTERNAL;
377 WeakDefault->Data.SectionNumber = COFF::IMAGE_SYM_ABSOLUTE;
378 WeakDefault->Data.StorageClass = COFF::IMAGE_SYM_CLASS_EXTERNAL;
390 COFF::IMAGE_WEAK_EXTERN_SEARCH_LIBRARY;
402 if (coff_symbol->Data.StorageClass == COFF::IMAGE_SYM_CLASS_NULL) {
407 ? COFF::IMAGE_SYM_CLASS_EXTERNAL
408 : COFF::IMAGE_SYM_CLASS_STATIC;
412 coff_symbol->Data.SectionNumber = COFF::IMAGE_SYM_ABSOLUTE;
456 if (S.Name.size() > COFF::NameSize) {
471 report_fatal_error("COFF string table is greater than 64 GB.");
478 if (S.Name.size() > COFF::NameSize)
485 return (S->Header.Characteristics & COFF::IMAGE_SCN_CNT_UNINITIALIZED_DATA) ==
492 void WinCOFFObjectWriter::WriteFileHeader(const COFF::header &Header) {
494 writeLE16(COFF::IMAGE_FILE_MACHINE_UNKNOWN);
496 writeLE16(COFF::BigObjHeader::MinBigObjectVersion);
499 writeBytes(StringRef(COFF::BigObjMagic, sizeof(COFF::BigObjMagic)));
519 writeBytes(StringRef(S.Data.Name, COFF::NameSize));
543 WriteZeros(COFF::Symbol32Size - COFF::Symbol16Size);
552 WriteZeros(COFF::Symbol32Size - COFF::Symbol16Size);
559 WriteZeros(COFF::Symbol32Size - COFF::Symbol16Size);
564 UseBigObj ? COFF::Symbol32Size : COFF::Symbol16Size));
576 WriteZeros(COFF::Symbol32Size - COFF::Symbol16Size);
582 void WinCOFFObjectWriter::writeSectionHeader(const COFF::section &S) {
583 writeBytes(StringRef(S.Name, COFF::NameSize));
596 void WinCOFFObjectWriter::WriteRelocation(const COFF::relocation &R) {
625 (Type >> COFF::SCT_COMPLEX_TYPE_SHIFT) == COFF::IMAGE_SYM_DTYPE_FUNCTION)
642 // It looks like for COFF it is invalid to replace a reference to a global
746 if ((Header.Machine == COFF::IMAGE_FILE_MACHINE_AMD64 &&
747 Reloc.Data.Type == COFF::IMAGE_REL_AMD64_REL32) ||
748 (Header.Machine == COFF::IMAGE_FILE_MACHINE_I386 &&
749 Reloc.Data.Type == COFF::IMAGE_REL_I386_REL32))
752 if (Header.Machine == COFF::IMAGE_FILE_MACHINE_ARMNT) {
754 case COFF::IMAGE_REL_ARM_ABSOLUTE:
755 case COFF::IMAGE_REL_ARM_ADDR32:
756 case COFF::IMAGE_REL_ARM_ADDR32NB:
757 case COFF::IMAGE_REL_ARM_TOKEN:
758 case COFF::IMAGE_REL_ARM_SECTION:
759 case COFF::IMAGE_REL_ARM_SECREL:
761 case COFF::IMAGE_REL_ARM_BRANCH11:
762 case COFF::IMAGE_REL_ARM_BLX11:
766 case COFF::IMAGE_REL_ARM_BRANCH24:
767 case COFF::IMAGE_REL_ARM_BLX24:
768 case COFF::IMAGE_REL_ARM_MOV32A:
776 case COFF::IMAGE_REL_ARM_MOV32T:
778 case COFF::IMAGE_REL_ARM_BRANCH20T:
779 case COFF::IMAGE_REL_ARM_BRANCH24T:
780 case COFF::IMAGE_REL_ARM_BLX23T:
799 "PE COFF object files can't have more than 2147483647 sections");
804 UseBigObj = NumberOfSections > COFF::MaxNumberOfSections16;
820 unsigned SymbolSize = UseBigObj ? COFF::Symbol32Size : COFF::Symbol16Size;
824 file->Data.SectionNumber = COFF::IMAGE_SYM_DEBUG;
825 file->Data.StorageClass = COFF::IMAGE_SYM_CLASS_FILE;
858 if (S->Name.size() > COFF::NameSize)
861 if (S->Name.size() > COFF::NameSize)
885 COFF::IMAGE_COMDAT_SELECT_ASSOCIATIVE)
907 // Assign file offsets to COFF object file structures.
912 offset += COFF::Header32Size;
914 offset += COFF::Header16Size;
915 offset += COFF::SectionSize * Header.NumberOfSections;
947 offset += COFF::RelocationSize;
950 offset += COFF::RelocationSize * Sec->Relocations.size();
1000 Section->Header.Characteristics |= COFF::IMAGE_SCN_LNK_NRELOC_OVFL;
1060 COFF::relocation r;