Upload
deborah-walker
View
217
Download
2
Embed Size (px)
Citation preview
MicroComputer Enigneering Toolchain slide 1
Toolchain
MicroComputer Enigneering Toolchain slide 2
Toolchain
GNU make – build utility– Dependency-tracking
– Custom build-rules
– Parallel builds
– Flexible/Powerful (In use since 1977)
MicroComputer Enigneering Toolchain slide 3
Toolchain
GCC – GNU Compiler Collection– Open source
– Support for ~20 targets
– C/C++/Objective-C/Java/Fortran/Ada
– Very large community with several companies
MicroComputer Enigneering Toolchain slide 4
Toolchain
GNU binutils – binary tools– as: Assembler
– ld: Linking object files
– objdump: Dumping object files
– addr2line, ar, c++filt, nm, ranlib, objcopy, etc.
– Usually supports more target than GCC
– Standard in all Linux distrubutions (almost)
MicroComputer Enigneering Toolchain slide 5
Toolchain
File-formats: Text– Makefiles (Controls build-order, programs etc.)
– Sources (C, asm)
– Linker-scripts (Controls memory-layout)
File-formats: Binary– Object-files (Before linking)
– ELF-files (After linking)
MicroComputer Enigneering Toolchain slide 6
Toolchain
MicroComputer Enigneering Toolchain slide 7
Toolchain
GCC – C-Compiler– Higher level, but not too high (portable assembly)
– Optimizations (O0, O1, O2, O3, etc.)
– Used in laboration 04
MicroComputer Enigneering Toolchain slide 8
C (-O0) ASM
const int const_global = 2;
int main(void){
int local = 3;return global + local + const_global;
}
80020000 <main>:80020000: 27bdfff0 addiu sp,sp,-1680020004: afbe0008 sw s8,8(sp)80020008: 03a0f021 move s8,sp8002000c: 24020003 li v0,380020010: afc20000 sw v0,0(s8)80020014: 8f838010 lw v1,-32752(gp)80020018: 8fc20000 lw v0,0(s8)8002001c: 00621021 addu v0,v1,v080020020: 8f838014 lw v1,-32748(gp)80020024: 00431021 addu v0,v0,v180020028: 03c0e821 move sp,s88002002c: 8fbe0008 lw s8,8(sp)80020030: 27bd0010 addiu sp,sp,1680020034: 03e00008 jr ra80020038: 00000000 nop
MicroComputer Enigneering Toolchain slide 9
C (-O1) ASM
int main(void){
return 0;}
80020000 <main>:80020000: 8f828010 lw v0,-32752(gp)80020004: 03e00008 jr ra80020008: 24420005 addiu v0,v0,5
MicroComputer Enigneering Toolchain slide 10
C (-O0) ASM
int loop(int arg){
int i;int sum = 0;
for (i=0;i<5;i++) {sum += arg;
}
return sum;}
80020094 <loop>:80020094: 27bdfff0 addiu sp,sp,-1680020098: afbe0008 sw s8,8(sp)8002009c: 03a0f021 move s8,sp800200a0: afc40010 sw a0,16(s8)800200a4: afc00004 sw zero,4(s8)800200a8: afc00000 sw zero,0(s8)800200ac: 8fc20000 lw v0,0(s8)800200b0: 28420005 slti v0,v0,5800200b4: 1040000a beqz v0,800200e0 <loop+0x4c>800200b8: 00000000 nop800200bc: 8fc30004 lw v1,4(s8)800200c0: 8fc20010 lw v0,16(s8)800200c4: 00621021 addu v0,v1,v0800200c8: afc20004 sw v0,4(s8)800200cc: 8fc20000 lw v0,0(s8)800200d0: 24420001 addiu v0,v0,1800200d4: afc20000 sw v0,0(s8)800200d8: 1000fff4 b 800200ac <loop+0x18>800200dc: 00000000 nop800200e0: 8fc20004 lw v0,4(s8)800200e4: 03c0e821 move sp,s8800200e8: 8fbe0008 lw s8,8(sp)800200ec: 27bd0010 addiu sp,sp,16800200f0: 03e00008 jr ra800200f4: 00000000 nop
MicroComputer Enigneering Toolchain slide 11
C (-O1) ASM
int loop(int arg){
int i;int sum = 0;
for (i=0;i<5;i++) {sum += arg;
}
return sum;}
80020040 <loop>:80020040: 00002821 move a1,zero80020044: 00001821 move v1,zero80020048: 24630001 addiu v1,v1,18002004c: 28620005 slti v0,v1,580020050: 1440fffd bnez v0,80020048 <loop+0x8>80020054: 00a42821 addu a1,a1,a080020058: 03e00008 jr ra8002005c: 00a01021 move v0,a1
MicroComputer Enigneering Toolchain slide 12
C (-O2, -O3) ASM
int loop(int arg){
int i;int sum = 0;
for (i=0;i<5;i++) {sum += arg;
}
return sum;}
80020030 <loop>:80020030: 24020004 li v0,480020034: 2442ffff addiu v0,v0,-180020038: 0441fffe bgez v0,80020034 <loop+0x4>8002003c: 00000000 nop80020040: 00041080 sll v0,a0,0x280020044: 03e00008 jr ra80020048: 00441021 addu v0,v0,a0
MicroComputer Enigneering Toolchain slide 13
C (-O3 -funroll-loops) ASM
int loop(int arg){
int i;int sum = 0;
for (i=0;i<5;i++) {sum += arg;
}
return sum;}
80020000 <loop>:80020000: 00041080 sll v0,a0,0x280020004: 03e00008 jr ra80020008: 00441021 addu v0,v0,a0
MicroComputer Enigneering Toolchain slide 14
Toolchain
Optimizations, what are they good for?– May improve code
– May result in smaller code Beware! May result in code-explosion!
– Usually good enough
– Can't beat the programmer!
MicroComputer Enigneering Toolchain slide 15
Toolchain
Linking, what is it good for?– Resolving symbols to memory location
– Fundamental for modular design! Merge several object files Keep track of symbols between files
MicroComputer Enigneering Toolchain slide 16
Toolchain