Compilador GCC                   Prof. Dr. Almir Camolesi15 de Setembro                                Ricardo L. Chikasaw...
Introdução    Compilador            −    Importância do Compilador e das Linguagens de programação            −    Defini...
Compilador   Importância do Compilador   Os compiladores são ferramentas indispensáveis para programação. Pode-se dizer qu...
15 de Setembro   Compilador GCCRichard Stallman
GCC   História   O compilador GCC foi escrito porRichard Stallman em 1987 paraservir de compilador para o ProjetoGNU.   GC...
GCCPrincipais características    Software Livre (GPL)    Desenvolvimento de processo Distribuido    Multiplataforma (Un...
GCC   O compilador   É o compilador padrão do sistema operacional GNU/Linux etambém foi adotado por (ou portado para) vári...
Versões GCC      GCC 1 (1987)            −    Inspirado no Compilador Pastel (Lawrence Livermore Labs)            −    Co...
Versões GCC      GCC 2.95 (1999)            −    EGCS e GCC2 fudem o GCC            −    Baseado no tipo de Análise      ...
GCC                   (Windows x Linux)      MinGW (Minimalist GNU for Windows)   Foi criado por Colin Peters em 1998. Ele...
GCC                  (Windows x Linux)   O MinGW inclui:   • Uma porta do GNU Compiler Collection (GCC), incluindo compila...
Código fonte15 de Setembro        Compilador GCC
Código fonte15 de Setembro        Compilador GCC
GCC     Funcionamento    Quando o GCC é invocado, ele normalmente    realiza  quatro etapas para gerar o executável: pré-p...
GCCFases da compilação    Pré-processamento: Esta etapa é responsável pela resolução de diretrizes    do pré-processador,...
GCCEstrutura do compilador15 de Setembro            Compilador GCC
GCCEstrututra do CompiladorFront End: responsável por validar a estrutura sintática do programa de entrada,emitir diagnóst...
GCCStatic Sigle Assignment (SSA)    Suporte para vetoriazação automática    Apresenta duas novas representações intermed...
GCCStatic Sigle Assignment (SSA)GENERIC: é uma linguagem usada para definir a representação intermédiariado código usada p...
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 regi...
GCCOpen MP    Programação Paralela    Suporta multi-plataforma    Memória compartilhada15 de Setembro                 C...
GCC - Demo Programa: #include <stdio.h>                                 int main (void)                                   ...
GCC - Demo Primeiro teste :                  Quarto teste: gcc -Wall -O0 test.c -lm          gcc -Wall -O3 test.c -lm time...
Conclusão      Nós concluimos que o GCC é uma peça fundamental em quaisquerdesenvolvimento de software livre e de software...
Bibliografia•   História do compilador : http://www.economicexpert.com/a/Compiler.html•   Tags de Otimização: http://gcc.g...
Bibliografia•   UNIVERSIDADE DE LISBOA -FACULDADE DE CIÊNCIAS DEPARTAMENTO DE    INFORMÁTICA, Ferramenta de Análise de Cód...
Upcoming SlideShare
Loading in...5
×

Gcc

2,468

Published on

Trabalho sobre GCC

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,468
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
62
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Gcc

  1. 1. Compilador GCC Prof. Dr. Almir Camolesi15 de Setembro Ricardo L. Chikasawa Disciplina: Compiladores
  2. 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 − Demo15 de Setembro Compilador GCC
  3. 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 muitocomplexos. As linguagens de programação de alto nível são projetadas para quepossam ser mais facilmente entendidas por programadores humanos. Elaspermitem ao programador expressar suas intenções mais facilmente, escreverprogramas mais organizados e com mais rapidez do que se tivessem queescrever os programas diretamente em código de máquina (linguagens debaixo nível). O compilador por sua vez, traduz um código fonte escrito numa linguagemde alto nível (Ex: C/C++, Pascal, etc...), em um código alvo semanticamenteequivalente, escrito em código de máquina (Ex: Assembly). Esse código alvoserá enfim lido pela máquina e executado.15 de Setembro Compilador GCC
  4. 4. 15 de Setembro Compilador GCCRichard Stallman
  5. 5. GCC História O compilador GCC foi escrito porRichard Stallman em 1987 paraservir de compilador para o ProjetoGNU. GCC é uma abreviação do termoGNU Compiler Collection. Ele levaeste nome pelo fato de que váriasversões do compilador estãointegradas, com suporte alinguagens como C, C++, Objective-C, Ada, Fortran, Java e Treelang. 15 de Setembro Compilador GCC
  6. 6. GCCPrincipais 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, SPARC15 de Setembro Compilador GCC
  7. 7. GCC O compilador É o compilador padrão do sistema operacional GNU/Linux etambém foi adotado por (ou portado para) vários outros sistemasoperacionais (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 nodesenvolvimento do próprio sistema operacional e de todas asferramentas nele disponíveis (ou seja, é o compilador nativo doLinux). Outro detalhe importante é que todas as distribuições Linux já vemcom um compilador GCC disponível, ou seja, se você tem umcomputador com Linux instalado, você tem um compilador GCC prontopara ser utilizado.15 de Setembro Compilador GCC
  8. 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ções15 de Setembro Compilador GCC
  9. 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ática15 de Setembro Compilador GCC
  10. 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 doCygwin para compilar a primeira versão do código do compilador MinGW. É uma versão portada para Microsoft Windows do conjunto de ferramentas GNU (amesma instalada pelo ambiente Dev-C++ ou pelo CodeBlocks). Oferece um completoconjunto de ferramentas Open Source de programação, apropriado para odesenvolvimento de aplicativos nativos MS-Windows. Code::Blocks é um ambiente integrado de desenvolvimento para as linguagens C eC++. Ele usa a implementação MinGw do GCC (GNU Compiler Collection) como seucompilador. Ele é "Free Software" (sob GNU General Public License). Em 1999, a base de usuários do MinGW tornou-se grande o suficiente, para seseparar da “Cygwin mailing list”, e configurar ela própria uma lista de discussãomoderada pelo Earnie Boyd e Handerson Dale.15 de Setembro Compilador GCC
  11. 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. 12. Código fonte15 de Setembro Compilador GCC
  13. 13. Código fonte15 de Setembro Compilador GCC
  14. 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. 15. GCCFases 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. 16. GCCEstrutura do compilador15 de Setembro Compilador GCC
  17. 17. GCCEstrututra do CompiladorFront End: responsável por validar a estrutura sintática do programa de entrada,emitir diagnósticos mais precisos sobre a conformidade linguagem, criandoestruturas de dados internas para tipos de dados e variáveis declaradas noprograma, as informações de depuração, como nomes de arquivo e números delinha.Middle End: responsável em analisar e transformar o programa. Todas astransformaçõ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 detalhadosobre o hardware onde o programa será executado.15 de Setembro Compilador GCC
  18. 18. GCCStatic 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 destino15 de Setembro Compilador GCC
  19. 19. GCCStatic Sigle Assignment (SSA)GENERIC: é uma linguagem usada para definir a representação intermédiariado código usada por todas as fachadas do GCC.GIMPLE: gerada a partir da forma GENERIC, permite muitas otimizaçõesglobais independentes de linguagem e da arquitetura.Estes dois processos intermediários de otimização na árvore tem sidochamado de Middle-end e incluem: • Propagação de constantes • Eliminação de código morto • Eliminação de redundância • Alocação de registradores15 de Setembro Compilador GCC
  20. 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. 21. GCCOpen MP Programação Paralela Suporta multi-plataforma Memória compartilhada15 de Setembro Compilador GCC
  22. 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. 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.c15 de Setembro Compilador GCC
  24. 24. Conclusão Nós concluimos que o GCC é uma peça fundamental em quaisquerdesenvolvimento de software livre e de software fechado. Ele funcionacomo ativador das arquiteturas e dos sistemas operacionais. Quando umnovo processador aparace, seu êxito depende de uma versão GCC queirá fornecer suporte a ele. Além de ser robusto, tem diversas ferramentas para sistemadistribuídos, onde hoje tudo é interligado a uma rede. Por ser aberto, todos tem a oportunidade de evoluir e contrubuircom o projeto da GNU.15 de Setembro Compilador GCC
  25. 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.html15 de Setembro Compilador GCC
  26. 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 , Google15 de Setembro Compilador GCC
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×