|
RetroLinker
Linker for several 8-bit, 16-bit and 32-bit formats
|
PowerPC Classic Mac OS "PEF" file format. More...
#include <pefexe.h>
Classes | |
| struct | ExportedSymbol |
| struct | HashTableEntry |
| class | ImportedLibrary |
| class | ImportedSymbol |
| class | Name |
| Represents a string stored in the loader section string table. More... | |
| class | PatternInitialization |
| Pattern initialization data. More... | |
| struct | Reference |
| Represents a reference to some data, stored as an offset into a section pair. More... | |
| class | Relocation |
| Represents a single relocated 32-bit word in memory. More... | |
| class | RelocationProcessor |
| A representation of a state machine that generates the actual relocations using the relocation data in a file. More... | |
| class | RelocOpcode |
| Represents a single 16-bit or 32-bit opcode that encodes relocations. More... | |
| class | Section |
Public Types | |
| enum | cpu_type { M68K = 0x6D36386B , PPC = 0x70777063 } |
| enum | symbol_class_type { Code = 0 , Data = 1 , TVect = 2 , TOC = 3 , Glue = 4 } |
Public Member Functions | |
| uint32_t | GetSectionNameTableOffset () const |
| std::shared_ptr< ImportedLibrary > | FetchImportLibrary (std::string name) |
| uint32_t | GetLibraryDescriptionsSize () const |
| uint32_t | GetSymbolTablesSize () const |
| uint32_t | GetRelocationHeadersSize () const |
| uint32_t | GetRelocationAreaSize () const |
| uint32_t | GetLoaderStringAreaSize () const |
| uint32_t | GetExportHashTableSize () const |
| uint32_t | GetExportKeyTableSize () const |
| uint32_t | GetExportSymbolTableSize () const |
| uint32_t | GetMinimumRelocInstrOffset () const |
| uint32_t | GetLoaderSectionSize () const |
| bool | FormatSupportsLibraries () const override |
| Whether the format supports libraries. | |
| bool | FormatSupportsResources () const override |
| Whether the format supports resources. | |
| void | ReadLoaderSection (Linker::Reader &rd) |
| void | WriteLoaderSection (Linker::Writer &wr) const |
| void | ReadFile (Linker::Reader &rd) override |
| Loads file into memory. | |
| 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. | |
| offset_t | WriteFile (Linker::Writer &wr) const override |
| Stores data in memory to file. | |
| void | Dump (Dumper::Dumper &dump) const override |
| Display file contents in a nice manner. | |
| 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. | |
| std::unique_ptr< Script::List > | GetScript (Linker::Module &module) |
| void | Link (Linker::Module &module) |
| void | SortImports () |
| void | ProcessRelocations (Linker::Module &module) |
| void | ProcessModule (Linker::Module &module) override |
| Processes the module object and initializes format fields. | |
| void | GenerateFile (std::string filename, Linker::Module &module) override |
| The main function that handles processing, calculating and generating the final image. | |
Public Member Functions inherited from Linker::SegmentManager | |
| 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. | |
| virtual void | OnCallDirective (std::string identifier) |
| Callback function for the CALL directive. | |
| std::shared_ptr< Segment > | AppendSegment (std::string name) |
| Creates a new segment and attaches it to the image. | |
| void | AppendSegment (std::shared_ptr< Segment > segment) |
| Attaches the segment 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 Member Functions inherited from Linker::OutputFormat | |
| 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 > * > | GetLinkerScriptParameterNames () |
| Returns a list of the parameters used in the linker scripts, used for documentation. | |
| virtual std::vector< OptionDescription< void > > | GetSpecialSymbolNames () |
| Returns a list of special symbol names recognized by the format, used for documentation. | |
| virtual std::shared_ptr< OptionCollector > | GetOptions () |
| Returns object containing a sequence of option fields provided with the -S command line flag. | |
| virtual void | SetOptions (std::map< std::string, std::string > &options) |
| Passes command line parameters as settings over to format object. | |
| 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, std::string filename) const |
| Appends a default extension to the filename. | |
| 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 unsigned | FormatAdditionalSectionFlags (std::string section_name) const |
| virtual void | AllocateSymbols (Module &module) const |
| Instructs the module to allocate any unallocated local symbols. | |
Public Member Functions inherited from Linker::Format | |
| Format (offset_t file_offset=0) | |
| virtual void | Clear () |
| Resets all fields to their default values, deallocate memory. | |
| offset_t | ImageSize () const override |
| Retrieves size of stored data. | |
| offset_t | WriteFile (Writer &wr, offset_t count, offset_t offset=0) const override |
| Writes data of non-zero filled sections. | |
Public Member Functions inherited from Linker::Contents | |
| virtual std::shared_ptr< const Image > | AsImage () const |
| Retrieves a randomly accessible image. | |
| std::shared_ptr< Image > | AsImage () |
| Retrieves a randomly accessible image. | |
Public Attributes | |
| cpu_type | architecture = PPC |
| uint32_t | format_version = 1 |
| uint32_t | date_time_stamp = 0 |
| uint32_t | old_def_version = 0 |
| uint32_t | old_imp_version = 0 |
| uint32_t | current_version = 0 |
| uint32_t | reserved = 0 |
| uint16_t | inst_section_count = 0 |
| std::vector< std::shared_ptr< Section > > | sections |
| std::vector< std::string > | section_name_table |
| uint32_t | section_name_table_end = 0 |
| uint32_t | loader_section_offset = 0 |
| Reference | main_symbol |
| Reference | init_symbol |
| Reference | term_symbol |
| std::vector< std::shared_ptr< ImportedLibrary > > | imported_libraries |
| std::map< std::string, std::shared_ptr< ImportedLibrary > > | named_imported_libraries |
| std::vector< std::shared_ptr< ImportedSymbol > > | imported_symbols |
| std::vector< uint32_t > | reloc_section_indexes |
| uint32_t | reloc_instr_offset = 0 |
| uint32_t | loader_strings_offset = 0 |
| uint32_t | export_hash_offset = 0 |
| std::vector< RelocOpcode > | relocs_area |
| uint32_t | relocs_area_size = 0 |
| std::vector< std::string > | loader_string_table |
| uint32_t | loader_string_table_size = 0 |
| std::vector< HashTableEntry > | hash_table |
| std::vector< std::shared_ptr< ExportedSymbol > > | exported_symbols |
| std::map< std::shared_ptr< Linker::Segment >, std::shared_ptr< Section > > | segment_to_section_map |
Public Attributes inherited from Linker::SegmentManager | |
| 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. | |
Public Attributes inherited from Linker::Format | |
| offset_t | file_offset |
Additional Inherited Members | |
Protected Attributes inherited from Linker::SegmentManager | |
| offset_t | current_address = 0 |
| Holds the current address value when there is no current_segment. | |
| bool | current_is_template_head = false |
Set during evaluation of guard in a for <guard> { <body> } statement. | |
| bool | current_is_template = false |
Set during evaluation of body in a for <guard> { <body> } statement. | |
| offset_t | template_counter = 0 |
Counts how many times a for statement has been invoked. | |
| bool | condition_failed = false |
Condition to signal end of current for statement. | |
| std::string | current_template_name |
Records the name of the currently generating segment for a for statement. | |
PowerPC Classic Mac OS "PEF" file format.
|
overridevirtual |
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.
Reimplemented from Linker::OutputFormat.
|
overridevirtual |
Display file contents in a nice manner.
Reimplemented from Linker::Format.
|
overridevirtual |
Whether the format supports libraries.
Reimplemented from Linker::OutputFormat.
|
overridevirtual |
Whether the format supports resources.
Formats such as NE, LE/LX, PE and the Macintosh classic support including resources in the final binary. To simplify writing resources, the ELF parser permits incorporating them directly in the binary image as $$RSRC$_<type>$<id>.
Reimplemented from Linker::OutputFormat.
|
overridevirtual |
The main function that handles processing, calculating and generating the final image.
Reimplemented from Linker::OutputFormat.
|
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 Linker::SegmentManager.
|
overridevirtual |
Processes the module object and initializes format fields.
Reimplemented from Linker::OutputFormat.
|
overridevirtual |
Loads file into memory.
Implements Linker::Format.
|
overridevirtual |
Stores data in memory to file.
Implements Linker::Format.