RetroLinker
Linker for several 8-bit, 16-bit and 32-bit formats
Loading...
Searching...
No Matches
Classes | Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | List of all members
Amiga::HunkFormat Class Reference

AmigaOS/TRIPOS Hunk files. More...

#include <hunk.h>

Inheritance diagram for Amiga::HunkFormat:
Linker::SegmentManager Linker::OutputFormat Linker::Format Linker::Image

Classes

class  Block
 The smallest unit of a Hunk file, it starts with a type word. A HUNK_END or HUNK_BREAK block is represented by this. More...
 
class  BssBlock
 Represents the declaration block of a HUNK_BSS segment (hunk) that needs to be allocated and filled with zero at load time. More...
 
class  DebugBlock
 Represents a HUNK_DEBUG block. More...
 
class  HeaderBlock
 Represents the first block inside of an executable file, a HUNK_HEADER. More...
 
class  Hunk
 The smallest loadable unit of a Hunk file is the hunk, it roughly corresponds to a segment in other file formats. More...
 
class  IndexBlock
 
class  LibraryBlock
 Represents a HUNK_LIB block. More...
 
class  LoadBlock
 Represents the load block of a non-bss segment (hunk) HUNK_CODE/HUNK_DATA/HUNK_PPC_CODE, containing a memory image. More...
 
class  Module
 Module is a program unit containing several hunks. More...
 
class  OverlayBlock
 Represents a HUNK_OVERLAY block. More...
 
class  RelocatableBlock
 Represents the block that gives the memory loaded contents of the hunk (segment) More...
 
struct  Relocation
 
class  RelocationBlock
 Represents a block containing relocations. More...
 
class  SymbolBlock
 Represents a HUNK_EXT or HUNK_SYMBOL block. More...
 
class  TextBlock
 Represents the first block inside of an object file or a hunk. This class is used for HUNK_UNIT and HUNK_NAME blocks. More...
 

Public Types

enum  cpu_type { CPU_M68K = Block::HUNK_CODE , CPU_PPC = Block::HUNK_PPC_CODE }
 
enum  flags { FastMemory = Linker::Section::CustomFlag , ChipMemory = Linker::Section::CustomFlag << 1 }
 

Public Member Functions

bool IsExecutable () const
 
offset_t ImageSize () const override
 Retrieves size of stored data.
 
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 Dump (Dumper::Dumper &dump) const override
 Display file contents in a nice manner.
 
unsigned FormatAdditionalSectionFlags (std::string section_name) const override
 
void SetOptions (std::map< std::string, std::string > &options) override
 Passes command line parameters as settings over to format object.
 
void AddHunk (const Hunk &hunk)
 
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::ListGetScript (Linker::Module &module)
 
void Link (Linker::Module &module)
 
void ProcessModule (Linker::Module &module) override
 Processes the module object and initializes format fields.
 
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) const override
 Provides a default filename for the output file.
 
- 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::ListGetScript (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< SegmentAppendSegment (std::string name)
 Terminates the current segment (if there is one), creates a new segment and attaches it to the image.
 
std::shared_ptr< SegmentFetchSegment (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.
 
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 bool FormatSupportsSegmentation () const
 Whether the format supports multiple segments.
 
virtual bool FormatIs16bit () const
 Whether the format is 16-bit or not.
 
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.
 
- 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 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::Image
virtual std::shared_ptr< const ActualImageAsImage () const
 Retrieves a randomly accessible image.
 
std::shared_ptr< ActualImageAsImage ()
 Retrieves a randomly accessible image.
 

Static Public Member Functions

static std::string ReadString (uint32_t longword_count, Linker::Reader &rd)
 
static std::string ReadString (Linker::Reader &rd, uint32_t &longword_count)
 
static std::string ReadString (Linker::Reader &rd)
 
static void WriteStringContents (Linker::Writer &wr, std::string name)
 
static void WriteString (Linker::Writer &wr, std::string name)
 
static offset_t MeasureString (std::string name)
 

Public Attributes

std::vector< Modulemodules
 A collection of modules/program units.
 
cpu_type cpu = CPU_PPC
 
std::map< std::shared_ptr< Linker::Segment >, size_t > segment_index
 
- 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< Segmentcurrent_segment
 Currently processed segment.
 
std::map< std::string, Locationlinker_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 = false
 
bool current_is_template_head = false
 
offset_t template_counter = 0
 
std::string current_template_name
 

Detailed Description

AmigaOS/TRIPOS Hunk files.

Introduced for the TRIPOS system and then adopted for AmigaOS, a hunk file stores the binary executable for an Amiga application.

Member Enumeration Documentation

◆ flags

Enumerator
FastMemory 

Section to be stored in fast memory.

ChipMemory 

Section to be stored in chip memory.

Member Function Documentation

◆ CalculateValues()

void HunkFormat::CalculateValues ( )
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.

◆ Dump()

void HunkFormat::Dump ( Dumper::Dumper & dump) const
overridevirtual

Display file contents in a nice manner.

Reimplemented from Linker::Format.

◆ FormatAdditionalSectionFlags()

unsigned HunkFormat::FormatAdditionalSectionFlags ( std::string section_name) const
overridevirtual

Reimplemented from Linker::OutputFormat.

◆ GenerateFile()

void HunkFormat::GenerateFile ( std::string filename,
Linker::Module & module )
overridevirtual

The main function that handles processing, calculating and generating the final image.

Reimplemented from Linker::OutputFormat.

◆ GetDefaultExtension()

std::string HunkFormat::GetDefaultExtension ( Linker::Module & module) const
overridevirtual

Provides a default filename for the output file.

Typically a.out or some other extension, such as a.exe.

Reimplemented from Linker::OutputFormat.

◆ ImageSize()

offset_t HunkFormat::ImageSize ( ) const
overridevirtual

Retrieves size of stored data.

Reimplemented from Linker::Format.

◆ OnNewSegment()

void HunkFormat::OnNewSegment ( std::shared_ptr< Linker::Segment > segment)
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.

◆ ProcessModule()

void HunkFormat::ProcessModule ( Linker::Module & object)
overridevirtual

Processes the module object and initializes format fields.

Reimplemented from Linker::OutputFormat.

◆ ReadFile()

void HunkFormat::ReadFile ( Linker::Reader & rd)
overridevirtual

Loads file into memory.

Implements Linker::Format.

◆ SetOptions()

void HunkFormat::SetOptions ( std::map< std::string, std::string > & options)
overridevirtual

Passes command line parameters as settings over to format object.

Reimplemented from Linker::OutputFormat.

◆ WriteFile()

offset_t HunkFormat::WriteFile ( Linker::Writer & wr) const
overridevirtual

Stores data in memory to file.

Implements Linker::Format.

Member Data Documentation

◆ modules

std::vector<Module> Amiga::HunkFormat::modules

A collection of modules/program units.

For executable files, the first module is the main program, and further modules are overlays.


The documentation for this class was generated from the following files: