Record types:
Output an alias definition record.
Do we allow zero sized objects?
Output byte to object file.
Output bytes to object file.
Define a new code segment. Input: name name of segment, if null then revert to default suffix 0 use name as is 1 append "_TEXT" to name Output: cseg segment index of new current code segment Coffset starting offset in cseg
Setup for Symbol s to go into a COMDAT segment. Output (if s is a function): cseg segment index of new current code segment Coffset starting offset in cseg
Embed compiler version in .obj file.
Ouput read only data for data. Output: *pseg segment of that data
Update data information about symbol align for output and assign segment if not already specified.
Output DOSSEG coment record.
Stuff pointer to function in its own segment. Used for static ctor and dtor lists.
Embed string in executable.
Export a function name.
Output an external definition. Input: s Symbol to do EXTDEF on
Generate far16 thunk. Input: s Symbol to generate a thunk for
Define a far data segment. Input: name Name of module size Size of the segment to be created
Mark object file as using floating point.
Update function info after codgen
Convert reference to imported name.
Output library name. Output: name is modified
Perform initialization that applies to all .obj output files. Input: filename source file name csegname code segment name (can be null)
Initialize the start of object output for this particular .obj file.
Output word of data. (Two words if segment:offset pair.) Input: seg CODE, DATA, CDATA, UDATA offset offset of start of data data word of data lcfd LCxxxx | FDxxxx if (FD_F2 | FD_T6) idx1 = external Symbol # else idx1 = frame datum idx2 = target datum
Output an iterated data block of 0s. (uninitialized data only)
Output linker directive. Output: directive is modified
Record line number linnum at offset.
Output a lazy extern record. s1 is the lazy extern, s2 is its default resolution.
Mangle a name.
Append pointer to ModuleInfo to "FM" segment. The FM segment is bracketed by the empty FMB and FME segments.
Refer to address that is in the code segment. Only offsets are output, regardless of the memory model. Used to put values in switch address tables. Input: seg = where the address is going (CODE or DATA) offset = offset within seg val = displacement from start of this module
Refer to address that is in the data segment. Input: seg = where the address is going offset = offset within seg val = displacement from address targetdatum = DATA, CDATA or UDATA, depending where the address is flags = CFoff, CFseg
Refer to address that is in a far segment. Input: seg = where the address is going offset = offset within seg val = displacement from address farseg = far segment index flags = CFoff, CFseg
Refer to an identifier. Input: seg = where the address is going (CODE or DATA) offset = offset within seg s . Symbol table entry for identifier val = displacement from identifier flags = CFselfrel: self-relative CFseg: get segment CFoff: get offset
Output segment and group definitions. Input: codesize size of code segment datasize size of initialized data segment cdatasize size of initialized const data segment udatasize size of uninitialized data segment
Set up function to be called as static constructor on program startup or static destructor on program shutdown.
Reset code seg to existing seg. Used after a COMDAT for a function is done.
Set start address
Symbol is the function that calls the static constructors. Put a pointer to it into a special segment that the startup code looks at. Input: s static constructor function dtor number of static destructors seg 1: user 2: lib 3: compiler
Get segment for readonly string literals. The linker will pool strings in this section.
Output read only data and generate a symbol for it.
Terminate package.
Fixup and terminate object file.
Output module name record.
Define segment for Thread Local Storage. Output: tlsseg set to segment number for TLS segment.
Embed string in obj.
Output a weak extern record. s1 is the weak extern, s2 is its default resolution.
Append byte to segment.
Append bytes to segment.
Output long word of data. Input: seg CODE, DATA, CDATA, UDATA offset offset of start of data data long word of data Present only if size == 2: lcfd LCxxxx | FDxxxx if (FD_F2 | FD_T6) idx1 = external Symbol # else idx1 = frame datum idx2 = target datum
write a reference to a mutable pointer into the object file
Append an iterated data block of 0s. (uninitialized data only)
For defining segments.
Read index.
Allocate a new segment. Return index for the new segment.
Insert a type index number. Input: p . where to put the 1 or 2 byte index index = the 15 bit index
Output an object file data record.
Output header stuff for object files. Input: csegname Name to use for code segment (null if use default)
Ledata records
Output a common block definition. Input: p . external identifier flag TRUE: in default data segment FALSE: not in default data segment size size in bytes of each elem count number of elems
Compiler implementation of the D programming language.