|
RetroLinker
Linker for several 8-bit, 16-bit and 32-bit formats
|
A record that defines a segment, used for SEGDEF records. More...
#include <omf.h>
Classes | |
| class | LoadTimeLocatable |
| Additional data for LTL segment, not part of TIS. More... | |
| struct | Relocatable |
| Type representing a relocatable segment. More... | |
Public Types | |
| enum | alignment_t : uint8_t { AlignAbsolute = 0 , Align1 = 1 , Align2 = 2 , Align16 = 3 , AlignPage = 4 , AlignLTL16 = 6 , Align256 = FlagIntel | AlignPage , Align4096 = FlagTIS | AlignPage , AlignUnnamed = FlagIntel | 5 , Align32 = FlagTIS | 5 } |
| Alignment type for a segment. More... | |
| enum | combination_t : uint8_t { Combination_Private = 0 , Combination_Merge_Highest = 1 , Combination_Append = 2 , Combination_Public = Combination_Append , Combination_Join_Low = 4 , Combination_Public4 = FlagTIS | 4 , Combination_Join_High = FlagIntel | 5 , Combination_Stack = FlagTIS | 5 , Combination_Merge_Low = FlagIntel | 6 , Combination_Common = FlagTIS | 6 , Combination_Merge_High = 7 , Combination_Public7 = FlagTIS | 4 } |
| Describes how two segments of the same name and class name should be combined. More... | |
| enum | access_t { AccessReadOnly = 0 , AccessExecuteOnly = 1 , AccessExecuteRead = 2 , AccessReadWrite = 3 } |
| Represents an additional field used by Phar Lap. | |
| typedef uint32_t | Absolute |
| Additional data used for absolute segments, type 0 or 5 if Intel version is used. | |
Public Types inherited from OMF::OMF86Format::Record | |
| enum | record_type_t { RHEADR = 0x6E , REGINT = 0x70 , REDATA = 0x72 , RIDATA = 0x74 , OVLDEF = 0x76 , ENDREC = 0x78 , BLKDEF = 0x7A , BLKEND = 0x7C , DEBSYM = 0x7E , THEADR = 0x80 , LHEADR = 0x82 , PEDATA = 0x84 , PIDATA = 0x86 , COMENT = 0x88 , MODEND16 = 0x8A , MODEND = 0x8A , MODEND32 = 0x8B , EXTDEF = 0x8C , TYPDEF = 0x8E , PUBDEF16 = 0x90 , PUBDEF = 0x90 , PUBDEF32 = 0x91 , LOCSYM = 0x92 , LINNUM = 0x94 , LNAMES = 0x96 , SEGDEF = 0x98 , GRPDEF = 0x9A , FIXUPP16 = 0x9C , FIXUPP = 0x9C , FIXUPP32 = 0x9D , LEDATA16 = 0xA0 , LEDATA = 0xA0 , LEDATA32 = 0xA1 , LIDATA16 = 0xA2 , LIDATA = 0xA2 , LIDATA32 = 0xA3 , LIBHED = 0xA4 , LIBNAM = 0xA6 , LIBLOC = 0xA8 , LIBDIC = 0xAA , COMDEF = 0xB0 , BAKPAT16 = 0xB2 , BAKPAT = 0xB2 , BAKPAT32 = 0xB3 , LEXTDEF16 = 0xB4 , LEXTDEF = 0xB4 , LEXTDEF32 = 0xB5 , LPUBDEF16 = 0xB6 , LPUBDEF = 0xB6 , LPUBDEF32 = 0xB7 , LCOMDEF = 0xB8 , CEXTDEF = 0xBC , COMDAT16 = 0xC2 , COMDAT = 0xC2 , COMDAT32 = 0xC3 , LINSYM16 = 0xC4 , LINSYM = 0xC4 , LINSYM32 = 0xC5 , ALIAS = 0xC6 , NBKPAT16 = 0xC8 , NBKPAT = 0xC8 , NBKPAT32 = 0xC9 , LLNAMES = 0xCA , VERNUM = 0xCC , VENDEXT = 0xCE , LibraryHeader = 0xF0 , LibraryEnd = 0xF1 } |
| The recognized record types in an OMF86 file. | |
Public Member Functions | |
| SegmentDefinitionRecord (record_type_t record_type) | |
| void | ReadRecordContents (OMF86Format *omf, Linker::Reader &rd) override |
| Reads the record contents, except for the type, length and checksum. | |
| uint16_t | GetRecordSize (OMF86Format *omf) const override |
| Calculates the required bytes to write the record, might be less than record_length. | |
| void | WriteRecordContents (OMF86Format *omf, ChecksumWriter &wr) const override |
| Writes the record contents, except for the type, length and checksum. | |
| void | CalculateValues (OMF86Format *omf, Module *mod) override |
| Updates all fields that will be used for writing an OMF module, should be called before output. | |
| void | ResolveReferences (OMF86Format *omf, Module *mod) override |
| Resolves any fields read from an OMF module, should be called after inpnut. | |
| void | ReadRecordContents (OMFFormat *omf, Linker::Reader &rd) override |
| Converts omf to OMF86Format and calls the other implementation of ReadRecordContents. | |
| virtual void | ReadRecordContents (OMF86Format *omf, Linker::Reader &rd)=0 |
| Reads the record contents, except for the type, length and checksum. | |
| uint16_t | GetRecordSize (OMFFormat *omf) const override |
| Converts omf to OMF86Format and calls the other implementation of GetRecordSize. | |
| virtual uint16_t | GetRecordSize (OMF86Format *omf) const=0 |
| Calculates the required bytes to write the record, might be less than record_length. | |
| void | WriteRecordContents (OMFFormat *omf, ChecksumWriter &wr) const override |
| Converts omf to OMF86Format and calls the other implementation of WriteRecordContents. | |
| virtual void | WriteRecordContents (OMF86Format *omf, ChecksumWriter &wr) const=0 |
| Writes the record contents, except for the type, length and checksum. | |
Public Member Functions inherited from OMF::OMF86Format::Record | |
| Record (record_type_t record_type) | |
| bool | Is32Bit (OMF86Format *omf) const |
| Records are 32-bit if the least significant bit of their record type is set. | |
| size_t | GetOffsetSize (OMF86Format *omf) const |
| The number of bytes in an offset appearing inside the record, 2 for 16-bit records, 4 for 32-bit records. | |
Public Member Functions inherited from OMF::OMFFormat::Record | |
| Record (uint8_t record_type=0) | |
| virtual void | WriteRecord (OMFFormat *omf, Linker::Writer &wr) const |
| Writes the full record. | |
Public Attributes | |
| uint64_t | segment_length |
| The length of the segment (maximum 0x100000000) | |
| alignment_t | alignment |
| Alignment of segment. | |
| std::variant< Relocatable, Absolute, LoadTimeLocatable > | location = Relocatable{} |
| Information on where the segment should be placed at runtime. | |
| combination_t | combination |
| How segments of the same type should be combined. | |
| bool | page_resident = false |
| Set if the segment should not cross a 256 byte page boundary (only Intel) | |
| bool | use32 = false |
| Set if the USE32 directive is used for the segment. The field appears in different places for Phar Lap and TIS. | |
| NameIndex | segment_name |
| The name of the segment (not used for AlignUnnamed) | |
| NameIndex | class_name |
| The name of the segment's class (not used for AlignUnnamed) | |
| NameIndex | overlay_name |
| The name of the overlay the segment appears in (not used for AlignUnnamed) | |
| std::optional< access_t > | access |
| Represents the value of a Phar Lap specific extension word. | |
Public Attributes inherited from OMF::OMFFormat::Record | |
| offset_t | record_offset |
| Offset of record within the file. | |
| uint16_t | record_length |
| Length of record body file, excluding the type byte and 2-byte length field. | |
| uint8_t | record_type |
| A byte value identifying the type of record. | |
Additional Inherited Members | |
Static Public Member Functions inherited from OMF::OMF86Format::Record | |
| static std::shared_ptr< OMFFormat::Record > | ReadRecord (OMF86Format *omf, Linker::Reader &rd) |
| Parses and returns an instance of the next record. | |
A record that defines a segment, used for SEGDEF records.
| enum OMF::OMF86Format::SegmentDefinitionRecord::alignment_t : uint8_t |
Alignment type for a segment.
| Enumerator | |
|---|---|
| AlignAbsolute | Absolute segment, its position in memory is fixed. |
| Align1 | Relocatable segment, byte aligned. |
| Align2 | Relocatable segment, word (2-byte) aligned. |
| Align16 | Relocatable segment, paragraph (16-byte) aligned. |
| AlignPage | Relocatable segment, page aligned, exact size depends on OMF version. |
| AlignLTL16 | Load-time locatable or, if not part of a group, paragraph (16-byte) aligned (Intel only) |
| Align256 | Relocatable segment, page (256-byte) aligned, as defined by Intel. |
| Align4096 | Relocatable segment, page (4096-byte) aligned, as used by IBM. |
| AlignUnnamed | Unnamed absolute portion of the memory address space, type 5 as defined by Intel. |
| Align32 | Relocatable segment, double word (4-byte) aligned, type 5 as defined by TIS. |
| enum OMF::OMF86Format::SegmentDefinitionRecord::combination_t : uint8_t |
Describes how two segments of the same name and class name should be combined.
|
overridevirtual |
Updates all fields that will be used for writing an OMF module, should be called before output.
Reimplemented from OMF::OMF86Format::Record.
|
overridevirtual |
Calculates the required bytes to write the record, might be less than record_length.
Implements OMF::OMF86Format::Record.
|
virtual |
Calculates the required bytes to write the record, might be less than record_length.
Implements OMF::OMF86Format::Record.
|
overridevirtual |
Converts omf to OMF86Format and calls the other implementation of GetRecordSize.
Reimplemented from OMF::OMF86Format::Record.
|
overridevirtual |
Reads the record contents, except for the type, length and checksum.
Implements OMF::OMF86Format::Record.
|
virtual |
Reads the record contents, except for the type, length and checksum.
Implements OMF::OMF86Format::Record.
|
overridevirtual |
Converts omf to OMF86Format and calls the other implementation of ReadRecordContents.
Reimplemented from OMF::OMF86Format::Record.
|
overridevirtual |
Resolves any fields read from an OMF module, should be called after inpnut.
Reimplemented from OMF::OMF86Format::Record.
|
overridevirtual |
Writes the record contents, except for the type, length and checksum.
Implements OMF::OMF86Format::Record.
|
virtual |
Writes the record contents, except for the type, length and checksum.
Implements OMF::OMF86Format::Record.
|
overridevirtual |
Converts omf to OMF86Format and calls the other implementation of WriteRecordContents.
Reimplemented from OMF::OMF86Format::Record.