7#include "../dumper/dumper.h"
8#include "../linker/format.h"
9#include "../linker/reader.h"
10#include "../linker/symbol_definition.h"
11#include "../linker/target.h"
12#include "../linker/writer.h"
24 std::shared_ptr<Linker::Writer> wr;
33 void WriteData(
size_t count,
const void * data)
override;
34 void Seek(offset_t offset)
override;
35 void Skip(relative_offset_t offset)
override;
36 void SeekEnd(relative_offset_t offset = 0)
override;
37 offset_t
Tell()
override;
49 static std::string
ReadString(
const std::shared_ptr<Linker::Reader>& rd,
size_t max_bytes =
size_t(-1));
52 static void WriteString(
const std::shared_ptr<ChecksumWriter>& wr, std::string text);
72 template <
typename RecordTypeByte,
typename FormatType,
typename ModuleType>
90 offset_t RecordEnd()
const
96 virtual void ReadRecordContents(FormatType * omf, ModuleType * mod,
const std::shared_ptr<Linker::Reader>& rd) = 0;
99 virtual uint16_t
GetRecordSize(FormatType * omf, ModuleType * mod)
const = 0;
102 virtual void WriteRecordContents(FormatType * omf, ModuleType * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const = 0;
105 virtual void WriteRecord(FormatType * omf, ModuleType * mod,
const std::shared_ptr<Linker::Writer>& wr)
const
107 auto ckswr = std::make_shared<ChecksumWriter>(wr);
111 wr->WriteWord(1, ckswr->checksum);
127 virtual void DumpAddFields(
Dumper::Dumper& dump,
Dumper::Region& region,
const FormatType * omf,
const ModuleType * mod,
size_t record_index, Dumper::display_option& options)
const
131 virtual void Dump(
Dumper::Dumper& dump,
const FormatType * omf,
const ModuleType * mod,
size_t record_index)
const
136 Dumper::display_option options = Dumper::Control;
137 FormatType::DumpAddFields(
this, dump, record_region, omf, mod, record_index, options);
138 DumpAddFields(dump, record_region, omf, mod, record_index, options);
139 record_region.Display(dump, options);
156 template <
typename RecordTypeByte,
typename FormatType,
typename ModuleType>
168 void ReadRecordContents(FormatType * omf, ModuleType * mod,
const std::shared_ptr<Linker::Reader>& rd)
override
176 return data.size() + 1;
179 void WriteRecordContents(FormatType * omf, ModuleType * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override
186 template <
typename RecordTypeByte,
typename FormatType,
typename ModuleType>
195 void ReadRecordContents(FormatType * omf, ModuleType * mod,
const std::shared_ptr<Linker::Reader>& rd)
override
204 void WriteRecordContents(FormatType * omf, ModuleType * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override
213 template <
typename RecordTypeByte,
typename FormatType,
typename ModuleType>
217 uint8_t segment_id = 0;
219 std::vector<uint8_t> data;
226 void ReadRecordContents(FormatType * omf, ModuleType * mod,
const std::shared_ptr<Linker::Reader>& rd)
override;
227 uint16_t
GetRecordSize(FormatType * omf, ModuleType * mod)
const override;
228 void WriteRecordContents(FormatType * omf, ModuleType * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
236 template <
typename RecordTypeByte,
typename FormatType,
typename ModuleType>
243 uint16_t line_number = 0;
246 static LineNumber Read(FormatType * omf,
const std::shared_ptr<Linker::Reader>& rd);
247 void Write(FormatType * omf,
const std::shared_ptr<ChecksumWriter>& wr)
const;
250 uint8_t segment_id = 0;
251 std::vector<LineNumber> line_numbers;
258 void ReadRecordContents(FormatType * omf, ModuleType * mod,
const std::shared_ptr<Linker::Reader>& rd)
override;
259 uint16_t
GetRecordSize(FormatType * omf, ModuleType * mod)
const override;
260 void WriteRecordContents(FormatType * omf, ModuleType * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
264 template <
typename RecordTypeByte,
typename FormatType,
typename ModuleType>
280 void ReadRecordContents(FormatType * omf, ModuleType * mod,
const std::shared_ptr<Linker::Reader>& rd)
override;
281 uint16_t
GetRecordSize(FormatType * omf, ModuleType * mod)
const override;
282 void WriteRecordContents(FormatType * omf, ModuleType * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
286 template <
typename RecordTypeByte,
typename FormatType,
typename ModuleType>
298 void ReadRecordContents(FormatType * omf, ModuleType * mod,
const std::shared_ptr<Linker::Reader>& rd)
override;
299 uint16_t
GetRecordSize(FormatType * omf, ModuleType * mod)
const override;
300 void WriteRecordContents(FormatType * omf, ModuleType * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
304 template <
typename RecordTypeByte,
typename FormatType,
typename ModuleType>
316 static Location Read(
const std::shared_ptr<Linker::Reader>& rd);
317 void Write(
const std::shared_ptr<ChecksumWriter>& wr)
const;
328 void ReadRecordContents(FormatType * omf, ModuleType * mod,
const std::shared_ptr<Linker::Reader>& rd)
override;
329 uint16_t
GetRecordSize(FormatType * omf, ModuleType * mod)
const override;
330 void WriteRecordContents(FormatType * omf, ModuleType * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
334 template <
typename RecordTypeByte,
typename FormatType,
typename ModuleType>
344 void Read(
const std::shared_ptr<Linker::Reader>& rd);
345 uint16_t Size()
const;
346 void Write(
const std::shared_ptr<ChecksumWriter>& wr)
const;
357 void ReadRecordContents(FormatType * omf, ModuleType * mod,
const std::shared_ptr<Linker::Reader>& rd)
override;
358 uint16_t
GetRecordSize(FormatType * omf, ModuleType * mod)
const override;
359 void WriteRecordContents(FormatType * omf, ModuleType * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
363 static std::shared_ptr<OMFFormat>
ReadOMFFile(
const std::shared_ptr<Linker::Reader>& rd);
381 ::EndianType endian_type = ::LittleEndian;
465 std::shared_ptr<SegmentDefinitionRecord> record;
481 std::shared_ptr<GroupDefinitionRecord> record;
501 std::shared_ptr<TypeDefinitionRecord> record;
517 std::shared_ptr<BlockDefinitionRecord> record;
533 std::shared_ptr<OverlayDefinitionRecord> record;
575 uint8_t segment_index;
583 uint32_t element_size;
589 value.far.number = value.far.element_size = 0;
597 static void WriteValue(
OMF86Format * omf,
const std::shared_ptr<ChecksumWriter>& wr, uint32_t length);
611 void CalculateValues(
OMF86Format * omf, Module * mod);
612 void ResolveReferences(
OMF86Format * omf, Module * mod);
645 void Read(
OMF86Format * omf,
const std::shared_ptr<Linker::Reader>& rd);
647 void Write(
OMF86Format * omf,
const std::shared_ptr<ChecksumWriter>& wr)
const;
667 uint16_t Size(
OMF86Format * omf,
bool is32bit)
const;
668 void Write(
OMF86Format * omf,
const std::shared_ptr<ChecksumWriter>& wr,
bool is32bit)
const;
684 void Write(
OMF86Format * omf,
const std::shared_ptr<ChecksumWriter>& wr,
bool is32bit)
const;
701 typedef std::vector<std::shared_ptr<DataBlock>>
Blocks;
703 typedef std::vector<uint8_t>
Data;
731 std::variant<ThreadNumber, SegmentIndex, GroupIndex, ExternalIndex, FrameNumber>
target =
ThreadNumber(0);
733 std::variant<ThreadNumber, SegmentIndex, GroupIndex, ExternalIndex, FrameNumber, UsesSource, UsesTarget, UsesAbsolute>
frame =
ThreadNumber(0);
737 void Read(
OMF86Format * omf,
const std::shared_ptr<Linker::Reader>& rd,
size_t displacement_size);
738 uint16_t Size(
OMF86Format * omf,
bool is32bit)
const;
739 void Write(
OMF86Format * omf,
const std::shared_ptr<ChecksumWriter>& wr,
bool is32bit)
const;
826 LibraryHeader = 0xF0,
830 static const std::map<offset_t, std::string> RecordTypeNames;
841 std::shared_ptr<Record>
ReadRecord(
const std::shared_ptr<Linker::Reader>& rd);
855 void ReadRecordContents(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd)
override;
857 void WriteRecordContents(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
871 RelocatableModule = 1,
906 void ReadRecordContents(
OMF86Format * omf, Module *
mod,
const std::shared_ptr<Linker::Reader>& rd)
override;
907 uint16_t GetRecordSize(
OMF86Format * omf, Module *
mod)
const override;
908 void WriteRecordContents(
OMF86Format * omf, Module *
mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
927 void ReadRecordContents(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd)
override;
929 void WriteRecordContents(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
981 uint16_t maximum_segment_length;
982 uint16_t group_offset;
1000 Combination_Public4 =
FlagTIS | 4,
1007 Combination_Common =
FlagTIS | 6,
1010 Combination_Public7 =
FlagTIS | 7,
1032 AccessExecuteOnly = 1,
1033 AccessExecuteRead = 2,
1034 AccessReadWrite = 3,
1048 void ReadRecordContents(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd)
override;
1050 void WriteRecordContents(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
1055 std::shared_ptr<Linker::Section> GenerateLinkerSection();
1079 uint32_t maximum_group_length;
1080 uint32_t group_length;
1098 std::variant<ExternalIndex, SegmentIndex, SegmentClassOverlayNames, LoadTimeLocatable, Absolute>
component =
ExternalIndex();
1102 void Write(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const;
1118 void ReadRecordContents(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd)
override;
1120 void WriteRecordContents(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
1149 std::variant<uint32_t, int32_t, std::string, TypeIndex, Null, Repeat>
leaf =
Null();
1172 void Write(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const;
1209 UnsignedInteger = 0x7C,
1210 SignedInteger = 0x7D,
1220 void ReadRecordContents(
OMF86Format * omf, Module * mod,
const std::shared_ptr<Linker::Reader>& rd)
override;
1221 uint16_t GetRecordSize(
OMF86Format * omf, Module * mod)
const override;
1222 void WriteRecordContents(
OMF86Format * omf, Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
1224 void CalculateValues(
OMF86Format * omf, Module * mod)
override;
1225 void ResolveReferences(
OMF86Format * omf, Module * mod)
override;
1243 void ReadRecordContents(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd)
override;
1245 void WriteRecordContents(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
1265 void ReadRecordContents(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd)
override;
1267 void WriteRecordContents(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
1288 void ReadRecordContents(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd)
override;
1290 void WriteRecordContents(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
1330 void ReadRecordContents(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd)
override;
1332 void WriteRecordContents(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
1342 enum frame_type_t : uint8_t
1348 frame_type_t frame_type;
1350 static constexpr uint8_t SymbolBaseMethod = 0x00;
1351 static constexpr uint8_t ExternalMethod = 0x01;
1352 static constexpr uint8_t BlockMethod = 0x02;
1354 std::variant<BaseSpecification, ExternalIndex, BlockIndex> base =
ExternalIndex();
1356 std::vector<SymbolDefinition> names;
1363 void ReadRecordContents(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd)
override;
1365 void WriteRecordContents(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
1387 void ReadRecordContents(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd)
override;
1389 void WriteRecordContents(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
1409 void ReadRecordContents(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd)
override;
1411 void WriteRecordContents(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
1430 void ReadRecordContents(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd)
override;
1432 void WriteRecordContents(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
1442 typedef std::variant<SegmentIndex, GroupIndex, ExternalIndex, FrameNumber> target_reference_type;
1443 typedef std::variant<SegmentIndex, GroupIndex, ExternalIndex, FrameNumber, UsesSource, UsesTarget, UsesAbsolute> frame_reference_type;
1456 static Thread Read(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd, uint8_t leading_data_byte);
1458 void Write(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const;
1504 static Fixup Read(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd, uint8_t leading_data_byte,
bool is32bit);
1506 void Write(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr,
bool is32bit)
const;
1520 void ReadRecordContents(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd)
override;
1522 void WriteRecordContents(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
1548 void ReadRecordContents(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd)
override;
1550 void WriteRecordContents(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
1574 void ReadRecordContents(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd)
override;
1576 void WriteRecordContents(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
1616 void Write(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const;
1630 void ReadRecordContents(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd)
override;
1632 void WriteRecordContents(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
1645 std::optional<std::variant<Reference, std::tuple<uint16_t, uint16_t>>>
start_address;
1652 void ReadRecordContents(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd)
override;
1654 void WriteRecordContents(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
1679 Location32bit_IBM = 9,
1691 void ReadRecordContents(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd)
override;
1693 void WriteRecordContents(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
1710 std::vector<OffsetValuePair> offset_value_pairs;
1717 void ReadRecordContents(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd)
override;
1719 void WriteRecordContents(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
1740 enum selection_criterion_t : uint8_t
1742 SelectNoMatch = 0x00,
1743 SelectPickAny = 0x10,
1744 SelectSameSize = 0x20,
1745 SelectExactMatch = 0x30,
1747 static constexpr uint8_t SelectionCriterionMask = 0xF0;
1748 selection_criterion_t selection_criterion;
1750 enum allocation_type_t : uint8_t
1752 AllocateExplicit = 0x00,
1753 AllocateFarCode = 0x01,
1754 AllocateFarData = 0x02,
1755 AllocateCode32 = 0x03,
1756 AllocateData32 = 0x04,
1758 static constexpr uint8_t AllocationTypeMask = 0x0F;
1759 allocation_type_t allocation_type;
1766 BaseSpecification base;
1768 std::shared_ptr<DataBlock> data;
1775 void ReadRecordContents(OMF86Format * omf, Module * mod,
const std::shared_ptr<Linker::Reader>& rd)
override;
1776 uint16_t GetRecordSize(OMF86Format * omf, Module * mod)
const override;
1777 void WriteRecordContents(OMF86Format * omf, Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
1779 void CalculateValues(OMF86Format * omf, Module * mod)
override;
1780 void ResolveReferences(OMF86Format * omf, Module * mod)
override;
1799 void ReadRecordContents(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd)
override;
1801 void WriteRecordContents(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
1822 void Write(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const;
1832 void ReadRecordContents(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd)
override;
1834 void WriteRecordContents(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
1849 void ReadRecordContents(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd)
override;
1851 void WriteRecordContents(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
1868 void ReadRecordContents(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd)
override;
1870 void WriteRecordContents(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
1880 enum comment_class_t : uint8_t
1883 IntelCopyright = 0x01,
1884 LibrarySpecifier = 0x81,
1885 MSDOSVersion = 0x9C,
1888 DefaultLibrarySearchName = 0x9F,
1889 OMFExtension = 0xA0,
1890 NewOMFExtension = 0xA1,
1891 LinkPassSeparator = 0xA2,
1903 DependencyFile = 0xE9,
1906 comment_class_t comment_class;
1913 CommentRecord(comment_class_t comment_class = comment_class_t(0))
1914 :
Record(COMENT), comment_class(comment_class)
1918 virtual void ReadComment(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd, uint16_t comment_length) = 0;
1920 virtual void WriteComment(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const = 0;
1922 static std::shared_ptr<CommentRecord> ReadCommentRecord(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd, uint16_t
record_length);
1923 void ReadRecordContents(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd)
override;
1925 void WriteRecordContents(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
1935 std::vector<SegmentIndex> segments;
1942 void ReadComment(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd, uint16_t comment_length)
override;
1944 void WriteComment(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
1961 void Write(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const;
1967 std::vector<ExternalAssociation> associations;
1974 void ReadComment(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd, uint16_t comment_length)
override;
1976 void WriteComment(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
1985 enum extension_type_t : uint8_t
1990 ProtectedModeLibrary = 0x04,
1995 extension_type_t subtype;
2009 std::string internal_name;
2010 std::string module_name;
2011 std::variant<std::string, uint16_t> entry_ident;
2018 void ReadComment(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd, uint16_t comment_length)
override;
2020 void WriteComment(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
2028 uint8_t parameter_count;
2029 std::string exported_name;
2030 std::string internal_name;
2031 std::optional<uint16_t> ordinal;
2038 void ReadComment(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd, uint16_t comment_length)
override;
2040 void WriteComment(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
2046 uint16_t extdef_delta;
2047 uint16_t linnum_delta;
2048 uint16_t padding_byte_count;
2055 void ReadComment(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd, uint16_t comment_length)
override;
2057 void WriteComment(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
2063 bool new_executable;
2064 bool omit_codeview_publics;
2066 uint8_t pseudocode_version;
2067 uint8_t codeview_version;
2069 static constexpr uint8_t FlagNewExecutable = 0x01;
2070 static constexpr uint8_t FlagOmitCodeViewPublics = 0x02;
2071 static constexpr uint8_t FlagRunMPC = 0x04;
2078 void ReadComment(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd, uint16_t comment_length)
override;
2080 void WriteComment(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
2086 uint32_t dictionary_offset;
2087 uint16_t dictionary_size;
2088 bool case_sensitive;
2095 void ReadRecordContents(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd)
override;
2097 void WriteRecordContents(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
2099 void WriteRecord(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<Linker::Writer>& wr)
const override;
2110 void ReadRecordContents(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd)
override;
2112 void WriteRecordContents(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
2114 void WriteRecord(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<Linker::Writer>& wr)
const override;
2129 std::vector<std::shared_ptr<SegmentDefinitionRecord>>
segdefs;
2131 std::vector<std::shared_ptr<GroupDefinitionRecord>>
grpdefs;
2133 std::vector<std::shared_ptr<TypeDefinitionRecord>>
typdefs;
2135 std::vector<std::shared_ptr<BlockDefinitionRecord>>
blkdefs;
2137 std::vector<std::shared_ptr<OverlayDefinitionRecord>>
ovldefs;
2153 static std::shared_ptr<OMF86Format>
ReadOMFFile(
const std::shared_ptr<Linker::Reader>& rd);
2157 void ReadFile(
const std::shared_ptr<Linker::Reader>& rd)
override;
2159 offset_t
WriteFile(
const std::shared_ptr<Linker::Writer>& wr)
const override;
2162 static uint32_t FillSectionData(std::shared_ptr<Linker::Section> section, uint32_t offset, std::shared_ptr<OMF86Format::DataBlock> data);
2172 std::vector<uint8_t> data;
2179 void ReadComment(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd, uint16_t comment_length)
override;
2181 void WriteComment(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
2192 void ReadComment(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd, uint16_t comment_length)
override;
2194 void WriteComment(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
2207 void ReadComment(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd, uint16_t comment_length)
override;
2209 void WriteComment(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
2215 std::vector<uint8_t> data;
2222 void ReadComment(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd, uint16_t comment_length)
override;
2224 void WriteComment(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
2235 void ReadComment(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd, uint16_t comment_length)
override;
2237 void WriteComment(
OMF86Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
2248 enum record_type_t : uint8_t
2250 ModuleHeader = 0x02,
2255 ModuleAncestor = 0x10,
2256 LocalSymbols = 0x12,
2257 PublicDefinitions = 0x16,
2258 ExternalDefinitions = 0x18,
2259 ExternalReferences = 0x20,
2261 InterSegmentReferences = 0x24,
2262 LibraryModuleLocations = 0x26,
2263 LibraryModuleNames = 0x28,
2264 LibraryDictionary = 0x2A,
2265 LibraryHeader = 0x2C,
2266 NamedCommonDefinitions = 0x2E,
2269 static const std::map<offset_t, std::string> RecordTypeNames;
2282 std::shared_ptr<Record>
ReadRecord(
const std::shared_ptr<Linker::Reader>& rd);
2310 enum alignment_t : uint8_t
2322 std::string external_name;
2335 uint16_t length = 0;
2336 alignment_t alignment = AlignByte;
2339 void Write(
OMF80Format * omf,
const std::shared_ptr<ChecksumWriter>& wr)
const;
2343 std::vector<SegmentDefinition> segment_definitions;
2350 void ReadRecordContents(
OMF80Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd)
override;
2352 void WriteRecordContents(
OMF80Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
2363 uint16_t start_offset;
2364 std::vector<uint8_t> info;
2371 void ReadRecordContents(
OMF80Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd)
override;
2373 void WriteRecordContents(
OMF80Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
2386 std::string common_name;
2389 uint16_t GetNamedCommonDefinitionSize(
OMF80Format * omf)
const;
2390 void WriteNamedCommonDefinition(
OMF80Format * omf,
const std::shared_ptr<ChecksumWriter>& wr)
const;
2393 std::vector<NamedCommonDefinition> named_common_definitions;
2400 void ReadRecordContents(
OMF80Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd)
override;
2402 void WriteRecordContents(
OMF80Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
2413 std::vector<std::string> external_names;
2414 uint16_t first_external_name;
2415 uint16_t external_name_count;
2422 void ReadRecordContents(
OMF80Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd)
override;
2424 void WriteRecordContents(
OMF80Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
2441 void Write(
OMF80Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const;
2445 std::vector<SymbolDefinition> public_definitions;
2452 void ReadRecordContents(
OMF80Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd)
override;
2454 void WriteRecordContents(
OMF80Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
2460 enum relocation_type_t : uint8_t
2462 RelocationLowByte = 1,
2463 RelocationHighByte = 2,
2470 relocation_type_t relocation_type;
2471 std::vector<uint16_t> offsets;
2478 void ReadRecordContents(
OMF80Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd)
override;
2480 void WriteRecordContents(
OMF80Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
2496 void ReadRecordContents(
OMF80Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd)
override;
2498 void WriteRecordContents(
OMF80Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
2514 relocation_type_t relocation_type;
2515 std::vector<ExternalReference> external_references;
2522 void ReadRecordContents(
OMF80Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd)
override;
2524 void WriteRecordContents(
OMF80Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
2540 void ReadRecordContents(
OMF80Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd)
override;
2542 void WriteRecordContents(
OMF80Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
2552 uint16_t length = 0;
2553 alignment_t alignment = AlignByte;
2554 std::string common_name;
2561 : segment_id(segment_definition.segment_id), length(segment_definition.length), alignment(segment_definition.alignment)
2574 std::map<segment_id_t, SegmentDefinition> segment_definitions;
2575 std::vector<std::string> external_names;
2585 static std::shared_ptr<OMF80Format>
ReadOMFFile(
const std::shared_ptr<Linker::Reader>& rd);
2589 void ReadFile(
const std::shared_ptr<Linker::Reader>& rd)
override;
2591 offset_t
WriteFile(
const std::shared_ptr<Linker::Writer>& wr)
const override;
2606 enum record_type_t : uint8_t
2608 ModuleHeader = OMF80Format::ModuleHeader,
2609 ModuleEnd = OMF80Format::ModuleEnd,
2610 Content = OMF80Format::Content,
2612 SegmentDefinitions = 0x0E,
2613 ScopeDefinition = 0x10,
2615 PublicDefinitions = OMF80Format::PublicDefinitions,
2616 ExternalDefinitions = OMF80Format::ExternalDefinitions,
2617 LibraryModuleLocations = OMF80Format::LibraryModuleLocations,
2618 LibraryModuleNames = OMF80Format::LibraryModuleNames,
2619 LibraryDictionary = OMF80Format::LibraryDictionary,
2620 LibraryHeader = OMF80Format::LibraryHeader,
2623 static const std::map<offset_t, std::string> RecordTypeNames;
2635 std::shared_ptr<Record>
ReadRecord(
const std::shared_ptr<Linker::Reader>& rd);
2639 static constexpr uint8_t SegmentAbsolute = 0;
2677 uint8_t register_bank;
2680 static constexpr uint8_t MaskSegmentType = 0x07;
2681 static constexpr uint8_t MaskRegisterBank = 0x18;
2682 static constexpr uint8_t ShiftRegisterBank = 3;
2683 static constexpr uint8_t FlagOverlayable = 0x20;
2684 static constexpr uint8_t FlagSegmentEmpty = 0x80;
2702 void Write(
OMF51Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const;
2708 bool indirectly_callable;
2710 std::optional<unsigned> register_bank;
2713 static constexpr uint8_t MaskSegmentType = 0x07;
2714 static constexpr uint8_t MaskRegisterBank = 0x18;
2715 static constexpr uint8_t ShiftRegisterBank = 3;
2716 static constexpr uint8_t FlagRegisterBank = 0x20;
2717 static constexpr uint8_t FlagVariable = 0x40;
2718 static constexpr uint8_t FlagIndirectlyCallable = 0x80;
2734 void Write(
OMF51Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const;
2740 uint8_t block_id = 2;
2741 uint8_t external_id;
2747 void Write(
OMF51Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const;
2754 enum translator_id_t : uint8_t
2760 translator_id_t translator_id;
2767 void ReadRecordContents(
OMF51Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd)
override;
2769 void WriteRecordContents(
OMF51Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
2776 std::array<bool, 4> banks;
2783 void ReadRecordContents(
OMF51Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd)
override;
2785 void WriteRecordContents(
OMF51Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
2791 std::vector<SegmentDefinition> segment_definitions;
2798 void ReadRecordContents(
OMF51Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd)
override;
2800 void WriteRecordContents(
OMF51Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
2809 std::vector<SymbolDefinition> symbol_definitions;
2816 void ReadRecordContents(
OMF51Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd)
override;
2818 void WriteRecordContents(
OMF51Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
2827 std::vector<ExternalDefinition> external_definitions;
2834 void ReadRecordContents(
OMF51Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd)
override;
2836 void WriteRecordContents(
OMF51Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
2845 enum block_type_t : uint8_t
2852 EndProcedureBlock = 5,
2855 block_type_t block_type;
2863 void ReadRecordContents(
OMF51Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd)
override;
2865 void WriteRecordContents(
OMF51Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
2884 void Write(
OMF51Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const;
2890 std::vector<Symbol> symbols;
2896 std::vector<Symbol> symbols;
2909 void Write(
OMF51Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const;
2915 std::vector<SegmentSymbol> symbols;
2923 uint16_t line_number;
2926 void Write(
OMF51Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const;
2932 std::vector<LineNumber> symbols;
2935 static constexpr uint8_t Type_LocalSymbols = 0;
2936 static constexpr uint8_t Type_PublicSymbols = 1;
2937 static constexpr uint8_t Type_SegmentSymbols = 2;
2938 static constexpr uint8_t Type_LineNumbers = 3;
2940 std::variant<LocalSymbols, PublicSymbols, SegmentSymbols, LineNumbers> contents;
2947 void ReadRecordContents(
OMF51Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd)
override;
2949 void WriteRecordContents(
OMF51Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
2958 enum relocation_type_t : uint8_t
2961 RelocationByte8 = 1,
2962 RelocationRelative8 = 2,
2963 RelocationHigh8 = 3,
2964 RelocationWord16 = 4,
2965 RelocationAbsolute11 = 5,
2967 RelocationConv7 = 7,
2984 relocation_type_t relocation;
2990 void Write(
OMF51Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const;
2993 std::vector<Fixup> fixups;
3000 void ReadRecordContents(
OMF51Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd)
override;
3002 void WriteRecordContents(
OMF51Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
3016 std::map<uint8_t, SegmentDefinition> segment_definitions;
3017 std::map<uint8_t, ExternalDefinition> external_definitions;
3027 static std::shared_ptr<OMF51Format>
ReadOMFFile(
const std::shared_ptr<Linker::Reader>& rd);
3031 void ReadFile(
const std::shared_ptr<Linker::Reader>& rd)
override;
3033 offset_t
WriteFile(
const std::shared_ptr<Linker::Writer>& wr)
const override;
3048 typedef uint16_t index_t;
3050 enum record_type_t : uint8_t
3052 ModuleHeader = OMF80Format::ModuleHeader,
3053 ModuleEnd = OMF80Format::ModuleEnd,
3054 Content = OMF80Format::Content,
3055 LineNumbers = OMF80Format::LineNumbers,
3056 BlockDefinition = 0x0A,
3058 EndOfFile = OMF80Format::EndOfFile,
3059 ModuleAncestor = OMF80Format::ModuleAncestor,
3060 LocalSymbols = OMF80Format::LocalSymbols,
3061 TypeDefinition = 0x14,
3062 PublicDefinitions = OMF80Format::PublicDefinitions,
3063 ExternalDefinitions = OMF80Format::ExternalDefinitions,
3064 SegmentDefinitions = 0x20,
3065 Relocations = OMF80Format::Relocations,
3066 LibraryModuleLocations = OMF80Format::LibraryModuleLocations,
3067 LibraryModuleNames = OMF80Format::LibraryModuleNames,
3068 LibraryDictionary = OMF80Format::LibraryDictionary,
3069 LibraryHeader = 0x2E,
3072 static const std::map<offset_t, std::string> RecordTypeNames;
3085 std::shared_ptr<Record>
ReadRecord(
const std::shared_ptr<Linker::Reader>& rd);
3087 typedef uint8_t segment_id_t;
3089 static constexpr segment_id_t CodeSegment = 0;
3090 static constexpr segment_id_t DataSegment = 1;
3091 static constexpr segment_id_t RegisterSegment = 2;
3092 static constexpr segment_id_t OverlaySegment = 3;
3093 static constexpr segment_id_t StackSegment = 4;
3094 static constexpr segment_id_t DynamicSymbol = 5;
3095 static constexpr segment_id_t NullSegment = 6;
3096 static constexpr segment_id_t SegmentTypeMask = 7;
3098 static constexpr segment_id_t FlagBasedVariable = 0x40;
3100 static constexpr segment_id_t FlagRelocatableSegment = 0x80;
3112 segment_id_t segment_id;
3116 alignment_t alignment;
3117 uint16_t base_address;
3122 bool IsRelocatable()
const
3124 return segment_id & FlagRelocatableSegment;
3127 bool IsAbsolute()
const
3129 return !IsRelocatable();
3132 alignment_t GetAlignment()
const
3134 return IsRelocatable() ? alignment : alignment_t(-1);
3137 uint16_t GetBaseAddress()
const
3139 return IsAbsolute() ? base_address : 0;
3142 void MakeRelocatable(alignment_t rel_alignment)
3144 segment_id |= FlagRelocatableSegment;
3145 alignment = rel_alignment;
3148 void MakeAbsolute(uint16_t address)
3150 segment_id &= ~FlagRelocatableSegment;
3151 base_address = address;
3156 void Write(
OMF96Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const;
3165 std::shared_ptr<TypeDefinitionRecord> record;
3184 void Write(
OMF96Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const;
3199 void Write(
OMF96Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const;
3209 uint8_t translator_id;
3210 std::string date_time;
3212 static constexpr uint8_t Version14 = 0xE0;
3213 static constexpr uint8_t Version20 = 0xE4;
3214 static constexpr uint8_t Translator = 0x00;
3215 static constexpr uint8_t Linker = 0x01;
3222 void ReadRecordContents(
OMF96Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd)
override;
3224 void WriteRecordContents(
OMF96Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
3233 static constexpr uint8_t MainModule = 0x01;
3234 static constexpr uint8_t OtherModule = 0x00;
3236 static constexpr uint8_t ValidModule = 0x00;
3237 static constexpr uint8_t ErroneousModule = 0x01;
3244 void ReadRecordContents(
OMF96Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd)
override;
3246 void WriteRecordContents(
OMF96Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
3252 std::vector<SegmentDefinition> segment_definitions;
3259 void ReadRecordContents(
OMF96Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd)
override;
3261 void WriteRecordContents(
OMF96Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
3282 std::variant<Null, int32_t, std::string, TypeIndex, Repeat, EndOfBranch> leaf =
Null();
3301 void Write(
OMF96Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const;
3315 void ReadRecordContents(
OMF96Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd)
override;
3317 void WriteRecordContents(
OMF96Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
3326 segment_id_t segment_id;
3327 std::vector<SymbolDefinition> symbol_definitions;
3334 void ReadRecordContents(
OMF96Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd)
override;
3336 void WriteRecordContents(
OMF96Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
3345 segment_id_t segment_id;
3346 std::vector<ExternalDefinition> external_definitions;
3353 void ReadRecordContents(
OMF96Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd)
override;
3355 void WriteRecordContents(
OMF96Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
3367 typedef segment_id_t LocalReference;
3368 typedef uint16_t ExternalReference;
3370 enum reference_type_t
3373 RegisterAutoIncrement = 1,
3374 ShiftCountImmediate = 2,
3375 ShiftCountRegister = 3,
3384 static constexpr uint8_t FlagAddendInCode = 0x40;
3385 static constexpr uint8_t FlagExternal = 0x80;
3388 std::variant<LocalReference, ExternalReference> reference = LocalReference(0);
3389 std::optional<uint16_t> addend;
3390 reference_type_t reference_type;
3391 alignment_t alignment;
3395 void Write(
OMF96Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const;
3398 std::vector<Relocation> relocations;
3405 void ReadRecordContents(
OMF96Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd)
override;
3407 void WriteRecordContents(
OMF96Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
3417 std::optional<SegmentDefinition> segment_definition;
3424 void ReadRecordContents(
OMF96Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd)
override;
3426 void WriteRecordContents(
OMF96Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
3442 typedef segment_id_t LocalReference;
3443 typedef uint16_t ExternalReference;
3448 std::variant<LocalReference, ExternalReference> frame_pointer = LocalReference(0);
3449 uint16_t return_offset;
3450 uint8_t prologue_size;
3453 segment_id_t segment_id;
3456 std::optional<BlockNameAndType> name_and_type;
3457 std::optional<ProcedureInformation> procedure_info;
3464 static constexpr uint8_t FlagProcedure = 0x40;
3465 static constexpr uint8_t FlagExternal = 0x80;
3467 void ReadRecordContents(
OMF96Format * omf,
Module * mod,
const std::shared_ptr<Linker::Reader>& rd)
override;
3469 void WriteRecordContents(
OMF96Format * omf,
Module * mod,
const std::shared_ptr<ChecksumWriter>& wr)
const override;
3483 std::map<segment_id_t, SegmentDefinition> segment_definitions;
3484 std::vector<std::shared_ptr<TypeDefinitionRecord>> type_definitions;
3494 static std::shared_ptr<OMF96Format>
ReadOMFFile(
const std::shared_ptr<Linker::Reader>& rd);
3498 void ReadFile(
const std::shared_ptr<Linker::Reader>& rd)
override;
3500 offset_t
WriteFile(
const std::shared_ptr<Linker::Writer>& wr)
const override;
3510 std::shared_ptr<OMFFormat> contents;
3512 void ReadFile(
const std::shared_ptr<Linker::Reader>& rd)
override;
3518 offset_t
WriteFile(
const std::shared_ptr<Linker::Writer>& wr)
const override;
static std::shared_ptr< DecDisplay > Make(bool enable_signed)
Creates a decimal display.
Definition dumper.h:384
An abstract interface that separates structure and presentation of the data inside a file.
Definition dumper.h:1009
static std::shared_ptr< HexDisplay > Make(unsigned width=8)
Creates a hexadecimal display.
Definition dumper.h:357
A record that represents a region within the file.
Definition dumper.h:902
Represents a single offset within a section, or an absolute location in memory if the section is null...
Definition location.h:17
Encodes an object module file as a collection of sections, symbols and relocations.
Definition module.h:24
Represents a possible target or reference frame of a relocation.
Definition target.h:24
Abstract base class that encapsulates functionality needed to export binary data.
Definition writer.h:15
virtual void WriteData(size_t count, const void *data)=0
Write out a sequence of bytes.
Convenience class to calculate the checksum of a record while writing it.
Definition omf.h:22
void Skip(relative_offset_t offset) override
Jump to a distance in the output stream.
Definition omf.cc:27
offset_t Tell() override
Retrieve the current location.
Definition omf.cc:41
void WriteData(size_t count, const void *data) override
Write out a sequence of bytes.
Definition omf.cc:13
void Seek(offset_t offset) override
Jump to a specific location in the ouput stream.
Definition omf.cc:22
void SeekEnd(relative_offset_t offset=0) override
Jump to a specific offset from the end.
Definition omf.cc:32
A record representing data to be loaded into a segment.
Definition omf.h:215
uint16_t GetRecordSize(FormatType *omf, ModuleType *mod) const override
Calculates the required bytes to write the record, might be less than record_length.
Definition omf.cc:181
void WriteRecordContents(FormatType *omf, ModuleType *mod, const std::shared_ptr< ChecksumWriter > &wr) const override
Writes the record contents, except for the type, length and checksum.
Definition omf.cc:187
void ReadRecordContents(FormatType *omf, ModuleType *mod, const std::shared_ptr< Linker::Reader > &rd) override
Reads the record contents, except for the type, length and checksum.
Definition omf.cc:172