5#include <llvm/Config/llvm-config.h>
7#include <llvm/MC/MCAsmBackend.h>
8#include <llvm/MC/MCAsmLayout.h>
9#include <llvm/MC/MCAssembler.h>
10#include <llvm/MC/MCContext.h>
11#include <llvm/MC/MCExpr.h>
12#include <llvm/MC/MCFixup.h>
13#include <llvm/MC/MCFixupKindInfo.h>
14#include <llvm/MC/MCFragment.h>
15#include <llvm/MC/MCObjectWriter.h>
16#include <llvm/MC/MCSection.h>
17#include <llvm/MC/MCSymbol.h>
18#include <llvm/MC/MCValue.h>
31 std::unique_ptr<llvm::MCObjectWriter> inner_object_writer;
34 llvm::raw_pwrite_stream& stream;
37 llvm::MCContext& context;
40 bool write_text_section_only;
46 std::string& extended_error;
49 std::vector<Nyxstone::Instruction>* instructions;
58 void validate_fixups(
const llvm::MCFragment& fragment,
const llvm::MCAsmLayout& Layout);
73 ObjectWriterWrapper(std::unique_ptr<llvm::MCObjectWriter>&& object_writer, llvm::raw_pwrite_stream& stream,
74 llvm::MCContext& context,
bool write_text_section_only, u64 start_address, std::string& extended_error,
75 std::vector<Nyxstone::Instruction>* instructions)
76 : inner_object_writer(std::move(object_writer))
79 , write_text_section_only(write_text_section_only)
80 , start_address(start_address)
81 , extended_error(extended_error)
82 , instructions(instructions)
96 std::unique_ptr<llvm::MCObjectWriter>&& object_writer, llvm::raw_pwrite_stream& stream,
97 llvm::MCContext& context,
bool write_text_section_only, u64 start_address, std::string& extended_error,
98 std::vector<Nyxstone::Instruction>* instructions);
107 bool resolve_relocation(llvm::MCAssembler& assembler,
const llvm::MCAsmLayout& layout,
108 const llvm::MCFragment* fragment,
const llvm::MCFixup& fixup, llvm::MCValue target, uint64_t& fixed_value);
125 void recordRelocation(llvm::MCAssembler& Asm,
const llvm::MCAsmLayout& Layout,
const llvm::MCFragment* Fragment,
126 const llvm::MCFixup& Fixup, llvm::MCValue Target, uint64_t& FixedValue)
override;
129 uint64_t
writeObject(llvm::MCAssembler& Asm,
const llvm::MCAsmLayout& Layout)
override;
Definition ObjectWriterWrapper.h:29
static std::unique_ptr< llvm::MCObjectWriter > createObjectWriterWrapper(std::unique_ptr< llvm::MCObjectWriter > &&object_writer, llvm::raw_pwrite_stream &stream, llvm::MCContext &context, bool write_text_section_only, u64 start_address, std::string &extended_error, std::vector< Nyxstone::Instruction > *instructions)
Creates a UniquePtr holding the the ObjectWriterWrapper.
Definition ObjectWriterWrapper.cpp:325
void recordRelocation(llvm::MCAssembler &Asm, const llvm::MCAsmLayout &Layout, const llvm::MCFragment *Fragment, const llvm::MCFixup &Fixup, llvm::MCValue Target, uint64_t &FixedValue) override
Tries to resolve relocations (that are normally resolved at link time) instead of recording them.
Definition ObjectWriterWrapper.cpp:205
bool resolve_relocation(llvm::MCAssembler &assembler, const llvm::MCAsmLayout &layout, const llvm::MCFragment *fragment, const llvm::MCFixup &fixup, llvm::MCValue target, uint64_t &fixed_value)
Internal resolve for relocations.
Definition ObjectWriterWrapper.cpp:159
uint64_t writeObject(llvm::MCAssembler &Asm, const llvm::MCAsmLayout &Layout) override
Write object to the stream and update the bytes of the instruction details.
Definition ObjectWriterWrapper.cpp:231
ObjectWriterWrapper(std::unique_ptr< llvm::MCObjectWriter > &&object_writer, llvm::raw_pwrite_stream &stream, llvm::MCContext &context, bool write_text_section_only, u64 start_address, std::string &extended_error, std::vector< Nyxstone::Instruction > *instructions)
Creates an ObjectWriterWrapper.
Definition ObjectWriterWrapper.h:73
void executePostLayoutBinding(llvm::MCAssembler &Asm, const llvm::MCAsmLayout &Layout) override
Simple function wrapper calling the wrapped object wrapper function directly.
Definition ObjectWriterWrapper.cpp:154