RetroLinker
Linker for several 8-bit, 16-bit and 32-bit formats
Loading...
Searching...
No Matches
format.h
1#ifndef FORMAT_H
2#define FORMAT_H
3
4#include <map>
5#include <optional>
6#include <string>
7#include "../common.h"
8#include "image.h"
9
10namespace Dumper
11{
12 class Dumper;
13}
14
15namespace Linker
16{
17 class Module;
18 class ModuleCollector;
19 class OptionCollector;
20 template <typename T>
21 class OptionDescription;
22 class Reader;
23 class Writer;
24
28 class Format : public virtual Contents
29 {
30 public:
31 offset_t file_offset;
32
33 Format(offset_t file_offset = 0)
34 : file_offset(file_offset)
35 {
36 }
37
38 virtual ~Format() = default;
42 virtual void Clear();
46 virtual void ReadFile(Reader& rd) = 0;
50 offset_t WriteFile(Writer& wr) const override = 0;
54 virtual void Dump(Dumper::Dumper& dump) const;
55
56 offset_t ImageSize() const override;
57 offset_t WriteFile(Writer& wr, offset_t count, offset_t offset = 0) const override;
58 };
59
63 class OutputFormat : public virtual Format
64 {
65 public:
69 virtual bool AddSupplementaryOutputFormat(std::string subformat);
73 virtual std::vector<OptionDescription<void>> GetMemoryModelNames();
77 virtual std::vector<OptionDescription<void> *> GetLinkerScriptParameterNames();
81 virtual std::vector<OptionDescription<void>> GetSpecialSymbolNames();
85 virtual std::shared_ptr<OptionCollector> GetOptions();
89 virtual void SetOptions(std::map<std::string, std::string>& options);
90
94 std::optional<std::string> FetchOption(std::map<std::string, std::string>& options, std::string name);
95
99 std::string FetchOption(std::map<std::string, std::string>& options, std::string name, std::string default_value);
100
104 std::optional<offset_t> FetchIntegerOption(std::map<std::string, std::string>& options, std::string name);
105
109 virtual void SetModel(std::string model);
113 virtual void SetLinkScript(std::string script_file, std::map<std::string, std::string>& options);
117 virtual void ProcessModule(Module& object);
122 virtual void CalculateValues();
126 virtual void GenerateFile(std::string filename, Module& module);
133 virtual std::string GetDefaultExtension(Module& module, std::string filename) const;
139 virtual std::string GetDefaultExtension(Module& module) const;
140 /* x86 only */
152 virtual bool FormatSupportsSegmentation() const;
158 virtual bool FormatIs16bit() const;
166 virtual bool FormatIsProtectedMode() const;
173 virtual bool FormatIsLinear() const;
174 /* general */
181 virtual bool FormatSupportsResources() const;
185 virtual bool FormatSupportsLibraries() const; /* imports/exports, fileformat level support, not system support */
186 virtual unsigned FormatAdditionalSectionFlags(std::string section_name) const;
187
191 virtual void AllocateSymbols(Module& module) const;
192 };
193
197 class InputFormat : public virtual Format, public std::enable_shared_from_this<InputFormat>
198 {
199 public:
204 virtual void SetupOptions(std::shared_ptr<OutputFormat> format);
208 virtual void ProduceModule(ModuleCollector& linker, Reader& rd, std::string file_name);
212 virtual void ProduceModule(Module& module, Reader& rd);
216 virtual void GenerateModule(ModuleCollector& linker, std::string file_name, bool is_library = false) const;
220 virtual void GenerateModule(Module& module) const;
221 public:
222 /* x86 only */
234 virtual bool FormatProvidesSegmentation() const;
235 /* w65 only */
239 virtual bool FormatRequiresDataStreamFix() const;
240 /* general */
247 virtual bool FormatProvidesResources() const;
251 virtual bool FormatProvidesLibraries() const;
252 };
253}
254
255#endif /* FORMAT_H */
An abstract interface that separates structure and presentation of the data inside a file.
Definition dumper.h:662
Represents abstract data contents whose data can be written to a file.
Definition image.h:17
A class to encode a general file format.
Definition format.h:29
virtual void Dump(Dumper::Dumper &dump) const
Display file contents in a nice manner.
Definition format.cc:11
virtual void ReadFile(Reader &rd)=0
Loads file into memory.
offset_t WriteFile(Writer &wr) const override=0
Stores data in memory to file.
offset_t ImageSize() const override
Retrieves size of stored data.
Definition format.cc:20
virtual void Clear()
Resets all fields to their default values, deallocate memory.
Definition format.cc:16
A class that provides a general interface to loading a module.
Definition format.h:198
virtual bool FormatRequiresDataStreamFix() const
Whether the generated file might contain bugs that require fixing.
Definition format.cc:241
virtual void SetupOptions(std::shared_ptr< OutputFormat > format)
Initializes the reader for linking purposes.
Definition format.cc:205
virtual bool FormatProvidesLibraries() const
Whether the format enables importing/exporting libraries.
Definition format.cc:251
virtual void GenerateModule(ModuleCollector &linker, std::string file_name, bool is_library=false) const
Loads the information into a module object.
Definition format.cc:221
virtual bool FormatProvidesResources() const
Whether the format supports resources.
Definition format.cc:246
virtual bool FormatProvidesSegmentation() const
Whether the format enables multiple x86 segments.
Definition format.cc:236
virtual void ProduceModule(ModuleCollector &linker, Reader &rd, std::string file_name)
Reads a file and loads the information into a module object.
Definition format.cc:209
Helper class that collects object files and libraries, and includes library objects for required symb...
Definition module_collector.h:25
Encodes an object module file as a collection of sections, symbols and relocations.
Definition module.h:24
A class that provides a general interface to setting up generation for a format.
Definition format.h:64
virtual bool FormatSupportsSegmentation() const
Whether the format supports multiple segments.
Definition format.cc:156
virtual void AllocateSymbols(Module &module) const
Instructs the module to allocate any unallocated local symbols.
Definition format.cc:200
virtual void GenerateFile(std::string filename, Module &module)
The main function that handles processing, calculating and generating the final image.
Definition format.cc:134
virtual void ProcessModule(Module &object)
Processes the module object and initializes format fields.
Definition format.cc:126
virtual bool FormatSupportsLibraries() const
Whether the format supports libraries.
Definition format.cc:190
virtual std::string GetDefaultExtension(Module &module, std::string filename) const
Appends a default extension to the filename.
virtual std::vector< OptionDescription< void > * > GetLinkerScriptParameterNames()
Returns a list of the parameters used in the linker scripts, used for documentation.
Definition format.cc:45
virtual std::vector< OptionDescription< void > > GetMemoryModelNames()
Returns a list of the supported memory models, used for documentation.
Definition format.cc:40
virtual std::shared_ptr< OptionCollector > GetOptions()
Returns object containing a sequence of option fields provided with the -S command line flag.
Definition format.cc:62
virtual bool FormatIsLinear() const
Whether the address space is linear or segmented.
Definition format.cc:173
virtual void SetLinkScript(std::string script_file, std::map< std::string, std::string > &options)
Selects a script file to use for linking.
Definition format.cc:121
virtual std::string GetDefaultExtension(Module &module) const
Provides a default filename for the output file.
virtual bool FormatIs16bit() const
Whether the format is 16-bit or not.
Definition format.cc:161
virtual std::vector< OptionDescription< void > > GetSpecialSymbolNames()
Returns a list of special symbol names recognized by the format, used for documentation.
Definition format.cc:56
std::optional< offset_t > FetchIntegerOption(std::map< std::string, std::string > &options, std::string name)
Convenience method to look up option by name and convert it to integer.
Definition format.cc:97
virtual void SetOptions(std::map< std::string, std::string > &options)
Passes command line parameters as settings over to format object.
Definition format.cc:67
std::optional< std::string > FetchOption(std::map< std::string, std::string > &options, std::string name)
Convenience method to look up option by name.
Definition format.cc:71
virtual void SetModel(std::string model)
Sets the way memory is organized, typically modifying a built-in script.
Definition format.cc:113
virtual bool FormatIsProtectedMode() const
Whether the format is in protected mode or not (x86 only)
Definition format.cc:166
virtual void CalculateValues()
Intermediate step between processing module and generating output file to set up headers and manageme...
Definition format.cc:130
virtual bool AddSupplementaryOutputFormat(std::string subformat)
If the output format actually drives multiple output formats (resource file, apple double,...
Definition format.cc:35
virtual bool FormatSupportsResources() const
Whether the format supports resources.
Definition format.cc:185
A helper class, encapsulating functionality needed to import binary data.
Definition reader.h:20
A helper class, encapsulating functionality needed to export binary data.
Definition writer.h:15