linkers_and_loaders

Views:
 
Category: Education
     
 

Presentation Description

No description available.

Comments

Presentation Transcript

Linkers & Loaders – A Programmers Perspective : 

Linkers & Loaders – A Programmers Perspective Sandeep Grover (sgrover@quicklogic.com) Quicklogic, India

Agenda.. : 

Agenda.. Basic concepts Object Files Program Loading Linking with static libraries Linking with dynamic libraries

The Basics.. : 

The Basics.. Compiler in Action… gcc foo.c bar.c –o a.out a.out = fully linked executable

What is Linker ? : 

What is Linker ? Combines multiple relocatable object files Produces fully linked executable – directly loadable in memory How? Symbol resolution – associating one symbol definition with each symbol reference Relocation – relocating different sections of input relocatable files

Object files.. : 

Object files.. Types – Relocatable : Requires linking to create executable Executable : Loaded directly into memory for execution Shared Objects : Linked dynamically, at run time or load time Formats – a.out, IBM360, OMF, COFF, PE, ELF, ELF-64 … http://www.nondot.org/~sabre/os/articles/ExecutableFileFormats/

Object Files .. (Cntd) : 

Object Files .. (Cntd) ELF relocatable Object File .text – machine code .rodata – format strings in printf .data – initialized globals .bss – uninitialized globals

Program Loading : 

Program Loading Linux run-time memory image on execve

Symbol Resolution.. : 

Symbol Resolution.. 3 types of symbols resolved during linking Non-static global symbols defined by object file Extern global symbols referenced by object file Static symbols local to object file/function Local Automatic variables : managed on stack & not of interest to linkers

Symbol Resolution ..(Cntd) : 

Symbol Resolution ..(Cntd) Resolving Global Symbols – Strong Symbols : functions, initialized global variables Weak Symbols : uninitialized global variables Rules of thumb – Multiple strong symbols – not allowed Given a strong and multiple weak symbols, choose the strong symbol Given multiple weak symbols, choose any weak symbol

Linking with Static Libraries : 

Linking with Static Libraries Collection of concatenated object files – stored on disk in a particular format – archive An input to Linker Referenced object files copied to executable

Resolving symbols using static libs. : 

Resolving symbols using static libs. Scans input relocatable files from left to right as on command line Maintains set E of object files req to form executable, set U of unresolved symbols, set D of symbols defined in prev files. Updates E, U and D while scanning input relocatable files U must be empty at the end – contents of E used to form executable Problems ? Libraries must be placed at the end of command line. Cyclic dependency ?? Size of the executable ??? Change in library requires re-linking

Relocation – The heart of Linker : 

Relocation – The heart of Linker Relocating sections and symbol definitions Merges all sections of similar types Assigns unique run-time address to every instruction/var Relocating symbol references within sections Modifies symbol references inside sections – make them point to correct run-time addresses Uses relocation entries for the above purpose Created for every un-defined reference Placed in .relo.text & .relo.data sections Contains offset, symbol & type (algorithm) Iterates over relocation entries and relocates

Dynamic Linking – Shared Libraries : 

Dynamic Linking – Shared Libraries Addresses disadvantages of static libraries Ensures one copy of text & data in memory Change in shared library does not require executable to be built again Loaded at run-time by dynamic linker, at arbitrary memory address, linked with programs in memory On loading, dynamic linker relocates text & data of shared object; also relocates any references in executable to symbols defined in shared object E.g. .so files in Linux/Sun; .sl in HPUX; DLLs in Microsoft Windows Can be loaded dynamically in the middle of execution – dlopen, dlsym, dlclose calls in Linux/Sun; shl_load, shl_findsym in HPUX, LoadLibrary, GetProcAddress in Windows

Shared Libraries ..(Cntd) : 

Shared Libraries ..(Cntd) Linker creates libfoo.so (PIC) from a.o b.o a.out – partially executable – dependency on libfoo.so .interp section in a.out – invokes dynamic linker Dynamic linker maps shared library into program’s address space

Position Independent Code (PIC) : 

Position Independent Code (PIC) Important property – required by shared libraries No absolute addresses – hence can be loaded and executed at any address Uses PC-relative/indirect addressing Indirect addressing – required for externally defined functions and globals Uses Global Offset Table (GOT) to resolve unreferenced global variables Uses a Procedure Linkage Table (PLT) along with GOT to resolve unreferenced functions GOT resides at the start of data segment, GOT entries are fixed at run-time to point to correct run-time address Lazy binding of function calls

Thank You all !! : 

Thank You all !! References – http://www.iecc.com/linker - Linker book by John Levine http://docs.hp.com/hpux/onlinedocs/B2355-90655/B2355-90655.html - HPUX Linkers and Libraries guide http://docs.sun.com/db?p=/doc/816-1386 - Sun Linkers and Libraries guide http://www.linuxjournal.com/article.php?sid=6463 - An article on Linkers and Loaders by Sandeep Grover Questions ???? -- Sandeep Grover <sgrover@quicklogic.com>

authorStream Live Help