SlideShare una empresa de Scribd logo
1 de 26
Descargar para leer sin conexión
Compilador GCC



                   Prof. Dr. Almir Camolesi
15 de Setembro                                Ricardo L. Chikasawa
                   Disciplina: Compiladores
Introdução

    Compilador
            −    Importância do Compilador e das Linguagens de programação
            −    Definição de um compilador


    O Compilador GCC
            −    História
            −    O compilador e suas versões
            −    Exemplos de código fonte
            −    Estrutura e funcionamento
            −    Demo



15 de Setembro                      Compilador GCC
Compilador
   Importância do Compilador
   Os compiladores são ferramentas indispensáveis para programação. Pode-
se dizer que sem ele, seria quase impossível desenvolver programas muito
complexos.
   As linguagens de programação de alto nível são projetadas para que
possam ser mais facilmente entendidas por programadores humanos. Elas
permitem ao programador expressar suas intenções mais facilmente, escrever
programas mais organizados e com mais rapidez do que se tivessem que
escrever os programas diretamente em código de máquina (linguagens de
baixo nível).
   O compilador por sua vez, traduz um código fonte escrito numa linguagem
de alto nível (Ex: C/C++, Pascal, etc...), em um código alvo semanticamente
equivalente, escrito em código de máquina (Ex: Assembly). Esse código alvo
será enfim lido pela máquina e executado.

15 de Setembro                 Compilador GCC
15 de Setembro   Compilador GCC

Richard Stallman
GCC
   História
   O compilador GCC foi escrito por
Richard Stallman em 1987 para
servir de compilador para o Projeto
GNU.
   GCC é uma abreviação do termo
GNU Compiler Collection. Ele leva
este nome pelo fato de que várias
versões do compilador estão
integradas,    com      suporte   a
linguagens como C, C++, Objective-
C, Ada, Fortran, Java e Treelang.




 15 de Setembro                  Compilador GCC
GCC
Principais características


    Software Livre (GPL)

    Desenvolvimento de processo Distribuido

    Multiplataforma (Unix, Windows,Mac Os, Solaris)

    Suportando a maioria das linguagens : C, C++, Java, Fortran 95,
    Ada, Objective-C, Objective-C++, etc

    Processadores suportados pelo GCC inclui: ARM, x86 e x86-64,
    PowerPC, SPARC




15 de Setembro                Compilador GCC
GCC
   O compilador
   É o compilador padrão do sistema operacional GNU/Linux e
também foi adotado por (ou portado para) vários outros sistemas
operacionais (inclusive S.O.s comerciais pagos), tais como HP-UX,
MS-Windows, MS-DOS, IBM OS2, IBM AIX, SUN OS, SUN Solaris etc,
além é claro do próprio GNU/Linux, onde este compilador é utilizado no
desenvolvimento do próprio sistema operacional e de todas as
ferramentas nele disponíveis (ou seja, é o compilador 'nativo' do
Linux).
  Outro detalhe importante é que todas as distribuições Linux já vem
com um compilador GCC disponível, ou seja, se você tem um
computador com Linux instalado, você tem um compilador GCC pronto
para ser utilizado.


15 de Setembro                Compilador GCC
Versões GCC
 
     GCC 1 (1987)
            −    Inspirado no Compilador Pastel (Lawrence Livermore Labs)
            −    Compilava somente C

 
     GCC 2 (1992)
            −    Adicionou C++
            −    Suporte a arquitetura RISC

 
     EGCS (1997)
            −    Fork from GCC 2.x
            −    Novas Características: Java, novas otimizações



15 de Setembro                        Compilador GCC
Versões GCC
 
     GCC 2.95 (1999)
            −    EGCS e GCC2 fudem o GCC
            −    Baseado no tipo de Análise
            −    Front end
            −    ISO C99
 
     GCC 3 (2001)
            −    Integrabilidade libjava
            −    SSA, fase experimental formato de RTL
            −    Funções com árvores
 
     GCC 4 (2005)
            −    Revisão da arquitetura interna (Árvore SSA)
            −    Fortran 95
            −    Vetorização Automática


15 de Setembro                        Compilador GCC
GCC
                   (Windows x Linux)

      MinGW (Minimalist GNU for Windows)
   Foi criado por Colin Peters em 1998. Ele usou uma versão muito inicial da suíte do
Cygwin para compilar a primeira versão do código do compilador MinGW.
    É uma versão portada para Microsoft Windows do conjunto de ferramentas GNU (a
mesma instalada pelo ambiente Dev-C++ ou pelo CodeBlocks). Oferece um completo
conjunto de ferramentas Open Source de programação, apropriado para o
desenvolvimento de aplicativos nativos MS-Windows.
   Code::Blocks é um ambiente integrado de desenvolvimento para as linguagens C e
C++. Ele usa a implementação MinGw do GCC (GNU Compiler Collection) como seu
compilador. Ele é "Free Software" (sob GNU General Public License).
    Em 1999, a base de usuários do MinGW tornou-se grande o suficiente, para se
separar da “Cygwin mailing list”, e configurar ela própria uma lista de discussão
moderada pelo Earnie Boyd e Handerson Dale.




15 de Setembro                      Compilador GCC
GCC
                  (Windows x Linux)

   O MinGW inclui:
   • Uma porta do GNU Compiler Collection (GCC), incluindo compiladores C, C+
   +, ADA e Fortran.
   • GNU Binutils (coleção de ferramentas binárias) para Windows, ou seja,
   vinculador, gerente de arquivo.
   • MSYS, que é uma coleção de utilitários GNU, para permitir a construção de
   aplicações e programas que dependem de instrumentos tradicionais do UNIX
   para estar presente. Oferecido como uma alternativa para o cmd.exe da
   Microsoft.
   • Comunidade de apoio, ferramentas e bibliotecas (mingwPORTs).
   • Um gráfico e um instalador de linha de comando para o Windows.
   • Cross-compiladores para construir aplicações Windows em outras plataformas
   (por exemplo, Linux).


15 de Setembro                    Compilador GCC
Código fonte




15 de Setembro        Compilador GCC
Código fonte




15 de Setembro        Compilador GCC
GCC
     Funcionamento
    Quando o GCC é invocado, ele
 normalmente    realiza  quatro
 etapas para gerar o executável:
 pré-processamento, compilação,
 montagem e ligação, sempre
 nesta ordem.
    Os primeiros três estágios
 aplicam-se a um único arquivo
 fonte, e encerram produzindo um
 arquivo objeto.




15 de Setembro                 Compilador GCC
GCC
Fases da compilação

    Pré-processamento: Esta etapa é responsável pela resolução de diretrizes
    do pré-processador, como #define, #if, #include. Nesta fase, o GCC utiliza o
    utilitário cpp.

    Compilação: Nesta fase é gerada, a partir da fase anterior, o código
    Assembly do programa.

    Montagem: Produz o arquivo objeto .o, levando em conta a linguagem de
    montagem dos arquivos de entrada. Nesta etapa, o GCC utiliza o utilitário
    gas (GNU Assembler), ou o montador nativo as, caso ele não esteja
    disponível.

    Ligação: Nesta fase os arquivos .o e as bibliotecas são colocadas no
    executável. O utilitário usado nessa fase é o ld (GNU Linker).



15 de Setembro                    Compilador GCC
GCC
Estrutura do compilador




15 de Setembro            Compilador GCC
GCC
Estrututra do Compilador

Front End: responsável por validar a estrutura sintática do programa de entrada,
emitir diagnósticos mais precisos sobre a conformidade linguagem, criando
estruturas de dados internas para tipos de dados e variáveis declaradas no
programa, as informações de depuração, como nomes de arquivo e números de
linha.

Middle End: responsável em analisar e transformar o programa. Todas as
transformações feitas no Middle End e no back-end geralmente têm dois objetivos:
    • Tornar o código-objeto eficiente, rápido quanto possível (otimizações de desempenho).
    • Tornar o código-objeto ter o mínimo de espaço possível (otimizações de espaço).

Back End: Nesta fase, o compilador precisa ter um conhecimento muito detalhado
sobre o hardware onde o programa será executado.



15 de Setembro                        Compilador GCC
GCC
Static Sigle Assignment (SSA)

    Suporte para vetoriazação automática

    Apresenta duas novas representações intermediárias: Generic e Gimple

    SSA são convertida em RTL, usada pelo back-end para a geração de
    código de destino




15 de Setembro                  Compilador GCC
GCC
Static Sigle Assignment (SSA)
GENERIC: é uma linguagem usada para definir a representação intermédiaria
do código usada por todas as fachadas do GCC.
GIMPLE: gerada a partir da forma GENERIC, permite muitas otimizações
globais independentes de linguagem e da arquitetura.
Estes dois processos intermediários de otimização na     árvore tem sido
chamado de Middle-end e incluem:
     • Propagação de constantes
     • Eliminação de código morto
     • Eliminação de redundância
     • Alocação de registradores


15 de Setembro                      Compilador GCC
GCC
 Otimização de Código
 Otimizador de código, deixando o código mais rápido e compacto
 Uma fase de recarga altera os registradores abstratos para
 registradores reais, com base nos padrões de descrição dos conjuntos
 de instruções da máquina alvo.




15 de Setembro               Compilador GCC
GCC
Open MP

    Programação Paralela

    Suporta multi-plataforma

    Memória compartilhada




15 de Setembro                 Compilador GCC
GCC - Demo
 Programa:
 #include <stdio.h>                                 int main (void)
                                                   {
 double test_loop(double d, unsigned n)                  double soma = 0.0;
 {                                                       unsigned i;
     double x = 1.0;                                     for (i = 1; i <= 100000000; i++)
     unsigned j;                                         {
     for (j = 1; j <= n; j++) x *= d;                        soma += test_loop(i, i % 5);
     return x;                                           }
 }                                                       printf ("s = %gn", soma);
                                                         return 0;
                                                   }



15 de Setembro                          Compilador GCC
GCC - Demo
 Primeiro teste :                  Quarto teste:
 gcc -Wall -O0 test.c -lm          gcc -Wall -O3 test.c -lm
 time ./a.out                      time ./a.out

 Segundo teste:
                                   Quinto teste:
 gcc -Wall -O1 test.c -lm
 time ./a.out                      gcc -Wall -O3 -funroll-loops test.c -lm
                                   time ./a.out
 Terceito teste:
 gcc -Wall -O2 test.c -lm          Sexto teste:
 time ./a.out
                                   gcc -fdump-tree-<generic> test.c



15 de Setembro              Compilador GCC
Conclusão

      Nós concluimos que o GCC é uma peça fundamental em quaisquer
desenvolvimento de software livre e de software fechado. Ele funciona
como ativador das arquiteturas e dos sistemas operacionais. Quando um
novo processador aparace, seu êxito depende de uma versão GCC que
irá fornecer suporte a ele.

    Além de ser robusto, tem diversas ferramentas para sistema
distribuídos, onde hoje tudo é interligado a uma rede.

      Por ser aberto, todos tem a oportunidade de evoluir e contrubuir
com o projeto da GNU.



15 de Setembro               Compilador GCC
Bibliografia
•   História do compilador : http://www.economicexpert.com/a/Compiler.html
•   Tags de Otimização: http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html
•   Pesquisa ranking dos linguagem mais utilizado:
    http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
•   Compilador IBM http://www.ibm.com/developerworks/br/library/l-gcc4/
•   Wiki:
    http://en.wikibooks.org/wiki/GNU_C_Compiler_Internals/GNU_C_Compiler_Architecture_3_4
•   GNU GCC http://gcc.gnu.org/wiki/HomePage
•   Docs GNU http://gcc.gnu.org/onlinedocs/cpp/
•   Otimização Gcc: http://www.clevitonmendes.blogspot.com/2008/06/opes-de-otimizao-do-
    gcc.html




15 de Setembro                            Compilador GCC
Bibliografia
•   UNIVERSIDADE DE LISBOA -FACULDADE DE CIÊNCIAS DEPARTAMENTO DE
    INFORMÁTICA, Ferramenta de Análise de Código para Detecção de Vulnerabilidades Emanuel
    Pedro Loureiro Teixeira MESTRADO EM ENGENHARIA INFORMÁTICA-Setembro de 2007
•   An Introduction to GCC , Brian Gough Foreword by Richard M. Stallman
•   Livro Introdução GCC online : http://www.network-theory.co.uk/gcc/intro/
•   Códido fonte do gcc: http://www.network-theory.co.uk/gcc/intro/src/
•   Slides do Diego Novillo , Google




15 de Setembro                             Compilador GCC

Más contenido relacionado

La actualidad más candente

Parametrická rovnice
Parametrická rovniceParametrická rovnice
Parametrická rovniceJiří Kos
 
Paris Master Class 2011 - 04 Shadow Maps
Paris Master Class 2011 - 04 Shadow MapsParis Master Class 2011 - 04 Shadow Maps
Paris Master Class 2011 - 04 Shadow MapsWolfgang Engel
 
Solution Manual : Chapter - 02 Limits and Continuity
Solution Manual : Chapter - 02 Limits and ContinuitySolution Manual : Chapter - 02 Limits and Continuity
Solution Manual : Chapter - 02 Limits and ContinuityHareem Aslam
 
Higher Maths 1.2.1 - Sets and Functions
Higher Maths 1.2.1 - Sets and FunctionsHigher Maths 1.2.1 - Sets and Functions
Higher Maths 1.2.1 - Sets and Functionstimschmitz
 
Solution Manual : Chapter - 06 Application of the Definite Integral in Geomet...
Solution Manual : Chapter - 06 Application of the Definite Integral in Geomet...Solution Manual : Chapter - 06 Application of the Definite Integral in Geomet...
Solution Manual : Chapter - 06 Application of the Definite Integral in Geomet...Hareem Aslam
 
[KGC2014] DX9에서DX11로의이행경험공유
[KGC2014] DX9에서DX11로의이행경험공유[KGC2014] DX9에서DX11로의이행경험공유
[KGC2014] DX9에서DX11로의이행경험공유Hwan Min
 
DOUBLE INTEGRALS PPT GTU CALCULUS (2110014)
DOUBLE INTEGRALS PPT GTU CALCULUS (2110014) DOUBLE INTEGRALS PPT GTU CALCULUS (2110014)
DOUBLE INTEGRALS PPT GTU CALCULUS (2110014) Panchal Anand
 
Computer Graphics - Lecture 01 - 3D Programming I
Computer Graphics - Lecture 01 - 3D Programming IComputer Graphics - Lecture 01 - 3D Programming I
Computer Graphics - Lecture 01 - 3D Programming I💻 Anton Gerdelan
 
Deferred rendering case study
Deferred rendering case studyDeferred rendering case study
Deferred rendering case studyozlael ozlael
 
Approaching zero driver overhead
Approaching zero driver overheadApproaching zero driver overhead
Approaching zero driver overheadCass Everitt
 
Deferred Rendering in Killzone 2
Deferred Rendering in Killzone 2Deferred Rendering in Killzone 2
Deferred Rendering in Killzone 2ozlael ozlael
 
4.3 The Definite Integral
4.3 The Definite Integral4.3 The Definite Integral
4.3 The Definite IntegralSharon Henry
 
A presentation on prim's and kruskal's algorithm
A presentation on prim's and kruskal's algorithmA presentation on prim's and kruskal's algorithm
A presentation on prim's and kruskal's algorithmGaurav Kolekar
 
Ec214 7 adas_2yr56
Ec214 7 adas_2yr56Ec214 7 adas_2yr56
Ec214 7 adas_2yr56Kaew Say
 
Wzory na pochodne
Wzory na pochodneWzory na pochodne
Wzory na pochodnetaskbook
 

La actualidad más candente (20)

Parametrická rovnice
Parametrická rovniceParametrická rovnice
Parametrická rovnice
 
Kruskal’s Algorithm
Kruskal’s AlgorithmKruskal’s Algorithm
Kruskal’s Algorithm
 
Paris Master Class 2011 - 04 Shadow Maps
Paris Master Class 2011 - 04 Shadow MapsParis Master Class 2011 - 04 Shadow Maps
Paris Master Class 2011 - 04 Shadow Maps
 
Solution Manual : Chapter - 02 Limits and Continuity
Solution Manual : Chapter - 02 Limits and ContinuitySolution Manual : Chapter - 02 Limits and Continuity
Solution Manual : Chapter - 02 Limits and Continuity
 
Higher Maths 1.2.1 - Sets and Functions
Higher Maths 1.2.1 - Sets and FunctionsHigher Maths 1.2.1 - Sets and Functions
Higher Maths 1.2.1 - Sets and Functions
 
Solution Manual : Chapter - 06 Application of the Definite Integral in Geomet...
Solution Manual : Chapter - 06 Application of the Definite Integral in Geomet...Solution Manual : Chapter - 06 Application of the Definite Integral in Geomet...
Solution Manual : Chapter - 06 Application of the Definite Integral in Geomet...
 
[KGC2014] DX9에서DX11로의이행경험공유
[KGC2014] DX9에서DX11로의이행경험공유[KGC2014] DX9에서DX11로의이행경험공유
[KGC2014] DX9에서DX11로의이행경험공유
 
DOUBLE INTEGRALS PPT GTU CALCULUS (2110014)
DOUBLE INTEGRALS PPT GTU CALCULUS (2110014) DOUBLE INTEGRALS PPT GTU CALCULUS (2110014)
DOUBLE INTEGRALS PPT GTU CALCULUS (2110014)
 
Computer Graphics - Lecture 01 - 3D Programming I
Computer Graphics - Lecture 01 - 3D Programming IComputer Graphics - Lecture 01 - 3D Programming I
Computer Graphics - Lecture 01 - 3D Programming I
 
Deferred rendering case study
Deferred rendering case studyDeferred rendering case study
Deferred rendering case study
 
Approaching zero driver overhead
Approaching zero driver overheadApproaching zero driver overhead
Approaching zero driver overhead
 
Deferred Rendering in Killzone 2
Deferred Rendering in Killzone 2Deferred Rendering in Killzone 2
Deferred Rendering in Killzone 2
 
Actividad 2 IDO
Actividad 2 IDOActividad 2 IDO
Actividad 2 IDO
 
23 Matrix Algorithms
23 Matrix Algorithms23 Matrix Algorithms
23 Matrix Algorithms
 
4.3 The Definite Integral
4.3 The Definite Integral4.3 The Definite Integral
4.3 The Definite Integral
 
A presentation on prim's and kruskal's algorithm
A presentation on prim's and kruskal's algorithmA presentation on prim's and kruskal's algorithm
A presentation on prim's and kruskal's algorithm
 
Lar calc10 ch04_sec3
Lar calc10 ch04_sec3Lar calc10 ch04_sec3
Lar calc10 ch04_sec3
 
Ec214 7 adas_2yr56
Ec214 7 adas_2yr56Ec214 7 adas_2yr56
Ec214 7 adas_2yr56
 
Wzory na pochodne
Wzory na pochodneWzory na pochodne
Wzory na pochodne
 
Minimum spanning Tree
Minimum spanning TreeMinimum spanning Tree
Minimum spanning Tree
 

Destacado

Compilador analise lexica
Compilador analise lexicaCompilador analise lexica
Compilador analise lexicaAdilmar Dantas
 
Como Construir um Compilador cap-1
Como Construir um Compilador cap-1Como Construir um Compilador cap-1
Como Construir um Compilador cap-1Maellson Marques
 
Gerador de Código-Objeto - Compiladores
Gerador de Código-Objeto - CompiladoresGerador de Código-Objeto - Compiladores
Gerador de Código-Objeto - CompiladoresAnderson Favaro
 
Compilador-Analisador Léxico com FLEX + Linguagem C
Compilador-Analisador Léxico com FLEX + Linguagem C Compilador-Analisador Léxico com FLEX + Linguagem C
Compilador-Analisador Léxico com FLEX + Linguagem C Aldisio Medeiros
 
Compilers - Using Lex and YACC
Compilers - Using Lex and YACCCompilers - Using Lex and YACC
Compilers - Using Lex and YACCMichel Alves
 
Ficha javacc
Ficha javaccFicha javacc
Ficha javaccÆx Lynx
 
Como Construir um compilador-cap 2
Como Construir um compilador-cap 2Como Construir um compilador-cap 2
Como Construir um compilador-cap 2Maellson Marques
 
[TUTORIAL] PetitParser
[TUTORIAL] PetitParser[TUTORIAL] PetitParser
[TUTORIAL] PetitParserESUG
 
Poscomp-Cadernodequestes ano2011
Poscomp-Cadernodequestes ano2011Poscomp-Cadernodequestes ano2011
Poscomp-Cadernodequestes ano2011Maellson Marques
 
Javascript Libraries
Javascript LibrariesJavascript Libraries
Javascript Librarieselliando dias
 
Aula 3 compiladores e interpretadores
Aula 3   compiladores e interpretadoresAula 3   compiladores e interpretadores
Aula 3 compiladores e interpretadoresLCCIMETRO
 

Destacado (18)

Compilador analise lexica
Compilador analise lexicaCompilador analise lexica
Compilador analise lexica
 
Como Construir um Compilador cap-1
Como Construir um Compilador cap-1Como Construir um Compilador cap-1
Como Construir um Compilador cap-1
 
Gerador de Código-Objeto - Compiladores
Gerador de Código-Objeto - CompiladoresGerador de Código-Objeto - Compiladores
Gerador de Código-Objeto - Compiladores
 
Compilador-Analisador Léxico com FLEX + Linguagem C
Compilador-Analisador Léxico com FLEX + Linguagem C Compilador-Analisador Léxico com FLEX + Linguagem C
Compilador-Analisador Léxico com FLEX + Linguagem C
 
Apresentação Linguagem C
Apresentação Linguagem CApresentação Linguagem C
Apresentação Linguagem C
 
Compilers - Using Lex and YACC
Compilers - Using Lex and YACCCompilers - Using Lex and YACC
Compilers - Using Lex and YACC
 
Ficha javacc
Ficha javaccFicha javacc
Ficha javacc
 
Compiladores
CompiladoresCompiladores
Compiladores
 
Trabalho
TrabalhoTrabalho
Trabalho
 
Como Construir um compilador-cap 2
Como Construir um compilador-cap 2Como Construir um compilador-cap 2
Como Construir um compilador-cap 2
 
JavaCC
JavaCCJavaCC
JavaCC
 
poscomp-Gabarito ano2010
poscomp-Gabarito ano2010poscomp-Gabarito ano2010
poscomp-Gabarito ano2010
 
[TUTORIAL] PetitParser
[TUTORIAL] PetitParser[TUTORIAL] PetitParser
[TUTORIAL] PetitParser
 
Poscomp-Cadernodequestes ano2011
Poscomp-Cadernodequestes ano2011Poscomp-Cadernodequestes ano2011
Poscomp-Cadernodequestes ano2011
 
poscomp-Gabarito ano2011
poscomp-Gabarito ano2011poscomp-Gabarito ano2011
poscomp-Gabarito ano2011
 
Compiladores 4
Compiladores 4Compiladores 4
Compiladores 4
 
Javascript Libraries
Javascript LibrariesJavascript Libraries
Javascript Libraries
 
Aula 3 compiladores e interpretadores
Aula 3   compiladores e interpretadoresAula 3   compiladores e interpretadores
Aula 3 compiladores e interpretadores
 

Similar a Gcc

055 A 094 Material Auxiliar Para Curso AvançAdo I Msp430
055 A 094   Material Auxiliar Para Curso AvançAdo I Msp430055 A 094   Material Auxiliar Para Curso AvançAdo I Msp430
055 A 094 Material Auxiliar Para Curso AvançAdo I Msp430Texas Instruments
 
Jogos pe logica_aplicada_apostila_c_sharp
Jogos pe logica_aplicada_apostila_c_sharpJogos pe logica_aplicada_apostila_c_sharp
Jogos pe logica_aplicada_apostila_c_sharpPedro Vuvu Alvaro
 
Jogos pe logica_aplicada_apostila_c_sharp
Jogos pe logica_aplicada_apostila_c_sharpJogos pe logica_aplicada_apostila_c_sharp
Jogos pe logica_aplicada_apostila_c_sharpMarcio Chiaveli
 
GCC - Compile! Linque! Debug!
GCC - Compile! Linque! Debug!GCC - Compile! Linque! Debug!
GCC - Compile! Linque! Debug!PeslPinguim
 
Programando Software Livre em C
Programando Software Livre em CProgramando Software Livre em C
Programando Software Livre em CDiego Santos
 
Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma
Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataformaAndroid Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma
Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataformaFelipe Silveira
 
Introdução à Linguagem de Programação C
Introdução à Linguagem de Programação CIntrodução à Linguagem de Programação C
Introdução à Linguagem de Programação CJose Augusto Cintra
 
Apostila de Introdução ao C#.net
Apostila de Introdução ao C#.netApostila de Introdução ao C#.net
Apostila de Introdução ao C#.netAndre Nascimento
 
ESLPE 2008 - Desenvolvendo aplicações no Linux
ESLPE 2008 - Desenvolvendo aplicações no LinuxESLPE 2008 - Desenvolvendo aplicações no Linux
ESLPE 2008 - Desenvolvendo aplicações no LinuxJorge Pereira
 
Todos os recursos do RAD Studio 10.3 RIO
Todos os recursos do RAD Studio 10.3 RIOTodos os recursos do RAD Studio 10.3 RIO
Todos os recursos do RAD Studio 10.3 RIOFernando Rizzato
 
paradigmasdlsksmmskskkekekekekedmmmdmdmmf.pdf
paradigmasdlsksmmskskkekekekekedmmmdmdmmf.pdfparadigmasdlsksmmskskkekekekekedmmmdmdmmf.pdf
paradigmasdlsksmmskskkekekekekedmmmdmdmmf.pdfAndreiaCristinaFlore
 
Programando os Microcontroladores PIC
Programando os Microcontroladores PICProgramando os Microcontroladores PIC
Programando os Microcontroladores PICFabio Souza
 

Similar a Gcc (20)

Compilador
CompiladorCompilador
Compilador
 
055 A 094 Material Auxiliar Para Curso AvançAdo I Msp430
055 A 094   Material Auxiliar Para Curso AvançAdo I Msp430055 A 094   Material Auxiliar Para Curso AvançAdo I Msp430
055 A 094 Material Auxiliar Para Curso AvançAdo I Msp430
 
Jogos pe logica_aplicada_apostila_c_sharp
Jogos pe logica_aplicada_apostila_c_sharpJogos pe logica_aplicada_apostila_c_sharp
Jogos pe logica_aplicada_apostila_c_sharp
 
Jogos pe logica_aplicada_apostila_c_sharp
Jogos pe logica_aplicada_apostila_c_sharpJogos pe logica_aplicada_apostila_c_sharp
Jogos pe logica_aplicada_apostila_c_sharp
 
Apostila de C# & Asp.Net
Apostila de C# & Asp.NetApostila de C# & Asp.Net
Apostila de C# & Asp.Net
 
GCC - Compile! Linque! Debug!
GCC - Compile! Linque! Debug!GCC - Compile! Linque! Debug!
GCC - Compile! Linque! Debug!
 
Linguagem c
Linguagem cLinguagem c
Linguagem c
 
Apostila chardwere
Apostila chardwereApostila chardwere
Apostila chardwere
 
C hardware
C hardwareC hardware
C hardware
 
Paradigmas de Linguagem
Paradigmas de LinguagemParadigmas de Linguagem
Paradigmas de Linguagem
 
Programando Software Livre em C
Programando Software Livre em CProgramando Software Livre em C
Programando Software Livre em C
 
Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma
Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataformaAndroid Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma
Android Core Aula 1 - Histórico, Arquitetura e Compilação da plataforma
 
Introdução à Linguagem de Programação C
Introdução à Linguagem de Programação CIntrodução à Linguagem de Programação C
Introdução à Linguagem de Programação C
 
Apostila c
Apostila cApostila c
Apostila c
 
Apostila de Introdução ao C#.net
Apostila de Introdução ao C#.netApostila de Introdução ao C#.net
Apostila de Introdução ao C#.net
 
ESLPE 2008 - Desenvolvendo aplicações no Linux
ESLPE 2008 - Desenvolvendo aplicações no LinuxESLPE 2008 - Desenvolvendo aplicações no Linux
ESLPE 2008 - Desenvolvendo aplicações no Linux
 
C sharp lesson1
C sharp lesson1C sharp lesson1
C sharp lesson1
 
Todos os recursos do RAD Studio 10.3 RIO
Todos os recursos do RAD Studio 10.3 RIOTodos os recursos do RAD Studio 10.3 RIO
Todos os recursos do RAD Studio 10.3 RIO
 
paradigmasdlsksmmskskkekekekekedmmmdmdmmf.pdf
paradigmasdlsksmmskskkekekekekedmmmdmdmmf.pdfparadigmasdlsksmmskskkekekekekedmmmdmdmmf.pdf
paradigmasdlsksmmskskkekekekekedmmmdmdmmf.pdf
 
Programando os Microcontroladores PIC
Programando os Microcontroladores PICProgramando os Microcontroladores PIC
Programando os Microcontroladores PIC
 

Más de Ricardo Liyushiro Chikasawa (14)

Apresentacao anteprojeto
Apresentacao anteprojetoApresentacao anteprojeto
Apresentacao anteprojeto
 
Universidade profissao
Universidade profissaoUniversidade profissao
Universidade profissao
 
Apostila Html
Apostila HtmlApostila Html
Apostila Html
 
Apostila Html
Apostila HtmlApostila Html
Apostila Html
 
ExercíCios Grupo De Estudo Java Atualizado
ExercíCios Grupo De Estudo Java AtualizadoExercíCios Grupo De Estudo Java Atualizado
ExercíCios Grupo De Estudo Java Atualizado
 
ExercíCios Grupo De Estudo Java Atualizado
ExercíCios Grupo De Estudo Java AtualizadoExercíCios Grupo De Estudo Java Atualizado
ExercíCios Grupo De Estudo Java Atualizado
 
Javatvdigital Mauricioleal
Javatvdigital MauriciolealJavatvdigital Mauricioleal
Javatvdigital Mauricioleal
 
Certificacao
CertificacaoCertificacao
Certificacao
 
Certificacao
CertificacaoCertificacao
Certificacao
 
Javacard Campus Party
Javacard Campus PartyJavacard Campus Party
Javacard Campus Party
 
Unoeste Reuniao Ap
Unoeste Reuniao ApUnoeste Reuniao Ap
Unoeste Reuniao Ap
 
OpenSolaris no Virtual box
OpenSolaris no Virtual boxOpenSolaris no Virtual box
OpenSolaris no Virtual box
 
OpenSolaris
OpenSolarisOpenSolaris
OpenSolaris
 
Secompp Opensolaris
Secompp OpensolarisSecompp Opensolaris
Secompp Opensolaris
 

Gcc

  • 1. Compilador GCC Prof. Dr. Almir Camolesi 15 de Setembro Ricardo L. Chikasawa Disciplina: Compiladores
  • 2. Introdução  Compilador − Importância do Compilador e das Linguagens de programação − Definição de um compilador  O Compilador GCC − História − O compilador e suas versões − Exemplos de código fonte − Estrutura e funcionamento − Demo 15 de Setembro Compilador GCC
  • 3. Compilador Importância do Compilador Os compiladores são ferramentas indispensáveis para programação. Pode- se dizer que sem ele, seria quase impossível desenvolver programas muito complexos. As linguagens de programação de alto nível são projetadas para que possam ser mais facilmente entendidas por programadores humanos. Elas permitem ao programador expressar suas intenções mais facilmente, escrever programas mais organizados e com mais rapidez do que se tivessem que escrever os programas diretamente em código de máquina (linguagens de baixo nível). O compilador por sua vez, traduz um código fonte escrito numa linguagem de alto nível (Ex: C/C++, Pascal, etc...), em um código alvo semanticamente equivalente, escrito em código de máquina (Ex: Assembly). Esse código alvo será enfim lido pela máquina e executado. 15 de Setembro Compilador GCC
  • 4. 15 de Setembro Compilador GCC Richard Stallman
  • 5. GCC História O compilador GCC foi escrito por Richard Stallman em 1987 para servir de compilador para o Projeto GNU. GCC é uma abreviação do termo GNU Compiler Collection. Ele leva este nome pelo fato de que várias versões do compilador estão integradas, com suporte a linguagens como C, C++, Objective- C, Ada, Fortran, Java e Treelang. 15 de Setembro Compilador GCC
  • 6. GCC Principais características  Software Livre (GPL)  Desenvolvimento de processo Distribuido  Multiplataforma (Unix, Windows,Mac Os, Solaris)  Suportando a maioria das linguagens : C, C++, Java, Fortran 95, Ada, Objective-C, Objective-C++, etc  Processadores suportados pelo GCC inclui: ARM, x86 e x86-64, PowerPC, SPARC 15 de Setembro Compilador GCC
  • 7. GCC O compilador É o compilador padrão do sistema operacional GNU/Linux e também foi adotado por (ou portado para) vários outros sistemas operacionais (inclusive S.O.s comerciais pagos), tais como HP-UX, MS-Windows, MS-DOS, IBM OS2, IBM AIX, SUN OS, SUN Solaris etc, além é claro do próprio GNU/Linux, onde este compilador é utilizado no desenvolvimento do próprio sistema operacional e de todas as ferramentas nele disponíveis (ou seja, é o compilador 'nativo' do Linux). Outro detalhe importante é que todas as distribuições Linux já vem com um compilador GCC disponível, ou seja, se você tem um computador com Linux instalado, você tem um compilador GCC pronto para ser utilizado. 15 de Setembro Compilador GCC
  • 8. Versões GCC  GCC 1 (1987) − Inspirado no Compilador Pastel (Lawrence Livermore Labs) − Compilava somente C  GCC 2 (1992) − Adicionou C++ − Suporte a arquitetura RISC  EGCS (1997) − Fork from GCC 2.x − Novas Características: Java, novas otimizações 15 de Setembro Compilador GCC
  • 9. Versões GCC  GCC 2.95 (1999) − EGCS e GCC2 fudem o GCC − Baseado no tipo de Análise − Front end − ISO C99  GCC 3 (2001) − Integrabilidade libjava − SSA, fase experimental formato de RTL − Funções com árvores  GCC 4 (2005) − Revisão da arquitetura interna (Árvore SSA) − Fortran 95 − Vetorização Automática 15 de Setembro Compilador GCC
  • 10. GCC (Windows x Linux) MinGW (Minimalist GNU for Windows) Foi criado por Colin Peters em 1998. Ele usou uma versão muito inicial da suíte do Cygwin para compilar a primeira versão do código do compilador MinGW. É uma versão portada para Microsoft Windows do conjunto de ferramentas GNU (a mesma instalada pelo ambiente Dev-C++ ou pelo CodeBlocks). Oferece um completo conjunto de ferramentas Open Source de programação, apropriado para o desenvolvimento de aplicativos nativos MS-Windows. Code::Blocks é um ambiente integrado de desenvolvimento para as linguagens C e C++. Ele usa a implementação MinGw do GCC (GNU Compiler Collection) como seu compilador. Ele é "Free Software" (sob GNU General Public License). Em 1999, a base de usuários do MinGW tornou-se grande o suficiente, para se separar da “Cygwin mailing list”, e configurar ela própria uma lista de discussão moderada pelo Earnie Boyd e Handerson Dale. 15 de Setembro Compilador GCC
  • 11. GCC (Windows x Linux) O MinGW inclui: • Uma porta do GNU Compiler Collection (GCC), incluindo compiladores C, C+ +, ADA e Fortran. • GNU Binutils (coleção de ferramentas binárias) para Windows, ou seja, vinculador, gerente de arquivo. • MSYS, que é uma coleção de utilitários GNU, para permitir a construção de aplicações e programas que dependem de instrumentos tradicionais do UNIX para estar presente. Oferecido como uma alternativa para o cmd.exe da Microsoft. • Comunidade de apoio, ferramentas e bibliotecas (mingwPORTs). • Um gráfico e um instalador de linha de comando para o Windows. • Cross-compiladores para construir aplicações Windows em outras plataformas (por exemplo, Linux). 15 de Setembro Compilador GCC
  • 12. Código fonte 15 de Setembro Compilador GCC
  • 13. Código fonte 15 de Setembro Compilador GCC
  • 14. GCC Funcionamento Quando o GCC é invocado, ele normalmente realiza quatro etapas para gerar o executável: pré-processamento, compilação, montagem e ligação, sempre nesta ordem. Os primeiros três estágios aplicam-se a um único arquivo fonte, e encerram produzindo um arquivo objeto. 15 de Setembro Compilador GCC
  • 15. GCC Fases da compilação  Pré-processamento: Esta etapa é responsável pela resolução de diretrizes do pré-processador, como #define, #if, #include. Nesta fase, o GCC utiliza o utilitário cpp.  Compilação: Nesta fase é gerada, a partir da fase anterior, o código Assembly do programa.  Montagem: Produz o arquivo objeto .o, levando em conta a linguagem de montagem dos arquivos de entrada. Nesta etapa, o GCC utiliza o utilitário gas (GNU Assembler), ou o montador nativo as, caso ele não esteja disponível.  Ligação: Nesta fase os arquivos .o e as bibliotecas são colocadas no executável. O utilitário usado nessa fase é o ld (GNU Linker). 15 de Setembro Compilador GCC
  • 16. GCC Estrutura do compilador 15 de Setembro Compilador GCC
  • 17. GCC Estrututra do Compilador Front End: responsável por validar a estrutura sintática do programa de entrada, emitir diagnósticos mais precisos sobre a conformidade linguagem, criando estruturas de dados internas para tipos de dados e variáveis declaradas no programa, as informações de depuração, como nomes de arquivo e números de linha. Middle End: responsável em analisar e transformar o programa. Todas as transformações feitas no Middle End e no back-end geralmente têm dois objetivos: • Tornar o código-objeto eficiente, rápido quanto possível (otimizações de desempenho). • Tornar o código-objeto ter o mínimo de espaço possível (otimizações de espaço). Back End: Nesta fase, o compilador precisa ter um conhecimento muito detalhado sobre o hardware onde o programa será executado. 15 de Setembro Compilador GCC
  • 18. GCC Static Sigle Assignment (SSA)  Suporte para vetoriazação automática  Apresenta duas novas representações intermediárias: Generic e Gimple  SSA são convertida em RTL, usada pelo back-end para a geração de código de destino 15 de Setembro Compilador GCC
  • 19. GCC Static Sigle Assignment (SSA) GENERIC: é uma linguagem usada para definir a representação intermédiaria do código usada por todas as fachadas do GCC. GIMPLE: gerada a partir da forma GENERIC, permite muitas otimizações globais independentes de linguagem e da arquitetura. Estes dois processos intermediários de otimização na árvore tem sido chamado de Middle-end e incluem: • Propagação de constantes • Eliminação de código morto • Eliminação de redundância • Alocação de registradores 15 de Setembro Compilador GCC
  • 20. GCC Otimização de Código Otimizador de código, deixando o código mais rápido e compacto Uma fase de recarga altera os registradores abstratos para registradores reais, com base nos padrões de descrição dos conjuntos de instruções da máquina alvo. 15 de Setembro Compilador GCC
  • 21. GCC Open MP  Programação Paralela  Suporta multi-plataforma  Memória compartilhada 15 de Setembro Compilador GCC
  • 22. GCC - Demo Programa: #include <stdio.h> int main (void) { double test_loop(double d, unsigned n) double soma = 0.0; { unsigned i; double x = 1.0; for (i = 1; i <= 100000000; i++) unsigned j; { for (j = 1; j <= n; j++) x *= d; soma += test_loop(i, i % 5); return x; } } printf ("s = %gn", soma); return 0; } 15 de Setembro Compilador GCC
  • 23. GCC - Demo Primeiro teste : Quarto teste: gcc -Wall -O0 test.c -lm gcc -Wall -O3 test.c -lm time ./a.out time ./a.out Segundo teste: Quinto teste: gcc -Wall -O1 test.c -lm time ./a.out gcc -Wall -O3 -funroll-loops test.c -lm time ./a.out Terceito teste: gcc -Wall -O2 test.c -lm Sexto teste: time ./a.out gcc -fdump-tree-<generic> test.c 15 de Setembro Compilador GCC
  • 24. Conclusão Nós concluimos que o GCC é uma peça fundamental em quaisquer desenvolvimento de software livre e de software fechado. Ele funciona como ativador das arquiteturas e dos sistemas operacionais. Quando um novo processador aparace, seu êxito depende de uma versão GCC que irá fornecer suporte a ele. Além de ser robusto, tem diversas ferramentas para sistema distribuídos, onde hoje tudo é interligado a uma rede. Por ser aberto, todos tem a oportunidade de evoluir e contrubuir com o projeto da GNU. 15 de Setembro Compilador GCC
  • 25. Bibliografia • História do compilador : http://www.economicexpert.com/a/Compiler.html • Tags de Otimização: http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html • Pesquisa ranking dos linguagem mais utilizado: http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html • Compilador IBM http://www.ibm.com/developerworks/br/library/l-gcc4/ • Wiki: http://en.wikibooks.org/wiki/GNU_C_Compiler_Internals/GNU_C_Compiler_Architecture_3_4 • GNU GCC http://gcc.gnu.org/wiki/HomePage • Docs GNU http://gcc.gnu.org/onlinedocs/cpp/ • Otimização Gcc: http://www.clevitonmendes.blogspot.com/2008/06/opes-de-otimizao-do- gcc.html 15 de Setembro Compilador GCC
  • 26. Bibliografia • UNIVERSIDADE DE LISBOA -FACULDADE DE CIÊNCIAS DEPARTAMENTO DE INFORMÁTICA, Ferramenta de Análise de Código para Detecção de Vulnerabilidades Emanuel Pedro Loureiro Teixeira MESTRADO EM ENGENHARIA INFORMÁTICA-Setembro de 2007 • An Introduction to GCC , Brian Gough Foreword by Richard M. Stallman • Livro Introdução GCC online : http://www.network-theory.co.uk/gcc/intro/ • Códido fonte do gcc: http://www.network-theory.co.uk/gcc/intro/src/ • Slides do Diego Novillo , Google 15 de Setembro Compilador GCC