Today’s Topic Breakdown of CC script
Today’s Objectives Within context of “compiling” C program Define actions of linker, compiler, assembler, OS, macro preprocessor, loader Draw block diagram showing order of linker, compiler, assembler, OS, macro preprocessor, loader Explain why runtime stack needed for C Draw logical division of memory into stack, heap Compare and contrast stack and heap For C program, indicate which variables are stored in heap; in stack; in neither
Breaking Down CC Preprocessed Source source Compiler Assembler .s ASM Compiler Assembler Preprocessor .s O B J E C T Executable Program In Memory Executable Loader Linker a.out .o
Breaking Down CC Preprocessed Source source Compiler Assembler .s ASM Compiler Assembler Preprocessor .s O B J E C T Executable Program In Memory Executable Loader Linker a.out .o
C Preprocessor (cpp) Pass over source Define macros Insert included files Perform macro substitutions Define macros #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 source Compiler Assembler .s ASM Compiler Assembler Preprocessor .s O B J E C T Executable Program In Memory Executable Loader Linker a.out .o
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 source Compiler Assembler .s ASM Compiler Assembler Preprocessor .s O B J E C T Executable Program In Memory Executable Loader Linker a.out .o
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 source Compiler Assembler .s ASM Compiler Assembler Preprocessor .s O B J E C T Executable Program In Memory Executable Loader Linker a.out .o
Linker Combine objects, both user .o files and libraries, make an executable gcc *.o –lm yields a.out gcc –o myExec *.o –lm Use nm to look at object
Breaking Down CC Preprocessed Source source Compiler Assembler .s ASM Compiler Assembler Preprocessor .s O B J E C T Executable Program In Memory Executable Loader Linker a.out .o
Loader Gets an address to place program Changes necessary addresses (if any) Places code into memory
Operating System Oversees whole process “Recognizes” gcc example.c command Parses flags and arguments Invokes gcc script Performs memory mangagement (malloc) Chooses “address” to place program