Breaking down the gcc command

advertisement
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
Download