Unformatted text preview:

Systems I Linking I Topics Assembly and symbol resolution Static linking A Simplistic Program Translation Scheme m c Translator ASCII source file Compiler m s Translator p Assembler Binary executable object file memory image on disk Problems Efficiency small change requires complete recompilation Modularity hard to share common functions e g printf Solution Static linker or linker 2 A Better Scheme Using a Linker m c a c Translators Translators m s a s Translators Translators m o a o Compiler Assembler Separately compiled relocatable object files Linker ld p Executable object file contains code and data for all functions defined in m c and a c 3 Translating the Example Program Compiler driver coordinates all steps in the translation and linking process Typically included with each compilation system e g gcc Invokes preprocessor cpp compiler cc1 assembler as and linker ld Passes command line arguments to appropriate phases Example create executable p from m c and a c bass gcc O2 v o p m c a c cpp args m c tmp cca07630 i cc1 tmp cca07630 i m c O2 args o tmp cca07630 s as args o tmp cca076301 o tmp cca07630 s similar process for a c ld o p system obj files tmp cca076301 o tmp cca076302 o bass 4 Compiling Assembling C Code double sum loop int val int sum 0 double pi 3 14 int i for i 3 i val i sum sum i return sum pi Obtain with command gcc O S sum loop c Produces file code s Generated Assembly sum loop pushl movl movl movl cmpl jle movl movl L5 addl addl cmpl jge L4 pushl fildl leal faddl popl ret LC0 long long ebp esp ebp 8 ebp ecx 0 edx 2 ecx L4 0 edx 3 eax eax edx 1 eax eax ecx L5 edx esp 4 esp esp LC0 ebp 1374389535 1074339512 5 Role of the Assembler Translate assembly code into machine code Compiled or hand generated Translate data into binary codes using directives Resolve symbols Translate into relocatable offsets Error check Syntax checking Ensure that constants are not too large for fields 6 Where did the labels go Disassembled Object Code 08048334 sum loop 8048334 55 8048335 89 e5 8048337 8b 4d 804833a ba 00 804833f 83 f9 8048342 7e 13 8048344 ba 00 8048349 b8 03 804834e 01 c2 8048350 83 c0 8048353 39 c1 8048355 7d f7 8048357 52 8048358 db 04 804835b 8d 64 804835f dc 05 8048365 5d 8048366 c3 08 00 00 00 02 00 00 00 00 00 00 01 24 24 04 50 84 04 08 push mov mov mov cmp jle mov mov add add cmp jge push fildl lea faddl pop ret ebp esp ebp 0x8 ebp ecx 0x0 edx 0x2 ecx 8048357 sum loop 0x23 0x0 edx 0x3 eax eax edx 0x1 eax eax ecx 804834e sum loop 0x1a edx esp 0x4 esp esp 0x8048450 ebp 7 Label Resolution Disassembled Object Code 8048342 8048355 804835f 7e 13 jle 8048357 sum loop 0x23 7d f7 jge 804834e sum loop 0x1a dc 05 50 84 04 08 faddl 0x8048450 Byte relative offsets for jle and jge jle 13 bytes forward jge 9 bytes bytes backward two s comp of xf7 Relocatable absolute address faddl x8048450 8 How does the assembler work One pass Record label definitions When use is found compute offset Two pass Pass 1 scan for label instantiations creates symbol table Pass 2 compute offsets from label use def Can detect if computed offset is too large for assembly instruction 9 Symbol Table 00000000 g symbol type global F text segment 00000033 sum loop offset from segment start symbol name Tracks location of symbols in object file Symbols that can be resolved need not be included Symbols that may be needed during linking must be included 10 What Does a Linker Do Merges object files Merges multiple relocatable o object files into a single executable object file that can loaded and executed by the loader Resolves external references As part of the merging process resolves external references External reference reference to a symbol defined in another object file Relocates symbols Relocates symbols from their relative locations in the o files to new absolute positions in the executable Updates all references to these symbols to reflect their new positions References can be in either code or data code a data int xp x reference to symbol a reference to symbol x 11 Why Linkers Modularity Program can be written as a collection of smaller source files rather than one monolithic mass Can build libraries of common functions more on this later e g Math library standard C library Efficiency Time Change one source file compile and then relink No need to recompile other source files Space Libraries of common functions can be aggregated into a single file Yet executable files and running memory images contain only code for the functions they actually use 12 Executable and Linkable Format ELF Standard binary format for object files Derives from AT T System V Unix Later adopted by BSD Unix variants and Linux One unified format for Relocatable object files o Executable object files Shared object files so Generic name ELF binaries Better support for shared libraries than old a out formats 13 ELF Object File Format Elf header Magic number type o exec so machine byte ordering etc Program header table Page size virtual addresses memory segments sections segment sizes text section Code data section Initialized static data bss section Uninitialized static data Block Started by Symbol Better Save Space Has section header but occupies no space 0 ELF header Program header table required for executables text section data section bss section symtab rel text rel data debug Section header table required for relocatables 14 ELF Object File Format cont symtab section Symbol table Procedure and static variable names Section names and locations rel text section Relocation info for text section Addresses of instructions that will need to be modified in the executable Instructions for modifying rel data section Relocation info for data section Addresses of pointer data that will need to be modified in the merged executable debug section 0 ELF header Program header table required for executables text section data section bss section symtab rel text rel data debug Section header table required for relocatables Info for symbolic debugging gcc g 15 Example C Program m c int e 7 int main int r a exit 0 a c extern int e int ep e int x 15 int y int a return ep x y 16 Merging Relocatable Object Files into an Executable Object File Relocatable Object Files system code text system data data Executable Object File 0 headers system code main m o a o main text int e 7 data a text int ep e int x 15 int y data bss text a more system code system data int e 7 int ep e int x 15 uninitialized data symtab debug data bss 17 Summary Today Compilation


View Full Document

UT CS 429H - Linking I

Loading Unlocking...
Login

Join to view Linking I and access 3M+ class-specific study document.

or
We will never post anything without your permission.
Don't have an account?
Sign Up

Join to view Linking I and access 3M+ class-specific study document.

or

By creating an account you agree to our Privacy Policy and Terms Of Use

Already a member?