RetroLinker
Linker for several 8-bit, 16-bit and 32-bit formats
|
A helper class to collect sections into segments. More...
#include <linker.h>
Public Member Functions | |
void | ClearLinkerManager () |
void | SetLinkScript (std::string script_file, std::map< std::string, std::string > &options) |
Sets up the linker script and linker parameters. | |
bool | SetLinkerParameter (std::map< std::string, std::string > &options, std::string key) |
Sets a single linker parameter, if inside options. | |
bool | SetLinkerParameter (std::map< std::string, std::string > &options, std::string key, std::string variable) |
Sets a single linker parameter, if inside options. | |
std::unique_ptr< Script::List > | GetScript (Linker::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. | |
virtual void | OnNewSegment (std::shared_ptr< Segment > segment) |
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. | |
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) |
Public Attributes | |
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. | |
A helper class to collect sections into segments.
std::shared_ptr< Segment > LinkerManager::AppendSegment | ( | std::string | name | ) |
Terminates the current segment (if there is one), creates a new segment and attaches it to the image.
name | The name of the new segment |
|
virtual |
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 in Binary::PRLFormat, Binary::UZI280Format, AOut::AOutFormat, Binary::GenericBinaryFormat, COFF::COFFFormat, DigitalResearch::CPM68KFormat, X68000::HUFormat, Amiga::HunkFormat, Microsoft::LEFormat, Apple::ResourceFork, MINIX::MINIXFormat, Microsoft::MZFormat, PharLap::MPFormat, and PharLap::P3Format::Flat.
offset_t Linker::LinkerManager::current_base = 0 |
The base address of the current section.
By default, sections within a segment are assumed to have the same segment base. This variable stores the segment base, as valid for the currently processed section.