Presentation on theme: "Loaders & Linkers. Introduction A “Loader” is a program which accepts the object program as input, makes them executable by the computer and initiates."— Presentation transcript:
object file In computer science, object code, or an object file, is the representation of code that a compiler or assembler generates by processing a source code file.computer sciencecompilerassemblersource code Object files contain compact code, often called "binaries". A linker is typically used to generate an executable file by linking object files together. The only essential element in an object file is machine codelinkerexecutablemachine code Object files often also contain data for use by the code at runtime, relocation information, program symbols (names of variables and functions) for linking and/or debugging purposes, and other debugging information.relocationsymbolsdebugging
Basic Functions of the Loader ALLOCATION: Allocates space in memory for the programs( calculation program size) RELOCATION: Adjustment of addresses of all address sensitive entities. LINKING:Resolve inter-segment (inter-program) symbolic reference in object program. LOADING: Physically place the machine instructions and data into memory and initiate execution.
Linking In general,a program can contain : – External definitions – Public definitions Linker is the system software which performs : –Resolution of inter-segment symbolic references which is called as “Linking”. –Establish correspondence between external definitions and public definitions –To determine relocatability of symbols attributes. –Substitute relocatable addresses.
Functions of a Linker Establish communication between external symbol references and definitions and public definitions To determine the relocatability of symbol attributes and expressions. To substitute for these relocatable addresses.
In actual practice, a complete program is built from many smaller routines possibly by many people. All these routines have to be connected logically and linked to form a single program. A linker is a systems program that accounts for and reconciles all address references within and among modules and replaces those references with a single consistent scheme of relative addresses. Linking is done after the code is generated and is closely associated with a loader.
Compilers and translators basically translate one procedure at a time and put the translated output on the disk. All the translated procedures have to be located and linked together to be run as a unit called an executable binary program. In MS-DOS, Windows 95/98 etc object modules have extension.obj and the executable binary programs have.exe extension. In UNIX, object modules have.o extension and executable programs have no extension
Loading schemes 1.Assemble-and-go loader: The assembler simply places the code into memory and the loader executes a single instruction that transfers control to the starting instruction of the assembled program. 2.In this scheme, some portion of the memory is used by the assembler itself which would otherwise have been available for the object program.
Compile and Go Loader Assembling/compiling, linking, loading etc. goes in one shot. programmer or assembler must know the starting address in memory to load the program. External references of any kind are not allowed in this loader scheme.
Compile and go Loader The assembler runs in one part of the memory and place the assembled machine instructions and data as they are assembled directly into their assigned memory locations. When assembly is completed, the assembler causes a transfer to the starting instruction of the program. Assemble and Go Loader Code for Execution In main memory Source Program.ASM
Algorithm 1.Read pgm. Line by line till EOF, if EOF goto step 4 2.Analyze statement, find M/c code and dump it to memory at pre known location 3.Increment memory location counter appropriately and goto step 1 4.Load PC with starting address and issue EXEC call with the help of OS.
Compile and go loader Advantages: It is very simple to understand. It is simple to implement because loader is just an extension to the assembler design.
Disadvantages: Portion of the memory is wasted because the translator resides in the memory. It is necessary to assemble every time even though no modifications are being done. Can not handle multiple program segments especially if they are written in different languages. Scheme is good for small program not for bigger one Execution time = assemble time + load time
Absolute Loader Here assembler produces absolute object code which can be stored in secondary storage for use in future. No relocation information is needed, which saves space. Locations are being absolute, either programmer or assembler must know the memory management issue. Linking of different modules which are inter dependent is done by programmer. In short: Allocation and linking is by programmer Resolution is by assembler Loading is done by loader.
Absolute Loader MAIN SQRT Absolute Loader 2000 2100 1000 1500 2100 2000 1500 1000 SQRT MAIN Absolute Loader Main Memory ~ ~ ~ ~
Operation The loader simply accepts the machine language and places it into the core as prescribe by the assembler. The loader then initiates execution by transferring control to the starting of the program.
Segment 1 Segment 2 Segment N AssemblerObject 1 length Start Address Absolute Loader Main Memory Object 2 length Start Address Object N length Start Address ~~ General Schematic of Absolute Loader.
Algorithm of an Absolute Loader. INPUT:Object modules consisting of machine code and data,starting address and length. OUTPUT:Executable code to be placed in the main memory. Begin for each program module begin 1) read the header to get the information about starting address and length. 2)mem_loc=starting addrs. 3)present_byte_counter=1 4)max_byte_counter=length while(present _byte_counter
"name": "Algorithm of an Absolute Loader.",
"description": "INPUT:Object modules consisting of machine code and data,starting address and length. OUTPUT:Executable code to be placed in the main memory. Begin for each program module begin 1) read the header to get the information about starting address and length. 2)mem_loc=starting addrs. 3)present_byte_counter=1 4)max_byte_counter=length while(present _byte_counter
Absolute loader. Advantages: More core is available to the user since the translator is not in the memory. No relocation info. Required so size of object module will be small. Absolute loader are simple to implement. Loader is being very small, it eats up very small region of memory Execution time = load time It is fast and efficient
Disadvantages: Programmer must specify the starting address of each module so programmer must know memory management as well as memory status at any time.
Relocation Linker will generally performs this activity by using relocation information, length, machine code and data from object file The.EXE file contains : –machine code and data w.r.t zero address –Relocation information –Length of file
Relocation In computer science, relocation is the process of replacing symbolic references or names of libraries with actual usable addresses in memory before running a program.computer sciencelibrariesmemory It is typically done by the linker during compilation (at compile time), although it can be done at runtime by a loaderlinker compilationcompile timeruntimeloader
Relocation table The relocation table is a list of pointers created by the linker and linked into the MSDOS.exe file.pointerslinker The relocation table tells the loader where these segments can be found in program image loaded into memory.memory
Ways to put Relocation information 1.Put relocation information after every byte of machine code and data 2.Put the relocation information at the end of object code.
Opcode operand Load A Add B Store C Stop Endp A DB 5 B DB 3 C DW ? Machine code 807 108 909 05 03 xx Relocation bits 0 1 0 Way1 to put relocation information Second way to put relocation information 807 01 08 09 09 12 05 03 00 0 1 0 1 0 1 0 0 0 0
Program Relocation Machine code w.r.t 20 08 27 01 28 09 29 12 05 03 xx xx Machine code w.r.t 40 08 47 01 48 09 49 12 05 03 xx xx
Program Relocatability Relocatable program Non- Relocatable Programs Self Relocatable Programs
Non- Relocatable Programs This type of program can not be executed in any area of memory other than one distinguished for it at the time of its coding.
Relocatable Programs Using relocation information, it is possible to relocate the program to execute from the area other than one which is distinguished for it at the time of translation. The agent which performs such relocation is called as Linkage Editors or Relocating Loaders
Self- Relocatable Programs This is the program which can itself perform the relocation of its address sensitive portions of the code.
Relocating loader 3. Relocating loader: This loader allows multiple procedure segments and one data segment which is common to all assembler assembles each segment independently and passes on to loader the following info: M/C code relocation information length of program inter segment reference
For each program, Assembler produces m/c code prefixed by “ Transfer vector “ Transfer vector consists of names of subroutines referenced by source program Transfer vector is kind of table that contains info. About external subroutines and their addresses which may be filled by loader. Transfer vector is a global table for object file.
Entities and their usage in R L Relocation bits : to solve the problem of relocation. Transfer vector: to solve problem of linking. Program length : to solve the problem of allocation.
RELOCATING LOADER ADVANTAGES: The relocating loader takes care of the program modification dynamically ( i.e change in program size) Using the transfer vectors,the required sub- routines can be brought into the main memory rather than keeping all routines in the memory all the time. DISADVANTAGES: Transfer vector linkage is useful only for subroutines but not for loading or storing external data. If Transfer vector itself increases, the size of object program in memory increases, as Transfer Vector has to be there in memory all the time
Linking loader vs. Linkage Editor Object program(s) Linking loader Memory Library Object program(s) Linkage editor Library Linked program Simple Loader Memory A linkage editor produces a linked version of the program (load module), which is written to a file or library for later execution.
Linkage editors Advantages: –One linking and the most of relocation for many executions. –Possibility to create subroutines libraries. –Actual loading is very simple. Disadvantages: –recompiling for nearly every execution (program development). - infrequently used programs (storage waste).
Direct linking loader: It belongs to the category of Re-locatable Loader. It is most widely used loader. It allows the programmer to use multiple procedure segments and multiple data segments. References to non local data and subroutine is allowed.
For Direct Linking Loader, assembler must provide: Length of each and every program segment PUBLIC TABLE which defines Name of the Symbol & address of it’s definition. EXTERN TABLE which defines Name of the symbol and address of its Usage.
Program 1 prog 1: public x public yMACHINE EQUIVALENT Ext A Ext Bafter pass1after pass2 | load A 0000 08 -- 0000 08 ---- mult x 0002 03 -- 0002 03 0050 add y 0004 01 -- 0004 01 0051 | store B 0020 09 -- 0020 09 ---- | store A 0040 09 -- 0040 09 ---- endp x db ? 0050 xx0050 xx y db ? 0051 xx0051 xx
Public table for program 1 Name of symbolAddress of its definition x 0050 Y 0051
Extern table for program 1 Name of the symbolAddress of its usage A 0001,0041 B 0021
Program 2: Public A Public B Ext x Ext y | After pass 1 After pass 2 load A 0000 08 -- 0000 08 0037 mult x 0002 03 -- 0002 03 --- add y 0004 01 -- 0004 01 --- | store B 0015 09 -- 0015 09 0038 | endp store x 0035 09 -- 0035 09 – A db ? 0037 xx -- 0037 xx B db? 0038 xx 0038 xx end
Public table for program 2 Name of symbolAddress of its definition A 0037 B 0038
Extern table of program 2 Name of the symbolAddress of its usage X 0003,0036 Y 0005
Assume that the object code of pgm 2 will be loaded at the end of pgm1. Hence all relative addresses in the segment are to be adjusted by length of first program.( which is 52)
Modified pub table for program 2 Name of symbolAddress of its definition A 0089 B 0090
Modified ext table for program 2 Name of symbolAddress of its definition x 55,88 y 57
Use public table of program 2 with extern table of program 1 and vice versa to resolve everything
DLL : Algorithm( Pass 1) Purpose :To build global extern symbol table( GST) 1.Initialize ST, STPTR, LC 2.Get name of procedure from user and store it into ST. 3.Search for obj file, if not found, report “error” and stop. 4.Input record and determine its type. Case 1: procedure name 1. save module size 2. mark proc as found in GST. 3. STPTR++ 4. goto step 4
Case 2 : Public definition table 1. enter global data area name into ST and mark as found. 2. add offset to LC of each global variable. 3. STPTR++ 4. Goto step 4 Case 3 : Extern table 1.if extern symbols are not in ST enter them and mark them as not found 2. GOTO step 4. Case 4: End of module 1. Add the size of module to LC 2. if all entries in ST are marked ”FOUND” goto pass 2 3. else set STP to next entry with no address and goto step 3
DLL : Algorithm( Pass 2) Purpose :To generate load module Step 1 : initialize STPTR and LC Step 2: fetch object module pointed to in ST from file to memory Step 3: update all external reference using using public table and extern table. Step 4 : move all code and data records to load module and update STPTR and LC Step 5: if no more ST entry then stop else GOTO step 2.
Dynamic Linking Dynamic linking (dynamic loading, load on call) postpones the linking function until execution time; a subroutine is loaded and linked to the rest of the program when it first called.
Dynamic Linking Advantages: –Several executing programs can share one copy of a subroutine or library (Xwindows, C support routines). –The implementation of the method can be determined or even changed at the time the program is run. –The subroutine name might simply be treated as an input item (!) Additional advantages: –Applications with rarely used subroutines (f.e. errors handling) –Application with a lot of possible services (f.e. mathematic packages)
Dynamic loader (OS) User program ERRHANDL Library Dynamic loader (OS) User program ERRHANDL Dynamic loader (OS) User program ERRHANDL Dynamic loader (OS) User program ERRHANDL Load-and-call ERRHANDL Dynamic loader (OS) User program Load-and-call ERRHANDL
Bootstrap Loaders This absolute loader (bootstrap loader) is a system software, resident in ROM or “ primary loaded ” by some hardware function.