Lines Matching defs:CP

166 // Take a CP and assign addresses and sizes to everything. Returns false if the
168 static bool layoutOptionalHeader(COFFParser &CP) {
169 if (!CP.isPE())
171 unsigned PEHeaderSize = CP.is64Bit() ? sizeof(object::pe32plus_header)
173 CP.Obj.Header.SizeOfOptionalHeader =
205 // Take a CP and assign addresses and sizes to everything. Returns false if the
207 static bool layoutCOFF(COFFParser &CP) {
210 CP.SectionTableStart =
211 CP.getHeaderSize() + CP.Obj.Header.SizeOfOptionalHeader;
212 if (CP.isPE())
213 CP.SectionTableStart += DOSStubSize + sizeof(COFF::PEMagic);
214 CP.SectionTableSize = COFF::SectionSize * CP.Obj.Sections.size();
217 CP.SectionTableStart + CP.SectionTableSize;
219 for (COFFYAML::Section &S : CP.Obj.Sections) {
224 CP.StringsAndChecksums);
225 if (CP.StringsAndChecksums.hasChecksums() &&
226 CP.StringsAndChecksums.hasStrings())
232 for (COFFYAML::Section &S : CP.Obj.Sections) {
235 assert(CP.StringsAndChecksums.hasStrings() &&
239 toDebugS(S.DebugS, CP.StringsAndChecksums, CP.Allocator);
243 S.SectionData = CodeViewYAML::toDebugT(S.DebugT, CP.Allocator, S.Name);
246 S.SectionData = CodeViewYAML::toDebugT(S.DebugP, CP.Allocator, S.Name);
249 S.SectionData = CodeViewYAML::toDebugH(*S.DebugH, CP.Allocator);
254 CP.isPE() ? CP.getFileAlignment() : 4);
256 if (CP.isPE())
258 alignTo(S.Header.SizeOfRawData, CP.getFileAlignment());
281 for (std::vector<COFFYAML::Symbol>::iterator i = CP.Obj.Symbols.begin(),
282 e = CP.Obj.Symbols.end();
293 (i->File.size() + CP.getSymbolSize() - 1) / CP.getSymbolSize();
303 CP.Obj.Header.NumberOfSections = CP.Obj.Sections.size();
304 CP.Obj.Header.NumberOfSymbols = NumberOfSymbols;
305 if (NumberOfSymbols > 0 || CP.StringTable.size() > 4)
306 CP.Obj.Header.PointerToSymbolTable = SymbolTableStart;
308 CP.Obj.Header.PointerToSymbolTable = 0;
310 *reinterpret_cast<support::ulittle32_t *>(&CP.StringTable[0]) =
311 CP.StringTable.size();
351 static uint32_t initializeOptionalHeader(COFFParser &CP, uint16_t Magic,
355 Header->SectionAlignment = CP.Obj.OptionalHeader->Header.SectionAlignment;
356 Header->FileAlignment = CP.Obj.OptionalHeader->Header.FileAlignment;
359 uint32_t SizeOfHeaders = alignTo(CP.SectionTableStart + CP.SectionTableSize,
363 for (const COFFYAML::Section &S : CP.Obj.Sections) {
381 CP.Obj.OptionalHeader->Header.AddressOfEntryPoint; // RVA
382 Header->ImageBase = CP.Obj.OptionalHeader->Header.ImageBase;
384 CP.Obj.OptionalHeader->Header.MajorOperatingSystemVersion;
386 CP.Obj.OptionalHeader->Header.MinorOperatingSystemVersion;
387 Header->MajorImageVersion = CP.Obj.OptionalHeader->Header.MajorImageVersion;
388 Header->MinorImageVersion = CP.Obj.OptionalHeader->Header.MinorImageVersion;
390 CP.Obj.OptionalHeader->Header.MajorSubsystemVersion;
392 CP.Obj.OptionalHeader->Header.MinorSubsystemVersion;
395 Header->Subsystem = CP.Obj.OptionalHeader->Header.Subsystem;
396 Header->DLLCharacteristics = CP.Obj.OptionalHeader->Header.DLLCharacteristics;
397 Header->SizeOfStackReserve = CP.Obj.OptionalHeader->Header.SizeOfStackReserve;
398 Header->SizeOfStackCommit = CP.Obj.OptionalHeader->Header.SizeOfStackCommit;
399 Header->SizeOfHeapReserve = CP.Obj.OptionalHeader->Header.SizeOfHeapReserve;
400 Header->SizeOfHeapCommit = CP.Obj.OptionalHeader->Header.SizeOfHeapCommit;
405 static bool writeCOFF(COFFParser &CP, raw_ostream &OS) {
406 if (CP.isPE()) {
429 if (CP.useBigObj()) {
434 << binary_le(CP.Obj.Header.Machine)
435 << binary_le(CP.Obj.Header.TimeDateStamp);
438 << zeros(uint32_t(0)) << binary_le(CP.Obj.Header.NumberOfSections)
439 << binary_le(CP.Obj.Header.PointerToSymbolTable)
440 << binary_le(CP.Obj.Header.NumberOfSymbols);
442 OS << binary_le(CP.Obj.Header.Machine)
443 << binary_le(static_cast<int16_t>(CP.Obj.Header.NumberOfSections))
444 << binary_le(CP.Obj.Header.TimeDateStamp)
445 << binary_le(CP.Obj.Header.PointerToSymbolTable)
446 << binary_le(CP.Obj.Header.NumberOfSymbols)
447 << binary_le(CP.Obj.Header.SizeOfOptionalHeader)
448 << binary_le(CP.Obj.Header.Characteristics);
450 if (CP.isPE()) {
451 if (CP.is64Bit()) {
453 initializeOptionalHeader(CP, COFF::PE32Header::PE32_PLUS, &PEH);
458 initializeOptionalHeader(CP, COFF::PE32Header::PE32, &PEH);
463 CP.Obj.OptionalHeader->DataDirectories) {
476 assert(OS.tell() == CP.SectionTableStart);
478 for (std::vector<COFFYAML::Section>::iterator i = CP.Obj.Sections.begin(),
479 e = CP.Obj.Sections.end();
492 assert(OS.tell() == CP.SectionTableStart + CP.SectionTableSize);
496 for (std::vector<COFFYAML::Symbol>::iterator I = CP.Obj.Symbols.begin(),
497 E = CP.Obj.Symbols.end();
504 for (const COFFYAML::Section &S : CP.Obj.Sections) {
533 for (std::vector<COFFYAML::Symbol>::const_iterator i = CP.Obj.Symbols.begin(),
534 e = CP.Obj.Symbols.end();
538 if (CP.useBigObj())
551 OS.write_zeros(CP.getSymbolSize() - COFF::Symbol16Size);
559 OS.write_zeros(CP.getSymbolSize() - COFF::Symbol16Size);
565 OS.write_zeros(CP.getSymbolSize() - COFF::Symbol16Size);
568 unsigned SymbolSize = CP.getSymbolSize();
585 OS.write_zeros(CP.getSymbolSize() - COFF::Symbol16Size);
591 OS.write_zeros(CP.getSymbolSize() - COFF::Symbol16Size);
596 if (CP.Obj.Header.PointerToSymbolTable)
597 OS.write(&CP.StringTable[0], CP.StringTable.size());
606 COFFParser CP(Doc, ErrHandler);
607 if (!CP.parse()) {
612 if (!layoutOptionalHeader(CP)) {
617 if (!layoutCOFF(CP)) {
621 if (!writeCOFF(CP, Out)) {