Você está na página 1de 26

15 de Setembro

Ricardo L. Chikasawa
Prof. Dr. Almir Camolesi
Disciplina: Compiladores
Compilador GCC
Compilador GCC
15 de Setembro Compilador GCC
Introduo

Compilador

Importncia do Compilador e das Linguagens de programao

Definio de um compilador

Compilador GCC

Histria

O compilador e suas verses

Exemplos de cdigo fonte

Estrutura e funcionamento

Demo

15 de Setembro Compilador GCC
Compilador
Import!ncia do Compilador
Os compiladores so ferramentas indispensveis para programao! "ode#
se di$er %ue sem ele& seria %uase imposs'vel desenvolver programas muito
complexos!
(s linguagens de programao de alto n'vel so pro)etadas para %ue
possam ser mais facilmente entendidas por programadores *umanos! Elas
permitem ao programador expressar suas intenes mais facilmente& escrever
programas mais organi$ados e com mais rapide$ do %ue se tivessem %ue
escrever os programas diretamente em cdigo de m%uina +linguagens de
,aixo n'vel-!
O compilador por sua ve$& tradu$ um cdigo fonte escrito numa linguagem
de alto n'vel +Ex. C/C00& "ascal& etc!!!-& em um cdigo alvo semanticamente
e%uivalente& escrito em cdigo de m%uina +Ex. (ssem,l1-! Esse cdigo alvo
ser enfim lido pela m%uina e executado!
15 de Setembro Compilador GCC
Richard "tallman
15 de Setembro Compilador GCC
GCC
#ist$ria
O compilador 2CC foi escrito por
3ic*ard 4tallman em 5678 para
servir de compilador para o "ro)eto
29:!
2CC ; uma a,reviao do termo
29: Compiler Collection! Ele leva
este nome pelo fato de %ue vrias
verses do compilador esto
integradas& com suporte a
linguagens como C& C00& O,)ective#
C& (da& <ortran& =ava e >reelang!
15 de Setembro Compilador GCC
GCC
Principais caracter%sticas

4oft?are Livre +2"L-

Desenvolvimento de processo Distri,uido

@ultiplataforma +:nix& Aindo?s&@ac Os& 4olaris-

4uportando a maioria das linguagens . C& C00& =ava& <ortran 6B&


(da& O,)ective#C& O,)ective#C00& etc

"rocessadores suportados pelo 2CC inclui. (3@& x7C e x7C#CD&


"o?er"C& 4"(3C
15 de Setembro Compilador GCC
GCC
compilador
E o compilador padro do sistema operacional 29:/Linux e
tam,;m foi adotado por +ou portado para- vrios outros sistemas
operacionais +inclusive 4!O!s comerciais pagos-& tais como H"#:F&
@4#Aindo?s& @4#DO4& IG@ O4H& IG@ (IF& 4:9 O4& 4:9 4olaris etc&
al;m ; claro do prprio 29:/Linux& onde este compilador ; utili$ado no
desenvolvimento do prprio sistema operacional e de todas as
ferramentas nele dispon'veis +ou se)a& ; o compilador InativoI do
Linux-!
Outro detal*e importante ; %ue todas as distri,uies Linux ) vem
com um compilador 2CC dispon'vel& ou se)a& se vocJ tem um
computador com Linux instalado& vocJ tem um compilador 2CC pronto
para ser utili$ado!
15 de Setembro Compilador GCC
&ers'es GCC

GCC ( )(*+,-

Inspirado no Compilador "astel +La?rence Livermore La,s-

Compilava somente C

GCC . )(**.-

(dicionou C00

4uporte a ar%uitetura 3I4C

/GC" )(**,-

<orK from 2CC H!x

9ovas Caracter'sticas. =ava& novas otimi$aes


15 de Setembro Compilador GCC
&ers'es GCC

GCC ..*0 )(***-

E2C4 e 2CCH fudem o 2CC

Gaseado no tipo de (nlise

<ront end

I4O C66

GCC 1 ).22(-

Integra,ilidade li,)ava

44(& fase experimental formato de 3>L

<unes com rvores

GCC 3 ).220-

3eviso da ar%uitetura interna +Lrvore 44(-

<ortran 6B

Metori$ao (utomtica
15 de Setembro Compilador GCC
GCC
)4indows 5 Linu5-
6inG4 )6inimalist G78 for 4indows-
<oi criado por Colin "eters em 5667! Ele usou uma verso muito inicial da su'te do
C1g?in para compilar a primeira verso do cdigo do compilador @in2A!
E uma verso portada para @icrosoft Aindo?s do con)unto de ferramentas 29: +a
mesma instalada pelo am,iente Dev#C00 ou pelo CodeGlocKs-! Oferece um completo
con)unto de ferramentas Open 4ource de programao& apropriado para o
desenvolvimento de aplicativos nativos @4#Aindo?s!
Code..GlocKs ; um am,iente integrado de desenvolvimento para as linguagens C e
C00! Ele usa a implementao @in2? do 2CC +29: Compiler Collection- como seu
compilador! Ele ; N<ree 4oft?areN +so, 29: 2eneral "u,lic License-!
Em 5666& a ,ase de usurios do @in2A tornou#se grande o suficiente& para se
separar da OC1g?in mailing listP& e configurar ela prpria uma lista de discusso
moderada pelo Earnie Go1d e Handerson Dale!
15 de Setembro Compilador GCC
6inG4 inclui:
Q :ma porta do 29: Compiler Collection +2CC-& incluindo compiladores C& C0
0& (D( e <ortran!
Q 29: Ginutils +coleo de ferramentas ,inrias- para Aindo?s& ou se)a&
vinculador& gerente de ar%uivo!
Q @4R4& %ue ; uma coleo de utilitrios 29:& para permitir a construo de
aplicaes e programas %ue dependem de instrumentos tradicionais do :9IF
para estar presente! Oferecido como uma alternativa para o cmd!exe da
@icrosoft!
Q Comunidade de apoio& ferramentas e ,i,liotecas +ming?"O3>s-!
Q :m grfico e um instalador de lin*a de comando para o Aindo?s!
Q Cross#compiladores para construir aplicaes Aindo?s em outras plataformas
+por exemplo& Linux-!
GCC
)4indows 5 Linu5-
15 de Setembro Compilador GCC
C$di9o fonte
15 de Setembro Compilador GCC
C$di9o fonte
15 de Setembro Compilador GCC
GCC
:uncionamento
Suando o 2CC ; invocado& ele
normalmente reali$a %uatro
etapas para gerar o executvel.
pr;#processamento& compilao&
montagem e ligao& sempre
nesta ordem!
Os primeiros trJs estgios
aplicam#se a um Tnico ar%uivo
fonte& e encerram produ$indo um
ar%uivo o,)eto!
15 de Setembro Compilador GCC
GCC
:ases da compilao

Pr;<processamento: Esta etapa ; responsvel pela resoluo de diretri$es


do pr;#processador& como Udefine& Uif& Uinclude! 9esta fase& o 2CC utili$a o
utilitrio cpp!

Compilao: 9esta fase ; gerada& a partir da fase anterior& o cdigo


(ssem,l1 do programa!

6onta9em: "rodu$ o ar%uivo o,)eto !o& levando em conta a linguagem de


montagem dos ar%uivos de entrada! 9esta etapa& o 2CC utili$a o utilitrio
gas +29: (ssem,ler-& ou o montador nativo as& caso ele no este)a
dispon'vel!

Li9ao: 9esta fase os ar%uivos !o e as ,i,liotecas so colocadas no


executvel! O utilitrio usado nessa fase ; o ld +29: LinKer-!
15 de Setembro Compilador GCC
GCC
/strutura do compilador
15 de Setembro Compilador GCC
GCC
/strututra do Compilador
:ront /nd: responsvel por validar a estrutura sinttica do programa de entrada&
emitir diagnsticos mais precisos so,re a conformidade linguagem& criando
estruturas de dados internas para tipos de dados e variveis declaradas no
programa& as informaes de depurao& como nomes de ar%uivo e nTmeros de
lin*a!
6iddle /nd: responsvel em analisar e transformar o programa! >odas as
transformaes feitas no @iddle End e no ,acK#end geralmente tJm dois o,)etivos.
Q >ornar o cdigo#o,)eto eficiente& rpido %uanto poss'vel +otimi$aes de desempen*o-!
Q >ornar o cdigo#o,)eto ter o m'nimo de espao poss'vel +otimi$aes de espao-!
=ack /nd: 9esta fase& o compilador precisa ter um con*ecimento muito detal*ado
so,re o *ard?are onde o programa ser executado!
15 de Setembro Compilador GCC
"tatic "i9le Assi9nment )""A-

4uporte para vetoria$ao automtica

(presenta duas novas representaes intermedirias. 2eneric e 2imple

44( so convertida em 3>L& usada pelo ,acK#end para a gerao de


cdigo de destino
GCC
15 de Setembro Compilador GCC
"tatic "i9le Assi9nment )""A-
G/7/RIC: ; uma linguagem usada para definir a representao interm;diaria
do cdigo usada por todas as fac*adas do 2CC!
GI6PL/: gerada a partir da forma 2E9E3IC& permite muitas otimi$aes
glo,ais independentes de linguagem e da ar%uitetura!
Estes dois processos intermedirios de otimi$ao na rvore tem sido
c*amado de @iddle#end e incluem.
Q "ropagao de constantes
Q Eliminao de cdigo morto
Q Eliminao de redundncia
Q (locao de registradores
GCC
15 de Setembro Compilador GCC
GCC
timi>ao de C$di9o
Otimi$ador de cdigo& deixando o cdigo mais rpido e compacto
:ma fase de recarga altera os registradores a,stratos para
registradores reais& com ,ase nos padres de descrio dos con)untos
de instrues da m%uina alvo!
15 de Setembro Compilador GCC
GCC
pen 6P

"rogramao "aralela

4uporta multi#plataforma

@emria compartil*ada
15 de Setembro Compilador GCC
GCC < Demo
Pro9rama:
?include @stdio.hA
douBle testCloop)douBle dD unsi9ned n-
E
douBle 5 F (.2G
unsi9ned HG
for )H F (G H @F nG HII- 5 JF dG
return 5G
K
int main )Loid-
E
douBle soma F 2.2G
unsi9ned iG
for )i F (G i @F (22222222G iII-
E
soma IF testCloop)iD i M 0-G
K
printf )Ns F M9OnND soma-G
return 2G
K
15 de Setembro Compilador GCC
GCC < Demo
Primeiro teste :
9cc <4all <2 test.c <lm
time .Pa.out
"e9undo teste:
9cc <4all <( test.c <lm
time .Pa.out
Qerceito teste:
9cc <4all <. test.c <lm
time .Pa.out
Ruarto teste:
9cc <4all <1 test.c <lm
time .Pa.out
Ruinto teste:
9cc <4all <1 <funroll<loops test.c <lm
time .Pa.out
"e5to teste:
9cc <fdump<tree<@9enericA test.c
15 de Setembro Compilador GCC
Concluso

9s concluimos %ue o 2CC ; uma pea fundamental em %uais%uer
desenvolvimento de soft?are livre e de soft?are fec*ado! Ele funciona
como ativador das ar%uiteturas e dos sistemas operacionais! Suando um
novo processador aparace& seu Jxito depende de uma verso 2CC %ue
ir fornecer suporte a ele!

(l;m de ser ro,usto& tem diversas ferramentas para sistema
distri,u'dos& onde *o)e tudo ; interligado a uma rede!

"or ser a,erto& todos tem a oportunidade de evoluir e contru,uir
com o pro)eto da 29:!
15 de Setembro Compilador GCC
=iBlio9rafia
Q Histria do compilador . *ttp.//???!economicexpert!com/a/Compiler!*tml
Q >ags de Otimi$ao. *ttp.//gcc!gnu!org/onlinedocs/gcc/Optimi$e#Options!*tml
Q "es%uisa ranKing dos linguagem mais utili$ado.
*ttp.//???!tio,e!com/index!p*p/content/paperinfo/tpci/index!*tml
Q Compilador IG@ *ttp.//???!i,m!com/developer?orKs/,r/li,rar1/l#gccD/
Q AiKi.
*ttp.//en!?iKi,ooKs!org/?iKi/29:VCVCompilerVInternals/29:VCVCompilerV(rc*itectureVWVD
Q 29: 2CC *ttp.//gcc!gnu!org/?iKi/Home"age
Q Docs 29: *ttp.//gcc!gnu!org/onlinedocs/cpp/
Q Otimi$ao 2cc. *ttp.//???!clevitonmendes!,logspot!com/HXX7/XC/opes#de#otimi$ao#do#
gcc!*tml
15 de Setembro Compilador GCC
=iBlio9rafia
Q :9IME34ID(DE DE LI4GO( #<(C:LD(DE DE CIY9CI(4 DE"(3>(@E9>O DE
I9<O3@L>IC(& <erramenta de (nlise de Cdigo para Deteco de Mulnera,ilidades Emanuel
"edro Loureiro >eixeira @E4>3(DO E@ E92E9H(3I( I9<O3@L>IC(#4etem,ro de HXX8
Q (n Introduction to 2CC & Grian 2oug* <ore?ord ,1 3ic*ard @! 4tallman
Q Livro Introduo 2CC online . *ttp.//???!net?orK#t*eor1!co!uK/gcc/intro/
Q Cdido fonte do gcc. *ttp.//???!net?orK#t*eor1!co!uK/gcc/intro/src/
Q 4lides do Diego 9ovillo & 2oogle