1 comp 144 programming language concepts felix hernandez-campos lecture 33: code generation and...

23
COMP 144 Programming Language Concepts Felix Hernandez-Campos 1 Lecture 33: Lecture 33: Code Generation and Linking Code Generation and Linking COMP 144 Programming Language COMP 144 Programming Language Concepts Concepts Spring 2002 Spring 2002 Felix Hernandez-Campos Felix Hernandez-Campos April 15 April 15 The University of North Carolina at The University of North Carolina at Chapel Hill Chapel Hill

Post on 19-Dec-2015

219 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 1 COMP 144 Programming Language Concepts Felix Hernandez-Campos Lecture 33: Code Generation and Linking COMP 144 Programming Language Concepts Spring 2002

COMP 144 Programming Language ConceptsFelix Hernandez-Campos

11

Lecture 33:Lecture 33:Code Generation and LinkingCode Generation and Linking

COMP 144 Programming Language ConceptsCOMP 144 Programming Language Concepts

Spring 2002Spring 2002

Felix Hernandez-CamposFelix Hernandez-Campos

April 15April 15

The University of North Carolina at Chapel HillThe University of North Carolina at Chapel Hill

Page 2: 1 COMP 144 Programming Language Concepts Felix Hernandez-Campos Lecture 33: Code Generation and Linking COMP 144 Programming Language Concepts Spring 2002

COMP 144 Programming Language ConceptsFelix Hernandez-Campos

22

Phases of CompilationPhases of Compilation

• The first three The first three phases are phases are language-language-dependentdependent

• The last two The last two are are machine-machine-dependentdependent

• The middle The middle two two dependent on dependent on neither the neither the language nor language nor the machinethe machine

Page 3: 1 COMP 144 Programming Language Concepts Felix Hernandez-Campos Lecture 33: Code Generation and Linking COMP 144 Programming Language Concepts Spring 2002

COMP 144 Programming Language ConceptsFelix Hernandez-Campos

33

ExampleExample

program gcd(input, output);program gcd(input, output);

var i, j: integer;var i, j: integer;

begin begin

read(i, j);read(i, j);

while i <> j dowhile i <> j do

if i > j then i := i – j;if i > j then i := i – j;

else j := j – i;else j := j – i;

writeln(i)writeln(i)

end.end.

program gcd(input, output);program gcd(input, output);

var i, j: integer;var i, j: integer;

begin begin

read(i, j);read(i, j);

while i <> j dowhile i <> j do

if i > j then i := i – j;if i > j then i := i – j;

else j := j – i;else j := j – i;

writeln(i)writeln(i)

end.end.

Page 4: 1 COMP 144 Programming Language Concepts Felix Hernandez-Campos Lecture 33: Code Generation and Linking COMP 144 Programming Language Concepts Spring 2002

COMP 144 Programming Language ConceptsFelix Hernandez-Campos

44

Example Example Control Flow GraphControl Flow Graph

• Basic blocksBasic blocks are are maximal-length set maximal-length set of sequential of sequential operationsoperations

– Operations on a set Operations on a set of of virtual registersvirtual registers

» UnlimitedUnlimited» A new one for each A new one for each

computed valuecomputed value

• Arcs represent Arcs represent interblock control interblock control flowflow

Page 5: 1 COMP 144 Programming Language Concepts Felix Hernandez-Campos Lecture 33: Code Generation and Linking COMP 144 Programming Language Concepts Spring 2002

COMP 144 Programming Language ConceptsFelix Hernandez-Campos

55

Code GenerationCode Generation

• We will illustrate the We will illustrate the back-end with a back-end with a simple compilersimple compiler

• There is not control There is not control flow graphflow graph

– No optimizationsNo optimizations

• Two main tasks:Two main tasks:– Register allocationRegister allocation– Instruction Instruction

SchedulingScheduling

Page 6: 1 COMP 144 Programming Language Concepts Felix Hernandez-Campos Lecture 33: Code Generation and Linking COMP 144 Programming Language Concepts Spring 2002

COMP 144 Programming Language ConceptsFelix Hernandez-Campos

66

Code Generation ExampleCode Generation Example

program gcd(input, output);program gcd(input, output);

var i, j: integer;var i, j: integer;

begin begin

read(i, j);read(i, j);

while i <> j dowhile i <> j do

if i > j then i := i – j;if i > j then i := i – j;

else j := j – i;else j := j – i;

writeln(i)writeln(i)

end.end.

program gcd(input, output);program gcd(input, output);

var i, j: integer;var i, j: integer;

begin begin

read(i, j);read(i, j);

while i <> j dowhile i <> j do

if i > j then i := i – j;if i > j then i := i – j;

else j := j – i;else j := j – i;

writeln(i)writeln(i)

end.end.

CompilationCompilation

Page 7: 1 COMP 144 Programming Language Concepts Felix Hernandez-Campos Lecture 33: Code Generation and Linking COMP 144 Programming Language Concepts Spring 2002

COMP 144 Programming Language ConceptsFelix Hernandez-Campos

77

• Reserved registers: a1, a2, sp and rvReserved registers: a1, a2, sp and rv

• General purpose: r1..rGeneral purpose: r1..rkk

• Expression code generation: Expression code generation: (a+b) (a+b) (c – (d/e) (c – (d/e)

RRii used as used as expressionexpressionevaluation stackevaluation stack

Page 8: 1 COMP 144 Programming Language Concepts Felix Hernandez-Campos Lecture 33: Code Generation and Linking COMP 144 Programming Language Concepts Spring 2002

COMP 144 Programming Language ConceptsFelix Hernandez-Campos

88

Code Generation ExampleCode Generation ExampleSyntax Tree and Symbol TableSyntax Tree and Symbol Table

Page 9: 1 COMP 144 Programming Language Concepts Felix Hernandez-Campos Lecture 33: Code Generation and Linking COMP 144 Programming Language Concepts Spring 2002

COMP 144 Programming Language ConceptsFelix Hernandez-Campos

99

Code Generation ExampleCode Generation ExampleAttribute GrammarAttribute Grammar

stmt nodesstmt nodes

Code generationCode generation

Page 10: 1 COMP 144 Programming Language Concepts Felix Hernandez-Campos Lecture 33: Code Generation and Linking COMP 144 Programming Language Concepts Spring 2002

COMP 144 Programming Language ConceptsFelix Hernandez-Campos

1010

Code Generation ExampleCode Generation Example

Page 11: 1 COMP 144 Programming Language Concepts Felix Hernandez-Campos Lecture 33: Code Generation and Linking COMP 144 Programming Language Concepts Spring 2002

COMP 144 Programming Language ConceptsFelix Hernandez-Campos

1111

Code Generation ExampleCode Generation Example

Allocation ofAllocation ofnext registernext register

Page 12: 1 COMP 144 Programming Language Concepts Felix Hernandez-Campos Lecture 33: Code Generation and Linking COMP 144 Programming Language Concepts Spring 2002

COMP 144 Programming Language ConceptsFelix Hernandez-Campos

1212

Code Generation ExampleCode Generation Example

Register SpillRegister Spill

Page 13: 1 COMP 144 Programming Language Concepts Felix Hernandez-Campos Lecture 33: Code Generation and Linking COMP 144 Programming Language Concepts Spring 2002

COMP 144 Programming Language ConceptsFelix Hernandez-Campos

1313

Code Generation ExampleCode Generation Example

Page 14: 1 COMP 144 Programming Language Concepts Felix Hernandez-Campos Lecture 33: Code Generation and Linking COMP 144 Programming Language Concepts Spring 2002

COMP 144 Programming Language ConceptsFelix Hernandez-Campos

1414

Code Generation ExampleCode Generation Example

Page 15: 1 COMP 144 Programming Language Concepts Felix Hernandez-Campos Lecture 33: Code Generation and Linking COMP 144 Programming Language Concepts Spring 2002

COMP 144 Programming Language ConceptsFelix Hernandez-Campos

1515

Code Generation ExampleCode Generation Example

Page 16: 1 COMP 144 Programming Language Concepts Felix Hernandez-Campos Lecture 33: Code Generation and Linking COMP 144 Programming Language Concepts Spring 2002

COMP 144 Programming Language ConceptsFelix Hernandez-Campos

1616

Address Space OrganizationAddress Space Organization

• Assemblers, linker and loader typically operate on a Assemblers, linker and loader typically operate on a pair of related file formats:pair of related file formats:

• RelocatableRelocatable object code object code– Input to linkerInput to linker– Multiple file are combined to create an executable Multiple file are combined to create an executable

programprogram– It includes the following information:It includes the following information:

» Import table (named locations with unknown addresses)Import table (named locations with unknown addresses)» Relocation table (instruction that refer to current file)Relocation table (instruction that refer to current file)» Export tableExport table

– Imported and exported names are known as Imported and exported names are known as external external symbolssymbols

Page 17: 1 COMP 144 Programming Language Concepts Felix Hernandez-Campos Lecture 33: Code Generation and Linking COMP 144 Programming Language Concepts Spring 2002

COMP 144 Programming Language ConceptsFelix Hernandez-Campos

1717

Address Space OrganizationAddress Space Organization

• ExecutableExecutable object code object code– Input to loaderInput to loader– Loaded in memory and runLoaded in memory and run

• A running program is divided into segmentsA running program is divided into segments– CodeCode– ConstantsConstants– Initialized dataInitialized data– Uninitialized dataUninitialized data– StackStack– HeapHeap– Files (mapped to memory)Files (mapped to memory)

Page 18: 1 COMP 144 Programming Language Concepts Felix Hernandez-Campos Lecture 33: Code Generation and Linking COMP 144 Programming Language Concepts Spring 2002

COMP 144 Programming Language ConceptsFelix Hernandez-Campos

1818

LinkingLinking

• Large program must be divided into separate Large program must be divided into separate compilation unitscompilation units

– E.g.E.g. main program and libraries main program and libraries

• The The linkerlinker is in charge of joining together those is in charge of joining together those compilation unitscompilation units

– Each compilation unit must a relocatable object fileEach compilation unit must a relocatable object file

• Linking involves two subtasksLinking involves two subtasks– RelocationRelocation– Resolution of external referencesResolution of external references

Page 19: 1 COMP 144 Programming Language Concepts Felix Hernandez-Campos Lecture 33: Code Generation and Linking COMP 144 Programming Language Concepts Spring 2002

COMP 144 Programming Language ConceptsFelix Hernandez-Campos

1919

RelocationRelocation

• Two phasesTwo phases

• In the first phase: In the first phase: – Gather all the of the compilation unitsGather all the of the compilation units– Choose an order in memory and note addressesChoose an order in memory and note addresses

• In the second phase:In the second phase:– Resolve external references on each unitResolve external references on each unit– Modify instruction set as requiredModify instruction set as required

• Linking also involved type checking using module Linking also involved type checking using module headersheaders

Page 20: 1 COMP 144 Programming Language Concepts Felix Hernandez-Campos Lecture 33: Code Generation and Linking COMP 144 Programming Language Concepts Spring 2002

COMP 144 Programming Language ConceptsFelix Hernandez-Campos

2020

Linking ExampleLinking Example

External ReferenceExternal Reference

• Two relocatable Two relocatable object files are object files are linked in this linked in this example, A and example, A and BB

– M and X are M and X are external external referencesreferences

– L and Y are L and Y are internal internal referecesrefereces

Internal ReferenceInternal Reference

Page 21: 1 COMP 144 Programming Language Concepts Felix Hernandez-Campos Lecture 33: Code Generation and Linking COMP 144 Programming Language Concepts Spring 2002

COMP 144 Programming Language ConceptsFelix Hernandez-Campos

2121

Linking ExampleLinking Example

Data SegmentData Segment

Code SegmentCode Segment

Page 22: 1 COMP 144 Programming Language Concepts Felix Hernandez-Campos Lecture 33: Code Generation and Linking COMP 144 Programming Language Concepts Spring 2002

COMP 144 Programming Language ConceptsFelix Hernandez-Campos

2222

Dynamic LinkingDynamic Linking

• In many modern systems, many programs share the In many modern systems, many programs share the same librariessame libraries

– It is a waste to create a copy of each library at run-time It is a waste to create a copy of each library at run-time

• Most operating system support Most operating system support dynamically linked dynamically linked librarieslibraries (DLLs) (DLLs)

– Each library resides in its own code and data segmentEach library resides in its own code and data segment– Program instances that uses the library has private copy of Program instances that uses the library has private copy of

the data segmentthe data segment– Program instances share a Program instances share a system-wide read-only copysystem-wide read-only copy of of

the the library’s code segmentthe the library’s code segment

• DLLs support backward-compatible without DLLs support backward-compatible without recompilationrecompilation

Page 23: 1 COMP 144 Programming Language Concepts Felix Hernandez-Campos Lecture 33: Code Generation and Linking COMP 144 Programming Language Concepts Spring 2002

COMP 144 Programming Language ConceptsFelix Hernandez-Campos

2323

Reading AssignmentReading Assignment

• Read ScottRead Scott– Sect. 9.3Sect. 9.3– Sect. 9.4Sect. 9.4– Sect. 9.6Sect. 9.6– Sect. 9.7 introSect. 9.7 intro