16
MicroComputer Enigneering Toolchain slide 1 Toolchain

MicroComputer Enigneering Toolchain slide 1 Toolchain

Embed Size (px)

Citation preview

Page 1: MicroComputer Enigneering Toolchain slide 1 Toolchain

MicroComputer Enigneering Toolchain slide 1

Toolchain

Page 2: 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)

Page 3: MicroComputer Enigneering Toolchain slide 1 Toolchain

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

Page 4: MicroComputer Enigneering Toolchain slide 1 Toolchain

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)

Page 5: MicroComputer Enigneering Toolchain slide 1 Toolchain

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)

Page 6: MicroComputer Enigneering Toolchain slide 1 Toolchain

MicroComputer Enigneering Toolchain slide 6

Toolchain

Page 7: MicroComputer Enigneering Toolchain slide 1 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

Page 8: MicroComputer Enigneering Toolchain slide 1 Toolchain

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

Page 9: MicroComputer Enigneering Toolchain slide 1 Toolchain

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

Page 10: MicroComputer Enigneering Toolchain slide 1 Toolchain

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

Page 11: MicroComputer Enigneering Toolchain slide 1 Toolchain

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

Page 12: MicroComputer Enigneering Toolchain slide 1 Toolchain

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

Page 13: MicroComputer Enigneering Toolchain slide 1 Toolchain

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

Page 14: MicroComputer Enigneering Toolchain slide 1 Toolchain

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!

Page 15: MicroComputer Enigneering Toolchain slide 1 Toolchain

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

Page 16: MicroComputer Enigneering Toolchain slide 1 Toolchain

MicroComputer Enigneering Toolchain slide 16

Toolchain