Breaking down the gcc command
Download
Report
Transcript Breaking down the gcc command
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