Lines Matching defs:OS
38 Error writeMachO(raw_ostream &OS);
41 void writeHeader(raw_ostream &OS);
42 void writeLoadCommands(raw_ostream &OS);
43 Error writeSectionData(raw_ostream &OS);
44 void writeRelocations(raw_ostream &OS);
45 void writeLinkEditData(raw_ostream &OS);
47 void writeBindOpcodes(raw_ostream &OS,
50 void writeRebaseOpcodes(raw_ostream &OS);
51 void writeBasicBindOpcodes(raw_ostream &OS);
52 void writeWeakBindOpcodes(raw_ostream &OS);
53 void writeLazyBindOpcodes(raw_ostream &OS);
54 void writeNameList(raw_ostream &OS);
55 void writeStringTable(raw_ostream &OS);
56 void writeExportTrie(raw_ostream &OS);
57 void writeDynamicSymbolTable(raw_ostream &OS);
58 void writeFunctionStarts(raw_ostream &OS);
59 void writeChainedFixups(raw_ostream &OS);
60 void writeDyldExportsTrie(raw_ostream &OS);
61 void writeDataInCode(raw_ostream &OS);
63 void dumpExportEntry(raw_ostream &OS, MachOYAML::ExportEntry &Entry);
64 void ZeroToOffset(raw_ostream &OS, size_t offset);
76 Error MachOWriter::writeMachO(raw_ostream &OS) {
77 fileStart = OS.tell();
78 writeHeader(OS);
79 writeLoadCommands(OS);
80 if (Error Err = writeSectionData(OS))
82 writeRelocations(OS);
84 writeLinkEditData(OS);
88 void MachOWriter::writeHeader(raw_ostream &OS) {
103 OS.write((const char *)&Header, header_size);
124 size_t writeLoadCommandData(MachOYAML::LoadCommand &LC, raw_ostream &OS,
131 raw_ostream &OS,
138 OS.write(reinterpret_cast<const char *>(&(TempSec)),
147 MachOYAML::LoadCommand &LC, raw_ostream &OS, bool IsLittleEndian) {
154 OS.write(reinterpret_cast<const char *>(&(TempSec)),
161 size_t writePayloadString(MachOYAML::LoadCommand &LC, raw_ostream &OS) {
164 OS.write(LC.Content.c_str(), LC.Content.length());
172 raw_ostream &OS,
174 return writePayloadString(LC, OS);
179 raw_ostream &OS,
181 return writePayloadString(LC, OS);
186 raw_ostream &OS,
188 return writePayloadString(LC, OS);
193 MachOYAML::LoadCommand &LC, raw_ostream &OS, bool IsLittleEndian) {
194 return writePayloadString(LC, OS);
199 MachOYAML::LoadCommand &LC, raw_ostream &OS, bool IsLittleEndian) {
200 return writePayloadString(LC, OS);
205 MachOYAML::LoadCommand &LC, raw_ostream &OS, bool IsLittleEndian) {
206 return writePayloadString(LC, OS);
211 MachOYAML::LoadCommand &LC, raw_ostream &OS, bool IsLittleEndian) {
212 return writePayloadString(LC, OS);
217 MachOYAML::LoadCommand &LC, raw_ostream &OS, bool IsLittleEndian) {
223 OS.write(reinterpret_cast<const char *>(&tool),
230 void ZeroFillBytes(raw_ostream &OS, size_t Size) {
232 OS.write(reinterpret_cast<char *>(FillData.data()), Size);
235 void Fill(raw_ostream &OS, size_t Size, uint32_t Data) {
237 OS.write(reinterpret_cast<char *>(FillData.data()), Size);
240 void MachOWriter::ZeroToOffset(raw_ostream &OS, size_t Offset) {
241 auto currOffset = OS.tell() - fileStart;
243 ZeroFillBytes(OS, Offset - currOffset);
246 void MachOWriter::writeLoadCommands(raw_ostream &OS) {
255 OS.write(reinterpret_cast<const char *>(&(Data.LCStruct##_data)), \
259 writeLoadCommandData<MachO::LCStruct>(LC, OS, Obj.IsLittleEndian); \
266 OS.write(reinterpret_cast<const char *>(&(Data.load_command_data)),
270 writeLoadCommandData<MachO::load_command>(LC, OS, Obj.IsLittleEndian);
276 OS.write(reinterpret_cast<const char *>(LC.PayloadBytes.data()),
282 ZeroFillBytes(OS, LC.ZeroPadBytes);
290 ZeroFillBytes(OS, BytesRemaining);
295 Error MachOWriter::writeSectionData(raw_ostream &OS) {
309 writeLinkEditData(OS);
312 ZeroToOffset(OS, Sec.offset);
315 if (OS.tell() - fileStart > Sec.offset && Sec.offset != (uint32_t)0)
322 Sec.sectname, Sec.segname, OS.tell(), fileStart,
336 if (Error Err = EmitFunc(OS, Obj.DWARF))
347 Content.writeAsBinary(OS);
348 ZeroFillBytes(OS, Sec.size - Content.binary_size());
351 Fill(OS, Sec.size, 0xDEADBEEFu);
356 ZeroToOffset(OS, segOff + segSize);
362 ZeroToOffset(OS, LinkEditOff);
363 if (OS.tell() - fileStart > LinkEditOff || !LinkEditOff)
366 Obj.RawLinkEditSegment->writeAsBinary(OS);
402 void MachOWriter::writeRelocations(raw_ostream &OS) {
410 ZeroToOffset(OS, Sec.reloff);
417 OS.write(reinterpret_cast<const char *>(&MRE),
426 raw_ostream &OS, std::vector<MachOYAML::BindOpcode> &BindOpcodes) {
430 OS.write(reinterpret_cast<char *>(&OpByte), 1);
432 encodeULEB128(Data, OS);
435 encodeSLEB128(Data, OS);
438 OS.write(Opcode.Symbol.data(), Opcode.Symbol.size());
439 OS.write('\0');
444 void MachOWriter::dumpExportEntry(raw_ostream &OS,
446 encodeULEB128(Entry.TerminalSize, OS);
448 encodeULEB128(Entry.Flags, OS);
450 encodeULEB128(Entry.Other, OS);
451 OS << Entry.ImportName;
452 OS.write('\0');
454 encodeULEB128(Entry.Address, OS);
456 encodeULEB128(Entry.Other, OS);
459 OS.write(static_cast<uint8_t>(Entry.Children.size()));
461 OS << EE.Name;
462 OS.write('\0');
463 encodeULEB128(EE.NodeOffset, OS);
466 dumpExportEntry(OS, EE);
469 void MachOWriter::writeExportTrie(raw_ostream &OS) {
470 dumpExportEntry(OS, Obj.LinkEdit.ExportTrie);
474 void writeNListEntry(MachOYAML::NListEntry &NLE, raw_ostream &OS,
485 OS.write(reinterpret_cast<const char *>(&ListEntry), sizeof(NListType));
488 void MachOWriter::writeLinkEditData(raw_ostream &OS) {
553 ZeroToOffset(OS, writeOp.first);
554 (this->*writeOp.second)(OS);
558 void MachOWriter::writeRebaseOpcodes(raw_ostream &OS) {
563 OS.write(reinterpret_cast<char *>(&OpByte), 1);
565 encodeULEB128(Data, OS);
569 void MachOWriter::writeBasicBindOpcodes(raw_ostream &OS) {
570 writeBindOpcodes(OS, Obj.LinkEdit.BindOpcodes);
573 void MachOWriter::writeWeakBindOpcodes(raw_ostream &OS) {
574 writeBindOpcodes(OS, Obj.LinkEdit.WeakBindOpcodes);
577 void MachOWriter::writeLazyBindOpcodes(raw_ostream &OS) {
578 writeBindOpcodes(OS, Obj.LinkEdit.LazyBindOpcodes);
581 void MachOWriter::writeNameList(raw_ostream &OS) {
584 writeNListEntry<MachO::nlist_64>(NLE, OS, Obj.IsLittleEndian);
586 writeNListEntry<MachO::nlist>(NLE, OS, Obj.IsLittleEndian);
590 void MachOWriter::writeStringTable(raw_ostream &OS) {
592 OS.write(Str.data(), Str.size());
593 OS.write('\0');
597 void MachOWriter::writeDynamicSymbolTable(raw_ostream &OS) {
599 OS.write(reinterpret_cast<const char *>(&Data),
603 void MachOWriter::writeFunctionStarts(raw_ostream &OS) {
607 encodeULEB128(Delta, OS);
611 OS.write('\0');
614 void MachOWriter::writeDataInCode(raw_ostream &OS) {
619 OS.write(reinterpret_cast<const char *>(&DICE),
624 void MachOWriter::writeChainedFixups(raw_ostream &OS) {
626 OS.write(reinterpret_cast<const char *>(Obj.LinkEdit.ChainedFixups.data()),
630 void MachOWriter::writeDyldExportsTrie(raw_ostream &OS) {
631 dumpExportEntry(OS, Obj.LinkEdit.ExportTrie);
639 Error writeMachO(raw_ostream &OS);
642 void writeFatHeader(raw_ostream &OS);
643 void writeFatArchs(raw_ostream &OS);
645 void ZeroToOffset(raw_ostream &OS, size_t offset);
651 Error UniversalWriter::writeMachO(raw_ostream &OS) {
652 fileStart = OS.tell();
655 return Writer.writeMachO(OS);
658 writeFatHeader(OS);
659 writeFatArchs(OS);
668 ZeroToOffset(OS, FatFile.FatArchs[i].offset);
670 if (Error Err = Writer.writeMachO(OS))
674 ZeroToOffset(OS, SliceEnd);
680 void UniversalWriter::writeFatHeader(raw_ostream &OS) {
687 OS.write(reinterpret_cast<const char *>(&header), sizeof(MachO::fat_header));
702 void writeFatArch(MachOYAML::FatArch &LC, raw_ostream &OS) {}
705 void writeFatArch<MachO::fat_arch>(MachOYAML::FatArch &Arch, raw_ostream &OS) {
709 OS.write(reinterpret_cast<const char *>(&FatArch), sizeof(MachO::fat_arch));
714 raw_ostream &OS) {
719 OS.write(reinterpret_cast<const char *>(&FatArch),
723 void UniversalWriter::writeFatArchs(raw_ostream &OS) {
728 writeFatArch<MachO::fat_arch_64>(Arch, OS);
730 writeFatArch<MachO::fat_arch>(Arch, OS);
734 void UniversalWriter::ZeroToOffset(raw_ostream &OS, size_t Offset) {
735 auto currOffset = OS.tell() - fileStart;
737 ZeroFillBytes(OS, Offset - currOffset);