Unit Iii Loaders and Linkers
Unit Iii Loaders and Linkers
Source Object
Object
Translator Loader program
Program ready for
Program execution
Translator – Assembler/Compiler
Memory
ROLE OF LOADER
Source Object
Object
Assembler Loader program
Program ready for
Program execution
Memory
ROLE OF LOADER AND LINKER
Memory
Source
Object
Assembler Linker
Program
Program Object
program
ready for
Executable execution
Code
Loader
WE KNOW…
• Source Program – Assembly Language
• Object Program - From assembler
- Contains translated instructions and
data values from the source program
• Executable Code - From Linker
• Loader - Loads the executable code to the
specified memory locations and code gets
executed.
WE NEED…THREE PROCESSES
•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
•absolute loader
•bootstrap loader
•relocating loader (relative loader)
•direct linking loader
ABSOLUTE LOADER
•Operation 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
ROLE OF ABSOLUTE LOADER
1000
Object Absolute Object
Program Loader program
ready for
execution
2000
Memory
ABSOLUTE LOADER
•Advantage
- Simple and efficient
•Disadvantage
- the need for programmer to specify the
actual address
- difficult to use subroutine libraries
• We have algorithm – next slide
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
OBJECT PROGRAM
Space for
2 inch x 2 inch
Format-1(a) (in size Picture
PowerPoint)
OBJECT CODE REPRESENTATION
•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
•We must be sure that our file and device
conventions do not cause some of the
program bytes to be interpreted as control
characters
A SIMPLE BOOTSTRAP LOADER
•When a computer is first tuned 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
EXAMPLE (SIC BOOTSTRAP
LOADER)
T00001D130F20160100030F200D4B10105D3E2003454F46
T001035 1DB410B400B44075101000…
33200857C003B850
T0010531D3B2FEA1340004F0000F1..53C003DF2008B85
0
T00070073B2FEF4F000005
M00000705+COPY
M00001405+COPY
M00002705+COPY
E000000 Figure
Object program with relocation by Modification records
RELOCATION BIT
◦ Col. 1 D
◦ Col. 2-7Name 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
- D LISTA 000040 ENDA 000054
- D LISTB 000060 ENDB 000070
REFER RECORD
◦ 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
R LISTB ENDB LISTC ENDC
R LISTA ENDA LISTC ENDC
R LISTA ENDA LISTB ENDB
0000 PROGA START 0
EXTDEF LISTA, ENDA
EXTREF LISTB, ENDB, LISTC, ENDC
.
.
0020 REF1 LDA LISTA 03201D
0023 REF2 +LDT LISTB+4 77100004
0027 REF3 LDX #ENDA-LISTA 050014
.
.
0040 LISTA EQU *
•REF4 in PROGA
ENDA-LISTA+LISTC=14+4112=4126
(ENDA-LISTA = 14 (4054-4040)
T0000540F000014FFFFF600003F000014FFFFC0
M00005406+LISTC
Figure 3.5.1: Programs form the above figure after linking and loading
Figure 3.5.2: relocation and linking operations
performed on REF4 from PROGA
ALGORITHM AND DATA STRUCTURES
FOR A LINKING LOADER
Linking Loader uses two-passes logic
- Pass 1: assign addresses to all
external symbols
- Pass 2: perform the actual loading,
relocation, and linking
ESTAB (external symbol table) – main
data structure for a linking loader
ESTAB FOR THE EXAMPLE GIVEN
PROGA
SYMBOL AND ADDRESSES IN
PROGB
PROGB
SYMBOL AND ADDRESSES IN
PROGC
PROGC
ADVANTAGE OF REFERENCE-
NUMBER
Object
Program(s) The source
program is first
assembled or
compiled,
producing an
Library Linking
object program. A
loader linking loader
performs all linking
and loading
operations, and
loads the program
Memory into memory for
execution
Object
Program (s)
Linkage
Library editor
Linked
program
Processing of an
Object program using Relocating
LE loader
Memory
LINKAGE EDITORS
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…
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
DYNAMIC LINKING
The scheme that postpones the linking
function 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
ADVANTAGES…
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 – Refer Figure
BOOTSTRAP LOADERS
How is the loader itself loaded into the memory ?
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
IMPLEMENTATION EXAMPLES…
Brief description of loaders and linkers
for actual computers
They are
MS-DOS Linker - Pentium
architecture
SunOS Linkers - SPARC
architecture
Cray MPP Linkers – T3E architecture
MS-DOS LINKER
Microsoft MS-DOS linker for Pentium
and other x86 systems
Most MS-DOS compilers and assemblers
(MASM) produce object modules - .OBJ
files
MS-DOS LINK is a linkage editor that
combines one or more object modules to
produce a complete executable program
- .EXE file
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
SUNOS LINKERS
SunOS provides two different linkers –
link-editor and run-time linker
Link-editor is invoked in the process of
assembling or compiling a program –
produces a single output module – one of
the following types (next slide)
An object module contains one or more
sections – representing instructions and
data area from the source program,
relocation and linking information,
external symbol table
TYPES OF OBJECT MODULE
A relocatable object module – suitable for
further link-editing
A static executable – with all symbolic
references bound and ready to run
A dynamic executable – in which some
symbolic references may need to be
bound at run time
A shared object – which provides services
that can be bound at run time to one ore
more dynamic executables
RUN-TIME LINKER
Uses dynamic linking approach
Run-time linker binds dynamic
executables and shared objects at
execution time
Performs relocation and linking
operations to prepare the program for
execution
CRAY MPP LINKER
Cray MPP (massively parallel
processing ) Linker
T3E system contains large number of
parallel processing elements (PEs) – Each
PE has local memory and has access to
remote memory (memory of other PEs)
The processing is divided among PEs -
contains shared data and private data
The loaded program gets copy of the
executable code, its private data and its
portion of the shared data
Cray MPP (massively parallel processing )
Linker
T3E system contains large number of parallel
processing elements (PEs) – Each PE has local
memory and has access to remote memory
(memory of other PEs)
The processing is divided among PEs -
contains shared data and private data
The loaded program gets copy of the
executable code, its private data and its
portion of the shared data
PE0 PE1 PEn