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 Image
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 };
188
192 class InputFormat : public virtual Format, public std::enable_shared_from_this<InputFormat>
193 {
194 public:
199 virtual void SetupOptions(std::shared_ptr<OutputFormat> format);
203 virtual void ProduceModule(ModuleCollector& linker, Reader& rd, std::string file_name);
207 virtual void ProduceModule(Module& module, Reader& rd);
211 virtual void GenerateModule(ModuleCollector& linker, std::string file_name, bool is_library = false) const;
215 virtual void GenerateModule(Module& module) const;
216 public:
217 /* x86 only */
229 virtual bool FormatProvidesSegmentation() const;
230 /* w65 only */
234 virtual bool FormatRequiresDataStreamFix() const;
235 /* general */
242 virtual bool FormatProvidesResources() const;
246 virtual bool FormatProvidesLibraries() const;
247 };
248}
249
250#endif /* FORMAT_H */
An abstract interface that separates structure and presentation of the data inside a file.
Definition dumper.h:586
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:10
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:19
virtual void Clear()
Resets all fields to their default values, deallocate memory.
Definition format.cc:15
Represents an abstract data image whose data can be written to a file.
Definition image.h:17
A class that provides a general interface to loading a module.
Definition format.h:193
virtual bool FormatRequiresDataStreamFix() const
Whether the generated file might contain bugs that require fixing.
Definition format.cc:235
virtual void SetupOptions(std::shared_ptr< OutputFormat > format)
Initializes the reader for linking purposes.
Definition format.cc:199
virtual bool FormatProvidesLibraries() const
Whether the format enables importing/exporting libraries.
Definition format.cc:245
virtual void GenerateModule(ModuleCollector &linker, std::string file_name, bool is_library=false) const
Loads the information into a module object.
Definition format.cc:215
virtual bool FormatProvidesResources() const
Whether the format supports resources.
Definition format.cc:240
virtual bool FormatProvidesSegmentation() const
Whether the format enables multiple x86 segments.
Definition format.cc:230
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:203
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:155
virtual void GenerateFile(std::string filename, Module &module)
The main function that handles processing, calculating and generating the final image.
Definition format.cc:133
virtual void ProcessModule(Module &object)
Processes the module object and initializes format fields.
Definition format.cc:125
virtual bool FormatSupportsLibraries() const
Whether the format supports libraries.
Definition format.cc:189
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:44
virtual std::vector< OptionDescription< void > > GetMemoryModelNames()
Returns a list of the supported memory models, used for documentation.
Definition format.cc:39
virtual std::shared_ptr< OptionCollector > GetOptions()
Returns object containing a sequence of option fields provided with the -S command line flag.
Definition format.cc:61
virtual bool FormatIsLinear() const
Whether the address space is linear or segmented.
Definition format.cc:172
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:120
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:160
virtual std::vector< OptionDescription< void > > GetSpecialSymbolNames()
Returns a list of special symbol names recognized by the format, used for documentation.
Definition format.cc:55
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:96
virtual void SetOptions(std::map< std::string, std::string > &options)
Passes command line parameters as settings over to format object.
Definition format.cc:66
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:70
virtual void SetModel(std::string model)
Sets the way memory is organized, typically modifying a built-in script.
Definition format.cc:112
virtual bool FormatIsProtectedMode() const
Whether the format is in protected mode or not (x86 only)
Definition format.cc:165
virtual void CalculateValues()
Intermediate step between processing module and generating output file to set up headers and manageme...
Definition format.cc:129
virtual bool AddSupplementaryOutputFormat(std::string subformat)
If the output format actually drives multiple output formats (resource file, apple double,...
Definition format.cc:34
virtual bool FormatSupportsResources() const
Whether the format supports resources.
Definition format.cc:184
A helper class, encapsulating functionality needed to import binary data.
Definition reader.h:16
A helper class, encapsulating functionality needed to export binary data.
Definition writer.h:15