Toolchain Micro Computer Enigneering Toolchain slide 1 Toolchain

  • Slides: 16
Download presentation
Toolchain Micro. Computer Enigneering Toolchain slide 1

Toolchain Micro. Computer Enigneering Toolchain slide 1

Toolchain GNU make – build utility – – Dependency-tracking Custom build-rules Parallel builds Flexible/Powerful

Toolchain GNU make – build utility – – Dependency-tracking Custom build-rules Parallel builds Flexible/Powerful (In use since 1977) Micro. Computer Enigneering Toolchain slide 2

Toolchain GCC – GNU Compiler Collection – – Open source Support for ~20 targets

Toolchain GCC – GNU Compiler Collection – – Open source Support for ~20 targets C/C++/Objective-C/Java/Fortran/Ada Very large community with several companies Micro. Computer Enigneering Toolchain slide 3

Toolchain GNU binutils – binary tools – – – as: Assembler ld: Linking object

Toolchain GNU binutils – binary tools – – – as: Assembler ld: Linking object files objdump: Dumping object files addr 2 line, ar, c++filt, nm, ranlib, objcopy, etc. Usually supports more target than GCC Standard in all Linux distrubutions (almost) Micro. Computer Enigneering Toolchain slide 4

Toolchain File-formats: Text – Makefiles (Controls build-order, programs etc. ) – Sources (C, asm)

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) Micro. Computer Enigneering Toolchain slide 5

Toolchain Micro. Computer Enigneering Toolchain slide 6

Toolchain Micro. Computer Enigneering Toolchain slide 6

Toolchain GCC – C-Compiler – Higher level, but not too high (portable assembly) –

Toolchain GCC – C-Compiler – Higher level, but not too high (portable assembly) – Optimizations (O 0, O 1, O 2, O 3, etc. ) – Used in laboration 04 Micro. Computer Enigneering Toolchain slide 7

C (-O 0) const int const_global = 2; int main(void) { int local =

C (-O 0) const int const_global = 2; int main(void) { int local = 3; return global + local + const_global; } ASM 80020000 <main>: 80020000: 27 bdfff 0 80020004: afbe 0008 80020008: 03 a 0 f 021 8002000 c: 24020003 80020010: afc 20000 80020014: 8 f 838010 80020018: 8 fc 20000 8002001 c: 00621021 80020020: 8 f 838014 80020024: 00431021 80020028: 03 c 0 e 821 8002002 c: 8 fbe 0008 80020030: 27 bd 0010 80020034: 03 e 00008 80020038: 0000 addiu sw move li sw lw lw addu move lw addiu jr nop sp, -16 s 8, 8(sp) s 8, sp v 0, 3 v 0, 0(s 8) v 1, -32752(gp) v 0, 0(s 8) v 0, v 1, v 0 v 1, -32748(gp) v 0, v 1 sp, s 8, 8(sp) sp, 16 ra Micro. Computer Enigneering Toolchain slide 8

C (-O 1) ASM int main(void) { return 0; } 80020000 <main>: 80020000: 8

C (-O 1) ASM int main(void) { return 0; } 80020000 <main>: 80020000: 8 f 828010 80020004: 03 e 00008 80020008: 24420005 lw jr addiu v 0, -32752(gp) ra v 0, 5 Micro. Computer Enigneering Toolchain slide 9

C (-O 0) int loop(int arg) { int i; int sum = 0; for

C (-O 0) int loop(int arg) { int i; int sum = 0; for (i=0; i<5; i++) { sum += arg; } return sum; } ASM 80020094 <loop>: 80020094: 27 bdfff 0 80020098: afbe 0008 8002009 c: 03 a 0 f 021 800200 a 0: afc 40010 800200 a 4: afc 00004 800200 a 8: afc 00000 800200 ac: 8 fc 20000 800200 b 0: 28420005 800200 b 4: 1040000 a 800200 b 8: 0000 800200 bc: 8 fc 30004 800200 c 0: 8 fc 20010 800200 c 4: 00621021 800200 c 8: afc 20004 800200 cc: 8 fc 20000 800200 d 0: 24420001 800200 d 4: afc 20000 800200 d 8: 1000 fff 4 800200 dc: 0000 800200 e 0: 8 fc 20004 800200 e 4: 03 c 0 e 821 800200 e 8: 8 fbe 0008 800200 ec: 27 bd 0010 800200 f 0: 03 e 00008 800200 f 4: 0000 addiu sw move sw sw sw lw slti beqz nop lw lw addu sw lw addiu sw b nop lw move lw addiu jr nop sp, -16 s 8, 8(sp) s 8, sp a 0, 16(s 8) zero, 4(s 8) zero, 0(s 8) v 0, 5 v 0, 800200 e 0 <loop+0 x 4 c> v 1, 4(s 8) v 0, 16(s 8) v 0, v 1, v 0, 4(s 8) v 0, 0(s 8) v 0, 1 v 0, 0(s 8) 800200 ac <loop+0 x 18> v 0, 4(s 8) sp, s 8, 8(sp) sp, 16 ra Micro. Computer Enigneering Toolchain slide 10

C (-O 1) ASM int loop(int arg) { int i; int sum = 0;

C (-O 1) ASM int loop(int arg) { int i; int sum = 0; for (i=0; i<5; i++) { sum += arg; } 80020040 <loop>: 80020040: 00002821 80020044: 00001821 80020048: 24630001 8002004 c: 28620005 80020050: 1440 fffd 80020054: 00 a 42821 80020058: 03 e 00008 8002005 c: 00 a 01021 move addiu slti bnez addu jr move a 1, zero v 1, 1 v 0, v 1, 5 v 0, 80020048 <loop+0 x 8> a 1, a 0 ra v 0, a 1 return sum; } Micro. Computer Enigneering Toolchain slide 11

C (-O 2, -O 3) int loop(int arg) { int i; int sum =

C (-O 2, -O 3) int loop(int arg) { int i; int sum = 0; for (i=0; i<5; i++) { sum += arg; } ASM 80020030 <loop>: 80020030: 24020004 80020034: 2442 ffff 80020038: 0441 fffe 8002003 c: 0000 80020040: 00041080 80020044: 03 e 00008 80020048: 00441021 li addiu bgez nop sll jr addu v 0, 4 v 0, -1 v 0, 80020034 <loop+0 x 4> v 0, a 0, 0 x 2 ra v 0, a 0 return sum; } Micro. Computer Enigneering Toolchain slide 12

C (-O 3 -funroll-loops) ASM int loop(int arg) { int i; int sum =

C (-O 3 -funroll-loops) ASM int loop(int arg) { int i; int sum = 0; for (i=0; i<5; i++) { sum += arg; } 80020000 <loop>: 80020000: 00041080 80020004: 03 e 00008 80020008: 00441021 sll jr addu v 0, a 0, 0 x 2 ra v 0, a 0 return sum; } Micro. Computer Enigneering Toolchain slide 13

Toolchain Optimizations, what are they good for? – May improve code – May result

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! Micro. Computer Enigneering Toolchain slide 14

Toolchain Linking, what is it good for? – Resolving symbols to memory location –

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 Micro. Computer Enigneering Toolchain slide 15

Toolchain Micro. Computer Enigneering Toolchain slide 16

Toolchain Micro. Computer Enigneering Toolchain slide 16