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

Xenix x.out executable. More...

#include <xenix.h>

Inheritance diagram for Xenix::XOutFormat:
Linker::SegmentManager Linker::OutputFormat Linker::Format Linker::Contents

Public Types

enum  cpu_type {
  CPU_None = 0 , CPU_PDP11 = 1 , CPU_PDP11_23 = 2 , CPU_Z8K = 3 ,
  CPU_8086 = 4 , CPU_68K = 5 , CPU_Z80 = 6 , CPU_VAX = 7 ,
  CPU_NS32K = 8 , CPU_80286 = 9 , CPU_80386 = 10 , CPU_80186 = 11
}
 
enum  relocation_format_type {
  REL_X_OUT_LONG = 0 , REL_X_OUT_SHORT = 1 , REL_B_OUT = 2 , REL_A_OUT = 3 ,
  REL_8086_REL = 4 , REL_8086_ABS = 5
}
 
enum  symbol_format_type {
  SYM_X_OUT = 0 , SYM_B_OUT = 1 , SYM_A_OUT = 2 , SYM_8086_REL = 3 ,
  SYM_8086_ABS = 4 , SYM_STRING_TABLE = 5
}
 

Public Member Functions

uint8_t GetCPUByte () const
 
uint8_t GetRelSymByte () const
 
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.
 
- 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.
 
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.
 
virtual void OnCallDirective (std::string identifier)
 Callback function for the CALL directive.
 
std::shared_ptr< SegmentAppendSegment (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< 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.
 
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< OptionCollectorGetOptions ()
 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 void ProcessModule (Module &object)
 Processes the module object and initializes format fields.
 
virtual void CalculateValues ()
 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.
 
virtual void GenerateFile (std::string filename, Module &module)
 The main function that handles processing, calculating and generating the final image.
 
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 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
 
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 ImageAsImage () const
 Retrieves a randomly accessible image.
 
std::shared_ptr< ImageAsImage ()
 Retrieves a randomly accessible image.
 

Public Attributes

uint16_t header_size = 0
 
uint32_t text_size = 0
 
uint32_t data_size = 0
 
uint32_t bss_size = 0
 
uint32_t symbol_table_size = 0
 
uint32_t relocation_size = 0
 
uint32_t entry_address = 0
 
cpu_type cpu = CPU_None
 
::EndianType endiantype = ::LittleEndian
 
relocation_format_type relocation_format
 
symbol_format_type symbol_format
 
uint16_t runtime_environment = 0
 
uint32_t text_relocation_size = 0
 
uint32_t data_relocation_size = 0
 
uint32_t text_base_address = 0
 
uint32_t data_base_address = 0
 
uint32_t stack_size = 0
 
- 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
 

Static Public Attributes

static constexpr uint16_t Flag_Executable = 0x0001
 
static constexpr uint16_t Flag_SeparateInsData = 0x0002
 
static constexpr uint16_t Flag_PureText = 0x0004
 
static constexpr uint16_t Flag_FixedStack = 0x0008
 
static constexpr uint16_t Flag_TextOverlay = 0x0010
 
static constexpr uint16_t Flag_LargeData = 0x0020
 
static constexpr uint16_t Flag_LargeText = 0x0040
 
static constexpr uint16_t Flag_FloatingPoint = 0x0080
 
static constexpr uint16_t Flag_VirtualModule = 0x0100
 
static constexpr uint16_t Flag_HugeData = 0x0100
 
static constexpr uint16_t Flag_Iterated = 0x0200
 
static constexpr uint16_t Flag_Absolute = 0x0400
 
static constexpr uint16_t Flag_SegmentTable = 0x0800
 
static constexpr uint16_t Flag_AdvisoryLocking = 0x1000
 
static constexpr uint16_t Flag_Xenix53Required = 0x2000
 
static constexpr uint16_t Flag_Xenix2x = 0x4000
 
static constexpr uint16_t Flag_Xenix3x = 0x8000
 
static constexpr uint16_t Flag_Xenix5x = 0xC000
 

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.
 

Detailed Description

Xenix x.out executable.

Member Function Documentation

◆ Dump()

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

Display file contents in a nice manner.

Reimplemented from Linker::Format.

◆ ReadFile()

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

Loads file into memory.

Implements Linker::Format.

◆ WriteFile()

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

Stores data in memory to file.

Implements Linker::Format.


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