RetroLinker
Linker for several 8-bit, 16-bit and 32-bit formats
|
MP/M .prl file format. More...
#include <8bitexe.h>
Classes | |
class | PRLOptionCollector |
Public Types | |
enum | application_type { APPL_UNKNOWN , APPL_PRL , APPL_RSX , APPL_RSM , APPL_RSP , APPL_BRS , APPL_SPR , APPL_OVL } |
The format of the generated binary. More... | |
Public Member Functions | |
PRLFormat (application_type application=APPL_PRL) | |
std::shared_ptr< Linker::OptionCollector > | GetOptions () override |
Returns object containing a sequence of option fields provided with the -S command line flag. | |
void | SetOptions (std::map< std::string, std::string > &options) override |
Passes command line parameters as settings over to format object. | |
std::unique_ptr< Script::List > | GetScript (Linker::Module &module) override |
void | OnNewSegment (std::shared_ptr< Linker::Segment > segment) override |
Callback function when allocating a new segment When the linker script runs, it creates segments consecutively. Overriding this method permits the output format to handle the allocated segment. | |
bool | ProcessRelocation (Linker::Module &module, Linker::Relocation &rel, Linker::Resolution resolution) override |
Callback function to process relocations. | |
void | ProcessModule (Linker::Module &module) override |
Processes the module object and initializes format fields. | |
void | ReadFile (Linker::Reader &rd) override |
Loads file into memory. | |
offset_t | WriteFile (Linker::Writer &wr) const override |
Stores data in memory to file. | |
void | ReadWithoutHeader (Linker::Reader &rd, uint16_t image_size) |
Read without header, only needed for RSX files stored inside a CP/M 3 .COM file. | |
void | WriteWithoutHeader (Linker::Writer &wr) const |
Write without header, only needed for RSX files stored inside a CP/M 3 .COM file. | |
void | Dump (Dumper::Dumper &dump) const override |
Display file contents in a nice manner. | |
![]() | |
void | Clear () override |
Resets all fields to their default values, deallocate memory. | |
GenericBinaryFormat (uint64_t default_base_address=0, std::string default_extension="") | |
GenericBinaryFormat (std::string default_extension) | |
offset_t | ImageSize () const override |
Retrieves size of stored data. | |
std::vector< Linker::OptionDescription< void > * > | GetLinkerScriptParameterNames () override |
Returns a list of the parameters used in the linker scripts, used for documentation. | |
void | CreateDefaultSegments () |
void | Link (Linker::Module &module) |
void | CalculateValues () override |
Intermediate step between processing module and generating output file to set up headers and management sections It is expected that after a module is processed, additional steps are required to evaluate the final values of the fields. | |
void | GenerateFile (std::string filename, Linker::Module &module) override |
The main function that handles processing, calculating and generating the final image. | |
std::string | GetDefaultExtension (Linker::Module &module, std::string filename) const override |
Appends a default extension to the filename. | |
![]() | |
void | ClearSegmentManager () |
void | SetLinkScript (std::string script_file, std::map< std::string, std::string > &options) override |
Sets up the linker script and linker parameters. | |
std::unique_ptr< Script::List > | GetScript (Module &module) |
Compiles the linker script into an internal format. | |
offset_t | GetCurrentAddress () const |
Retrieves current address pointer. | |
void | SetCurrentAddress (offset_t address) |
Moves the current address pointer further, and if the current segment already contains data, fill it up to the point. | |
void | AlignCurrentAddress (offset_t align) |
Aligns current address to alignment, using SetCurrentAddress. | |
void | SetLatestBase (offset_t address) |
Sets the base of the current section (the value from which offsets are counted from) | |
void | FinishCurrentSegment () |
Closes the current segment, sets current_segment to null. | |
std::shared_ptr< Segment > | AppendSegment (std::string name) |
Terminates the current segment (if there is one), creates a new segment and attaches it to the image. | |
std::shared_ptr< Segment > | FetchSegment (std::string name) |
Attempts to fetch a segment, returns null if not found. | |
void | AppendSection (std::shared_ptr< Section > section) |
Adds a new section to the current segment, sets the base to the same as the segment. | |
void | ProcessScript (std::unique_ptr< Script::List > &directives, Module &module) |
Executes a parsed linker script on a module and collects segments The function OnNewSegment can be defined to handle each newly allocated segment. | |
void | ProcessAction (std::unique_ptr< Script::Node > &action, Module &module) |
void | PostProcessAction (std::unique_ptr< Script::Node > &action, Module &module) |
void | ProcessCommand (std::unique_ptr< Script::Node > &command, Module &module) |
bool | CheckPredicate (std::unique_ptr< Script::Node > &predicate, std::shared_ptr< Section > section, Module &module) |
offset_t | EvaluateExpression (std::unique_ptr< Script::Node > &expression, Module &module) |
![]() | |
virtual bool | AddSupplementaryOutputFormat (std::string subformat) |
If the output format actually drives multiple output formats (resource file, apple double, etc.), specify multiple types, return false if unknown. | |
virtual std::vector< OptionDescription< void > > | GetMemoryModelNames () |
Returns a list of the supported memory models, used for documentation. | |
virtual std::vector< OptionDescription< void > > | GetSpecialSymbolNames () |
Returns a list of special symbol names recognized by the format, used for documentation. | |
std::optional< std::string > | FetchOption (std::map< std::string, std::string > &options, std::string name) |
Convenience method to look up option by name. | |
std::string | FetchOption (std::map< std::string, std::string > &options, std::string name, std::string default_value) |
Convenience method to look up option by name, returning default value if name is missing. | |
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. | |
virtual void | SetModel (std::string model) |
Sets the way memory is organized, typically modifying a built-in script. | |
virtual std::string | GetDefaultExtension (Module &module) const |
Provides a default filename for the output file. | |
virtual bool | FormatSupportsSegmentation () const |
Whether the format supports multiple segments. | |
virtual bool | FormatIs16bit () const |
Whether the format is 16-bit or not. | |
virtual bool | FormatIsProtectedMode () const |
Whether the format is in protected mode or not (x86 only) | |
virtual bool | FormatIsLinear () const |
Whether the address space is linear or segmented. | |
virtual bool | FormatSupportsResources () const |
Whether the format supports resources. | |
virtual bool | FormatSupportsLibraries () const |
Whether the format supports libraries. | |
virtual unsigned | FormatAdditionalSectionFlags (std::string section_name) const |
![]() | |
Format (offset_t file_offset=0) | |
offset_t | WriteFile (Writer &wr, offset_t count, offset_t offset=0) const override |
Writes data of non-zero filled sections. | |
![]() | |
virtual std::shared_ptr< const ActualImage > | AsImage () const |
Retrieves a randomly accessible image. | |
std::shared_ptr< ActualImage > | AsImage () |
Retrieves a randomly accessible image. | |
Static Public Member Functions | |
static uint16_t | GetDefaultBaseAddress (application_type application) |
static std::string | GetDefaultApplicationExtension (application_type application) |
Public Attributes | |
uint16_t | zero_fill = 0 |
Additional memory to allocate, similar to .bss. | |
uint16_t | load_address = 0 |
Address to be loaded at, only used for .OVL files. | |
uint16_t | cslen = 0 |
Code segment length, only used for .SPR files in banked systems. | |
bool | suppress_relocations |
Do not include relocations, only used for .OVL files. | |
bool | option_banked_bios = false |
On a banked BIOS, align the data segment of the .SPR on a page boundary and store the length of the code segment in the header. | |
std::set< uint16_t > | relocations |
Offsets to bytes referencing pages that must be relocated. | |
application_type | application |
Target application type. | |
![]() | |
std::shared_ptr< Linker::Image > | image = nullptr |
The actual stored image. | |
bool | position_independent |
Set when the generated code must not reference absolute references. | |
uint64_t | base_address = 0 |
Address at which image is stored, it can be format specific or provided as a parameter. | |
std::string | extension |
Default filename extension for executables (such as .com for MS-DOS, .r for Human68k) | |
![]() | |
offset_t | current_base = 0 |
The base address of the current section. | |
std::vector< std::shared_ptr< Segment > > | segment_vector |
Ordered sequence of segments. | |
std::map< std::string, std::shared_ptr< Segment > > | segment_map |
Map of segments from their names. | |
std::shared_ptr< Segment > | current_segment |
Currently processed segment. | |
std::map< std::string, Location > | linker_parameters |
Parameters that permit customizing the linker script. | |
std::string | linker_script |
Contents of the linker script. | |
![]() | |
offset_t | file_offset |
Additional Inherited Members | |
![]() | |
static std::vector< Linker::OptionDescription< void > * > | ParameterNames |
![]() | |
offset_t | current_address = 0 |
Holds the current address value when there is no current_segment. | |
bool | current_is_template = false |
bool | current_is_template_head = false |
offset_t | template_counter = 0 |
std::string | current_template_name |
MP/M .prl file format.
The format of the generated binary.
This controls the difference between the layout of the generated binary, as well as defaults such as base address and file extension. The only ones that actually require special treatment are SPR and OVL files, the other file types are included for convenience.
|
overridevirtual |
Display file contents in a nice manner.
Reimplemented from Binary::GenericBinaryFormat.
|
overridevirtual |
Returns object containing a sequence of option fields provided with the -S command line flag.
Reimplemented from Linker::OutputFormat.
|
overridevirtual |
Reimplemented from Binary::GenericBinaryFormat.
|
overridevirtual |
Callback function when allocating a new segment When the linker script runs, it creates segments consecutively. Overriding this method permits the output format to handle the allocated segment.
Reimplemented from Binary::GenericBinaryFormat.
|
overridevirtual |
Processes the module object and initializes format fields.
Reimplemented from Binary::GenericBinaryFormat.
|
overridevirtual |
Callback function to process relocations.
Reimplemented from Binary::GenericBinaryFormat.
|
overridevirtual |
Loads file into memory.
Reimplemented from Binary::GenericBinaryFormat.
|
overridevirtual |
Passes command line parameters as settings over to format object.
Reimplemented from Linker::OutputFormat.
|
overridevirtual |
Stores data in memory to file.
Reimplemented from Binary::GenericBinaryFormat.