xref: /freebsd/contrib/llvm-project/lld/MachO/Writer.h (revision bdd1243df58e60e85101c09001d9812a789b6bc4)
15ffd83dbSDimitry Andric //===- Writer.h -------------------------------------------------*- C++ -*-===//
25ffd83dbSDimitry Andric //
35ffd83dbSDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
45ffd83dbSDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
55ffd83dbSDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
65ffd83dbSDimitry Andric //
75ffd83dbSDimitry Andric //===----------------------------------------------------------------------===//
85ffd83dbSDimitry Andric 
95ffd83dbSDimitry Andric #ifndef LLD_MACHO_WRITER_H
105ffd83dbSDimitry Andric #define LLD_MACHO_WRITER_H
115ffd83dbSDimitry Andric 
125ffd83dbSDimitry Andric #include <cstdint>
135ffd83dbSDimitry Andric 
14*bdd1243dSDimitry Andric namespace lld::macho {
155ffd83dbSDimitry Andric 
16e8d8bef9SDimitry Andric class OutputSection;
17fe6060f1SDimitry Andric class InputSection;
18fe6060f1SDimitry Andric class Symbol;
19e8d8bef9SDimitry Andric 
205ffd83dbSDimitry Andric class LoadCommand {
215ffd83dbSDimitry Andric public:
225ffd83dbSDimitry Andric   virtual ~LoadCommand() = default;
235ffd83dbSDimitry Andric   virtual uint32_t getSize() const = 0;
245ffd83dbSDimitry Andric   virtual void writeTo(uint8_t *buf) const = 0;
255ffd83dbSDimitry Andric };
265ffd83dbSDimitry Andric 
27fe6060f1SDimitry Andric template <class LP> void writeResult();
28349cc55cSDimitry Andric void resetWriter();
295ffd83dbSDimitry Andric 
305ffd83dbSDimitry Andric void createSyntheticSections();
315ffd83dbSDimitry Andric 
32fe6060f1SDimitry Andric // Add bindings for symbols that need weak or non-lazy bindings.
33fe6060f1SDimitry Andric void addNonLazyBindingEntries(const Symbol *, const InputSection *,
34fe6060f1SDimitry Andric                               uint64_t offset, int64_t addend = 0);
35fe6060f1SDimitry Andric 
36e8d8bef9SDimitry Andric extern OutputSection *firstTLVDataSection;
37e8d8bef9SDimitry Andric 
38*bdd1243dSDimitry Andric } // namespace lld::macho
395ffd83dbSDimitry Andric 
405ffd83dbSDimitry Andric #endif
41