• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Gcc
 

Gcc

on

  • 2,627 views

Trabalho sobre GCC

Trabalho sobre GCC

Statistics

Views

Total Views
2,627
Views on SlideShare
2,627
Embed Views
0

Actions

Likes
1
Downloads
58
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Gcc Gcc Presentation Transcript

    • Compilador GCC Prof. Dr. Almir Camolesi15 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 − Demo15 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 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
    • 15 de Setembro Compilador GCCRichard Stallman
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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 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é-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
    • 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
    • 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ó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
    • 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
    • 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
    • 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
    • GCCOpen MP Programação Paralela Suporta multi-plataforma Memória compartilhada15 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.c15 de Setembro Compilador GCC
    • 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
    • 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
    • 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