Sponsored Content
Top Forums Programming Need more info on internals of c compilers Post 302361382 by pludi on Tuesday 13th of October 2009 05:37:55 AM
Old 10-13-2009
Everything you asked is outside the work the compiler does.

The compiler's main objective is to take (preprocessed) high-level code, and translate it to assembly code. Example:
Code:
$ cat hello.c
#include <stdio.h>

int main(int argc, char **argv)
{
        printf("Hello, World!\n");
        return 0;
}
$ gcc -S -o hello.s hello.c
$ cat hello.s
        .file   "hello.c"
        .section        .rodata
.LC0:
        .string "Hello, World!"
        .text
.globl main
        .type   main, @function
main:
        leal    4(%esp), %ecx
        andl    $-16, %esp
        pushl   -4(%ecx)
        pushl   %ebp
        movl    %esp, %ebp
        pushl   %ecx
        subl    $4, %esp
        movl    $.LC0, (%esp)
        call    puts
        movl    $0, %eax
        addl    $4, %esp
        popl    %ecx
        popl    %ebp
        leal    -4(%ecx), %esp
        ret
        .size   main, .-main
        .ident  "GCC: (GNU) 4.2.1 (SUSE Linux)"
        .section        .note.GNU-stack,"",@progbits

The assembler then uses that to create an object file (the output of 'gcc -c').
The linker takes the object file and connects it with various libraries to create an executable.
The loader reads the executable, and loads the referenced libraries, if available, and maps them into virtual memory.

The 'gcc' command, by default, hides these steps from the user, and invokes the complete toolchain (for a C program: cpp [C Pre-Processor], cc [C Compiler], as [Assembler], and ld [Linker])

Further reading: Compiler, Assembler, Linker, Virtual memory, and a series of blog posts on Linkers

---------- Post updated at 11:37 ---------- Previous update was at 11:18 ----------

Addendum: if you compile the program above (hello.c) using
Code:
gcc -v -save-temps -o hello hello.c

you'll see all the "compilation" steps, and the intermediate steps will be saved to hello.i (preprocessed), hello.s (compiled), hello.o (assembled), and hello (linked).
 

9 More Discussions You Might Find Interesting

1. Windows & DOS: Issues & Discussions

MS DOS Basic to .EXE compilers?

Hi, Does anyone know any compilers that will do Microsoft Basic files and make them .exe files. Thanks :D (1 Reply)
Discussion started by: jacx2
1 Replies

2. UNIX for Dummies Questions & Answers

Finding out available C++ compilers on my system

How can I find out what C++ compilers are available on my system? Thanks in advance (7 Replies)
Discussion started by: HelpMeIAmLost
7 Replies

3. AIX

Error: could not find any of these C compilers

Hi, While trying to configure Apache Web Server on P630 Server i am getting the below message "Creating Makefile in src + configured for AIX 5.2 platform Error: could not find any of these C compilers anywhere in your PATH: gcc cc acc c89 Configure terminated" when i did a "lslpp -l... (2 Replies)
Discussion started by: cherryven
2 Replies

4. Programming

Help with C compilers

i have windows 7 64bit, and i want to program C in it, i have the eclipse for C, but it wont work because i have no C compilers , where do i get a C compiler, so eclipse will work? I usually transfer to a unix server and use a command gcc -Wall -g -o ___ ___ where can i get the gcc C... (5 Replies)
Discussion started by: omega666
5 Replies

5. Homework & Coursework Questions

Phases of Compilers

Hello I have a questions and m stuck on it. Theoritcally the phases of compiler. 1. Lexical analyis -- genrates tokes NOW MY QUESTION IS: where i can see these token if i make a simple C program. Please guys tell me step to see it. and other phases too. your help will be appreciated... (1 Reply)
Discussion started by: aditya08
1 Replies

6. What is on Your Mind?

How to switch from SVR4/BSD internals to Linux internals?

Hello, Long-time Unix hacker here - I've worked on four variants of the kernel prior to the introduction of Linux. In my spare time, I've written Linux (Ubuntu) device drivers, kernel modules, cross-compiled, and built the kernel. I'd like to do Linux internals/device drivers as a day job,... (1 Reply)
Discussion started by: OriginalVersion
1 Replies

7. AIX

C Compilers Available on AIX

Hi Guys, I want to know what are the different C compilers are available on AIX like cc, gcc etc. Appreciate your help. Regards, Srikanth:) (1 Reply)
Discussion started by: ysrikanth
1 Replies

8. Programming

Makefile for two compilers

I have g++-4.6 and g++-4.8.2 installed on my system and want to build a suite of programs using each one. I am thinking putting the option on what to build by having a different target, one for g++-4.6 and another target for g++-4.8.2. What do you think? (1 Reply)
Discussion started by: kristinu
1 Replies

9. Solaris

How to combine c11 and c99 compilers?

I have a SPARC server with Solaris SPARC 10 OS installed I am trying to compile source code from VLC media player and PHP 7 tarballs However the stumbling block I encounter is that when I type in ./configure into my PUTTY terminal the GCC compiler tells me halfway through configuration that... (3 Replies)
Discussion started by: alphatron150
3 Replies
All times are GMT -4. The time now is 01:13 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy