Lines Matching refs:CP

157 static bool layoutOptionalHeader(COFFParser &CP) {  in layoutOptionalHeader()  argument
158 if (!CP.isPE()) in layoutOptionalHeader()
160 unsigned PEHeaderSize = CP.is64Bit() ? sizeof(object::pe32plus_header) in layoutOptionalHeader()
162 CP.Obj.Header.SizeOfOptionalHeader = in layoutOptionalHeader()
164 CP.Obj.OptionalHeader->Header.NumberOfRvaAndSize; in layoutOptionalHeader()
196 static bool layoutCOFF(COFFParser &CP) { in layoutCOFF() argument
199 CP.SectionTableStart = in layoutCOFF()
200 CP.getHeaderSize() + CP.Obj.Header.SizeOfOptionalHeader; in layoutCOFF()
201 if (CP.isPE()) in layoutCOFF()
202 CP.SectionTableStart += DOSStubSize + sizeof(COFF::PEMagic); in layoutCOFF()
203 CP.SectionTableSize = COFF::SectionSize * CP.Obj.Sections.size(); in layoutCOFF()
206 CP.SectionTableStart + CP.SectionTableSize; in layoutCOFF()
208 for (COFFYAML::Section &S : CP.Obj.Sections) { in layoutCOFF()
213 CP.StringsAndChecksums); in layoutCOFF()
214 if (CP.StringsAndChecksums.hasChecksums() && in layoutCOFF()
215 CP.StringsAndChecksums.hasStrings()) in layoutCOFF()
221 for (COFFYAML::Section &S : CP.Obj.Sections) { in layoutCOFF()
224 assert(CP.StringsAndChecksums.hasStrings() && in layoutCOFF()
228 toDebugS(S.DebugS, CP.StringsAndChecksums, CP.Allocator); in layoutCOFF()
232 S.SectionData = CodeViewYAML::toDebugT(S.DebugT, CP.Allocator, S.Name); in layoutCOFF()
235 S.SectionData = CodeViewYAML::toDebugT(S.DebugP, CP.Allocator, S.Name); in layoutCOFF()
238 S.SectionData = CodeViewYAML::toDebugH(*S.DebugH, CP.Allocator); in layoutCOFF()
246 CP.isPE() ? CP.getFileAlignment() : 4); in layoutCOFF()
248 if (CP.isPE()) in layoutCOFF()
250 alignTo(S.Header.SizeOfRawData, CP.getFileAlignment()); in layoutCOFF()
273 for (std::vector<COFFYAML::Symbol>::iterator i = CP.Obj.Symbols.begin(), in layoutCOFF()
274 e = CP.Obj.Symbols.end(); in layoutCOFF()
285 (i->File.size() + CP.getSymbolSize() - 1) / CP.getSymbolSize(); in layoutCOFF()
295 CP.Obj.Header.NumberOfSections = CP.Obj.Sections.size(); in layoutCOFF()
296 CP.Obj.Header.NumberOfSymbols = NumberOfSymbols; in layoutCOFF()
297 if (NumberOfSymbols > 0 || CP.StringTable.size() > 4) in layoutCOFF()
298 CP.Obj.Header.PointerToSymbolTable = SymbolTableStart; in layoutCOFF()
300 CP.Obj.Header.PointerToSymbolTable = 0; in layoutCOFF()
302 *reinterpret_cast<support::ulittle32_t *>(&CP.StringTable[0]) = in layoutCOFF()
303 CP.StringTable.size(); in layoutCOFF()
343 static uint32_t initializeOptionalHeader(COFFParser &CP, uint16_t Magic, in initializeOptionalHeader() argument
347 Header->SectionAlignment = CP.Obj.OptionalHeader->Header.SectionAlignment; in initializeOptionalHeader()
348 Header->FileAlignment = CP.Obj.OptionalHeader->Header.FileAlignment; in initializeOptionalHeader()
351 uint32_t SizeOfHeaders = alignTo(CP.SectionTableStart + CP.SectionTableSize, in initializeOptionalHeader()
355 for (const COFFYAML::Section &S : CP.Obj.Sections) { in initializeOptionalHeader()
373 CP.Obj.OptionalHeader->Header.AddressOfEntryPoint; // RVA in initializeOptionalHeader()
374 Header->ImageBase = CP.Obj.OptionalHeader->Header.ImageBase; in initializeOptionalHeader()
376 CP.Obj.OptionalHeader->Header.MajorOperatingSystemVersion; in initializeOptionalHeader()
378 CP.Obj.OptionalHeader->Header.MinorOperatingSystemVersion; in initializeOptionalHeader()
379 Header->MajorImageVersion = CP.Obj.OptionalHeader->Header.MajorImageVersion; in initializeOptionalHeader()
380 Header->MinorImageVersion = CP.Obj.OptionalHeader->Header.MinorImageVersion; in initializeOptionalHeader()
382 CP.Obj.OptionalHeader->Header.MajorSubsystemVersion; in initializeOptionalHeader()
384 CP.Obj.OptionalHeader->Header.MinorSubsystemVersion; in initializeOptionalHeader()
387 Header->Subsystem = CP.Obj.OptionalHeader->Header.Subsystem; in initializeOptionalHeader()
388 Header->DLLCharacteristics = CP.Obj.OptionalHeader->Header.DLLCharacteristics; in initializeOptionalHeader()
389 Header->SizeOfStackReserve = CP.Obj.OptionalHeader->Header.SizeOfStackReserve; in initializeOptionalHeader()
390 Header->SizeOfStackCommit = CP.Obj.OptionalHeader->Header.SizeOfStackCommit; in initializeOptionalHeader()
391 Header->SizeOfHeapReserve = CP.Obj.OptionalHeader->Header.SizeOfHeapReserve; in initializeOptionalHeader()
392 Header->SizeOfHeapCommit = CP.Obj.OptionalHeader->Header.SizeOfHeapCommit; in initializeOptionalHeader()
393 Header->NumberOfRvaAndSize = CP.Obj.OptionalHeader->Header.NumberOfRvaAndSize; in initializeOptionalHeader()
397 static bool writeCOFF(COFFParser &CP, raw_ostream &OS) { in writeCOFF() argument
398 if (CP.isPE()) { in writeCOFF()
421 if (CP.useBigObj()) { in writeCOFF()
426 << binary_le(CP.Obj.Header.Machine) in writeCOFF()
427 << binary_le(CP.Obj.Header.TimeDateStamp); in writeCOFF()
430 << zeros(uint32_t(0)) << binary_le(CP.Obj.Header.NumberOfSections) in writeCOFF()
431 << binary_le(CP.Obj.Header.PointerToSymbolTable) in writeCOFF()
432 << binary_le(CP.Obj.Header.NumberOfSymbols); in writeCOFF()
434 OS << binary_le(CP.Obj.Header.Machine) in writeCOFF()
435 << binary_le(static_cast<int16_t>(CP.Obj.Header.NumberOfSections)) in writeCOFF()
436 << binary_le(CP.Obj.Header.TimeDateStamp) in writeCOFF()
437 << binary_le(CP.Obj.Header.PointerToSymbolTable) in writeCOFF()
438 << binary_le(CP.Obj.Header.NumberOfSymbols) in writeCOFF()
439 << binary_le(CP.Obj.Header.SizeOfOptionalHeader) in writeCOFF()
440 << binary_le(CP.Obj.Header.Characteristics); in writeCOFF()
442 if (CP.isPE()) { in writeCOFF()
443 if (CP.is64Bit()) { in writeCOFF()
445 initializeOptionalHeader(CP, COFF::PE32Header::PE32_PLUS, &PEH); in writeCOFF()
450 initializeOptionalHeader(CP, COFF::PE32Header::PE32, &PEH); in writeCOFF()
454 for (uint32_t I = 0; I < CP.Obj.OptionalHeader->Header.NumberOfRvaAndSize; in writeCOFF()
457 CP.Obj.OptionalHeader->DataDirectories; in writeCOFF()
458 uint32_t NumDataDir = std::size(CP.Obj.OptionalHeader->DataDirectories); in writeCOFF()
469 assert(OS.tell() == CP.SectionTableStart); in writeCOFF()
471 for (const COFFYAML::Section &S : CP.Obj.Sections) { in writeCOFF()
483 assert(OS.tell() == CP.SectionTableStart + CP.SectionTableSize); in writeCOFF()
487 for (const COFFYAML::Symbol &Sym : CP.Obj.Symbols) { in writeCOFF()
493 for (const COFFYAML::Section &S : CP.Obj.Sections) { in writeCOFF()
525 for (std::vector<COFFYAML::Symbol>::const_iterator i = CP.Obj.Symbols.begin(), in writeCOFF()
526 e = CP.Obj.Symbols.end(); in writeCOFF()
530 if (CP.useBigObj()) in writeCOFF()
543 OS.write_zeros(CP.getSymbolSize() - COFF::Symbol16Size); in writeCOFF()
551 OS.write_zeros(CP.getSymbolSize() - COFF::Symbol16Size); in writeCOFF()
557 OS.write_zeros(CP.getSymbolSize() - COFF::Symbol16Size); in writeCOFF()
560 unsigned SymbolSize = CP.getSymbolSize(); in writeCOFF()
577 OS.write_zeros(CP.getSymbolSize() - COFF::Symbol16Size); in writeCOFF()
583 OS.write_zeros(CP.getSymbolSize() - COFF::Symbol16Size); in writeCOFF()
588 if (CP.Obj.Header.PointerToSymbolTable) in writeCOFF()
589 OS.write(&CP.StringTable[0], CP.StringTable.size()); in writeCOFF()
626 COFFParser CP(Doc, ErrHandler); in yaml2coff() local
627 if (!CP.parse()) { in yaml2coff()
632 if (!layoutOptionalHeader(CP)) { in yaml2coff()
637 if (!layoutCOFF(CP)) { in yaml2coff()
641 if (!writeCOFF(CP, Out)) { in yaml2coff()