Lines Matching full:coff
10 // This file contains an implementation of a Win32 COFF object file writer.
30 #include "llvm/Support/COFF.h"
43 typedef llvm::SmallString<COFF::NameSize> name;
55 COFF::Auxiliary Aux;
63 COFF::symbol Data;
83 // This class contains staging data for a COFF relocation entry.
85 COFF::relocation Data;
89 static size_t size() { return COFF::RelocationSize; }
96 COFF::section Header;
108 // This class holds the COFF string table.
133 COFF::header Header;
165 void WriteFileHeader(const COFF::header &Header);
168 void WriteSectionHeader(const COFF::section &S);
169 void WriteRelocation(const COFF::relocation &R);
218 return COFF::SymbolSize + (Data.NumberOfAuxSymbols * COFF::SymbolSize);
268 return COFF::SectionSize;
321 Is64Bit ? Header.Machine = COFF::IMAGE_FILE_MACHINE_AMD64
322 : Header.Machine = COFF::IMAGE_FILE_MACHINE_I386;
363 /// and creates the associated COFF section staging object.
366 && "Got non COFF section in the COFF backend!");
376 coff_symbol->Data.StorageClass = COFF::IMAGE_SYM_CLASS_STATIC;
388 case 1: Characteristics |= COFF::IMAGE_SCN_ALIGN_1BYTES; break;
389 case 2: Characteristics |= COFF::IMAGE_SCN_ALIGN_2BYTES; break;
390 case 4: Characteristics |= COFF::IMAGE_SCN_ALIGN_4BYTES; break;
391 case 8: Characteristics |= COFF::IMAGE_SCN_ALIGN_8BYTES; break;
392 case 16: Characteristics |= COFF::IMAGE_SCN_ALIGN_16BYTES; break;
393 case 32: Characteristics |= COFF::IMAGE_SCN_ALIGN_32BYTES; break;
394 case 64: Characteristics |= COFF::IMAGE_SCN_ALIGN_64BYTES; break;
395 case 128: Characteristics |= COFF::IMAGE_SCN_ALIGN_128BYTES; break;
396 case 256: Characteristics |= COFF::IMAGE_SCN_ALIGN_256BYTES; break;
397 case 512: Characteristics |= COFF::IMAGE_SCN_ALIGN_512BYTES; break;
398 case 1024: Characteristics |= COFF::IMAGE_SCN_ALIGN_1024BYTES; break;
399 case 2048: Characteristics |= COFF::IMAGE_SCN_ALIGN_2048BYTES; break;
400 case 4096: Characteristics |= COFF::IMAGE_SCN_ALIGN_4096BYTES; break;
401 case 8192: Characteristics |= COFF::IMAGE_SCN_ALIGN_8192BYTES; break;
406 // Bind internal COFF section to MC section.
412 /// and creates the associated COFF symbol staging object.
420 if (SymbolData.getFlags() & COFF::SF_WeakExternal) {
421 coff_symbol->Data.StorageClass = COFF::IMAGE_SYM_CLASS_WEAK_EXTERNAL;
424 coff_symbol->Data.StorageClass = COFF::IMAGE_SYM_CLASS_WEAK_EXTERNAL;
439 WeakDefault->Data.SectionNumber = COFF::IMAGE_SYM_ABSOLUTE;
440 WeakDefault->Data.StorageClass = COFF::IMAGE_SYM_CLASS_EXTERNAL;
452 COFF::IMAGE_WEAK_EXTERN_SEARCH_LIBRARY;
460 external ? COFF::IMAGE_SYM_CLASS_EXTERNAL : COFF::IMAGE_SYM_CLASS_STATIC;
467 // Bind internal COFF symbol to MC symbol.
475 if (S.Name.size() > COFF::NameSize) {
485 report_fatal_error("COFF string table is greater than 999999 bytes.");
497 if (S.Name.size() > COFF::NameSize) {
524 & COFF::IMAGE_SCN_CNT_UNINITIALIZED_DATA) == 0;
530 void WinCOFFObjectWriter::WriteFileHeader(const COFF::header &Header) {
541 WriteBytes(StringRef(S->Data.Name, COFF::NameSize));
591 void WinCOFFObjectWriter::WriteSectionHeader(const COFF::section &S) {
592 WriteBytes(StringRef(S.Name, COFF::NameSize));
605 void WinCOFFObjectWriter::WriteRelocation(const COFF::relocation &R) {
701 Reloc.Data.Type = Is64Bit ? COFF::IMAGE_REL_AMD64_REL32
702 : COFF::IMAGE_REL_I386_REL32;
709 Reloc.Data.Type = Is64Bit ? COFF::IMAGE_REL_AMD64_ADDR32
710 : COFF::IMAGE_REL_I386_DIR32;
714 Reloc.Data.Type = COFF::IMAGE_REL_AMD64_ADDR64;
777 // Assign file offsets to COFF object file structures.
781 offset += COFF::HeaderSize;
782 offset += COFF::SectionSize * Header.NumberOfSections;
804 offset += COFF::RelocationSize * Sec->Relocations.size();