100% found this document useful (1 vote)
95 views

Loaders and Linkers: Basic Loader Functions

The document discusses loaders and linkers. It describes the basic functions of loaders as loading object programs into memory, linking multiple object programs by resolving external references, and relocating programs so they can be loaded at different addresses. It then discusses different types of loaders like absolute, bootstrap, relocating, and linking loaders. Machine-dependent features like relocation using modification records or relocation bits are also covered. The document concludes by describing how program linking is implemented using define and refer records to resolve external references and definitions across object programs.

Uploaded by

Amir Raja
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (1 vote)
95 views

Loaders and Linkers: Basic Loader Functions

The document discusses loaders and linkers. It describes the basic functions of loaders as loading object programs into memory, linking multiple object programs by resolving external references, and relocating programs so they can be loaded at different addresses. It then discusses different types of loaders like absolute, bootstrap, relocating, and linking loaders. Machine-dependent features like relocation using modification records or relocation bits are also covered. The document concludes by describing how program linking is implemented using define and refer records to resolve external references and definitions across object programs.

Uploaded by

Amir Raja
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 26

System Software & Compiler Design Module-2

Loaders and Linkers


This Module gives you…

• Basic Loader functions.


• Machine dependent loader features.
• Machine independent loader features.
• Loader design options.
• Implementation examples

The Source Program written in assembly language or high level language will be
converted to object program, which is in the machine language form for execution. This
conversion either from assembler or from compiler, contains translated instructions and data
values from the source program, or specifies addresses in primary memory where these items
are to be loaded for execution.
This contains the following three processes, and they are,

Loading - which allocates memory location and brings the object program into memory for
execution - (Loader)

Linking- which combines two or more separate object programs and supplies the information
needed to allow references between them - (Linker)

Relocation - which modifies the object program so that it can be loaded at an address
different from the location originally specified - (Linking Loader)

Basic Loader Functions:


A loader is a system program that performs the loading function. It brings object
program into memory and starts its execution. The role of loader is as shown in the figure 4.1.
Translator may be assembler/complier, which generates the object program and later loaded
to the memory by the loader for execution. In figure 4.2 the translator is specifically an
assembler, which generates the object loaded, which becomes input to the loader. The
figure4.3 shows the role of both loader and linker.

Dept. Of CSE, SJCIT 1 Prepared by SHRIHARI M R


System Software & Compiler Design Module-2

Dept. Of CSE, SJCIT 2 Prepared by SHRIHARI M R


System Software & Compiler Design Module-2

Type of Loaders
The different types of loaders are, absolute loader, bootstrap loader, relocating loader
(relative loader), and, direct linking loader. The following sections discuss the functions and
design of all these types of loaders.

Design of Absolute Loader:


The operation of absolute loader is very simple. The object code is loaded to specified
locations in the memory. At the end the loader jumps to the specified address to begin
execution of the loaded program. The role of absolute loader is as shown in the figure 4.4.The
advantage of absolute loader is simple and efficient. But the disadvantages are, the need for
programmer to specify the actual address, and, difficult to use subroutine libraries.

Dept. Of CSE, SJCIT 3 Prepared by SHRIHARI M R


System Software & Compiler Design Module-2

The algorithm for this type of loader is given here. The object program and, the object
program loaded into memory by the absolute loader are also shown. Each byte of assembled
code is given using its hexadecimal representation in character form. Easy to read by human
beings. Each byte of object code is stored as a single byte. Most machine store object
programs in a binary form, and we must be sure that our file and device conventions do not
cause some of the program bytes to be interpreted as control characters.

Begin
read Header record
verify program name and length
read first Text record
while record type is <> ‘E’ do
begin
{if object code is in character form, convert into internal representation}
move object code to specified location in memory
read next object program record
end
jump to address specified in End record
end

Dept. Of CSE, SJCIT 4 Prepared by SHRIHARI M R


System Software & Compiler Design Module-2

A Simple Bootstrap Loader


When a computer is first turned on or restarted, a special type of absolute loader,
called bootstrap loader is executed. This bootstrap loads the first program to be run by the
computer -- usually an operating system. The bootstrap itself begins at address 0. It loads the
OS starting address 0x80. No header record or control information, the object code is
consecutive bytes of memory.

The algorithm for the bootstrap loader is as follows


Begin
X=0x80 (the address of the next memory location to be loaded
Loop
A=GETC (and convert it from the ASCII character
code to the value of the hexadecimal digit)
save the value in the high-order 4 bits of S

Dept. Of CSE, SJCIT 5 Prepared by SHRIHARI M R


System Software & Compiler Design Module-2

A=GETC
combine the value to form one byte A=(A+S)
store the value (in A) to the address in register X
X=X+1
End
It uses a subroutine GETC, which is
GETC A=read one character
if A=0x04 then jump to 0x80
if A<48 then GETC
A = A-48 (0x30)
if A<10 then return
A = A-7
Return

Machine-Dependent Loader Features

Absolute loader is simple and efficient, but the scheme has potential disadvantages
One of the most disadvantage is the programmer has to specify the actual starting address,
from where the program to be loaded. This does not create difficulty, if one program to run,
but not for several programs. Further it is difficult to use subroutine libraries efficiently.
This needs the design and implementation of a more complex loader. The loader must
provide program relocation and linking, as well as simple loading functions.
Relocation
The concept of program relocation is, the execution of the object program using any
part of the available and sufficient memory. The object program is loaded into memory
wherever there is room for it. The actual starting address of the object program is not known
until load time. Relocation provides the efficient sharing of the machine with larger memory
and when several independent programs are to be run together. It also supports the use of
subroutine libraries efficiently. Loaders that allow for program relocation are called
relocating loaders or relative loaders.
Methods for specifying relocation
Use of modification record and, use of relocation bit, are the methods available for
specifying relocation. In the case of modification record, a modification record M is used in
the object program to specify any relocation. In the case of use of relocation bit, each
instruction is associated with one relocation bit and, these relocation bits in a Text record is
gathered into bit masks.
Modification records are used in complex machines and is also called Relocation and
Linkage Directory (RLD) specification. The format of the modification record (M) is as
follows. The object program with relocation by Modification records is also shown here.
Modification record
col 1: M
col 2-7: relocation address
col 8-9: length (halfbyte)
col 10: flag (+/-)
col 11-17: segment name

Dept. Of CSE, SJCIT 6 Prepared by SHRIHARI M R


System Software & Compiler Design Module-2

The relocation bit method is used for simple machines. Relocation bit is 0: no
modification is necessary, and is 1: modification is needed. This is specified in the columns
10-12 of text record (T), the format of text record, along with relocation bits is as follows.
Text record:
col 1: T
col 2-7: starting address
col 8-9: length (byte)
col 10-12: relocation bits
col 13-72: object code
Twelve-bit mask is used in each Text record (col:10-12 – relocation bits), since each text
record contains less than 12 words, unused words are set to 0, and, any value that is to be
modified during relocation must coincide with one of these 3-byte segments. For absolute
loader, there are no relocation bits column 10-69 contains object code. The object program
with relocation by bit mask is as shown below. Observe FFC - means all ten words are to be
modified and, E00 - means first three records are to be modified.

Dept. Of CSE, SJCIT 7 Prepared by SHRIHARI M R


System Software & Compiler Design Module-2

Program Linking
The Goal of program linking is to resolve the problems with external references
(EXTREF) and external definitions (EXTDEF) from different control sections.
EXTDEF (external definition) - The EXTDEF statement in a control section names
symbols, called external symbols, that are defined in this (present) control section and may be
used by other sections.
ex: EXTDEF BUFFER, BUFFEND, LENGTH
EXTDEF LISTA, ENDA
EXTREF (external reference) - The EXTREF statement names symbols used in this
(present) control section and are defined elsewhere.
ex: EXTREF RDREC, WRREC
EXTREF LISTB, ENDB, LISTC, ENDC

How to implement EXTDEF and EXTREF


The assembler must include information in the object program that will cause the
loader to insert proper values where they are required – in the form of Define record (D) and,
Refer record(R).

Define record
The format of the Define record (D) along with examples is as shown here.
Col. 1 D
Col. 2-7 Name of external symbol defined in this control section
Col. 8-13 Relative address within this control section (hexadecimal)
Col.14-73 Repeat information in Col. 2-13 for other external symbols

Example records
D LISTA 000040 ENDA 000054
D LISTB 000060 ENDB 000070

Dept. Of CSE, SJCIT 8 Prepared by SHRIHARI M R


System Software & Compiler Design Module-2

Refer record
The format of the Refer record (R) along with examples is as shown here.
Col. 1 R
Col. 2-7 Name of external symbol referred to in this control section
Col. 8-73 Name of other external reference symbols
Example records
R LISTB ENDB LISTC ENDC
R LISTA ENDA LISTC ENDC
R LISTA ENDA LISTB ENDB

Here are the three programs named as PROGA, PROGB and PROGC, which are separately
assembled and each of which consists of a single control section. LISTA, ENDA in PROGA,
LISTB, ENDB in PROGB and LISTC, ENDC in PROGC are external definitions in each of
the control sections. Similarly LISTB, ENDB, LISTC, ENDC in PROGA, LISTA, ENDA,
LISTC, ENDC in PROGB, and LISTA, ENDA, LISTB, ENDB in PROGC, are external
references. These sample programs given here are used to illustrate linking and relocation.
The following figures give the sample programs and their corresponding object programs.
Observe the object programs, which contain D and R records along with other records.

Dept. Of CSE, SJCIT 9 Prepared by SHRIHARI M R


System Software & Compiler Design Module-2

Dept. Of CSE, SJCIT 10 Prepared by SHRIHARI M R


System Software & Compiler Design Module-2

Dept. Of CSE, SJCIT 11 Prepared by SHRIHARI M R


System Software & Compiler Design Module-2

Dept. Of CSE, SJCIT 12 Prepared by SHRIHARI M R


System Software & Compiler Design Module-2

Dept. Of CSE, SJCIT 13 Prepared by SHRIHARI M R


System Software & Compiler Design Module-2

Dept. Of CSE, SJCIT 14 Prepared by SHRIHARI M R


System Software & Compiler Design Module-2

For example, the value for REF4 in PROGA is located at address 4054 (the beginning
address of PROGA plus 0054, the relative address of REF4 within PROGA). The following
figure shows the details of how this value is computed.

Dept. Of CSE, SJCIT 15 Prepared by SHRIHARI M R


System Software & Compiler Design Module-2

The initial value from the Text record


T0000540F000014FFFFF600003F000014FFFFC0 is 000014. To this is added the address
assigned to LISTC, which is 4112 (the beginning address of PROGC plus 30). The result is
004126.
That is REF4 in PROGA is ENDA-LISTA+LISTC=4054-4040+4112=4126.
Similarly the load address for symbols LISTA: PROGA+0040=4040, LISTB:
PROGB+0060=40C3 and LISTC: PROGC+0030=4112
Keeping these details work through the details of other references and values of these
references are the same in each of the three programs.

3.3.3 Algorithm and Data structures for a Linking Loader


The algorithm for a linking loader is considerably more complicated than the absolute
loader program, which is already given. The concept given in the program linking section is
used for developing the algorithm for linking loader. The modification records are used for
relocation so that the linking and relocation functions are performed using the same
mechanism.
Linking Loader uses two-passes logic. ESTAB (external symbol table) is the main data
structure for a linking loader.
Pass 1: Assign addresses to all external symbols
Pass 2: Perform the actual loading, relocation, and linking
ESTAB - ESTAB for the example (refer three programs PROGA PROGB and PROGC)
given is as shown below. The ESTAB has four entries in it; they are name of the control

Dept. Of CSE, SJCIT 16 Prepared by SHRIHARI M R


System Software & Compiler Design Module-2

section, the symbol appearing in the control section, its address and length of the control
section.

Program Logic for Pass 1


Pass 1 assign addresses to all external symbols. The variables & Data structures used
during pass 1 are, PROGADDR (program load address) from OS, CSADDR (control section
address), CSLTH (control section length) and ESTAB. The pass 1 processes the Define
Record. The algorithm for Pass 1 of Linking Loader is given below.

Dept. Of CSE, SJCIT 17 Prepared by SHRIHARI M R


System Software & Compiler Design Module-2

Program Logic for Pass 2


Pass 2 of linking loader perform the actual loading, relocation, and linking. It uses
modification record and lookup the symbol in ESTAB to obtain its address. Finally it uses
end record of a main program to obtain transfer address, which is a starting address needed
for the execution of the program. The pass 2 process Text record and Modification record of
the object programs. The algorithm for Pass 2 of Linking Loader is given below.

Dept. Of CSE, SJCIT 18 Prepared by SHRIHARI M R


System Software & Compiler Design Module-2

How to improve Efficiency?


The question here is can we improve the efficiency of the linking loader. Also observe that,
even though we have defined Refer record (R), we haven’t made use of it. The efficiency can
be improved by the use of local searching instead of multiple searches of ESTAB for the
same symbol. For implementing this we assign a reference number to each external symbol in
the Refer record. Then this reference number is used in Modification records instead of
external symbols.01 is assigned to control section name, and other numbers for external
reference symbols.
The object programs for PROGA, PROGB and PROGC are shown below, with above
modification to Refer record (Observe R records).

Dept. Of CSE, SJCIT 19 Prepared by SHRIHARI M R


System Software & Compiler Design Module-2

Dept. Of CSE, SJCIT 20 Prepared by SHRIHARI M R


System Software & Compiler Design Module-2

Symbol and Addresses in PROGA, PROGB and PROGC are as shown below. These
are the entries of ESTAB. The main advantage of reference number mechanism is that it
avoids multiple searches of ESTAB for the same symbol during the loading of a control
section.

Dept. Of CSE, SJCIT 21 Prepared by SHRIHARI M R


System Software & Compiler Design Module-2

Machine-independent Loader Features


Here we discuss some loader features that are not directly related to machine
architecture and design. Automatic Library Search and Loader Options are such Machine-
independent Loader Features.

Automatic Library Search


This feature allows a programmer to use standard subroutines without explicitly
including them in the program to be loaded. The routines are automatically retrieved from a
library as they are needed during linking. This allows programmer to use subroutines from
one or more libraries. The subroutines called by the program being loaded are automatically
fetched from the library, linked with the main program and loaded. The loader searches the

Dept. Of CSE, SJCIT 22 Prepared by SHRIHARI M R


System Software & Compiler Design Module-2

library or libraries specified for routines that contain the definitions of these symbols in the
main program.

Loader Options
Loader options allow the user to specify options that modify the standard processing.
The options may be specified in three different ways. They are, specified using a command
language, specified as a part of job control language that is processed by the operating
system, and an be specified using loader control statements in the source program.
Here are the some examples of how option can be specified.

INCLUDE program-name (library-name) - read the designated object program from a library
DELETE csect-name – delete the named control section from the set pf programs being
loaded
CHANGE name1, name2 - external symbol name1 to be changed to name2 wherever it
appears in the object programs
LIBRARY MYLIB – search MYLIB library before standard libraries
NOCALL STDDEV, PLOT, CORREL – no loading and linking of unneeded routines
Here is one more example giving, how commands can be specified as a part of object
file, and the respective changes are carried out by the loader.
LIBRARY UTLIB
INCLUDE READ (UTLIB)
INCLUDE WRITE (UTLIB)
DELETE RDREC, WRREC
CHANGE RDREC, READ
CHANGE WRREC, WRITE
NOCALL SQRT, PLOT
The commands are, use UTLIB (say utility library), include READ and WRITE
control sections from the library, delete the control sections RDREC and WRREC from the
load, the change command causes all external references to the symbol RDREC to be
changed to the symbol READ, similarly references to WRREC is changed to WRITE, finally,
no call to the functions SQRT, PLOT, if they are used in the program.

Loader Design Options


There are some common alternatives for organizing the loading functions, including
relocation and linking. Linking Loaders – Perform all linking and relocation at load time. The
Other Alternatives are Linkage editors, which perform linking prior to load time and,
dynamic linking, in which linking function is performed at execution time

Linking Loaders

Dept. Of CSE, SJCIT 23 Prepared by SHRIHARI M R


System Software & Compiler Design Module-2

The above diagram shows the processing of an object program using Linking Loader.
The source program is first assembled or compiled, producing an object program. A linking
loader performs all linking and loading operations, and loads the program into memory for
execution.

Linkage Editors
The figure below shows the processing of an object program using Linkage editor. A
linkage editor produces a linked version of the program – often called a load module or an
executable image – which is written to a file or library for later execution. The linked
program produced is generally in a form that is suitable for processing by a relocating loader.
Some useful functions of Linkage editor are, an absolute object program can be
created, if starting address is already known. New versions of the library can be included
without changing the source program. Linkage editors can also be used to build packages of
subroutines or other control sections that are generally used together. Linkage editors often
allow the user to specify that external references are not to be resolved by automatic library
search – linking will be done later by linking loader – linkage editor + linking loader –
savings in space.

Dept. Of CSE, SJCIT 24 Prepared by SHRIHARI M R


System Software & Compiler Design Module-2

Dynamic Linking
The scheme that postpones the linking functions until execution. A subroutine is
loaded and linked to the rest of the program when it is first called – usually called dynamic
linking, dynamic loading or load on call. The advantages of dynamic linking are, it allow
several executing programs to share one copy of a subroutine or library. In an object oriented
system,dynamic linking makes it possible for one object to be shared by several programs.
Dynamic linking provides the ability to load the routines only when (and if) they are needed.
The actual loading and linking can be accomplished using operating system service request.

Bootstrap Loaders
If the question, how is the loader itself loaded into the memory? is asked, then the
answer is, when computer is started – with no program in memory, a program present in
ROM ( absolute address) can be made executed – may be OS itself or A Bootstrap loader,
which in turn loads OS and prepares it for execution. The first record ( or records) is
generally referred to as a bootstrap loader – makes the OS to be loaded. Such a loader is
added to the beginning of all object programs that are to be loaded into an empty and idle
system.

Dept. Of CSE, SJCIT 25 Prepared by SHRIHARI M R


System Software & Compiler Design Module-2

Implementation Examples
This section contains brief description of loaders and linkers for actual computers.
They are, MS-DOS Linker - Pentium architecture, SunOS Linkers - SPARC architecture,
and, Cray MPP Linkers – T3E architecture.

MS-DOS Linker
This explains some of the features of Microsoft MS-DOS linker, which is a linker for
Pentium and other x86 systems. Most MS-DOS compilers and assemblers (MASM) produce
object modules, and they are stored in .OBJ files. MS-DOS LINK is a linkage editor that
combines one or more object modules to produce a complete executable program - .EXE file;
this file is later executed for results.

The following table illustrates the typical MS-DOS object module


Record Types Description
THEADR Translator Header
TYPDEF,PUBDEF, EXTDEF External symbols and references
LNAMES, SEGDEF, GRPDEF Segment definition and grouping
LEDATA, LIDATA Translated instructions and data
FIXUPP Relocation and linking information
MODEND End of object module
THEADR specifies the name of the object module. MODEND specifies the end of the
module. PUBDEF contains list of the external symbols (called public names). EXTDEF
contains list of external symbols referred in this module, but defined elsewhere. TYPDEF the
data types are defined here. SEGDEF describes segments in the object module ( includes
name, length, and alignment). GRPDEF includes how segments are combined into groups.
LNAMES contains all segment and class names. LEDATA contains translated instructions
and data. LIDATA has above in repeating pattern. Finally, FIXUPP is used to resolve
external references.

Dept. Of CSE, SJCIT 26 Prepared by SHRIHARI M R

You might also like