Today’s Topic Breakdown of GCC script Description of how different system programs work together to build (and run) a C program. System Software (for today) Assembler Compiler Linker Loader Operating system Preprocessor Today’s Objectives Within context of “compiling” a C program Define actions of linker, compiler, assembler, OS, macro preprocessor, loader Draw block diagram showing order of linker, compiler, assembler, macro preprocessor, loader Breaking Down CC Preprocessed source Preprocessor Source Executable Program In Memory Compiler ASM .s Assembler O B Executable Loader a.out J Linker .o E C T Breaking Down CC Preprocessed source Preprocessor Source Executable Program In Memory Compiler ASM .s Assembler O B Executable Loader a.out J Linker .o E C T C Preprocessor (cpp) Pass over source Define macros Insert included files Perform macro substitutions #define NUM 100 #define xx(v,name,op,metrics) \ v=xxinit(op,name,IR->metrics) gcc –E example.c sends preprocessor output to stdout Breaking Down CC Preprocessed source Preprocessor Source Executable Program In Memory Compiler ASM .s Assembler O B Executable Loader a.out J Linker .o E C T Compiler gcc actually name of a script Compiler translates one language to another (or the same???) gcc compiler translates C to assembler gcc –S example.c “saves” example.s Compiler consists of Parser Code generation Mysticism Breaking Down CC Preprocessed source Preprocessor Source Executable Program In Memory Compiler ASM .s Assembler O B Executable Loader a.out J Linker .o E C T Assembler Another translator ??? (as example.s) Assembler to (binary) object Why not compile straight to binary? gcc –c example.c to “save” object NM to look at object (nm example.o) Breaking Down CC Preprocessed source Preprocessor Source Executable Program In Memory Compiler ASM .s Assembler O B Executable Loader a.out J Linker .o E C T Linker Combines objects, both user .o files and libraries; makes an executable file gcc *.o –lm yields a.out gcc –o myExec *.o –lm Use nm to look at executable Breaking Down CC Preprocessed source Preprocessor Source Executable Program In Memory Compiler ASM .s Assembler O B Executable Loader a.out J Linker .o E C T Loader Runs when you type ./a.out Gets an address to place program (from the operating system) Changes necessary addresses (if any) Places code into memory Operating System OS is ALWAYS running Oversees whole compilation process “Recognizes” gcc example.c command Parses flags and arguments Invokes gcc script Performs memory management (malloc) Chooses “address” to place program Compiler Optimization What does optimization mean? What does compiler optimization mean? “Optimization” takes more time to compile in hopes of generating faster executable -O# is the flag to ask for optimization gcc –O3 tsp.c gives “highest” level