Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/llvm-project/llvm/lib/ObjCopy/MachO/MachOWriter.h
35267 views
1
//===- MachOWriter.h --------------------------------------------*- C++ -*-===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
9
#ifndef LLVM_LIB_OBJCOPY_MACHO_MACHOWRITER_H
10
#define LLVM_LIB_OBJCOPY_MACHO_MACHOWRITER_H
11
12
#include "MachOLayoutBuilder.h"
13
#include "MachOObject.h"
14
#include "llvm/BinaryFormat/MachO.h"
15
#include "llvm/ObjCopy/MachO/MachOObjcopy.h"
16
#include "llvm/Object/MachO.h"
17
18
namespace llvm {
19
class Error;
20
21
namespace objcopy {
22
namespace macho {
23
24
class MachOWriter {
25
Object &O;
26
bool Is64Bit;
27
bool IsLittleEndian;
28
uint64_t PageSize;
29
std::unique_ptr<WritableMemoryBuffer> Buf;
30
raw_ostream &Out;
31
MachOLayoutBuilder LayoutBuilder;
32
33
size_t headerSize() const;
34
size_t loadCommandsSize() const;
35
size_t symTableSize() const;
36
size_t strTableSize() const;
37
38
void writeHeader();
39
void writeLoadCommands();
40
template <typename StructType>
41
void writeSectionInLoadCommand(const Section &Sec, uint8_t *&Out);
42
void writeSections();
43
void writeSymbolTable();
44
void writeStringTable();
45
void writeRebaseInfo();
46
void writeBindInfo();
47
void writeWeakBindInfo();
48
void writeLazyBindInfo();
49
void writeExportInfo();
50
void writeIndirectSymbolTable();
51
void writeLinkData(std::optional<size_t> LCIndex, const LinkData &LD);
52
void writeCodeSignatureData();
53
void writeDataInCodeData();
54
void writeLinkerOptimizationHint();
55
void writeFunctionStartsData();
56
void writeDylibCodeSignDRsData();
57
void writeChainedFixupsData();
58
void writeExportsTrieData();
59
void writeTail();
60
61
public:
62
MachOWriter(Object &O, bool Is64Bit, bool IsLittleEndian,
63
StringRef OutputFileName, uint64_t PageSize, raw_ostream &Out)
64
: O(O), Is64Bit(Is64Bit), IsLittleEndian(IsLittleEndian),
65
PageSize(PageSize), Out(Out),
66
LayoutBuilder(O, Is64Bit, OutputFileName, PageSize) {}
67
68
size_t totalSize() const;
69
Error finalize();
70
Error write();
71
};
72
73
} // end namespace macho
74
} // end namespace objcopy
75
} // end namespace llvm
76
77
#endif // LLVM_LIB_OBJCOPY_MACHO_MACHOWRITER_H
78
79