Lecture Slides are adapted from Prof. Valeriu Beiu (Washington State University, Spring 2005, EE 334)

Download Report

Transcript Lecture Slides are adapted from Prof. Valeriu Beiu (Washington State University, Spring 2005, EE 334)

Lecture Slides are adapted from Prof. Valeriu Beiu
(Washington State University, Spring 2005, EE 334)
C program: foo.c
Compiler
Assembly program: foo.s
Assembler
Object (machine lang. module): foo.o
Linker
lib.o
Executable (machine lang. prgm): a.out
Loader
Memory
2

Input: High-level language code
◦ E.g. C, Java

Output: Assembly language code
◦ E.g. MIPS, x86

Note: Output may contain pseudoinstructions
◦ Instructions that assembler understands but are
not in machine
3
C program: foo.c
Compiler
Assembly program: foo.s
Assembler
Object (machine lang. module): foo.o
Linker
lib.o
Executable (machine lang. prgm): a.out
Loader
Memory
4

Reads and uses directives

Replace pseudoinstructions

Produce machine language

Creates object file
5

Give directions to assembler, but does not
produce machine instructions:
.text:
.data:
.globl sym:
.asciiz str:
.word w1…wn:
6

E.g.
◦ move $t0, $t1  add $t0, $t1, $zero
◦ subu $sp, $sp, 32  addiu $sp, $sp, -32
◦ ble $t0, 100, loop  slti $at, $t0, 101
bne $at, $zero, loop
◦ la $a0, str  lui $at, left(str)
ori $a0, $at, right(str)
◦ mul $t7, $t6, $t6  mult $t6, $t6
mflo $t7
7

Arithmetic, logical, shifts, etc.
◦ All necessary info is already within the instruction

What about branches?
◦ PC-Relative
◦ Once pseudoinstructions are replaced, we know by
how many instructions to branch

What about jumps (j and jal)?

What about references to data?
◦ la is translated to lui and ori
8

Jumps and references to data?
◦ Require full 32-bit addresses to instructions or data
◦ Can’t be determined yet
 Must wait to see where code will appear in final
program

Use two tables
◦ Symbol table
◦ Relocation table
9

Symbol table
◦ List of items in this file that may be used by this
and other files
◦ First pass: record label-address pairs
◦ Second pass: produce machine code

Relocation table
◦ Line numbers of items for this file which needs the
address completed/fixed later
 Any label jumped to by j or jal (internal or external)
 Any absolute address of piece of data
(e.g. la $s0, label)
10






Object file header
Text segment
Data segment
Relocation table
Symbol table
Debugging information
11
C program: foo.c
Compiler
Assembly program: foo.s
Assembler
Object (machine lang. module): foo.o
Linker
lib.o
Executable (machine lang. prgm): a.out
Loader
Memory
12


Combines several object (.o) files into a single
executable (“linking”)
Enables separate compilation of files/modules
◦ Changes to one file do not require recompilation of
whole program
 Think of editing/recompiling the source for Window OS!

Link Editor name from editing the “links” in
jump and link instructions
13



Step 1: Take text segment from each .o file
and put them together
Step 2: Take data segment from each .o file,
put them together, and concatenate this onto
the end of the text segments
Step 3: Resolve references
◦ Go through relocation table and handle each entry
using the symbol table
 Fill in the absolute addresses
14

Output of linker:
◦ Executable file containing text and data (plus
header)
◦ May not have library object files resolved if
dynamically loaded
15
C program: foo.c
Compiler
Assembly program: foo.s
Assembler
Object (machine lang. module): foo.o
Linker
lib.o
Executable (machine lang. prgm): a.out
Loader
Memory
16



Executable files are stored on disk
When one is to be run, loader must load it
into memory and start it running
Loader is the operating system (one of the OS
tasks)
17



Reads executable file’s header to determine
size of text and data segments
Creates new address space for program to
hold the text and data segments, plus a stack
segment
Copies instructions and data from executable
file into the new address space
18

Copies program’s arguments onto the stack

Initializes machine registers

Jumps to start-up routine
◦ Copies program’s arguments from stack to
registers
◦ Sets the PC
19

Both the loader and linker are part of the
operating system
◦ Modules can be linked and loaded at runtime


If a module is needed and already loaded, it
need not be loaded again
DLL – Dynamic-Link Library
20
C program: foo.c
Compiler
Assembly program: foo.s
Assembler
Object (machine lang. module): foo.o
Linker
lib.o
Executable (machine lang. prgm): a.out
Loader
Memory
21