SP 10
SP 10
Absolute Loader
An object program is loaded at the address specified on the START directive. No relocation or linking is needed Thus is very simple
No text record corresponds here. XXX indicates that the previous contents of these locations remain unchanged.
Bootstrap Loader
When a computer is first turned on or restarted, a special type of absolute loader must be executed (stored in ROM on a PC). The bootstrap loader loads the first program to be run by the computer usually the operating system, from the boot disk (e.g., a hard disk or a floppy disk) It then jumps to the just loaded program to execute it. Normally, the just loaded program is very small (e.g., a disk sectors size, 512 bytes) and is a loader itself. The just loaded loader will continue to load another larger loader and jump to it. This process repeats another the entire large operating system is loaded.
Relocating Loader
Two methods to describe where in the object program to modify the address (add the program starting address)
Use modification records
Suitable for a small number of changes
PC-relative
Base-relative
Base-relative
This program is written in SIC/XE instructions. Program counterrelative and base-relative addressing are extensively used to avoid the need for many address modification records.
Direct addressing
Direct addressing
Direct addressing This program is written in SIC instructions. Only direct addressing can be used. As such, we need many modification records. This not only makes the object program bigger, it also slows down the loading process.
This one-byte F1 makes the LDX instruction on line 210 begins a new text record. This is because each relocation bit should be associated with a three-byte word. However, this data item occupies only one byte, which violates the Alignment rule.
Program Linking
A program may be composed of many control sections. These control sections may be assembled separately. These control sections may be loaded at different addresses in memory. External references to symbol defined in other control sections can only be resolved (calculating their addresses in memory) after these control sections are loaded into memory.
REF1
Program A
LISTA is defined in its own program and its address is immediately available. Therefore, we can simply use program counter-relative addressing
Program B
Because LISTA is an external reference, its address is not available now. Therefore an extended-format instruction with address field set to 00000 is used. A modification record in inserted into the object code so that once LISTAs address is known, it can be added to this field.
Program C
The same as that processed in Program B.
REF2
Program A
Because LISTB is an external reference, its address is not available now. Therefore an extended-format instruction with address field set to 00004 is used. A modification record is inserted into the object code so that once LISTBs address is available, it can be added to this field.
Program B
LISTB is defined in its own program and its address is immediately available. Therefore, we can simply use program counter-relative addressing
Program C
The same as that processed in Program A.
REF3
Program A
The difference between ENDA and LISTA (14) is immediately available during assembly.
Program B
Because the values of ENDA and LISTA are unknown during assembly, we need to use an extended-format instruction with its address field set to 0. Two modification records are inserted to the object program one for +ENDA and the other for LISTA.
Program C
The same as that processed in Program B.
REF4
Program A
The difference between ENDA and LISTA can be known now. Only the value of LISTC is unknown. Therefore, an initial value of 000014 is stored with one modification record for LISTC.
Program B
Because none of ENDA, LISTA, and LISTCs values can be known now, an initial value of 000000 is stored with three modification records for all of them.
Program C
The value of LISTC is known now. However, the values for ENDA and LISTA are unknown. An initial value of 000030 is stored with two modification records for ENDA and LISTA.
Instruction Operands
For references that are instruction operands, the calculated values after loading do no always appear to be equal. This is because there is an additional address calculation step involved for program-counter (base) relative instructions. In such cases, it is the target addresses that are the same. For example, in program A, the reference REF1 is a program-counter relative instruction with displacement 1D. When this instruction is executed, the PC contains the value 4023. Therefore the resulting address is 4040. In program B, because direct addressing is used, 4040 (4000 + 40) is stored in the loaded program for REF1.
Data Structures
External symbol tables (ESTAB)
Like SYMTAB, store the name and address of each external symbol in the set of control sections being loaded. It needs to indicate in which control section the symbol is defined.
PROGADDR
The beginning address in memory where the linked program is to be loaded. (given by the OS)
CSADDR
It contains the starting address assigned to the control section currently being scanned by the loader. This value is added to all relative addresses within the control sections.
Algorithm
During pass 1, the loader is concerned only with HEADER and DEFINE record types in the control sections to build ESTAB. PROGADDR is obtained from OS. This becomes the starting address (CSADDR) for the first control section. The control section name from the header record is entered into ESTAB, with value given by CSADDR.
Algorithm (Contd)
All external symbols appearing in the DEFINE records for the current control section are also entered into ESTAB. Their addresses are obtained by adding the value (offset) specified in the DEFINE to CSADDR. At the end, ESTAB contains all external symbols defined in the set of control sections together with the addresses assigned to each. A Load Map can be generated to show these symbols and their addresses.
A Load Map
Algorithm (Contd)
During pass 2, the loader performs the actual loading, relocation, and linking. CSADDR is used in the same way as it was used in pass 1
It always contains the actual starting address of the control section being loaded.
As each text record is read, the object code is moved to the specified address (plus CSADDR) When a modification record is encountered, the symbol whose value is to be used for modification is looked up in ESTAB. This value is then added to or subtracted from the indicated location in memory.
Reference Number
The linking loader algorithm can be made more efficient if we assign a reference number to each external symbol referred to in a control section. This reference number is used (instead of the symbol name) in modification record. This simple technique avoid multiple searches of ESTAB for the same symbol during the loading of a control section.
After the first search for a symbol (the REFER records), we put the found entries into an array. Later in the same control section, we can just use the reference number as an index into the array to quickly fetch a symbols value.
Reference number 01 is reserved for the current control section name. All other reference numbers start from 02.
Loader Options
Many loaders allow the user to specify options that modify the standard processing. For example:
Include program-name (library name)
Direct the loader to read the designated object program from a library
Delete csect-name
Instruct the loader to delete the named control sections from the set of programs being loaded
Linkage Editor
The difference between a linkage editor and a linking loader:
A linking loader performs all linking and relocation operations, including automatic library search, and loads the linked program into memory for execution. A linkage editor produces a linked version of the program, which is normally written to a file for later execution.
Linkage Editor
When the user is ready to run the linked program, a simple relocating loader can be used to load the program into memory. The only object code modification necessary is the addition of an actual address to relative values within the program. The linkage editor performs relocation of all control sections relative to the start of the linked program.
Linkage Editor
All items that need to be modified at load time have values that are relative to the start of the linked program. This means that the loading can be accomplished in one pass with no external symbol table required. Thus, if a program is to be executed many times without being reassembled, the use of a linkage editor can substantially reduces the overhead required.
Resolution of external references and library searching are only performed once.
Dynamic Linking
Linkage editors perform linking before the program is loaded for execution. Linking loaders perform these same operations at load time. Dynamic linking postpones the linking function until execution time.
A subroutine is loaded and linked to the test of the program when it is first called.
On PC Windows or UNIX operating systems, normally you are using (e.g., ld) a linkage editor to generate an executable program.
Instead of executing a JSUB instruction to an external symbol, the program makes a load-and-call service request to the OS. The parameter of this request is the symbolic name of the routine to be called..
Implementation Example
Control is returned The called subroutine to the loader and this time is already loaded. later returned to the user program