Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
AD-A092 404 NAVAL POSTGRADUATE SCHOOL MONTEREY CA FIG 9/DYNAMIC LINKING IN A MICROCOMPUTER ENVIRONMENT. CU)SEP 80 G B BLANTON
UNCLASSIFIED MsomomUm.3 Ehhhmmhum-EEhiiiim.IlMuuuumEN
NAVAL POSTGRADUATE SCHOOLMonterey, California
0r
DTIC(7130F 0 4 1980
THESISDYNAIMIC LINKUNG IN A MICROCOMPUTER ENVIROMNT 4/
by
Gerald Bertram Blanton
September, 1980
Thesis Advisor: Lt.Col. R.R. Schell
L Approved for public release; distribution unlimited_-J
r -A
- -- --- ~i t
sacurnrY CLA111WPIC &Tool 0. ?"s PA4g f~on Onto Eageteg) ________________
REPORT DOCUMENTATION PACE §L02CWLtM OI
&~ke sU !2es is- September, 1980
Dynamic Linking in a MicrocomputerIPUTa umc ovsFhvironments ______________
a. peoponagu@ one. 146Peb? kuM86
. AuTooOftfe It. CONTRACT ON GRANT 96NNa)e
) Gerald Bertram 13anton A/1>
s. PCIRPONNINe OQQaNSZAT*OP 06AME AND A000191111 to. PQRAMEEET f.J 4 TA&K
Naval Postgraduate School A5URUINuq
Monterey, California 93940
I It CON4TROLLING OWFICKAMC AND ACO988 /0"T XrNaval Postgraduate School '1 _ ____
Monterey, Cal~ifornia 93940 ; i. Nuls OP E
14. NO04ITaloor. AGENCY 84604 A *OOOEsI(I d lfvmI te CoW&.IM Offloo) Is. SE9CURITV CLASS, (eE this r1port)
Motry Caiori 93940CASsA~e/ouamow
Approved for public release; distribution unlimited
17. DIgrgTIIOwTO STATEMENT W th A*?4 000f4001 todI at~*" so. 40Wt hien aee
Il. SUPPLEMENTARY NOTES
1S. NET WeOD t'Caue oft to- wee film of 00eeean And Idnmiir W Nlo*& munieiJDynamic linking, Linkers, Operating Systems, Micrococmputers, Microprocessors,Linkers and Loaders, Dynamic Memory Management
20. ASSTRACT (Conetme do roeree eld@ of peoerr ad tIssual bp bleak nubov).This thesis presents the detailed design for a dynamic linker suitatle
for microcomputer operation. The desion exhibits the usual property ofdynamic linking in that the binding of into rprocedure symbol ic referencesto virtual addresses is deferred until the symbolic reference is firstencountered during process execution. The design includes the specificationsof dynamic linker modules and data structures. Furthermore, an overview ofnecessary operating system support is presented alon,7 .rith a detaileddiscussion of all additional translator output required. Hardware features
00 1473 £ocr7oae 00, 1 a ov @8 omsTuI(Page 1) S/N 0102-04-4401
-desirable (but not necessary) in a dynamic linking environment arereviewed.
Dynamic linking without translator support and unlinking of anobject (from a process address space) are investigated. A subsetof the dynamic linker design (not including the unlinking capability)was implemented on an In+el 8080 microprocessor as a demonstration ofthe feasibility of the concepts introduced.
Accession For
DC TAB'Unum uu: c ;..d
Justific .tin "-'
By___________
Distri.l 4 /
_Vai]tC -Ly Codesv a' ai d/or
fist special
t
DD orin 14732 68uv etaautwga?'m o ?rn0 p~I~, Be. 0,
,, -,
Approved for public release; distribution unlimited.
rynamic Linking in a Microcom'puter Envirormrent
by
Gerald Bertrarn BlantonLieutenant, United NtatesNavB.S., United States Navaltadeemy, 17
Submitted in partial fulfillment of the
requirements for the degree of
MASTER OF SCIENCE IN COrMPUTEP. SCIFNCE
from the
NAVAL POSTGRADUATE SCHO3OLSeptember, 19E
Author J j.? eApproved by:
Thesis Pdvisor
t Sec;ond Reader
Ch rman, epartm Comjuter Science
rean of Information and Policy Sciences
ABSTRACT
This thesis presents the detailed design for a dynamic
linker suitable for microcomputer operation. The design
exhibits the usual property of dynamic linking in that the
binding of interprocedure symbolic references to virtual
addresses is deferred until the symbolic reference is first
encountered during process execution. The design includes
the specification of dynamic linker modules and data
structures. Furthermore, an overview of necessary cperating
system support is jresented alonz with a detailed disnussion
of all additional translator output required. Hardware
features desirable (but not necessary) in a dynamic linkinz
environment are reviewed.
Dyna'ic linking witnout translator support and unlir'.'ing
of an object (from a process address space) are
investigated. A subset of tfte dynamic linker design (not
includine the unlinkine capability) was implemented oz an
Intel U0EO microprocessor as a demonstration of t-e
feasibility of the concepts introduced.
4
i. IATCK 9TlN - 1
II. ACKGc-1'ND --------------------------------------------
A. TET TRADITIONAi LINKINq I,0AE. ---- -
E. DYNAMIC LINKING --
E. -IEATING S"STl "NVIRONMENTFOR A DYNAMIC LINKER -- i-
1. Tne Logical levels of an Gperatinr 7yster --- :5
2. An Introduction to theAldress Space Manager -----------------------
. IIOG -------------------------------------
III. TEE LIrING PROCESS : AN VE-,VI' ?-------------------
A. TFE '.ALYTH,C1JG 2-----------------------------------
B. A SYNOPSIS CF THE3 iALXTROUKh ------------------- 25
I TH! SPECIFICS OF Z"YNAYC INKIMG---------------------
A. F"NCTIONS OF A LIN.E2 --------------
1. Snapping a lint, ------------------------------
a. Procedure links ------------------------- 3
b. Data lirks --
C. Construction of a List of Snapped 'inrs - "7
2. Buildin Liniage Tables ---------------------
'. Unsnappino Objects --------------------------
1. OETRATING SYSTEM SUPPORT ---------------------------
1. Tne Address Space wieneger -------------------
2. The Process Reference Table -----------------
3. Object leletion from a Process ddress Stace- 4
5
•. Process Initialization -- - - - - -- - - - - ,7
C. CANSLA"'O; SljIPB-R ------- 4---------
1. External references -
2. Syboilic Nare Tables ant Tem, lates -5
3. Entry Names ar. 2ntry ?cints - 51
. LY,,AMIC LINKING TABLES -------------------------- 5
1. The Srrtolic Name Table -- 7
2. The Linkae Table --
a. Tne Initalizo Iina.g- Table --
b. Format of Snapped Links - -
. m. e Linkage Adress Tabhle -
F.- I"F EATION 'F 7NTR' "AmS AN' NT'Y
.. IN IG nITEOUT TRASLAT.O SUPRT - 2
A.TE INTZRACZ ,vOEUIZ 62
1. Linking of Proced:res C7
2. Linkine of Data --
. IIITATIG,%S OF '1S:;PCRTE I INEING - -
VI. HAR-4AR TEAI PF.A.C7S DINAIIC LINK -N- 72
A. Ft'A". F'iATURFS AFFECTING :INK7F L'.-IjC4 N------- 7
1. FirdIwarp indiraction and Faultson Inairection ------------------------------
2.,3ther Features InfluncingLinier Irplerentt ion -----------------------
. HA 'AP.Wi FFATRES AFFrCTI'4G SY!TEZy CFVA:OB --
711. A D-O,STATIC, OF DIAvIC IIN. -G----------------- 77
A.. TFE M 'O LES 01 TI"F :,YNAt'IC I . ........... . 7
6i
Ii
1. Process Initialization ----------------------
2. Tne Linker Nodule ---------------------------
3. 'he Address Space Marager Module ---------
3. THE TEST PFCGRAS ---------------------------------
1. Test Program Constructior --------------------
a. The Asserbled Sjrboli - Name Tatle -------
b. The Assembled Template ------------------ 94
c. Other Problems in TestProgram Construction -------------------- 95
2. The Test Progran DEVO -----------------------
3. The Test Proeran S ----- ----------- 9
4. Observations on the Implerrtation ----------
a. Size of tne Dynamic LinkerIs.plementation ---------------------------
b. verbead Associated 6'.ith 5napped links -- I 5
III. COCL'IOS----------------------------------------
APPEN2IX A - P6EUDOCOD- ----------------------------------
A. DYNAMIC IINKEP VS TTCCC,---- ---------------19
-. AZr=ESS SPACE NkAG-,R PSEJE3C= ---------- 122
AFPr1N"IX 3 - DEMCNSTRATION SOURCE LISTING ---------------- 125
A. ?R CEFS INITIAkLIZATION S:)1RC:- IISTING 2'- E2
S. DYNAMIC LINKER MO'ULE SCURC! LISTI1N ---- 155
C. ALDrvS SPACE mANAGE SOJRCE 0 LI3 IN%-- 15 -
D. DISPLAY IIIKAGE TABLE SOUCE lISTINS 1 ?
E. SYSTEM1 I15R~_ .R'JTINZSc SURI-CE ISTING -- 14
7
APPEtfPIX C - TEST YROGRAVS SOURCE lISTINGS 19"'
I. DE 0 qOURCE lISTING, T214TE, .'AL
RELCCAT'ION SITS - -19
E. ERArEF SOUPCE lISTI:,C kNL TE'-PIAT - 21 '
C. MUT SOURCE LISTING, T'>PIATEAND RELOCATION BITS - 21'
E. DI FLY SOURCE LISTING, 1',FI ATE,AND RELOCATION BITS - 219
F. SUM SC7RCE LISTING, TYPLPAT;,AND RELOCATION BITS -?
G. ARRAY SCUaCE IISTING Al,. TEMFLPTE -- 2
H. OUTPUT OF rEMO --
I. OUTPUT OF SU - 2,C
LIST OF FEFERENCFS - - 246
INITIAL DISTRIBUTION LIST - 2
6[
LIST CF 1iGURES
1. Sequence of Even~ts ffcr Snapi.g a lir.. toth.e Procedure (TareetEtryNare> ----- 2"-----
2;. S equence of Events for Suibsequent Peferzrcesto <Tareet',2rtryNarp'e> - ----------------------
3. Squence of~ Events for Sulsc'et~ee~~to (Da ta En t ryNarne>------------------------------------ 2
4. "ranslated External Referen~ce --------------------------34
5. liniiage Table Entries for a Snapped Proeiz:re liny ---
6. Initialized linkage Table------------------------------39
7. Frocess*Reference Table Entry --------------------------46
S. Symbolic Nar-e Table Entry ----------------------------
9. rata Sepment Sym1 olic Nare Table inl Linkape Tatle --- 57
le. Data and Procedure 3rnapted Jutpoirg! Lirks --------------- :
*11. Sequenc e of Events for Lir1ki~r Unsupported Objects -- 64
12. Ulnsupported linktage Tablo------------------------------ g
13. The Subroutines of the Linker Module--------------------S4.
14:. ELrnamic linkcing in DEMO --------------- -
15. Pseudocode for SUM ------------------------------------- I L
1e. Object Cod- for F'JM------------------------------------- 10'
17. Combined Linkage Table for SU!1------------------------- 7
I. INTRODUCTION
tynamic linking has been previous-,, assumed to te
restricted to those computing systems that were specifically
designed to support a dynamic linker. The first goal of this
thesis was to determine if specialized hardware, such as
found in Multics [11], is essential to roalize dyramic
linkinp. And, given that specialized hardware is not
necessary, the second goal was to design a linker cortatable
with existing microcomputer architectures.
The design of a dynamic linker was develcped with a
basic set of desien criteria (Table I established as
guidelines. (A complete discussion of the implicatiors of
these criteria is delayed until the end of this thesis.) The
most fundamental criterion which characterizes dynamic
linking relates to when an object is boind to a virtual
address within a process address space. In the traeitional
static environment, this binding occurs prior to program
execution. In a dynamic linking environment, bindirg is
delayed until an object is first referenced by a process.
This capability allows tremendous flexibility in the
development of software systems.
10
TAME 1- DES!GN CRITERIA FOP A 7'v"l.- C IIE
1. Delaypd B indinp, - The bindin, (lirinr. of anexternal object to a virtual address (within a processaddress space) must rot take place until the cbiect isfirst referenced during program execution.
2. Limited Overhead - Subsequent references to an objee-t(i.e., references following the first reference, rrLstnot impose excessive overhead witn respect to processexecution speed and primary storage.
3. Domain Independence - The dynamic linker must lecorpata1ble with current secure operating systec desig;ns.In a multilomain environment, the dynamic linker FuIst tecapatle of executing in the domain of the iallingsubroutine (vice executing in the security kernel-).
4. Syntatic Corpatability - The Jesipn mv s t allowexternal objects to be utilized in the same context asinternally defined procedures and data. ,This icvpliesthat external objects can be used as parameters sutjectonly to the limitations of tie language syntax.:
5. Pure Object Code - The djnarnic linker must cermit theobject code of a procedure to remain ;ure, allcwirnsharin- of procedures in a multiproprammina environrent.
6. Hardware independence - The design mvut teimplementable on a microprocessor which does not possessthose hardware features specifically associdted witndynamic linking. In Multics [111, the features include:
a. hardware ses-rentationb. demanding pagingc. indirect addressing tnrougn memoryd. a linkapre fault durin indirection
It has been shown [7] that it is not ne:essary for thedynamic linker to reside in the security kernel to Maintainsystem security.
III
II . ACKGFOUN
The traditional concept of linkine, and lradine [L1-j
involves one, or possibly two operating systpe routines that
load several distinct objects into merory, combine them into
one address space (loading), and finally rescive adressing
between objects (linking). The end result is an executtble
pro-rram.
The static and inflexible functions carried out by te
lin'ting loader place undesirable linitations on Lroirrar
development. First, a program must be intact (i.e., cor tain
all objects required for proper exeCution) :rior to run
time. Second, if a module is c!-anp-ed, tqe whole progra. must
be relinked. Furtnermore, a module may be statically linked
to several programs resultinp in multiple copies of a module
existin" within the system. Dynamic linkiln is proposed as
an alternative to static linkin that solves these problems.
Synamic linking rg, 1i, 141 offers two other ma !r
advantapes over static linking. First, dynamic lln~ine.
allows a programmrer to write and test rn4oMpl te
since one may include in a subroutine a reference to ar as
yet vnwritten external object and, as long as the reference
is never executed, the ?roratr will nct experietce a ruzi
tire error. In the field of software devEletr., tis
feature is advantageous since incomplete modules may still
12
be tested individually. (It should be noted at this time
that once the user has a completely tested :jrodut, it may
be desired to statically link modules together to avoid tae
run time overhead associated wlth dynamic linkinz.
Tne second major advantage of dynamic linking is that
modules of a program need not be 7enerated by the same
translator. For example, in a dynamic liniine envirinment
one may use FORTRAN to do some double prerision scientific
calculations. If the results were then store. in an external
data structure, they could be displayed using a dynarically
linked module written in a more suitable language fcr I/C
formatting such as Pi1. Because the modules "communicate'
via the external data structure, and are dynarically linked
to each other, they need not Ce from the same translator.
(Note that a dynamic linker does not Frohibit such a
'heterogenous' program from executinp but may not te
sufficient in itself to allow proper executiot.)
A. THE TDADITIONAI IINKING LOADER
First of all, the 'linker' and the 'loader' should te
considered separate operating system functions. LIn~i:F may
still be viewed as the combininp of several objects intc one
program; however, the loadine process actually consist of
two distinct operations. The popular concept of a loader is
one of a static operation prior to run tire which takes scre
object code associated with a program and 'loads' this rode
13
into main memory wnere it can ce executed. Tnis is tne
secord function of a icader. The loader must first determine
wflere eacn otject will be placed in the address sace if tne
process fviz., a proram, in execution). (This traditional
concept views the address space as a linear array of memory
locations.) After loadinz, the linkinp loader would link
distinct objects into a single prcgran 1y resolving tne
addressing of data and procedures defined external to
individual subroutines. (It is noted that sor-e reverse tne
order by linkinping loaders may link before loadinz;.
B. DYNAM1 IC LINKING
The alternative to the static linkin? Ltase of the
linking loader is to dynamically link sejarate cOiects at
run time. This involves objects referred to in the so::r e
code of a program by a symbolic name only. The corpl-te
operation (includine a dynamic linking phfase) dictates tnat
the object be located, and addpr, to the address space cf a
program (i.e., assigned a virtual address'. Then tre
reference to an object's symbolic name is converted intc an
addressing instruction using tne object's virtual adaress.
This implies that a subroutine as it exist at the be~innin,
of run time cannot properly execute since the cbject code
produced from a reference to a symbolic name rust be
converted into a virtual address in the address 5Dace of a
process. This address conversion is knowr as dynamic
14
linkinp.
In ord~er to support dynamic linkirg a sYster rTrus t aave
the ability to enter objects in the address space of a
process during run time. Additionally, the operating system
must be able to 'load' an object into memory dv.ring ,roeram
execution. As has been noted these two fun(,tions
traditionally have been considered operations associated
with the loader. However, It should be apparert that this
'loadinjr' is actrally a fuinction of dynaric memory
allocation using techniques such as paving, sep-trentation, or
dynamic relocation. Thus in a dynamic linkint. environmen~t
the loader function-3 ara carriei out by the operating systerr
memory management that enters objects in a process address
space.
C. OPEPATING SYSTE ENVIRONMENT FOR. A DYNAMIC LINKER
1. The Log-ical levels of an O-jeratine System
It is useful at this time to propcse in atstract
operatinp system as an environment in whlich a lyramic linker
will erist. This ooeratingr sy s terr consist of four
hierarchical levels. (An operatinF system aesi-r, alone tt.eBE
lines has been shown feasible for microcom:2uters [1C132 "Ihe
most fundar'ental level consist of tnP trdt~are assc~iated
with the target machine. Atove this levels iS a 53ftware
ke rnp I that includes the mros t basic' software triritives
inclvding nemory management, file pri.mitives. and
15
multiprocessing support. Conceptually, the 'Carrel irclu.es
those software routines which, in a secure iperatinr" sv5tEm,
must be protected from malicious or inadvertant ta r;erinz.
In a rultiproprarmini environment, the kernel provides tne
capability to multiplex resources Ii.e., line crinters. disk
units, etc.) for various user processes.
The level above the kerael, the supervisor Ievzl,
consist of taose cj eratirg system routines wnicn .e- rot
exist in the In eneral, tte supervisor provides
common services to all users. The final level is tha user
level where user prorams and data reside. rIt nas teen
shown (by Jansen [7]) that the linker shotid be able to
reside in all user levels. Janser (7] also demorstrated that
the dynamic linker need not and, more Importintly, .should
not exist in the kernel.)
16
2. An Irtroduction to the Adrss %ace Ya.arcr
-e fore aL object ca n be lInked, it rust te
addressable by a preriss. In a st-.tic- envirerrent, t is
would equate to loadin- the object in the addrecs space of a
proress by allocating to it a linear blcck of rrrrory.
Essentially tnis is what is done in a dynamic environment
except the object retains its idar.tity as a distinct segrent
and is allocated a virtual address 2. (In tr. s thesis.
virtual addresses will be considered to coasist of a serrent
number plus some offset from the base of tnat serment.) -tie
assinment of a virtual address to an object will be done by
the address space manager.
The address spare manazer is invoked by the dyramic
linker with a request to make an object known. "e address
Space maraer does this by aSsipnirr to the object a unique
identifier, such as a segment numter, tr at can be used to
access the object within the process address space. An entry
for the object will then be made by tne address s Iace
manager in a table to prevent assionin multiple identifiers
to the same object. This implies that a sar-h would first
be rade of this table, which is -alled the Frocess Reference
2 A virtual address is a potentially relocatable aldrpss
which ray be converted into an absolute address by hardware.It may consist of a segment number and offset, or some otnerrelative format in whirh tn# baso address of t.e sem;rnent isadded to an offset to achieve the absolute address. (iowevertnis does not imply that segmentation nardware is recessaryin a dynamic linking environment.)
17
Table 3, to determine if the object is already known. If
not, the address space manager would nave tne object
assigned a segment number (identifier), create an entry for
the object in the process reference table, and return this
segment number to the linker.
D. TERMINOLOGY
In order to ensure that the term.inolo.y used is
understood, the following definitions are offered.
A subroutine will be defined as a basic unit of
standalone, executable code (i.e., a procedure). Several
subroutines and data objects can be combiced to for a
program. Stated another way, a pro,ran consist of all
subroutines and data modules utilized by that program diiring
its execution. A process (i] is a program in execution and
is characterized by an execution point (usually defined by a
hardware prograrr counter) and an address space. Dunn
execution, a subroutine may call an external object that is
known to that subroutine only by its symbolic hare pr!or to
execution. The reference to an external object withir a
subroutine will be called an external refere.ce [15). An
external object [4J nay consist of either data (external
data) or an external procedure (that is itself a
subroutine). Eacn object is a distinct loical entity and
3 In Multics (11]., the process reference table is called
the known segment table.
18
will at times also be referred to as a se.reLt [141. (An
effort is made to use the term, "object" whenever possible to
avoid the implication that a processor featurin hardware
segmentation is necessary in a dynamic linking environnent.)
19
Ill. TFE IINKING PROCISS: AN OVEPVIFk
3efore detailing the dynarric linlng process, a brief
walktnroue:n of the steps involved in establishing a link
between the subroutine <Caller> and some external procedure
<Tar'et!Entry Name> will be investigated. (EntryName
represents one of multiple accesses, or entry points, into
<Tarret>. An entry peint Into an object can be corsidered a
label that can be referenced by an external object.
Associated with each .entry point is a unique entry nae, and
an entry point offset that represents the relative offset of
tne entry point from the starting, location of the object.
Fundamentally, the following events must occur to link
<Tar.ettEntryNa me> to <Caller>. The linger rrust be invoked
when a reference to <Target1Entry~Name' is first
encounter-d. The linker must be capable of accessinp the
symbolic name "Tareet1Entry_Nare" ane usire that syr.bclic
name to learn the seerrent number of <Tarpet. Tho linker
will then establish a lirk to <Tarzet!.Ftry Nare> such that
subsequent references found in <Caller> will not require
invocation of the linker but instead will result in either a
call to <Target;EntryName>, in the case of an external
The term 'entry point' has evolved as r-presentingeither the label 'entry point' or the offset associated withthat label (1., 141. This convention will be cortir,.,ed inthis thesis al, where the possibility of armbieuity exist, acorment will be made to ensure clarity.
20
procedure, or a merrory reference to the virtual address of
some external data.
A. TFE WAIKTHFOUGH
When tne translator encounters an external reference in
the source code of (Caller>, it will enter the symbolic name"TargetlEntryName" in the symbolic name table for <Caller'>.
(The syrbolic name table of <Caller> contains the symbolic
names of external references and data associated with each
entry point found in <Caller>. Additionally. the symbolic
name table exists at run time.) The object code produced for
the external reference to <Target!EntryName (es found in
<Caller>) consist of a procedure call to a virtual address
in <Caller>'s linkage table . (This virtual addrecs is
constructed at run time using a base register. called the
linkage pointer, and some offset into Caller.link generated
by the translator.) The virtual address called is an entry
in Caller.link set aside for <TargetIEntryNaire> an4 will be
referred to as an outgoing link. The outgoing link has teen
initialized to invoke the linker and pass to the linlier the
offset (in Caller.sym) of the symbolic rane
TargetlEntryNarre". The linker uses this offset alone %ith
5 The symbolic name table of an object will be calledobject.sym, while object.link will refer to an otject'slinkage table. Thus (Caller)'s symbolic name table andlinkaze table become Caller.sym and Caller.linkrespectively.
21
the virtual address of the base of Caller.sym (whiCh is
stored in Caller.link), to access the symbolic narre of the
external reference. Once located, the linker will pass the
symbolic name "Tartet" to the address space rranaper.
Tne address space manager first determines if an entry
for <Tarpet> already exist in the process reference table.
If not, the address space manager will locate the cbject
<Taret> and have it assigned a segment nurber in the
address space of the executing process. It will also make an
entry for <Tareet> in the process reference table and return
to the lir'ker the segment number of <Target>. (It is at this
point that <Target> is 'known' to tne execi:tinp nrocess.,,
The linker now knows the sepr'ent number of <Target> and
must create a linkage table for <Target, (if ore has not
already been constructed by an external reference to
<Target> within another subroutine). A terilate arcessable
to the linker nas been constructed by the translator for
this purpose and is appended (after minor ccm~utaticns , to6
the end of tr.e combined linkage table (as Target.link).
(The buil4ine of a linkage table for <Tarpzet> allows it to
engage in dynamic linking.) Additionally, the startinp
address of Tareet.link is entered in adata structure known
6 Tho combined linkage table contains the linlr-4ge tables
of each object in a process. (Note that it is not necessaryto utilize a combined linkage table in an implemntatiosince each object's linkage table could be allocated its ownsegment.)
22
as tne Linkage Address Tatle, makinge it availatle for future
linking evaluations. (The linKape adiress table of a process
can te considered an array containing the tase address of
each object's linkage table and is subscripted 16y the
object's segment number.)
A complete virtual aedress for eTarget EntryNane> car
be constru7ted by searchln., Taret.syrr for "Fntr _Nate' to
discovar the entry pcint (offset) and irecoming link cffset
associated with "Entry_Name". (kn incoming link is a section
of an object's linza-e table set aside to allow the
performance of housekeeping functions prior to invoking tie
object.)
The linker will now alter the outpoing link (in
Caller.link) to jump to the incoming link ffound in
Tarept.link). The linker tnen constructs the ircomine lirk
to jump to the virtual address of <Tar~etIEntryName) after
setting the linkage pointer tn point to Target.link. Tie
linkape pointer is a alobal pointer, e.p. hardware register.
which always points to the currently executing subroutine's
linkage table. Thus before execution in 1Tar-et"> can
corrmence, the linkaze pointer must be set to point to
Target.link. The reason for this will be discussed later.)
After the onuteoine and IncomIn? links are executed, tre
prccess will be executine in <Tarpet>.
When <Target> has finished it will execute a return
23
instructior. tecalj t'at tne only 'rocedure call in the
linka&&fe sequence was <Caller>'c call to the outeoin- link
(in Callpr.link) ensurin, a return to <Caller> after the
completion of <Tarp-et>. The final step is to reset tre
linkage pointer to the virtual (base address of
Caller.link. (This is done hy the translated external
reference In <Caller).)
The steps followed for linking external data would be
similar except data is not executed. Tnerefore, the outeoirne
link need not "invoke" the data (via tne irccrrinp link) but
instead must allow <Caller> to reference the data. If
indirect addressin, is available, the outzoinp link can be a
storage location for the virtual address of the external
data and can be referenced via an indirect addressinp
instruction. (Note that on the first reference, this
indirect addressing instruction must be able to invoke tae
linker in some fashion. In f ultics, this is done tv
generatine a fault wh ich invokes the linker as the fault
handler.) If indirect addressing is not available (or cannot
be used to Invoke tte linker on first reference to the
data), the outgoing link can contain executable instructions
whlcn load some pointer with the virtual a dress of the data
and then return the execution point to <Caller>.
24
.. . . ". . . . . . . . .l6ILI ,,,, , " . . . - - r-l l 1. . . l l . . .. 1 1 " i . . . . . . . . . . . . -
B. A SYNO IS 01 TFE 'iALTHRUG
To provide the reader witn an abreviated review of tne
steps to snap a link, the following synopsis is jrovi ed.
Additionally, fiure I is annotated witP the nrmter of each
"step" to provide added clarity. Whpn t n executing
procedure (i.e., <Caller>) encounters a translated external
reference to <Tarpet ?ntryName> for the first time, the
followine sequence of events transpires:
Step 1 - The execution point is transferrc-d to theoutgoing link (in Caller.link).
Step 2 - The linker is irvoked by t-e initizlizedoutgoing link. The linker is nassed t e offset Cf<Target 1 Ent ryName>'s entry in Caller. s:,- as anarpuvent.
Step 3 - The linker references Caller.sym and exractsthe symbolic name "Tarpet[EntryNaire" and the offset (inCaller.link) of the (appropriate) outeoini- link for<Ta rget En tryName'>.
Step 4 - The linker invokes the address space r, anazerwitp the argument "Target".
Step 5 - The address space ranaer enters <Tar~et> inthe process address space (if necessarv) and returns tothe linker the segment number of <Tar:--et>.
Step 6 - The linker builds a linkare talle for <Tarr-et;(not s.hown).
Step 7 - The linker searches Tarpet.sym for "Entry_Name"and extracts the offset of the ircorrirg link (forEntryNap'e) in Tarpet.link, ard the entry_ oirtassociated with EntryName.
Step 2 - The linker computes the virtual address in<'Targe t; associated wit h <Ta r#e t 1 Fn t ry_,4aFie> and thevirtual address of 3ntryName's inccrrin4 lin'k.
25
9tep 9 - The link-r establishes tie lin.: by PnterlnR ajunp to the incomine link in the outio.ine lirk (inCaller.llnk); and by loadinp the inc crring lirk (inTarget.link) with an instruction which loads the linkapepointer with the address of Tareet.link and a jurp tothe entrypoint in <Target>.
Step I - Tne linker invokes <Tariget> at theent rypoint.
Figures 2 and 3 are included to show the erecution
sequence of a sna;ped link for procelures and data
respectively. It is noted that a lirk that has already beer
established does not require the invocation of the liz-ker
but rather directly references tne external chJect.
26
Zw
a:
o
IV: (P 14 -
A: 0
0 C4
41 U g
0~~~ C : 4 r 0,v>1 / 4140 (a 4J
CI 0-4 v 4
U~ E.U 4
1.339 0.
M'0 ri.
0 k
a. j EnryPon
94441 a b4
U! b
274
(ii
00
28-
0A
5.41$4a 4
'.41
00.0
0
0l
U-
45
R -
29z
rA
IV. THE SPECIFICS OF rYNAMIC LINKING
A. FUNCTIONS OF A LINKER
Dynamic liniing centers around the atility to alter
itpure code (linkage tables ? ) during run time. It is tnis
feature which allows invocation of the linker on the first
reference (to an object) and yet permits subsequent
references to the same object to access that object directly
(i.e., without invocation of the linker). Establishing, or
snapping [i, a link does not represent all the functions
desirable in a linker. Linkage tables must be constructed on
the first reference (within a process) to an object, and
system limitations may subsequently force the removal, or
unlinking, of an object from a nrocess address space.
1. Snapping a Link
a. Procedure Links
When snappin" a link between procedures, the
linker will initially be passed the offset (in Caller.synj
of (the entry for) the symbolic name "TargetlEntryNare".
The linker can find -Caller.syn via a pointer stored in
Caller.link. (Pecall tnat the linkage pointer always
indicates the executine procedure's linkage table ensurint-
tze linker can locate Caller.link.) Now the linker kncws tne
It should be noted that linkage tables avoid tneundesirable effects normally associated with impure coda bybeinz serially reusable and a per process entity (i.e., onelinkage table per process for each object).
30
symbolic name of the object to be linked, but it must
determine a virtual address within the objert to be
referenced.
In order to make <Target1Fntry_Name>
addressable, the linker must determine tae sepment number
associated with <Target>, and the entrypoint associpted
with EntryName. To determine the segment numter of
<Target>, the linker will invoke the address soace manager
passinR the symbolic name Target as an ar,.vment. The
address space manager will enter <Target> in the process
address space (if it is not alreadyl and return <Tareet>'s
segment number to the linger Obta~ninz the segment rurber is
trivial since the address space manager will return this
information to the linker when passed the symbolic nare
Target".
Finding the entrypoint associated with
EntryName requires access to Target.sym. As will be
discussed, a second function of the linker is to construct a
linkage table for <Target> (if one does not already exist as
a result of some previous reference to (Tareet>,. After
Tarzet.link has been constructed, to find Tar-et.syr, the
segment number of (Target> is first used to access (in tte
linkaee address table) the virtual address of Target.link.
(Recall that the linkaee address table is an array of
pointers to the liniage table of eaca object in a process
31
address space.) A pointer is found in Tarpet.link to
Target .svm.
It is proposed that, In an environrent allowine
multiple entry points into an object, each distinct entry
name into an object be stored in the object's symbolic name
table. In addition, the entry point (viz., the offset into
the object) and the offset (in object.link) of the incorrina-
link associated with each entry point will also be stored in
object.sym. Thus, by searchiaiR Tarpet.syrrn with the arpurt'ent
.EntryNane", the linker can compute the entry point arnd
in-ominp link address necessary to snap a link to
(Target1EntryName>.
The first step in the actual snajppinat of the
link is to alter the outgoine link (in Caller.link) from a
jump to the linker to a jump to t'he incominp link (in
Target.lirk). The address jumped to is fcrmed by combining
the sezrnent number of Tarpet.link (which is found in the
linkage address table) with the offset (es storpe in
Tar-met.syrr) of the incomine linr.
'"he second step is the building cf the incornirg
link. The Incoming link consist of two instrlictions. The
first loads the linkage pointer (In) with the virtual
address of Target.link ensuring that the linksage pointer
always points to the currently executing procedure's linkage
table. This is necessary to allow a procedure's transl~ated
32
code (viz., object code segment) to reference an external
object while remainine Pure. A reference to an external
object is achieved via the outgoing link; the virtual
address of the outgoing link is computable at run tirre by
adding a fixed (at translation time) offset to the linkage
pointer and allowing the linkage pointer to vary during
execution (see figure 4). Stated arother way, it is tne
linkage pointer which allows (pure) translated code to jump
to an entity (the outgoine link) which is not bound to a
virtual address until run time.
The second instruction in the incorrin, link is a
jump to the virtual address of <Target1FntryName> (of the
form <sezment numberl entrypoint>). Note that the incorinR
link may already exist in its snapped form as a result of
some previous reference to <TarzetEntryName'. To identify
this condition, the linker will first check a 'snapped link
bit' which is set if the incominR link is snapped. A snapped
link is shown in fizure 5.
One may observe that the outpoin, and incorrine
links could be merged into one link consisting of a load
linkage pointer instruction followed by a jump to
<Target[Entry Name>. This change Pliminates incoming links
but effectively requires an 'incoming-type" link to te
constructed in each outpoin, link referencing an cbject.
This approach was not chosen since it requires the
33
* -- - -w -
SOURCE CODE
PFoCEurE FIAMPIE;DECLARE (Target> PROCEDUPE ETTEPNAL;
/* code */
BEGIN /* example ~
CALL <TargetlErntryNime' ;
END; /* of example I,/
OBJECT COfE
/* bepin example *
CALL (L~p + offset of <TareetjEntryName> 5 out~roir,? lin~k)
/"end exarnple *
TPANSI.ATED EXTEPNAI PFFEENCE
FIGURE 4
34
I:UMiP virtual addr.of~ incomnirg link! Caller.lin.:
I(!:rlinker data)
off'set A --- - - - - - - - - -
linkc --- - - - - - - - -
s na p ed 1 IlVAL tp,offset Albit . . . . . . . . . .
j TTP <Target'I
"Ta rr:t)
entr:.rpoi.It
ttNKV; TAKEZ ETRIES i,'r' A SNAFFFE, ?-CCHtL' . .N
35
construction of an 'incoming link' for eacn reference to a
procedure (vice just one incorrin, lin4) and additicnally
results in multiple load linkage pointer instructicns.
(Note, however, that in either of these link formats,
subsequent references to <Tar-et1EntryName> do tot result
in invocation of the linker.)
b. Data Links
For external data, the steps to snap a link are
similar except the linker alters the outgoir? link to an
instruction which loads a pointer (preferably a reister)
with the virtual addrass of tae Pxternal data, and a return
8.nstruction 8 . (As will be shown, it is necessary for data
segments to have both lir.ae tables and syrFollc rac-
tables. This permits tfle linker to use essertially one
algorithm to dynamically link both lata and ;rocedur=s.J
Thus any subsequent references to the external data
(<Data'ErtryName>) initiated y <Caller> would result in
loading a pointer with the virtual address of
<Data:EntryName> followed by a return to fCaller) and wcull
not resrltt in additional linker calls.
As with procedures, it is desirable to refornrp
multiple, symbolically named locations (viz., entry coints'
As has been previously discussed, it is necessar. to usethis forrt of outtoing link if the processor tardware cannotsupport an indirect addressing instruction to invoxF thelinker (on first reference) and susequently a.3-ess thevirtual address of the external data.
36
in a data structure. This implies that "ata> must ureergc a
translation to identify entry names and entry points and
furthermcre, must nave a symrbolic name table in whi:ch this
information is stored. It is also necessary, given tnis
condition, that <Data> nave a simplified linkape table
consistin- of a linkale table header. (The contents of a
linkage table header will be presented later.)
c. Construction of a list of Snapped Links
For each object in a process address space. It
may be desirable for the linker to construct a linked list
which contains a pointer to eacn snapped outtgoing lintr
referencing that object. This linked list is basically used
to provide a record of references to an object tc permit
unlirkinf an otject from an address space. (Unlirking will
be discussed in more detail later.) A pointer to the start
of this linked list would be stored in the header of the
object's linkafe table and new entries to the linked list
would be entered at the head of the list (when snappinp, an
outgoing link). The linked list could easily be Imbulerertpt
by storing a list pointer in eac. snapppd oute-oin, link.
2. Building Linkage Tables
Before <Target) can comrrere execution, it rust have
a linkap-e table in which snapped links car bn stor £. This
allows (TarzeO> to enpaee in lynari, linKir:. 'If it is a
proc-dure). There axist two circumstances unler wnlc' tne
37
lInk'-e table t.ust be built. The f irst, ard obvious.
situation is when an external object is Gynamically linked
to a process. The second is when a program is iritlally
started executing (viz., during process initialization,.
However the steps involved in these two cases do not differ,
allowini- the same module of the linker to be utilized in
both instances.
To build a liniage table, the linker ;ill ac'cess a
template for an external object (or prorar ) that was
constructed durinp translation. The temrlate is an exact
duplicate cf' object.link with tne exception of the symbolic
name table virtual address. The lirker must therefore only
add the segment number of <Target> to the symbolic name
table offset as foind in the template to obtain a co-plete
virtual address (for Target.sym). (This dpprcach assumes
Target.sym is a part of the translated code of 'Target>.)
The remainder of the template is then appended to tne
9combined linkage table 9 An example cf an initiIlized
linkage table (and thus a template) is (iven in fiLure C.
There are two prcblems related to te irn lenrrtatic
of this linker function wnich require discussion. The first
9 It is not necessary for an imrlemrentation to include thecombined linkage table since individual lin'-ae tablcs -arbe assipned unique segment numbers. In fact, in amultidomain environment [E] , it is desired to assign lirkagetables to separate segrents since tnis permits t.e dvyranclinker to be dorrain independent (in accordance with t hedesign criteria of Table 1).
38
linkage table size
symlbolic name tablevirtual address neader
linked list poin terlinkageTable Body allocated memory for an in-omin link P1
incoming linkI.......................................
PUSH sym. name tbl offsetoutgoing lini #2
JTJMII LINKER......... .................PUSH sym. name tbl offset..................... outgoing link #3
JUMP LINKERI....................................
rerrainin entries of body
INITIALI7ED LINKAGE TA3IE
FIGURE 6
39
'V
question involves where the temDlate 15 located a e process
ad'dress space. One does nct, .:n eenexal, want the tenplate
to be a part of tne object code 5ince tnis will result iL an
entity (the template' which is used only once tecoming an
eytraneous part of a process. (Note that system limitations
may force this shortcoming on an implementation.) A solution
in a nor-segmented systerr is to malze the terplate a separate
file. (One may not wish to do this in a segmented system if
the number of segments represents a limited asset an i Pile
corresponds to a segment since this would require assiinin&
the template its own segment number.) However, in a dprand
papine environment, the template can be a part of the object
code since it will only reside in Temory when requirpd and
will then be "pared' out. Because it will never aecain te
referenced, the template will never again be loaded into
memory.
40
.I...
"his leads to the seconi pro tlem of ensuring the
linker can f"In, tae template when it is a ;art of tne ctject
code. There are several solutions to this, tne rost rinple
of which is to place a pointer to the template at scre known
location in the obiect code. knotPer solution wotld entail
makinp the template a separate file. Thus when building a
linkage table, the template i5 brought into a process
address space, copied into the combined linkage table, and
thaen deleted from tne process address space.
3. Unsnapping Otjects
It may be necessary to remove an objpct frcm tne
address space of a program. This situation ray occur, for
example, when using the ZOO processor [12] witn one rerory
management unit (MMU). Since tnis hardware confieuration
allows a maximum of 6. sezments (some of whih will be
allocated to the operating system), it is entirely possible
that a process may require in excess of the maximum rumber
of available segments. It is desirable then to te atle to
remove an object from the process address space an! unsnap
all outgoing links referrine to that object.
The unsnapping of an outgoing link is a sirple
procedure. The snapped outeoing link is merely replacea ty
an entry equivalent to tne original, unsna-ped cut -cine
link. More specifically, this unsnapped link consist of code
to pass the lin"er the offset of the external cbject's
41
symbolic name in object.sym followed by the invocation of
the linker. (For simplicity, it will be assumed that tae
linker is invoked via a jump instruction.) This irplies that
a portion of each snapped link must be set aside to store
the offset of the symbolic name for use curine
10unlinking
The first step in the unlinking process occurs when
the address space manager, after being requested by the
linker to add an object to a process address sliace, returns
a message to the linker indicatinF no segment numbers arp
available (if this is the case). The linker would then cause
a segment to be deallocated.
If desired, the object's linkage table
(object.link), can be deleted from tie combinee linkage
table by performing a compaction on the combined linkaee
table. (Note that compaction is not necessary since, aside
from resulting in unused memory in the combired linkage
table, if the deleted SeRment is rpentered in tthe pro-ess
address space, a new linkage table will be built and
appended to the combined linkage table.) If a ?cmacticn is
Notp that all information necessary tc reset the link
(thus deletinp tne requirement to store tne o-ffset in thelinkage table) is available in tne combine linkage table,the subroutine offset table and the template. Fowever, tt -
steps necessary to extract this data are rather involvef andthp alternative of savine the offset within a stuDned !in-:is suppested unless infrecuent unlinkl:x. iuclutions areexpected.
42
done, the deleted linkage table cortains treads ir tne
linked list of other serments, whicn muqt te removea witrout
destroying the linke list they were a part of. Ore solutic.
to this problerm is to implPmert a doubly linked or rircular
linked list (by havia the last entry of the list poino tc
the lilnkae address tatle instead of being set to nil). Now,
prior to rerrovin,7 object.link, the linker could find and
adjust each thread (of a lin'ted list) with a nole in
object.link ensuring the integritr of otner segments" linked
list.
Compaction presents two other nrobler.5. First. v.ber
olJect.lirk is removed, other subrcutines' linkage tables
may be relocated within the combined linkase table thius
receivlng new virtual addresses. This requires that tne
linkage address table values for those linkape tables alo-
with linked list tnreads point ini irtc them to be a ju.sted
accordinTly. The correction must be done prior to a-tuall
compactine (be'ause linked list threads 4n the deleted
linkage table will be lost iuri. -omactlon' and reiulres
tnat addresses in the combined lin'age table 'i.e.,
subroutine offset table, linked list, and snapped link
addresses) be corrected by the size of the reroved lin'age
table. A secona problem relates to snapped o1t.oini links
which jurp to incomirg links in relccated Ilnre. IL T se
mus t also te a'djusted by the size of object .link. ote that
43
a sutroutine 's linked list identifies eacn outeoirn lin"
that jumps into its liniage table. Therefore, every
procedure segment whose linkage address table value requires
correctinp must have each entry in its linked list updated.
When unsnapping, tne linked list (constructed y tne
linker) is traversed and each entry in the list is
reinitialized. Note that unlinking affects many subrcutinp
linkage tables yet the linkage pointer still points to
object.link for the subroutine whichi originally invoked the
linker. Tnis implies that linked list pointers murst either
be complete virtual addresses or relative to tle start of
the combined linkage table (i.e., they cannot be relative to
the linkage pointer.)
An alternative to a linked list implementation is to
have the linker search the combined linkage table for all
snapped outgoing links referencing the deleted segrent and
-reset each one found. (This is a less general solution since
it requires the linker to know the format of all possible
linkage table entries in order to identify those wnich must
be reset.) Once all linkage table entries nave teen
reinitialized, the object's linkage address table entry is
set to nil, and the object and its linkage tatle (if
desired) are removed from tne process address space.
4
A
.. . . .... .. . . . . . . . I -- I---- -I I
B. OPERATING STSTEM SUPECR T
1. Tne Address Frece Manager
As has been noted. before a link to an obJe-t can be
snapped, the object must first be entered in the address
space of a process. A request to enter an object (i.e.. make
it known) is forwarded from tne linker to the address space
manae r. The address space manaier will be passel the
symbolic name of tho object that is to be made accessatle
and will first search each entry in the process reference
table to determine if an entry already oxist fcr the object.
If so, it will return to the linker tne segment nrrber of
the object.
If the object is not accessable, the address spare
manager must first call on File "anagement to locate tne
object. After the object is located, Merory Vana-ereLt is11
invoked to assign a segment number to tne object . ,f
Memory m'anagement were to indicate tflat it had no sef-ment
numbers left to assign, tn= address spare manaper wcull
return to the linker a message to this effect.
It is realized that this represents a very vaeuedescription of how an object is located and assigned aseerrent nu. ber. However, since the exact steps involvel a reniRhly dependent on the operating environTent and arefundamental to most multiprogramming systems, it is feltthat adequate information exis t elsewhere to allowimplementation of these functions without discucsin, tne-i inthis thesis. Note that the file system in use uay beextremely sophisticated as in Multics [11], or represent asimple one-to-one mapping of symbolic names to correspondin-files.
45
2. The Process Peference Table
The process reference table contains an entry for
each object in the address space of a process. The fcrirat
for an entry (figure 7) includes the symbolic name of the
object alone with the segment number of the object. A third
item which may be found in the process reference table is a
removal status reflectinp the priority of an object for
removal when unlinkin.
Note that unlike a syr'itolic name table entry, the
symbolic name found in the process reference table does not
include entry names. For example, a ;rocess ray contain
external references to <Tar et!EntryNamei1> and
<TarpetFntryName_2>, but the process reference table would
only contain one entry for <Target>.
symbolic : segment : removalname : number : riority
Figure 7 - Process Reference Table Entry
3. Object Deletion fror a Process Address Space
In conjunction with the linker, a module of tne
operating system must exist to delete an object from the
address space of a process. When invoked by the linkTr, tnis
module would use some policy, such as least recertly used or
46
first-in, firs t-out, to select an object for removcl. The
module would notify Memory Mlanagement that the object's
segment number is no longer in use ard reset the object's
entry in the process reference table to nil. The rrodule
would then inform the linker of the septent number of the
deleted object. Tne linker can now unsna- links to the
object.
It is useful to point out policy consideration.s for
selecting an object for removal. To bepin, note that each
time a link is napped to an object, the address space
manaper is called to look up the se-ment number cf the
referenced object. It may, therefore, te advantag-eous to
ieep track of the nurrber of Links to an object to avoid
removal of a seemient which is referenced inarr tirps. ()np
should not, however, strictly delete the object referenced
the least number of times since this may well be the last
object entered in the address space and, applyine the
principal of locality, be subject to further use in the near
future.)
Another important item to bt ccnsilered before
selecting a subroutine for removal is whether it will
eventually be returned to by the currently eiecuting
procedure (i.e., it has a current activation record). As an
example, say procedure A called procedure z which callod
procedure C. But before C could be linked an urlinkinF
47
evolution was required. Certainly one wculd rot wArt to
remove A or B to make virtual memory aviilabe for C siu-e
these twc procedures wculd be returre! to wlhon C ccu;)leted
executinp and the linkin, process has only been defined
durirp a procedure call. Thus, if A cr B were unlin'e,', C
would return to a non-existant mcdule which it ccu!l not
link to or access (since A or E woll no lonrer be In tne
process address space.)
If the information necessary to determine whether a
procedure has a current activation record is not r~aily
available, there is an easily implerrentable !rectanism for
determining this. A counter can be assigned to each
procedure (in a parocess address space) that would be
incrempnted or decrerrented as the procedure is invoke or
completes execution. Thus, a procedure wnose counter i zero
has no current activation records and is available for
removal. The counter could be updated by code in the snapped
link and could be located in a procedure's linkag table or
linkage address table entry. Tnis implies trat the linker
must be involved in the selection of an object for removal. A4. Process Initialization
Frocess initialization involves those functions
wich must be carried out by the operatine syster, prior to
comirencenent of proerar, execution. A brief roview of these
functions is offered at this time with a -.ore detailed
48
discussion available ir work by Jansnr [7, (].
Before a process can ?mrence exezutior of a
pror-ram, the pro !rar's linkage tatle (pro -ram.lJ k' and
linkage address tatle must be allocated a se-tior of the
process address space and both table- must be inltial'ed
(or built from a template ir. the case of ,rop-rarr.link.
Additionally the linkage pointer must be set to oint to
propram, lInk. The cperati:p system rrust initialize the
process reference table with the anplicable !eta for the
pro-eram to be executed. Once this is accopplished. -al!s ty
<program> can be dynamically linked.
C. TRANSLATOR SUMPFT
The process cf dynamic linkine is only practical if the
translator, whether a compiler or assemtler, has been
designed to support dynamic linkinp. In a (translator)
supported system, the translator must be able to identify
external references, build the symbolic r.arne table and
linkae table template, and identify entry poirts ar" entry
names. A translator will be assumed to produr- relo-itable
object code allowing dynamic relocatior of cbject rode
seperPnts--either by relocation hardware or software.
Together, the translator and the linker must mFet two
requirements. First, the object code must remain pure eurinr-
the linking process to allow use of snared prccelure
sements in a multiproeramming environment (i.e.. the cure
49
ot ect cole criterion of T~1'- it I 't r,"- e
,)roduced bi the trarslator alo:.e w tr. tne cte-s 'c i.. :.= ir.
t r ln.in process ru st not lir1't f tur- s th s ...
lan er a ge (i.e ., -.re -Yntacti c c o i rat ahit t- c r 1t e -1c n .
1. Ty tern i References
A translator ru st te able t I Ie t' exter-al
references ar. convert t her into o jet - cj .t
result in a call to tne outfiolne lin{ (f' ', :re 4' T.: c jl
produced by the trdnslator i tC an I;ir--ss n z-
expressea as the value of the linkage cirter tls so-e
offset. Since the translator o:stru-ts the lir.ie tile
template, it ir.cws the relative offset for a s d-l, r '
outp inp, link in the linkaee tate. As ras 1deen no'el.
because the linkaee pointer identifies the c-inring cf tne
executin, procedure's lirkage table, tne object cede fcr an
external reference can be desiene tc call the cutgcin- lir'?:
desired. (The use of the linkage pointer ensures tne pr-ity
of a procedure's trarslated code.)
2. Symbolic NJame Tatles an! Templates
.he translator buils both tre symbolic rarr;e t lI
and the linkage tatle template. This sr.ould nnt present a rV
major problem for the translatcr since all cr-;Icr
reouired to 'onstruct these two items is, in Pneral. ether
easily comnutable or fo,,nd in the translatcr's sy-bcl t0i:.
Because the translator builds both, it is not ne qssary for
50
e-tr i in. t:er to be of ,n f :o,,r size . .. .t- rsiator, fc"
9x a le, ncws the of,et (i -e, startn " !,oct ior o a
synbcl rar P tabl entry. T -refcre, whenr tne trinsltcr
cons!ructs the lln!-ate tatle template, each Iut- oine lirk
can %,e lnitializp tc pass this offset to tne lirker (on
fIrst reference of an object.)
Notice t.at a one-tc-cno corr-spcnderce eyist
tetween entries in tne linkage table bodyv end the 5-,srolic
nam- tatl -. "'ns, .if tne syrbclic name table is r .. t. e
first, tre con! truction of tre ter-plate tecories trivial.
A "ter tP h ea ler of the terplate Is bilt the sy toli ra rre
table is scanned and an out.o I nrr or incomir- link is
Il:tlalize. within the te-,iat= ( eeLdi, on the type of
sv,-tollc name encountered). kfter each. terplate entry is
-onstructed, the offset of the 1I:k fror the start of the
template can be store, into its rescective entry tn
oh je t. sym.
7. Entry "ar-es and Entry Points
The trar.siitor shculd ° able to rercnize both
entry na-e.5 and thei r associated nt-y cIrts .sak
ippropriate i r i de table anl syr-t ol" are ta le entrIes
accordnlv. e t r 4 i l osr, of or try ;cln ts ..n t.e
iper ent tlor cf -i I.narI i &.er Is biP'Iy Iesir -,it,.
p;-ti -,flarly in a cst ' with a liit-d virt a1 r cry sIz ,
n this znviron~rnt the nur-ter o* %r.lnfci - evoIU ti r. Sny
51
slF.inifiCantly redliced b., u.sing entry nirts to cir"tire
srall data or Drocediire objects into 1 a rpr o nes w it ou t
losino the smaller otject's addressa~ility 1
12 This process is known as binding2 iL tMul tics [11]
52
'he tol11oin i s a d -s o i ss -1. ofCIt tne V.ari OLc- t -i - ISz
dssoci at ea wi tn dynarni c Iirer. Th f,)rm a t Terse-nted ~
ro0t r e.,r- 5e r. t the only Structures nossiKe ~cev r, t !e y
c o nt ain al1l in fo rra ct i on r ece s sa r.v fo r c.rnjc : i 1
7ne Zyvbolic Aa r- i rbl1e
..n entr-y in tne Syri~ol icnamE ta bie F'V re ) i
aidi tiont0 to theY~i 1 rboi C :-a",a I CI x1 p5 W t 1the ite.
first is a desCrivtor conslstin - of a t1:je tit to i r t i i,
the,- object as 7urcoere cr lata; an identity bit to class if
tqie syrnb ,li c 'I -E a s an external refererce vers;7S Entr-
n-are:; a rA a s iz e fiel to i~ass to the loxe tV r r o
cnaracters in thE s:;:nb11olic rname.
I aescriLjtcr svmlolic lin'-rAce tatle: relativerare 0of fs et o If S t
(entry IOirts Ornl''
:as cci Pt or:
ddta or entry name lengt, -):' t::efrocedure irdiCdtor sYrbcli , nre
Fipure -Symrbolic %,are T,:Ole Bnt7-..
53
A second iter to be ircluded is tce clfset of a
symbolic nae's entry in tne sutroutine's linka-e table. For
external references, the inclusion cf the offset i.1 a
sy'Ttolic name taLle entry is not necessary; nowever, Its
inclusion does remove the requirement for the linker to save
this information when it (the linker) is invoked by an
out-oine link. However, for an access 'entry point' Into an
object, the offset (of the incominp link) must be included
in the symbolic name table to eLsure the linker knows where,
within object.link, to construct the incori."P lir-. Tne
third item found in the synbolic name tatle is the entry
point (offset) associated with each entry nare declared
within an object. (The entry point is used to construct a
virtual address of the form <segment nurberertr.v_pcirt>.
This virtual address is used in the incoming link to invoke
the called external procedure.)
It may be desirable to separate the s:'mbolic name
table into two sections consisting of external references
and entry points. Assumine the entry points follow the
external references, a pointer to the bezinnln" of ttre entry
points should be stored at the beeinnin" of the tatle to
allow tie dynamic lirker to jump directly to the entry -oint
section when required. This feature would perit faster
access for both since each would b= stored in a saller data
structurp. If this table orearlzation i, used it world not
54
te necessary to include an identity bit in the descriptor of
an entry. (Note that the symboli, name table is sear-hpd for
entry points only, since external referances are ac-sses
directly via the outp-oinz link.)
It is natural to ask where the symbolic nare table
of an object is located within a process. It is supoested
that for procedures, tne symbolip r.ame table bp appended tc
the end of a procedure's object code. This will require cnly
one copy of the syrr~clir name table (whicn rerr;sents a jure
data structure) in a shared, multiproerarrmin environment.
However, for external daita, tfte symbolic name tablp carnot
be located at the end of the data since it will limit the
ability of the data structure to grow dynamically. A better
solution wou ld be to merpe the data.sym with data.link and
store the two in the combined linka-e table. This fo.or.mat
allows the data to be based at offset zero an .row
dynamically. (The ,eneral form of a data symbolic
name/linkaie table is given in fieure 9.)
2. The linka~e Table
a. The Initialized linkag-e Table
The initialized linkage table is shown in fiure
6. The header of the linkage :able contains three items. Tne
first is the size of the linkaee table. This item tells the
lirlkr tne size cf the ternolate wnen buildirp an object's
linkage table and also is used t.r the lin'rer to adjust
55
Linkap-e --- - - - - - - - - - - - -Mable iir kae table/symbolicnare table size
linzed list DointerSyrbolic -
Narne des- Er.ntry ! Tntry'able icriptorl Name 1 Point_1 ... .. .. .. .. .. ..... .. ;; ;,
des- 1Entry E ntry-criptorl Neme 2 I Foint 2
rerainder ofsymbolic name tatle
DATA 57MN SY'12B11IC NAO! TAK1EAC LINKAGE TAIE
FIGUE 2
56
linkage table addrpsses when rem:ving a iinkaee table (dur-
ing unlinking). (Recall tnat linked list threads, linkaFe
address table entries, and jumps within the linkape table
must be adjusted by the size of a removed linkatge table dur-
in! compaction of' the combined linkape table . The second
and third items found in the header consist of the virtual
address of the symbolic name table and a pointer to the head
(i.e., a snapped outpoing link to the object) cf the linked
list used in unlinking.
Each outeoinp link in the body of the linkage
table template is initialized to two instructiors. Tte first
instruction passes the entry's offset in the syrrbclic name
table to the linker (as an argument). The second is an
instruction which results in tne invocation of the linker.
Logically, the two instructions found in tto initialized
outpoing link equate to:
CALL Linker (symbolic_name_tableoffset)
The desimner ^an chose from three tasic
mechanisrs that ray be used to invoke the linkor. First, if
the translator knows the virtual address of the linker (such
as a fixed or reserved segment number), then the out.cin
links in a template can be tailored to invoke the linker
directly (e.g., JUMP virtual address of <1ir.ker>). The
second method is to invoke the linker by a hardware fault
which will result in tne linker bpine called as tne fiult
57
handler. Tne translator would therefore, initialize eacn
outoine link to push the offset of the symtolic name on tne
machine stack and then induce a hardware fault. The tnird
mechanism is for the linker to enter its own virtual address
in earh cuteoing link as it builds a procedure's linkage
table. (This represents the least desiratle tecnnique since
it requires the linker to know the forrit of t1e body cf a
template and furthermore is much slower since the template
rrust be scanned as t .e linkage table is built.)
b. Format of Snapped Links
A format for snipped outpoin, links tc external
data and procedures are snown in figrre 12. The snappe4 out-
going link for a procedure consist of a jump to the incoming-
link in the called procedure's link for an external rc-e-
dure's linkage table. The snapped incomin, lin, lcads the
linkage pointer with the virtual address of the called
procedure's linkage table (viz., Taret.link,, and then
jumps to the called procedure (as defined ty some ertry
point). For external data, the snapped outoine link -cnsist
of an instruction which loads a re-ister with the virt~ul
address of the data followed by a return instru-tion.
(?ecall that this technique is used when tne available herd-
ware does not support an indirect addressing approach.)
The two items common to both entries (as s owr
in figure U£), 'offset" and 'linked list pointer', represent
58
'i a 'ILOAt ptr , addr, ss of data
En try RE T UR
!offset jl~ziei list '-ointer,
Froced..re 1 P' to v irLLal1 ad,-'re5s
FBrtry 1cffet ljlizrred list i;oirtzr!,
59
information to be used during" ur.linkin-. The offset (of tne
symbolic name table entry correspcndinp to the outroin,
link) is used wnen resettini the entry to its initialized
form while the linked list pointer allows the unlinker to
find each entry in tne combined linia-e table which
references the object being removed.
7. The Linkaee Address Tdble
To facilitate each access tc a subroutine's linka.e
table within the combined linkap-e table, the linkage address
table is used. Entries are subscripted by segment number and
contain the offset of an object's linkage table within the
combined linkage table. (Note that if linkage tables were
allocated individual se-rrents, vice a ;ortion of the
combined linkav e table, the linkage address table would
contain the virtual address of an object's linkape table.)
The problem arises as to wnere in a process a rrss
space the linkcaee address table should be located. Cne would
like to avoid allocating tne linkaie address table its owr
segment and pointer register since triese resources withir a
microprocessor are usually limited. Assuminp the linka-We
address table is initialized at process creation and is a
fixed lenp.th, a possible solution is to place it at the head
of the combined linkeage tatle. If this approaeh is iusel, t.e
table's base address would be the seement number of the
linkage table (which is sto-ed in the linkage pcinter) wLt r.
60
an offset of zero.
F. IMPIFYZNTATION OF ENTFYNAYES ANr ENTRY FOINTS
To avoid ccnfusion, some of the fine roirts related to
the implementation of entry names and entr, points will te
discussed at this time.
First, if an otject has multiple entry points declared
withir it, each entry poirt must have a unique entry in
object.sym and a unique incomin- link in object.link. Tnis
Is loical since each entry point defines a distinct
location in an object. Secondly, if a procedure contains
external references to several entry points *ithir. the same
object, eacn unique reference must have its owr ertry witnir
the procedure's symbolic name table and its own out-oine
link. (For erample, (Ta rget 1 -ntryName 1> and
<Tarzet!EntryNae_2) represent distinct referen-es.)
Notice that the start of an object r- ,resents an
(frequently implied) entry point which must be inclided in
the object's symbolic name table and nave an incomirp link.
However, one would like not to explicitly inclrd such an
"entry point' (e.g. <Target Target>) in an external
reference. Therefore, it is supested that an irplementation
default to this implied entry point in the absence of an
entry name.
61
V. lINKING WIIhOUT TRANSLATOP SUPPOET
In a.ll probability, the initial imrlerrpntaticn of a
dynamic linker will not enjoy the translator support which
has ureviously been assuired to exist. TYt, within reasonable
limitations, one woild like to te atle to utillzini- the
features of dynamic linking in an unsupported 13
environment. Furthermore, it is desirable to te able to i:se
one dynamic linker for both supported and unsupported
procedures, to be able to execute both sM;ported and
unsupported molules within a process, and to be altle to pall
an external procedure from a supported module withcut haviLa
to specifically declare the procedure to be suppcrted or
unsupported. (This implies the linker must be abl- to
differentiate supported procedures from unsuppcrted ones.)
An irrplemertaticn is proposed which achieves these ncal.
A. TEE INTERFACE MOrULES
In an unsupported subroutine, the linker should be
invoked via a data or procedure interface xrcdule. Two
separate odules are suggested since, besides the fact that
their functions differ, tne data interface rcodule must
return the virtual address of the external data to te point
13 For the purposes of this tesis, supported' will be
used when referring to an environment in which thetranslator supports dynamic linking while 'unsulerrtzd' willbe used to reference environments which lack this featherp.
62
of call while the procedure interface module Terely executes14the snapped link Conceptually, in interface rodule
carries out those functions which, in a sutrorted svsterr,
require some translator support. These functions in:lude
building the symbolic name table and the link a-e table,
invokinR the linker, and executin a snan)ped lins.
1. Linking of Procedures
To best describe the functions of the prc-edure
interface module, the steps to dynarically link t .e
unsupported procedure <Target> to the unsupported procedure
<Caller> will be traced (figure 11). It will be assure, that
the procedure interface module is called as follows:
CALL LINKtFROC(Taret, parameter 1, parareter_2,
The first function that <TINK$-?CC> woul ...rorrr
would be to save the value of the interface linkage pointer
on a software stack. Because a translator whicn does not
support dynamric linkinp would not know that the linkaoe
pointer register is not available for ezeneral use. in all
probability object code produced would utilize the linkage
pointer register requiring an interface linkaie pointer be
established and saved in software. (In a suzpote! syster
SThis requires that two in terface mcitles one for
procedures and one for data) be implemented cre to t.e factthat most hi-her level langua,-es nave a differert syrtax forprocedures whi ch return arqurrents to the point of -all(verses those which do not).
63
411
r3~
14 4 :r
'a) 4)rr. u
u $4
44
*c 00
414
01
Vi A
0'014.
~ 41b41
w4 .4-4
a 41
4j 4 4-4...
0 u 0j1
s5iviner tne lingace pointer register is acccmplisted ty tne
trarLslatei colie.) This irr~ie5 that there ire two linkape
,,cirters (viz., a :ardware lna-epointer and an irt-rface
linicae .,c inter). and both rrust be initialized to po int to0
te n ein1~ of tzep lirnkaFe taole for <,z'ogramn> at process
initializctlon. It -Pould te noted tn.at ne lact -rstri~ct,_o'
0" <TINFSP'1CC> must reset th-e intprface inaepoin~ter by
o Pi n.7 t '!e sa ved v a 1 ve f a s -qf t o5re st a ck to
roturning to <Caller .
(I$?C>will tnen check to ee ifan e :r.vr fr
<Ta r;-et> t-xist in Caller-.symr. If nct. I\1%?SRC> will rencr
(Tareet> I n C al 1er .sy a 1or- w it h the o ff 5e: o-f tnE ou i-c I n6
link for <Target> in Caller.llnrk. <LN~~ is itl= t
enter this offset because it r.a5 constru.cted &n out o inF
link for ( ar,-et> in tne next free locaticz : i aiei~
(The outg-oing link for <Target> is of the sarte format f o i -n
in a s;upported system linkage tatle.) Tnis outg-oir, link is
executed and the linker is Invoked. (:zrse steps ensur- th e
use of tne same linker for btotr su:ported ard urcv:jpo-ted
lirking since the re t hocd o f In ker invocatior. dlo es n o t
chanee.)
I t sno ul d p oi n ted out t hadt *r r Fn Cr t r f'o r
(Tarpet> already existed, thea (Tari-et) would have a'Lredy
beer linked to <Caller> ard <Lr !: PRIC> woull on!,; hiv- to
execute tne snapped link. (which It can findI since tr~e nffset
65
cf t.e snpaped irco-.r link in CaIlPr.lir.k is S're v ir
Call er.sy..
'nr ce the linker is called, it wili fi rst terr7 .no-
if <Tarpet> is a supported or u nsiipported r:ceiure. Trle
artual echanism used to perform tzis c n P ck will vary
dependin, on the operating system. One reans of performinF-
this chock is to tai nodules within the file system. An
alternative wo, ld be to tailor tr.e first tyte of a svc:oorted
module to identify it as suc.. (One rust ensur. wn- usire.
tflis method tfiat an unsupported module cannot have te sare
bit pattern for its first byte.) In this thesis it w ill be
assumed tfat the linker can query tne file syster to
determine whether a module (external otiect is sil~cortei cr
not. he ability of the linker to accomplish fth.s check
allows an external reference within a supported subrcutine
to have the same format reeardless of whether th e en:ernal
o e-t referenced is supported or not. This treverts ,avinR
to modify and retranslate modules wnen an unp.Tcrted orect
is retranslate! in a supported environment.
W .en the linker determines tnat <?ar t' .
unsupported, it wil call or a routine in dIKFBC'" to
allocate a section of th.e combined linkage tablo tn Ie used
as Tar~et.sym and Tareet.link. This implies that thp .ext
free location in the combined linka e tabl= ust e
available to <IINKtPFOC> in addition to tne linker 'fzr
66
constructing- linkaee tables since <LINK5PROC must build tne
linkage table for an unsupported subroutilne. Target.sym can
be located within Taret.link (vice Target's object code)
since tre linker finds Target.sym via a pointer in
Targ et.link (figure 12). Additionally, /T-INKSFROC> will
construct <Target)'s linkage address table entry and will
initialize t.e header of Tarpet.link.
The linker needs to know whether Target> is
supported or not for one other im!jortant reason. FTecutlrn
cP <Target> is initiated via a jvmp from <Callerb.li.- to an
incoming link in arget.link. Tha incoming lirk norma4lly
consist of an instruction to set tne linkae pointer
rogister to point to Tareet.link followed by a jump to
<Target>. However, if <Target> is unsupported, it is the
interface linkae pointer vice the linkage pointer re ,ister
wnich must be set requiring the linker le atle tc
distin,uish between supported and unsuzccrtel external
procedures and snap incoming llrks accordingly. --us tne
unsupported incorrinp link will be of the fort:
inter"ace Linkage pointer = Fas- address cf Target.lin:%
Jump to <Tarret>
NCte that (tINKPOC> is passed nct crly t:e
symbolic na-e "Tare t", but also all of (T-rqet' 's
parametirs. This implies that < KINK ''-OC " ust be a. ie to
pass tnese narameters to <Target) in accordance wit tne
67
. - .,,
. a. a. 1
,. , . . . ..a,. -,M. .
4.) • i %-+ . + ,.4 I l . . ,.. C ,d, II
.
C, l ,, : , + . , .. ,- . l- . ,
4.0, 6t.+' . .. €.
CC - - 41 4.
- 68
44+. . .. . . . .. . .. ..... + '': + .. .. '. ... : + ' ' . . l.. -" - - C t+ 6 . .. . II
conven~tions of the translator which -,r-)iled<re .
2. lirkir,- of' Data
'The sequencp' Of events to lirnk (the- unsti~pcrted
object)O <tata> to <Caller> would be quite sirrilar to 0,05e
linkin4 <TarP-et>. Assumn1I. <Data> tad not yet
referenced by the Executing proces.s, thne in)te rIFa C e TnodI lE
<II;"'2_ATA> would bhuild. an outg4oing link for Jrata) in
Caller.link and enter the symbolic narne "Data" in Caller.s!T.
(as <(INK CPROC> does for <Target>,).
The linker would then be inv-ked and, upon
determrinin,? <Data) to be nsuppOrted, Woc'l. -all
(TIJNK$DATJA>. (LINK$DA'TA> would cornstruct a linka,,e tatbe for
<Data>; however, the construction of ILata.lirA. woull be
trivial since it consist of only a linkpd list pointer ard. a
14inkap-e table size'entry (flipure E,. As will be 4iS:,SSez,
u nsupported objects cannot have multiple entry points;
therefore. (D~ata> does not reqlire a syrbtolic namE taY2.e.
Follcwing the construction of Data.link. the linker *ciId
snap the link between <rata> and ('CallerN. Thte s-ra-ped lir
in this situation would differ 5orewhat in that ornze
snapped, the link will be used by <LIN?LATA> to obtain the
virtual address of (Data>. (DTNK')DAA> c-OrrileteS the
reference to (Data> by returninp ('_ata> T virtt'al adadres s tc
(the pDoint of call) in (Caller>.
69
There are four major disadvanta.,es 'hen li-kin- in an
unsupported environment. Three of these represent violations
of desin criteria (as specified in Table 1) while the
fourth, t-e inability to implement multiple entry cints, is
considered a limitation in the flexitility associated with a
dynamic linking environment.
The first disadvantae is that unsup:orted linkin 7
results in excessive overhead for subsequent references to
an external object, as required by tne limited overread
criterion. This is a direct result of the fact that tne
interface module must be invoked for eacn external reference
to rerform those bookkeeping functions (surh as rranipulatinp
the interface linkage pointer) which in a sutoirted
environrrent are performed by the translated external
reference and the snapped link.
A second disadvantaie is that an external Lrocedure must
be linked before it can be passed to a sibroutine as a
parameter. This contradicts the delayed biLdine criterion.
Furt ermore, to pass an external procedure as a naraler
reaulres a third interface module. A third interface molule
is called for since <LINK$F?.OC> can cnly link ard irvoke
external procedures whereas to pass a procedure as a
parameter, it is necessary to have access to the procedure's
virtual address. (In the case of an external 1rccedure, it
70
is sufficient to .ass the virtual address of t = nroce~ure's
outaoing link vice the virtual addrecs of the external
procedure itself.) Therefore, the third interfa-e rrcdule
will snap the link (in violation of t-ie delayed tindin,
criterion) and return the virtual address of t.e external
procedure's outgoin, link to the point of call.
The third disadvantage involves a violation of the
syntactic compatability criterion for external data. Note
that the utilization of external data is limitel to a (PLiI
or P?/m) based variable structure since <'1INE$'SATA> can crly
return the virtual address (of the external data' tc the
point of call.
The final disadvantage is that multiple entry nolnt5
cannot be implemented in an unsupijorted cbject. Since t-e
(translator constructed) symbolic name table is necossar-, to
retain the entry name and entry pcirt associated with ar
access into an object, an unsupported object can only te
referenced at its conventional starting locaticr.
71
vI. ARI,;A L" O NHAN CE 76 YN. A. C L P"-' ItG
Even thoug-h care has been tai.en tc ievelcp a *ynarrI
linker which is not dependent on the availability of cprtain
hardware features, there are hardware cipabilities ,-i- are
desirable in a dynamic linking environment. Ir -enaral,
these features can be divided into two peneral catepories:
those which effect thp lesign of the lirker; and thcse which
impact on system performance.
It is emphasized that the followin discussicn is
presented with the idea that, if one is -oinF to include
dynamic lirkirn in a system and has a choice cf' prccessors,
one should loo for certain nardware features wnich are
desirable in a dynamic linking envircnment. This section
should not te viewed as a list of hardware support necessary
for the fPaslble implemertatlcn cf a dynamic linker.
A. EAPtWAF1 FEATUFFc AFFECTING LINKER ESICN
P.11 the hardware fpatures discussed in this section
dictate in some manner how certain functions of a iyniri
linker must be implemented. However, the first two features
discussed (viz., indirect aldressin, and a hardware fault on
Indiroction) are necessary to allow a linker to fully r-et
the design criteria of Table 1.
72
-- - ---
i. Hardware Indirection and Faults cn Indirerticn
For the rost part, it has teen assumed the linrker
was invoked (on tne first reference of an cbiect) via tne
initialized code of the outpoin link. However, the most
desirable rrethod of linker invocation roquires t'e processor
to provide two nardware features: (1i) The aility tc
reference data and call procedures using indirect addressing
through memory; and (2) the ability to generate a .ardware
fault during indirection.
leben a hardware fault on irdirecticn is available,
references to external objects are achieved via indIrectaddressing instructions where the final "target address (in
the indirection sequence) is stored in tne outpoing link of
the executing procedure's linkage table. The cutgcinT lrnk
is initialized to cause a fault (on indirectior' which
results in the invocation of the linker as the fault
nandler. The linker snaps the outgoing link ty altering- the
initialized fault-induciL.- code to either the virtual
address of the incomine link (for external procedure calls)
or the virtual address of the external data. (This
represents the method used in ultics [il].)
4ithout a fault on indirection, it is not apparent
how to pass external data as a parameter witnut first
snappine the link to the data. This represents a violation
of the delaye4 bindin critericn (of Tatle 1, because the
73
bindinp of a symbolic name to a virtual address nds been
performed prior to first reference. (Note that even thougn
tne external data is passed as a parameter, it may not
necessarily be referenced within the procedure. 15
2. Other Features Influencing Linker Implementation
There are certain hardware features which do not
restrict the implementation of a dynamic linker, tut uo
effect certain aspects of the linker design. Two hardware
features wtich are considered advantageous in a dynaric
linkln environment will be discussed.
The first feature relates to the number of se -;mrnts
available in a process address space. More specifically, if
there are adequate segments (and each segment is cf
reasonable size), then it may not be necessary to frequently
execute tne unlinking portion of a dynamic linker. (Note
that unlinkine is still necessary because segments deleted
from an address space shoul be unlinked.) This is
considered advantaeeous since unllnkine is considered one of
the more expensive furctions to execute. Note that if
unlin'ine is not implemented, segments can always be
conserved by oombininp smaller objects into a single seprent
and referencing each object via an entry point.
15 One is free to judge how much of a limitation theabsence of these two hardware features 9resents. Keover,the iuthor does not consider it very prohibitive.
74
j
The object cole producod ty t . trans'atcr is
subject to tr.e hardware features available. ir a dyrAic
linkinp environment, some hardware features tend to s1'-1i:'y
the obje-t code produced for an axterral referercp. Fcr
example, if hardware registers are automa tica 1';f saved bY
the procedure CALL and R'TURN conventions, t.en it is not
necessary for the object cole (durin- an ecternal pro £;,;rr
call) to explicitly save and reset the linkz -e zo nter.
possess an indirect addressing Cerl instructic- !,ut carn crly
perform
B. EA?L dAB --- TEATUZES AFFECTIiG SYST TV ?ECRP,.
There exist hardware cauabilities wnich Prnarce system
performance in a dynamic linkine environment. :tese
capabilities do not directly effect the desin cf the
linker; but, becavse of the requirements dnamic lin'r.ing
places on the operatine system (such as lyna8r-c
relocatability of code), the inclusion of certain .ard are
feitures serves to improve over~ll systcm perforranc=.
In a dynamic linking environment, cubroutines .re not
bound. to virtual addresses (in a process address spaiF)
until run time. Ther-fore, they must reside cn seccndery
storape in a relocatable form and be dynamically relocated
during process execution. Thus, tne more efficiently cod.e
can be relocated, the better system terforrance fviz..
execution speed) will be. This implies that hardware
75
relocatability of code is desiratle.
A second nard are capability which en.ances systeT
performance is hardware segmentation. Even though tne linker
design is not dependent on tne support of segmentation
hardware, rany of the attributes associated with pro.edure
and data objects (which are logical entities, or segmn rts),
are in fact intrinsic to sei-mentation. Tnese atribuT.
include object (unitue) idertifiers (viz., seFrrent nur1ers,
and object virtual addresses (viz., an object seirent rvrter
+ cffset). It is therefore reasonalle to corclude ttat
segr-entation hardware is desirable (but not essemntial) in a
dynaic linkine environment.
76
VII. A DEYONSTRATION ' F DYNAM1I L, KING
In order to support the design concepts of this thesis,
and, in a sense, prove the feasibility of ricrocorpluter
dynamic linking, a subset of the dynamic lirker oesign ,rnot
includin. unlinking) was impilemented on an Intel FOEC based
system. The F280 microprocessor [I,2] was selected brcaus= of
its lack of hardware support, a fact which supported tte
contentior that the linker design is hardware irdeperdent.
The implementation consisted of five rod ules: rl) a
process initialization module, (2) the dynaric lirker
rodule, (3) the address space manager, '4) a display linkage
table routine, and (5) a packape of system library routines.
Tree of these modules (process initialization, te dynamic
linker, and the address space mara-er) will be discussel in
detail. The display linkage table routine was ircluded ir
the implementation strintly to add clarity to tne
demorstraticn and will not be discussed in detail. (OCurce
listinps for the display linkape table routine and tre
system library routines are provided in appendix (B' for the
interested reader.)
The imple-entaticn of the dyra-ic linker ran on tt= C>i
operating system [21] . The hardware sr:pport inclided twn
elght inch floppy disk drives an! 55K of !air. m'crY.
Modules were written in l2/0-? r21 an compTiled urner ttF
7?
6hi
Is is-I I cpe ra tin syP s temr [19]
( It should be noted a t th is time tr a t tecal~se no
trarsiatr~r which su:)ported dyn~amic linkinp -was available,
test Dro era rrs were tand. crmpiled to prodiuce the necea5sary
o b.1e!,t, , , sya b o1i c n amre? tables, and I i nape tab le
templates. )
A . THE, '10DUIS CT T77 flYfA"IC LINKE--
t-~ tree mra or rrolul-s of' the lir'oer wcre t!'- 5rc-ss
initialization module, the (dynaric) linker nr.:l, tne
address srace mraaer. Zri-,1y, tl-ese' mo-le rf~Crm t -
±ollowinir functions:
?rocss Initialization is passed ttb- argurrr-rt ',r-:ar
nare' and nerfo rms ttne 4fol1low'LnF:
1. 7xtracts the rare o" the 'irczrar to be executpd f r c-the command line .
2. C aI'S e S t =- li rker mocd!,a ar t aEa ~r Ss s Sr arrina;?er to be irnitializgel.
.Causes tte addre,,- space mraerer tn e: e:r tner r or m i r thmo rocess atdr~ss space ar,' !2) loid th.eprofgram into meror ,.
4Causes the lirker module to build a lra tab-lo fortfie programr.
5. Pullds t12P interrupt hirlier. T-= interrur:t n r l: 1-is invoke 'by 1-iitilized. ortzoir. links a'.d, i ,-ninvokes thie llir.xer -odu Le.
6. Starts the pro,-ram ir exe-j:tj:m.
78
7. If thj, j1lSjlay to~pj' Was Set in _n c ,'7r'Jn Ii:C luss tC rc rr-s s r ef-e r, (-e t a bl n rc nr e, ia ,e
tbeto be displayed following coF--lEt4o.of:rre~ecut ion.
'The 11Icl'e r rc~u le is Jicvoke (y tht.e " a i It id 1 er~
with trh- a r nm e nt 5 'lirka .e poi.n ter' an -1 vm oli r ar re
offset' (in t r. e syrn o 1 ic nerre tatle an zerf or!' t~te
f ollowiro:
1. FErtracts the character string- n a 7e associate- Uwi trthie external reference f r c- tt callhir -gro-eturF, 'ssyrrbolic rame table.
2. Irvikes ti-e address space mA-na,:er peassin ac an.-irgument the sy "olir narre of the eyternal cbJe-t fto cerlinked ) .
3. uilds a lirkage table fOcr the eytcrr.zl co,'e- Unecessary)'.
4. Extracts the data 655ociatei wi tq t h.e e n ?,r- r iF-Cf9i -lad of tn e ex te rna 1 rEference) f'rcr tre Pyternalobje t 's symboli c nare table .
r.saps tne outvoinF' and (if required) incorir.i- lint's
6. Ce'ises the sn-1poed cutgoirng link to e oeouted byKreturninz the address of theo outpClr., lin' to theInterrupt handler. Tne izterrut t !,andler tn.er. jl;M~s to
teouteoirp link.
TeAddress Space tlana,-er c-onsists of t**o sulrodtles.
ASMtMakte Accpssatle is invoked witt the ar,:umrert 'sy!-,clic
name' (of an obje-t) and performs the followinF:
1. fetermines if the object is already i n the zro~pssaddress space.
79
2* Ifnot, loads tne obiec't into re-ory~~fr'~reloca t lor if th- objec t is exerr tabole cod- ea n --a !Esan erntri for tne objiect in tfle process referen~ce tabIle.
3* !eturns t o tte -oint of' call the uriqu- idmrti~iorand base address (viz., E'~ ita rs') o nobject .
ASiocvS~e is r oinvoke d with t - -r, C r t S y 7-C 1L C
nare -and perfcrrs the f ollow-mnp: 1 . exoves a n tiptfrom a process address spare ty 4 eletin,: tne clljict centry in the process referen-e tabl>.
rThe implementa Iion of eacn of taes= rotulec wil r1 ow b e
re vi ewd i n deta ilI. " i i 5-! s5 S Cn W, 1 1r-~ f"u
imolemrentat ion d- ta&Js di ct3 tel b-, tr - '~ r a-.ar JaA"
CP~operitin- s5ster- sv'-'port utiiizeI.
Qh linger 1 pe ren t aticr. was Cell &7yec and was
i nv olree t.:! ttre CP/Y r-and lin=
A .Fxec Prog--ra name c
"to fIrct fircticr. nf' -rcce-ss int l:ticr was tc scar
comrrari Line to deterrmine the nar of the 'cro,-ra7 l
Prog"am naime) to exeecuted. ChS W =-rr;d~ t-
PFA:1,CO~m3NrtLINF sulroutine- which, reead th- C--- I,) r toC
e xt ra ct the prr r ie . A i t i n a11y . I'th - as t
cflaracter of tte command lire wes 's' ( ,nioh 1s -j 17)na ,
tbe display to, -Pe was set teliinp -orcess ini tiali -,3t ior to
v; ~av nri oezro cecs referonc- tatl= a,-- ccr-tir- llr
80
ta'~le f'c~ Icw r t c 0le t i r a urc'rr-t
" COA,%LINE assi:-e for tne rrc ,' ? :'l ,'te=. .- n e c o tv r._ e ? . ef
16
Frocess nit'alization tne. calls n r, :c i, i -
a dres space mannd ii-e -ardi1iec re .c. .it.
(These twc subroutines are a a r t. 0t' their re se tI e
m odIfies and will te disc_ in d etai1 wi ,n the e nt
-oCul .
avi n i initialized the acress soemo 7an-er a
1 -.nker 7o 4U ' D ro e st z a......t rs
rnrr-, in th:, prccess edrass s-e =rj buls it i
tais. .' o Prorar is en ter- in te a irss 5 -e
allinp o, AS"YAK7'ACC7SSAZIE (tiassin r prczra_ rarra s
argiir-en t kF .VAKE ASC S IBT re t 1rr to ..ocess
i n t ialIz .io n t.L=F u i q ue i der. t if e r a , s e- .r -S
asstne2 to the proF'ram, lIt snould_. te ,oted tecause
t.-he 4'S . o rot z)rcvi .e ni 4 ware s O.=n icr, i .
necessary to utilize a unique identifier and tase aadress in
16 C1 /', utilizes a filet-.,ne fie1 t di-stir c ui rTnev -3ri. u,; ty, -s of f 1los ,co r . i s' s t rr a, . .. f ! t D s
utilize 1 the linker irpleent-.tion were C - file... .. u,,le code: e) cA - an. file; a
linkie 1p t .templat ftile; (4, - - is ofrelocatior. tits for - file.
81
da ce if tne object see;,ent rnurter. I'Process ini ti,-lzat!in
then c~ills on in e.:.try ;point into the linzk-r -c~u le (v iz.
t h. s u1 r o t in T LI N:-L GLWk3s J:N's Wo u i1s 1
linl--e table for th~ D-o.ram.
-Te next function of -orocecs i n it i la 1 Ltior is t 0
build the interrUpt v ec-t or . I t wais d e ,i ded toi i Iret he
1,lnkcr (w',-en snacpDin.7 a Iinkr) via a s rf tw are fa2ul. r:is
te ch n iq ve a 11o ,e d initialized out-oi.p li nr.5 toct
independent cf the linker address 'by rir cu~ Ct,-c i r F
1inic iump- (via a software fault) to a zpredeterr!L.ed lo-itior
W :,i ch.t te r invoked the linker. (--e software fpault 1.us =d -4e s
a n F:0 F 5T 4- iastruction which saves tne current execution
point on t he stark and juRrps to ttp irterrudst vector at
iccationrQF.
n he interrv',t vE Cto0r fi r st re o ve s the re t 1!In
idiress Dlaoe! or. the stack byv tne ?ScT 4 inst riction. This
address represents the aIddress it tte end cf t-- out,-cir,-
hnk; Tnn tie link is snneit is -'esired. to J*Vr;- to
thne be;-i rn ir~ p7cf t h, c u t Ic i rP lin (l t o roferercc t ce
e xt ernal1 oj ec t) Tne ne ct ins15t ruC t io0n of the interrrunt
ve-tor calls the link7er rcd'ule 3a sci nP t o i t t e lir.?:k P
pointer the P- ?-: an d C -ei- ist e r D a ir) a r ;'c rne o "ffse t(i
t sv7,bo-lic name tatle) of the entry for the o' ect to be
li-ked. Ch e symto)lic rame table of'fset is lcd~in the 1
82
an 7 r=,.7stp n pair V, the lniti l ize- uto . r' hr
the 11 r ke r mo,)dul1e has com,,1et ed execution it ret,'rn5 t ne
aldr;-5s ol* the o1ut:inz lin* to t::p intcrrurt vrtcr inthe
iard'dare H and L reg-ister pairY. The interrucpt vector tter
ucns a ny, ar.'umrerts initially p)assed (by the Ca11er ' to thle
extrna otect into tr'e Land 7, repister -)air and jrms t
pass ar?r.Trets or poirters to a list af artiurer ts t e t we -n
~xt -r nal o tj - ct s.
F i nally , process initilization loids the initial
Valuo of? the linka, ;e pcirter into tte E and C rer-ister pa ir
andi rvol-9 thne oropran to be e-xonuted. These two functions
are r- erforred bty the sulbroutir.- F"77CTE.
2. The Tlin;ker tlodule
T'-e linker rodule, wis initially written in a 4- -h
level inseudocode (appendt'x (A)) and tInEn tranclated into
?l/"-PO. This perm"itted in orderly ap.proa-t to the
implementation of tne dynamic linker moi.Telinker
mcrdu,~le consisted of five rajor sr:broutines and a -orntrol
routine. Tne logical relation between linker st<hrorutines is
Piven in fiour- 11".
A~s h~as been noted tne linker module (i.e.. ttF
control routine IINK-R) was invoked by the interruDt vector.
L I N K f irs t calls on ACCTSS$SYvIECLICNAm7B7,ATA si's
83
41 a
lit
it. I
z. 7
-- it* 84
ariu.rents the linkage poirnter and tne symb, lic narme 'f f cet
ACCESS SYIBOICtNAMtDAkTA u t ili z Ps the linkcaop Dointer to
a'~dress the linkage table of the ccl1in prc~edur,- (Whic
will be referred to as <Caller> ) and extracts tne address of
Callor.symr. The entry of the external refererce (viz.,
(TargetIFlntrv 01>) is then computed by adding the 5ymbolic
namne ofIfset to the addr--ss o?' Caller.sym.
ACCFSS SYMIOIIC$NAMFSDATA can now extract (from tn-e
symbolic raame table) the symbolic name "Target". the er Try
ramre "Ertry_ft1", the offset of <TargetIEntry _; ,1_s cuteoinz
link ( in Caller.link) , and <Tar,?et> s type (i e.-, ;rocedure
cr data ). will compDute the address
of (Tarfget En try_41>,'s ou tpoinp link (jty addine the outpo ine
link offset to the base of Caller.link). Next it will set
the CD/" filetvpe for <17arget"> (vi7., 'CO)M' for proce~rres
anrd "ElT A f or da t a i n the syrmbol i narre brffer. 'Thte
symbolic name tuffer stores tte filename ard filntype of tne
object being1 ln e d in -1 standardized fOrTma. Trhe
standardized forrrat is of t-e form 'FIIENA IIE .I TE"us
if (Tarpet", was a procedure, thte cimlolic name ti,,ffer would
contain tn- entry 'TA'R'!.-T.COmI'. )
1INFER can now call on the aadress space mdreager
(AS MAFACCFSSAFL7, to learn the seprent nurrben (i e. . t.ne
unique identifier ard base aadress) of <(Tareet>. Cnce 1IJK3.F
85
knows <rzt>'s sepmrret numiber data , it will invcke the
subroutine LINKAGETAB1E$CUTIN2S.
LIMFAGF TA-TVL OTINFS determines if' i 1irsape ta-ble
already exist for <"arpet> by cherkirng thle valid e nt ry b it
of the linkap-e address table entry.for <Targ-et. (Eecall
ttrit tie unique identifier of' an ob.ject is used- as a
subscript into the llrnka--e aldress taible to a-cess trne base
address of' the obCject s lin'rage tabCle .) If Taretlink 9 o Ps
rct exist, 1INKAGEtTA.BLFtr1QU'INFS will invoie
BTIt''OJEC$LINK to constr'u't a linkage tab.,le for <Tare et >
and will uipdate <Tarp-et>s entry in the lin.Kap- aidress
tale. Otherwise, 1INKAG~tTABLE'BOJTINES Merely returns a
pointer ( the paramieter JE~t1INKPB t o point to
Euurt.PF:ZCT#LINK first causes the address space
manaeer to enter ('Target>'s lirkage table ter-plate in tne
process address space. It does this I:' arpenrdine- to tr~e
pro -ran name (<Ta-pet>) the CPI'-! filetvy e cP 'Tv'P'. (--cr
exainle, if <Tarr-et> were a pro ,edvre, teie executatle coae
would exist in the file TKRET .^UO'wnle <Tar-et>'s terrDlate
is in the file '1APGFT.T,',P.) Once t-.e template is !cad,=, mrtc
remrory, FT!MLS'2OTJECT$1I NK f ir--t compirtes the addrecs of
Tarpet .sy-n.
86
Recall tnat for a procedure, the sytrboli- nare table
is appended to the end of the object code. Thus, tPe aress
of the symbolic name table for procedures is - orputed by
adding the offset of the symbolic name table (fmund in tne
template) to the base address of the object. For data, the
symbolic name table is a part of' the linkape table and its
address is computed bv adding the symbolic name table offset
to the data obje-t's linkage table base address.
YTI1D OBJECTSLINK tren enters te (rcouted)
symbolic name table address, the linkage table size, and the
body of the linkage table in the cortine linkage tae!ln as
Tareet.link. (The corbined linka-e table 'Aas a statically
aliorate 1K block of memcry.) TJIID t CBCTtLI N.K tnenremoves the template from the process address space
by invokcin A S MtPO7tY S "G (an address space mara-er
routine 17).
Now that Tarzet.link exist, the linker rodule can
find Tarpet.sym (via a nointer in Tar&pet.link's header and
17 The derision to build linkape tables in this manner was
driven by an effort to simulate the mechanisms which wouldoccur if hardware sogmentation were available-. Tc createTarpet.link in a semented system, it would be necessary toTake a copy of the (pure and sharable) template. Eowever, inthis imolementatior, since tne disk cony of a terplateremains *;:e, the ;rocess copy (as introduced,ly the addressspace rana.,er) could nave Iust a- ea ily served as t.elinkage table witf.eut recopvine it into tne rombired !LinLra-table. (Note that this approach would eliminate the neel fora statically allocated combined linkage tatle.)
8?
taccess tte data associated witn entry nare. Thp rutine
ACC'_SS$FN:-?YNAMEtLA A does this by searching Taret.syrr.
with tte ar?urner t "Bntry_#l'. Iecall that the syrrblic narre
table entry for an entry name includes the incoming" link
offsot and the entry pcin t (of Fntry_-tl into <Target>!. nus
by addino? the incoming" lin4 offset to the bas= address of
Tar,-et.link, the incomir., link address can be ccrtuted.
Aditionally, the entry point (offset) plus th= base addrnss
of <Tarpget) is the tarpet address referenced by the svrrtolic
nare "Taret!ntry_ l.
All the information necessary to snap the link is
now available and LINKER calls on tnr subroutine
SNAP$TFFtLINKS to perform this function. The final
subrcutine of the linker module is INITIAIIZESLINKER. which
is invokes by process initialization. INITIALIT7FLINKE"
initializes various pointers (used by the linker rmodule) and
the valid entry bits of the lnkage address table. It
returns to process initialization the address of INKS? (for
use in the interrupt vector), the address of the linkage
address table (which is passed as a narameter to the display
linkage table routine), and the base address of the cor-bined
linkage table (which is used in 7_'7CUTT to initialize tn.
linkage pointer).
88
.T d rpss pace Ia na,--r *,c -1
Fecause the C?/M opDeratIr system lackea any; me-o r;-
manaement executive, it was ne-essary for the addrss stiae
manazer to jerforw functions wnict would usually te prcvidea
by the operating systerr. Thus the address space ranaPer had
to be abl to load objects into free reerrrv and relocate
executable code. Th'ese functions were carried cut by the
subroutines L-CAI3O1ECT and RELCCATE res rect ively. The
implemertation of the two subroutines was extremely
primitive nrovidinp only tne minimum suprort necessary to
allow the irplementation of the remainder of tne address
space ranaper (and will not be discussed ir. any fvrtner
detail).
like the dynamic linker rmodule, the address space
manaeer was first written in jseurocode (apondix (A,) and
translated into Pl/M-EO. It centers around tbe manainm of
the process reference table which is im.plerented as an array
of structures of the form:
ProcessReerenceTable : ARRAY of S7.T7CTU?7S ofValid Mt : BOOIEAN;Name - A.RAY of CFP .ACTERS;lase addrecs : ArrESS;
END;
The va I _bi t field was set to 'valid if t he entry
89
represented an otject in tne process addrecs space. Tne rame
field containel the object name in standardized fcrm 'e....
CALLED.COm) while the tase address is the iccaticn (ir
rrerory) where the object was loadea. Note also that an
object's unique identifier represents an implied pro-ess
reference table field and corresponded to the subscript of
the object's entry in the process reference table.
rbo-en ASY$MA.KE$ACCEFSABE 15 invoked. it is nassed
the object name (in standard forr-, as an arprent.
ASMtMAKEtACCESSAILE first searches tie -rocess rfePr.nrc=
table to determine if <Tarpet> already Pas an entry
(implyinp (Target> is already ir t.e Drocess address spare).
If not, rCArsCB:EcT i! invoked to load <Tareet> into me>rry
returninz the base address of (Tarpet> to the roint of call.
ASMS-kTTS CC-SSABLE tnen enters <Target> in the process
reference table in the first free entry. The finel function
o? ASAS"KF$ACCESSABIE is to return thp base a4 dress and
uriqui Identifier (viz., the process reference tatle
subscript) o" <Target> to the point of call.
The subroutine ASMSPE.MOVFtSEG is passed ar obiect
r ama (in standard form) and delptes the obj ect frcrr thr
process address space by setting the object's valiebit in
the process reference table to 'invalid'.
9o
Irwo other subroutines inclvded in the address sece
Tranaper were DISPIA vPPT whiih displayed te .rccess
reference table (ard is not necessary in a dynamic lirker
implerentation) and INITIALIZE ASA1. IN ITI AIT TSAS M i5
invoked by process initialization (as is DI FIAYSP- T arn
in!tializes the valid-bits of the process reference table to
'invalid'. .dditionally it statically spts thp sie of t.e
process reference table (which was aroitrarily set tc ',
entries) and initializes a free merory cinter for t!e
IOAD C?:FCT subroutine.
91
B. F . TEST POG AcS
Two test prog-rams here ru, on t e dynami c li .rer. h
first. LDMO, computer and displayed (in nex adecirnal fcrrn
the ,ulttiplication andi addition tatles (with apoj-opriate
headers for t-e numbers from to 15. Th= seccnd test
prieram, SUr, added tae element- of an external data array
an,3 displayed tne result in headeciral forTe. T[/
demon trated all tne capabilities desired )f dynnmically
linked objects. SU5"; was included to provide a simDle exarrole
that will be explaired in detail.
1. Test Propram Construction
Before discussi np either test program fvrther, it is
useful to explaiL the mechanics used in their construction.
First, because a translator which supported dynamic lin!rin
was not available, it was nenessary tc hand assemble those
portions of tAe test prn.-rams unique to dyrarric lintrin4.
These included trarslaterd erternal references, syrbolic- nar-e
tables, and linra7e table templates 18. ll test crrar
source listinos and prograr test results are included in
appendix (C).
18 The test propra,-s, includini- templates sy-tolic nametables, and relocation bits (for executable co .i e werewritten in -E 0 assembly code and asserble4 us inr- theDigital esearcn c Assemb ler [17].
92
a. 'he Assembled Symbolic Name Table
The sjrbolic nare table of an obje-t :an be
found (in the source listlnS) at The end of either tie
oblect code (for procedures) or in the 1 i nkage table
temrplate (for data). Eacn entry in the symbolic name tib!p
consist of four field. For clarity. each field was preceaed
by a label. Entries were of the followire for:
7ESCr. : DE byte_ 19LINrn : D3 low _-yte, nien byteENTRYn : DB low-byte, highbyteNAMEn : DE 'C ECT NAvF:ENTEY NAmE' or 'ENTRY NAY2 "
DESCn renresents the entry descriptor (of t.e rtt symbolic
name table entry). The most sijnificant bit of yte
indicated the object type (viz., V for procedures and 1 for
data). The five least si#enificant bits of byte_l contained
the number of characters in the name field. Tht remaining
two bits of DESCn were unused.
IINKn is the offset of the entry's outsoir,- or
incorine link in tne parent object's linkage table. 20 T
E TRYn field is an entry point offset in the parent cbject
19DB is an assembler pseudo-operator that tells the
assembler that the rest of the line represents data. r'atanot surrounded by single quotes is translated as a rumericalvalue while data in auotes is an ASCII charact-r strin,.
20 In the S0eV, two byte values are stored in merory witt
the low yte in the lower numbered memory locaticn. Thus t11number 1M'2E would appear as 2.H, 10 wher. used in a :1field.
93
dssociated with some entry rame. For an ezternal reference,
low byte and high byte of this field were arbitrarily set to
zero .
Toe NA"En field neld tne syrbc ic rare
associated with tae entry. This field cor tar. einer an
entry name (e.g., FNTRY g), or the name of an external
reference (e.g., OBJECT NAME : EN TY AY E 7 o trE NA " ieId
of an external reference, the ENTFY_-AV, " porti n c s
optional. When left out, it imolies trat the entry name tc
be used is the same as the object name. 7or -- 1e, the
prccelure ",ILT has an entry point by th s n> rare but
appears as "MJLT" in LB[-C"s symbolic na.e table (vice
m'ILT : M'TLT ").
b. The Assembled Template
The linkaee table template was con5trrvctea a
assembled code. Templates were of the form:
SIZE : .B low_byte, high_byteSNT : DB lowbyte, highbyte
lOrY :B e , £, £C, C', , 2. T (in-orin , link'
DITSH -L ( c u tFc i nF l n
LXI D, symbolic _ name table offsetEST 4
The SIZE field contains !he nurber of bytes in
the template. SNT represents the off set (i.e., nl:rer of
bytos) of the syRbolic name table frcrm the begin:ing of
either a procedure spgmernt or a data se-;re-t '5 ter ulate.
94
T~e BOD v of a tem plate contains two types of
entries. For an incomini link, the template merely reserves
six bytes (initialized to 0) in the combined linkage table
In which the snapped incomine link will eventually be
placed. An outeoinp link consist cf three asserrtly code
instructions. hPte first instruction. (PUSH 11) saves tne
ariurent rezister (viz., the D and F repister pair) prior to
loadine that register with the synbclic nare table cffset cf
the external object to be linied. The third outoin , link
instruction (ST 4) causes a software fault resulting in tne
invocation of the linker via the interrupt vector.
c. Other Problems in Test Program Ccrstructicn
Because t.le FE i microprocessor does rot nave an
indirect addressing CALL instruction, tne transfer of
control to an outgoir.F link (bt the executin- orocedvre)
deserves explanation. Recall that it is desired tc perfcri
tne following:
CALL (Lp + outsoinp_ link offset)
To achieve t.his in =OE2 code, tne foilowirg sequence of
instructions was used:
P'DTFH ?IXI H, return address
1'I H, outgoing link ffset
'DCFT
return address : P'l n
95
AD-A092 404 NAVAL POSTGRADUATE SCHOOL MONTEREY CA FIG 9/2DYNAMIC LINKING IN A MICROCOMPUTER ENVIRONMENT.(U)
UCLASIE SEP 80 6 8 BLANTONFUCLASSIFIED NL
~3MEEOMOEEmoons.IIIl* **//l***/**ulllluum
-El--II
The first instruction (PUSH 3) saves tne linkage
pointer. The next two instructions save tae return address
(which is normally done automatically by a CALL
instruction). The H and I repister pair is then loaded with
the outgoinglink offset and added to the I and C repister
pair (viz., the linkage pointer) by the DAL B instruction.
DAD B adds the I and C reristers to the H and 1 repisters
and leaves the result in the H and I registers. The value
'Lp + out-oin- link offset' is in now jumped to by the PCHI
instruction (which transfers control to tne address stored
in the H and L reeisters). The final instruction (POF -E
restores the linkage pointer upon return fror the external
procedure.
Very briefly, a relocation bits file was
constructed by hand and was of the following form:
SIZE : D? lowbyte, highbyte
n1c'e : D3 binarynumber_l, binarynumber_2
The S17E field represents the number of bytes in the
relocation bits file. The remainder (of the filel consisted
of two binary numbers preceded by a label sucn as I0IlO
(where eI££ corresponds to an address in the procedure
object code listinR). A '0' in a binary number corresponds
to a non-relocatable byte of object code. A '1' identifies
the byte as the first of a two byte relocatable address.
96
2. The Test Proeram DE'10
The address space of DEMO included four otjeots: (1)
the procedure see-ment rEmO(nstration); (2) tne procedure
segment MFTIT(iply) which included the entry point ',"UIT';
(3) the procedure segment DISPLY which included the entry
points 'HEXVALUE' and "SUFFER.; (4) and the data setrent
HEADE? which included thie entry points HEAER and "TIT?'.
As has been noted, ErO computed and displayed the
(hexidecimal) multiplication and addition tables for the
values e through 15. The construction of each table *,as
performed by the internal (to DEMO) procedure luildtable
which is passed a subroutine as a parameter (viz., Ar, an
internal procedure, and MULT, an external prc :ediire. ADD
and MULT are passed (by Build table) a nurber tnat is
added/multiplied by 0 tnrougn 15. The result of the
computation is displayed by invoking the external iprocedure
DISPLY. H3XVALUE. Thus to build a hexadecimal table
Build-table simply invokes either ADr or 1IULT sixteer times
passing as a parameter tne values from 0 to 15.
Before buildlin a table. DFO displays an
appropriate heading. It does this by dynamicallv linkir" to
the data serment FEADER, inserting tne appropriate title
(viz., MT LTILICATION or ADDITION) at the entry point
HEA:ZER.TITLE, and then displayinj HEADER by passinp it as an
97
9arRurrent to the external procedure rISPLY.EUFFFR.
The dynamic linking which takes place durine the
execution of tEMO is given in figure 14. EEVO includes
examples of all the various capabilities (of external
objects) desired in a dynamic linking environment including:
(1) The ability to dynamically link and execute externalprocedvres--DEMO dynamically links to and invokes LISPLY.
(2) The ability to reference external data--DE'IO links toand references HEAER.
(3) The ability to pass external objects asarguments--HEArER and ,MULT are passed to DISPLY and3uild table respectively.
(4) The ability of an external object to enpaRe in dynamiclinking--MULT dynamically links to DISPLY.EEXVALUE.
(5) The Implementation of entry points in objects--DISPLYand FEALE? both are referenced via entry points.
3. The Test Program SUM
The procedure SUM was included to allow a corplete
and comprehensive discussion of the concepts presented in
this thesis. SUM itself is rather simple. It dyn.amically
links to the external data segment ARRAv and sums the (data)
bytes of ARRkY. The results are displayed by dynamically
linkirg to DISDL!.HEX VAlUE (passing the sum cf ARP.AT 's
bytes as an argument). DISPLY.BUFFEP is also invoke to
display appropriate messages along with the computation
result.
98
.
4==T :i ply) mc i
DYNAMIC LINKING IN LEMO
I I '!TREF 14
99
A pseudocode lis5inz of SUM is riven in fizure 15
while figure 16 presents a representative assembly code
translation of SUM. The assembly code used is not associated
with any particular microprocessor, but is considered within
the capabilities of most microprocessor instruction sets.
The only instruction used which may cause confusion is
LDPARAM (viz., load parameter register). This instruction is
simply a register load but the pneumonic IEFARAM is offered
to signify the passing of arguments to an external
procedure. (Note that the dynamic lincer demonstration
implementation uses the D and E register pair for tnis
purpose.)
The combined linkare table for SU" is snown in
firure 17. (The figure does not include ARRAY.link or a link
for DISFLV.BTJFFER). The linkage table for SUM ircludes an
incoming link (entry #1) which would be used if SUM were
referenced as an external object. Entry #2 is tne outgoing
link from SU" to ARRAY wnile Entry #Z retresents tne
outpoinp link from STUM to DISPLY.HEX VALUE.
When the two outpoin, links of SUM are cnepped, the
unlinkinz data is included in the snapped link and incli des
the symbolic name table offset of A-PRA v and DIr1Pv.FEX 7tPLUE
(in SIUTM.syM) respectively and the appropriate linked list
pointers. ;nlinking linked lists are implemented as rircular
linked list. Thus the linked list for DISPLY startinF with
100
PROCEDT UE Sum;
/ Sum adds the bytes of the external data strurture'Array' and then calls on tfhe external procedure"risply" to output the result. 41/
DECLARE Sum ENTRY POINT;Array LATA EYTEIRNAI;Disply PROCECUiE EXTERNAL;
result : BYTE;arraypointer : POINTER:data array PASEr at arraypointer STRUCTURE of
number_of_bytes : !YTF;data : ARRAY of ?YTES;END;
i : BYTE;
/; end of declarations */
arraypointer = address cf array;result =C
FOR i 1 1 to data array.number of bytes;result = result + data array.data (i);
CAIL disply.buffer ('The sum of the data array isCALL disply.hex-buffer (result);
/' generate a carriage return and line fped m/
CAlL disply.bufffer (CP , IF, '2;CALL disply.buffer ('Erd of Sum','&');
END Sum,
PsnrUomor icR sU,,
FIGTPE 1I
101
.6.6 6.L ~
All 4)46
-6 IA-
6466%.I .4 4 6- -4'l %. 4.
6 4* 466
41 6' - 66 6 -444- 6 6 .6646 *.64
6...'~ 3. 4, 40 vv-.~,... 64 =..60.. - vi ... q. Ow 6
.4.46~ ~~ ~~ 4. 4 .S l* 6.6. 6.46~.6 6) 4 C 44.4 0.64.
7-3 6 4'U.444
-~ ~~~~ 0."~ , 4 66.4 .. .
*~~~4. 4.4.. .1 4 6 ..- 4 444, -. ~ I , .V.~ 4.664.64. 4~4 ,.e.N-. 6.4 ,.
4, ~LJ 6 4, 4. &.~4 I *. .~O4 6~671026-
.3j
ict
A43 C-3
r- F 4
w, 11 4
4, 4, 4, l 1>,1 1, 4 3. .
--- -- -- ----------
1 3). 4 .C
the header entry (in DISPIY.link) poes from offset 17F to
eCH (the snapped outpoinp link frofr SU 1 to
DISPIY.HEYVALUE). The linked list pointer at 7: (in
SUM.link) points to DISFIY's linkave address tatle entry
which in turn points to DISPIY.link viz., DISIv.link's
header which contains the first node of rISPTT'F linked
list).
The assembly code for SUM, ARRAY, ani DISFIY is
included in appendix (C) along with the output reneratee by
SUM, the process reference table, and the combined lin'cace
table also. The process reference table and combined lirkage
table are annotated to provide additional clarification.
4. Observations on the Implementation
a. Size of the Dynamic linker Implerentation
The dynamic linker includine the display linkaae
table and display process reference table routines was &3 ;
bytes in length. This includes 1K bytes of memory statically
allocated to the combined linkape table and 159 bytes
reserved for the hardware stack. (It should be noted that
additional memory was allocated to the PL/--F stack sesrrpnt
to prevent stack overflow iurin test prcprar execution.
This was necessary since the PL/M-eO stack is allocated
based on the needs of the dynamic linker and does not take
into account stack operations done by other procedures in a
process.) It is emphasized tha-t no effort was rrake to
104
wl
optimize the object code. Instead, the dynamic linker was
written to be as clear and obvious as possible.
The dynamic linker was also compiled without the
display linkage table and display process reference table
routines (which were included for the purposes of the
demonstration only). This edition of tne linker was 6272
bytes in length. It is estimated that a corplete (i.e.,
including unlinking) and optimized implerrertaticn of the
dynamic linker should require about 71eZ bytes of otjezt
code. It is noted that error conditions were not hcked for
by the dynamic linker. However, since there are essentially
only two error conditions which could occur, it is felt that
the size estimate for a dynamic linker is still valid. The
error conditions which may occur are (I) a reference is made
to a non-existant entry point (References to non-existart
files are flapged by the library routines.), and (2) Tne
statically allocated 1K combined linkage table is
overflowed. Sucz problems as running out of free renory or
process reference table entries are handled by the unlinker.
b. Overnead Associated with Snapped Lintrs
One of the major arguments aeain5t dynamic
linking is the issue of overhead associated with snapped
links. Before debating this must tesue, it is observed that
the cost cf dynamic linking! associated with snapping a link
(i.e., the first reference of an external object) is on tne
105
.. . . . . ... " " ' .. . .. . " .. .. . -- , ,, .... ..L -.. . .
order of the cverhpad required to statically link the sare
objec t .
Witn respect to snapped procedure links, tnP
overhead (associated wit. the linker implementation) lies in
two areas. First, the linkage pointer must be updatei tc
always indicate the executing procedure's linkape tatle.
Thus the linkage pointer must be saved and restored for eact
external procedure reference, which requires an additional
two instructions. Additionally the linkage pointer is set tc
point to the (dynamically linced) external procedpre ty tne
snapped incoming link, which requires a ttird irstruction.
Secondly, the execution point roes from tt.e calln
procedure tc tae external procedure via the snapped outivoin
and incoming links. This requires two jump instructions not
needed for internal procedure calls thereby brinpinp, the
total overhead to five instructions. It is noted tnat tne
extensive code necessary in invoke an external objert's
outgoln p link is considered a limitation cf tne FO-
(because of the lack of an FeEC indirect call instruction'
and is not considered overhead induced by dynarric linkinr.
Recall tnat to reference external data (via tre
outzoinp link) a call to the outpoinp link is rerforred, the
virtual address of the data is loaded in a pointer, and a
return instruction (to the callin, procedure) is executed.
Since internal data is essentially referenced by lcadir, a
106
.1
pointer with tbe address of tne (interr.al ) data, the
overhead associated with dynamic linking (for data) is
1ipited to -a CkLL and RETURN instruction;.
107
VIII. CON CLUSI ONS
Based on the research supported in this thesis it is
reasonable to assert that dynamic lincing is feasible in a
microcomputer environment. However, given that the lirker
design is implementable on microprocessors. it can be
asserted that dynamic linking does not require the sunpcrt
of specialized hardware and thus nan be feasibly im-lemented
on most general purpose computers (including minicomputers
and main frames). The overhead is within reason and can be
far outweighed by the derived benefits. It has teen iIpite
(9, 13, 141 that dynamic linking requires the support of
specialized hardware. It is felt that the irajor contribution
of this thesis is to dispell that notion.
108
LA
APPENDIX A - PSEUDOCODE
EXECUTIWE linker;
Explanation of variables and constants
Enl-uffer - The entry name buffer is a strirg variablewhere the entry name associated with an externalreference is stored once the entry name has beenextracted from the callinp procedure's symbolic nametable.
Fixed_ n_offset - The fixed symbolic nare cffset is aconstant which represents the number of bytes inthat portion of a symbolic name table entry thatdoes not vary in size (i.e., the descriptor, linkoffset, and entry point).
Free link table - The free linkage table variable isthe next free location in the combined lirkage tablewhere new (object) linlape tables :an beconstructed.
In-link address - The incominp link address ib .hevirtual address of the incoming link for the<external plrocedurelentryname,> beirg linked.
IncorinR link - The incoming link structure representsthe format of an incoming link. Incoming link isbased at the incomino link address.
linkageptr - The linkage pointer.
Linkagearray - Linkage array is a linkage tablestructure based at the linkage pointer.
New linkDtr - The new linkage poirter is assigned tnevalue of the linkape pointer of the external objectbeing linked.
New link_ table - The new linkage table is a linkagetable structure (of the external object bep-inlinked) based at the new linkage pointer.
Object sep number - Object sepment nuber is thesegment number assigned to the external otject beinVlinked.
109
! lm
Objecttype - Object type represents uhether theexternal object begin linked is a procedure or data.
Out link address - The outgoing link address is ttevirtual address of the outpoing link assiprned to the<externalobject entryname> being linked.
OutpoinR link - The outroinz link based at theoutgoiig link address.
Sn-buffer - The symbolic name buffer is a stringvariable where the symbolic name of the externalreference is stored once the symbolic name has teenextracted from the calling procedure's symbolic nametable.
Sn address - The symbolic name address is a pointerinto a symbolic name table.
Snitem - A symbolic name item is a structure based atthe symbolic name address and represents an entry ina symbolic name table.
Sn offset - The symbolic name offset is toe parameterpassed the linker and is the offset into tne callingprocedure's symbolic name table of the externalreference to be linked.
Sn size - The symbolic name size is the number ofcharacter in an <external referencelentry-narre' asfound in a symbolic name table entry.
Sn size mask - The symbolic name size mask is used toextract the size of a symbolic name from adescriptor in tqe symbolic name table of the callingprocedure.
Sn typemask - The symbolic type mask extracts tnetype of an external reference (i.e., procedurp ordata) from the descriptor.
Targetaddress - The target address is the ultimatevirtual address in an external object which thecallinR procedure seeks to reference.
110
Template seg number- The template segrert nurbar isthe seoeRPet number assipned to the liniare tabletemplate wflen it is entered in a process addressSpace.
Template - Template is a linkage table templatestructure based at template segment number.
Type data - Type data is a constant which is used toidentify external data objects.
Typeprocedure - Type identifies external procedureprocedure objects.
/* end of variable explanations =/
/* explanation of declaration types */
ADDRESS - a virtual address.BYTF - the contents of a virtual address.CHARACTER - an ASCII cnaracter.INTEGER - a variable.POINTER - an address variable which points to a
user dafined data structure.STRUCTURE - a Pascal record.
/* end of explanation of declaration types -/
111
/1 The followinp is a list of variable and -onstant
declarations used In the linker. '/
DECLAzE
En buffer : STRUCTUFE ofsize : INTEGER;naire : ARRAY of CHARACTERS;END;
Fixed Sn offset : INTEGER CONSTANT;Freelink_table : ADDRFSS;
Inlink-address : POINTEP;Ir -ominglink : STRUCTUPE BASED at In lirK-address of
Linksnapped_bit : BYTE;Load_Lp : INTEGER;Juirp_inst : INTEGIR;END;
Linageptr : POINTEF;linkage_array : STRUCTU7RE BASED at Linkage ptr of
Size : INTEGER;Snt address : Ar'RSc;Body : APRAY of IYTE;END;
LIrkageaddresstable : ARRAY of ADDrEESS;
New link_ptr : POINTE?;New linktable : STRUCTURE BASED at New-linkptr of
Size : INTEGER;Snt address : ADDRESS;Body : ARRAY of BYTE;END;
Object seR number : ADDRESS;
Object-type : BYTE;
Out link address : POINTER;Outroln-link : ARRAY of INTEGR
BASED at OutlinK_address;
Snbuffer : STRUCTURE ofsize : INTEGER;narre : ARRAY of CHARACTERS;END;
112
Sn address : POINTER;Snitem : STRUCTURE BASED at Sn address of
descriptor : BYTE;name : ARRAY of CHARACTERS;link-offset : INTEGEF;entrypoint : INTEGER;END;
Sn offset : INTEGER;Sn size : INTEGER;Sn size mask : BYTE CONSTANT;Sn-type mast : BYTE CCNSTANT;
'"areet-address : ADDRESS;
Templateseanumber : POINTER;Template : STRUCTURE ZASED at Templatesegnumber of
Size : INTEGER;Snt offset : INTEGER;Bodv : ARRAY of BYTE;END;
Type-data : BYTE CONSTANT;Typeprocedure : BYTE CONSTANT;
END of DECLARATIONS;
113
/* linker Control m~odule /
BEGIN
/* Save processor registers if necessary Ix/
CALL Access_Symbolic Namne Data;PARAETE-11S :Sn offset, Snbuffer, En buffer.
LIT:Linkaee _pointer;
iVELURN LIST : Sn address, En buffer, Sr buffer,Objecttype, Cut link address;
/* ASM " Make Accessable calls on the Address Space Manaperto Gidd tffe object found in Sn - uffer.narre to tteprocess address space and return tne segmentnumrber assit-ned to that object. ~
CALL ASMMake Accessatle;FAAMETEP LIST : Sn buffer.narePETURN-LI3tI : Objec-t seg- number;
CALL LinkageTable Routines;PARAMETER-LIST Object set number, Link -address table,
Free link table, New link_ntr;RET1P.N LIST :New -link-ptr, link address tablp,
Free-link table;
CALL AccessEntryNameData;PARAM7713?P-LIST : Sn addressI En buffer, New link ptr,
Objec t type, Object se, nurrber;
RET"TN-LS : Target address, In link address;
CALL Snap the Links;PARA:AETERLIST : In link address, Out-link address.
New link ptr, Ob~ecttyre,Target address;
RETUP.N LIST. : None;
/~restore processor rezisters if' necessary ~
JUMP to Out link address;
END Lin'ter;
114
AccessSymbolicNameData performs the following furctions:
1. Obtains the address of the symbolic name of t!'eexternal reference teing linked.
2. Loads the symbolic name of the external referencein the symbolic name buffer (SnBuffer).
3. Loads the entry name of the external referencein the entry name buffer (n_biffer).
4. Computes the outgoing link address and determineswhether the exterral olject is a procedure or data.
PROCEDIRE Access SyrbolicNameData;
PARAMETER LIST : Sn offset, Sn buffer, En buffer,Linkagepointer;
DECLARE i, temp : INTEGER;
Sn address = Linkagearray.Snt_address + Sn offset;Sn size = Sn item.size AND Sn size mask;
/* Load the symtolic name into Sntuffer.name. 4/
i =1;DO WHILE (Sn item.name(i) <> ':') AND (i == "n size ';
Fn buffe.name(i) = Sn-item.name(i);i = i + i;
ENrEILE;
/* load symbolic name size into Sn buffer.size. '
IF i = Sn size THN Sn-buffer.size = iEISE Sn buffer.size = (i-1;
115
/'* load the antry name buffer witb thi- entry nare. ~
IF i = Sn size 'HEN BEGIN
/11 No entry nar~e specified, default to thesymbolic namne cis tne entry name. ~
7n buffer.size =Sr size;FCF i = I to Sn size by r oEn ',uffer.nar(i) = Fn iter-.name(l);
:N DT F.EN;
ELSE BEGIN~ /* entry name specified -v/temp ii = i+ 1;
/* load size of entry name in 3n biuffer.size ~
En Buffer.size = Sn sizp - i
/N load entry name into entry name buffer xl/
DO WHILE (i <= Sn size)E-n Euffer.namE(i - termp) = Sn-lterr.namre(i);i = i + 1;
END H IL E;
FNDEISF;
/* Compute the address of the outgoing lit'< anddetermine the type (proc:edure or data. of thIeexternal otject. /
Out link address = Linkage poirter +S" iter. link o ffset;
O!tJect-type = !n-item .descriptor AND Sntyeask;
RETU'RN LIST : Sn address, El-n_ uffer, Sn bvffer.Otject type, Out link adlrecs;
END Access SymbolicNamre Data;
116
Linkaze Table 'outi nes performs Vie followin6 fur-:tlors:
1. tetermines if a linkape table aireiiy exist for 0,eexternal reference bein&- lin;.ea.
a. If not, LirkageTalhe -Routines initialized theLinkage Address Table value for tne object andthen calls on Build Objpct.link.
b. If so, Linka-ve Table Routines sets a returnparameter (New link ptr) equal to the 1in1racep)ointer value For tte new object's linkage table.
P.OCEDUPE linkage Teble Routines;
PARAMETER-LIST Object sep numrber, Link _aiAresstable,Free link table, New link ptr;
IF Link address table (Obje-tsegr.umb'r) = nil TFENX
/YA This Is the first time the object has teenreferenced by the process and thie linker mrustbuild a lirkap-e table for the object. /
33GINLink address table (Obiect-seg-urber)
Free Iink ta ble;CALL Build lbject.link;
PAR&METER LIST :Objecttype, Free _lirk-tablm,Sn buffer, Oblect-sep-nirter;
PETURN LIST : New _link ptr, Free link table;
ENrTFEN;
ELS E
/';- The object already has a lin~age table. ~
Ne liptr = Link-addresstatle (Object sej F ute)
RETURN LIST : New-liniiptr, Link addr'ess table,Free link table,
ENDlLinkageTable l'outines;
117
"uildOject link performs trlie following fvnctiorn-:
1. Causes the Address Spice ' inaper to load tte externalobject's linkage table template into the processaddress space.
2. Initializes a return parameter (New 1 ink ptr! to thevalue of the object's linkaoge pointer.
3. Appends Object.link to the end of' the corrtined lin-kagetable.
4. Deletes the lirkage table template fromr tn.e proc -ssaddress space.
*971 */r2 " --. ; rcXX 1 l) Y el X 1)1;: I .2. -
PROCEDURE BuildObject.link;
PAPAMETER LI ST : Cbjecttrpe, Free 1ink table, S:: tu'ffer,Objec tsegnum-ber;
rECLAPF i : INTFGEF;
/* '"he followirg two steps cause Sn luffer.ra-o to beloaded with the filenamre <syrr.boli:! narre.terrplate>and then invokes the Adciress Space rarnaper to navethe teirTplate loaded into the process adi~ress slpace(with ASM Make Accessable returni~g the seerentnumber assigned to tfle template. 'c
APPENJD 'template' to Sn buffer.naie;CALL AWt4make Accessabl;;
PA'*AMEqT:-; LIFT :Sn buff'er.namre;MEURNLI§'T Template -sep nurrber;
New link ptr = Free-link table;
IF Object type =Type procedure THEN BEGI'J
/* If the object is a pricedilre, then its sy'rtolicname table is in thie object code seo~;rent. '*i
New 11 nk table.Snt address =Ternplate.Snt offset+Otject seg !'umber;
E NDT FEN;
118
FLSF 1EITIN
/~If the otject is data, then Its syritolic riarretable Is in its temrplate. /
New link table.Snt _address = New -link ptr +
"'ernPlate .Snt offset;rNDFLSE;
New-lirAk tatle.Size = Template.Size;
FOR I 0 to (Template-Size -2) by 1 roNew -linic-table.Pody (il Temnplate.Boly (i);
EN DFO ;
Free link-table =Free-link table + 1 +Template .Size;
CALL ASM RemnoveSeg;PARAMETEP LIST Snbuffer.nare;RETuPN LIST :None;
RETURN LIST : New link ~ptr, Free link-table;
END BuildObject.link;
119
AccessEntry Name Data performs the followin4? furctiors:
1. Computes the tarpet address in the external otject tobe utilized in thie linkage process.
2. Computes the incoring link address (if' applicatle).
PROCEDUFE AccessEntryNameData;
PADAtMETER LIST : Sr address, En buffer, New lin'r_Dtr,Object type, Object sep ni~n-ter;
/* Get Next Sn itemr causes Sn address to -.cirt tc t~enext eatry -in the external objects Sym'bolic NareTable. ;c
PROCED TT"RE. Get_ Next Sr item (Sn address);Sn-address =Sn-address + Fixed 'Sn offset
-(Sn - tem.descriptor ANL Sn size _masic);REIURN Sn address;
ENr Get Next Sn iterm
/;: Pegin Access-EntryName_ ata. ~
Sn address = New_ link table.Snt addr-ess;
DO WHIIE Sn itpm.narne 0> En buf'fer.narne;CALL Get Next Sn item;
Marget address = Object sep number -Sn iterr.entrvycit
IF Object type = Type procediire THFNIn link address = New_ link ptr -Sn_ itP7.lir offset;
RETURN LIST : Tareet address, In_ link-address;
ENJD Access EntryName Data;
1.20
Srap_ tte_Lit.r perf'orms5 tf'e following fvnc-tion:
I. S nips t he cu teoi np, li .k i nd incoi ng 11ink f or aDrocedAure object.
2. Snaps thp out-going.- link for a data olie(-t.
1POCEDTJE -Crap_ tne I in k s
PARA~zTER LIST In-lin4-aidress, Out link _adiress,New link Dtr * Object...zve,argetaddress;
IF Ct ject type =Type procedure K7EN !Ec-IN
/ Snap a link fPor an external procedure. ~
Outgoiaelink (0) = 'urrD to' In linz address;
IF Incominp link.link_ snapped bit is unsrappe TEENBEGIN
Incomre nlink.Load ID 'Load Lp' New link ptr;Incoinelin.Jumins = Juflp to'I Tareet aaaressI
,FNDTHFN;ENrT~j;
ELSE BEGIN
/- - Snap a link for external date. -
Outgoinp-lirk (0) = 'load pointer' Tariget _address;-IN o~n lik , 'Return inst-uctlonr;
lNrELSE;
END Snap the-Links;
121
EXECUTIVE Addres5 Space Mara~er;
Explanation of variabies
?RT-size - The size of the process reference tatle.
Se,--nurrber - The s e me nt number assi~rned to a n.m'4yloaded object by the procedure load Object.
P?'r - The process reference table.
/* end of variable explanation I,/
/* The followiag is a list of~ variable and constant
declaration used in the Address Space 1,ana~zer. '7/
DECLARE
PFT size :INTEGER;Spg-Number ADD?:ESS:
PT :ARRAY of' STRUCTURES ofValid bit BOOL0IEAN;Namie :APRA' of CHAPACTE.S;Sep number :ADDRESS;END;
END of' DECLARATIONS;
122
ASM Iake Accessable rerforrs the following functions:
i. retermines if the object passed as an artements isalready in tne process reference table (i.e., isalready in the process address spaee).
2. If not, loads the object into me. o-y at the r.extavailable memory location and utdates the FrocessReference Table (PRT).
3. Returns to the point of call the.sagmen't rumterassigned to the object.
PROCEDURE ASMMakeAcessable;
PARAMETERIST : Objectname;
DECLARE i : INTEGER;found : FOOLEAN;
i = 1;
found = false;
/* check to see if Objectname is in the PRT -/
DO WHIIF NOT found AND i <= PRT size;
IF PPT(i).valid bit = valid TEEN BEGINIF PPT(i).nare = Objeet_nare
THEN found = true;ESE I = i +
ENDTHEN;
ENrV'HIIF;
123
IF N1OT f'ound TFEN BEGIN
/* fijnd a ffree PTPT en~try ~
i= 1;DO WFIIE PET(i).vlid..bit =valid;
i = i + 1ENDWEILE;
CALL Load object;PARAMETER LIST : Object..nare;RETURN-LIST : Seg..Nurnber;
P7r1i).name =ObjectName;PRT(i).se-..flurnber Sep-Nurrber;PPT(i).valid..bit =valid;
ENUT PEN;
FETURN LIST : PRT(i).seg,,number;
END ASM-Mace-Accessable;
124
ASMRemoveSeg performs the following functions
1. Removes an object from a process a~dress space.
PPOCEDITRE ASMRemoveSeg;
PARAMETER IIST : Objectname;
rECLARE i : INTEGER;found : POOLEAN;
/* find Objectname in thie process reference table (PRT) "/
i =I;found = false;
O WHILE NOT found AND i <= PET size;
IF FRT(i).nare = Object-nameTHEN found = true;
ELSE i = i + 1;
ENDWHIIE;
/: remove the object from the PRT */
PRT(i).valid bit = invalid;
RETURNLIST : none;
END ASM_'emoveseg;
125
APPENDIX B -DEVIONSTRATION SOURCE LISTBlGS
'-4
t14
04
E-
4E-4
ou 0
E--
-E
p 4 14 -n
"PA% %
-4 -4 % -4 M
o c. 0)U)U V4.. (- *eWI
E-4 A* U) C-4 a PC PA Art.~ - 4 E- '~ -0Co ;A4 Z-()e 1-4- P
Zia o- CE- *. CA PQ =-4 PQ) 04 U) 4N 0 o- &-4 z..) CA CA.S- u-E 4-vs-4 M)4^5 AA .14.. X-4 : V) Eq " E = -4 -e ~04 4 = E-4" E-- m
X:4 IA* .4 0-- 0 m*5. w qC. 00C)-4W:-0 z Pw 4 0 1- *1 P-4 $4C E- P4i tf4 ~ P.P.U4C:z
U)~ ~~~~ F4W2' U C ) i
0 P4.. .14 dog)~i~5.04 -j
o ) UZP4 0i o. .4.E4FC4~ )
0-4 p ep** G-. A2-;.
P.4 (1) bd
P-44~04 4
0 0
1126
' IN
***** E-* * C.*
re
E- * -CJ -
pq 4L
6= 1- =- L
"MMt E 1-4 Aft fE pqUPA ~~ ~ ~ U-' 0 E-4 Cl-9 u 0 -E-~~ ~ ~ 49 P4 PkNv ; ) Z
Z~~~ ~ ~ - l:: .4-A aC E -
E- ~ ~~ ~ ~ ~ 4-4 * 13:p qA Il,.W ) EU. C.) P4 P44 -4 E - n04P 0
04- r4~ *- t/) E- -A a=)u -tn rq& M0 wp4 0-4 C.>,-0-4~U p:: 6- .. Cn. f 9E4 6 qQ1
14 P. =) %; M =) =)* P- P414 p -
E- A =I- M = Va44 " U-. *4 N 4 0 * 04 aE4 - . W4 -. 4/-V P4 4E . V'I U-
1- ) to. 1-4 '4S 2-4 E" F ; U-C W W -4 A- W~ /4 1-4
o :. C.3 "e P4 0~c A z m r- V44 A- ME P4 Aq1vi Z- z .in4: 0 -4e- -4 W). U. 4 A-4 ai b- q
CA 6- PF1F3 :=,- AQ 0 = .-) PL 6- U -4 "CA pq- w 4- * 4 U)A 1.4 C
,- 0-~u nc~-il -0 -4 -4 t. PL.£).4~~~~~~- P-) C-4-A 4 '*
w-4 ~ ~ ~ I 4 .1 ~1.4 la.
U-' ~ ~ ~ ~ ~ ~ ~ ~ r JbE"~l~-~~ ~ . 0 * b .
X: xt Z4 44e4.4- 00 - ~ ~ ** . U-)b- j04 .- ~ z-- ~ C~y )- -
~~ ~ '3~ 1-41-4 ~17 4 U 4 **~- -
;-4)
E- ~C) P5-W0. Li-;
U 411- E-o-
~E- 4E- .041-
tip P4 E-
-E
5-4 6-4 P
pq cn UW4 0~U 0 1V2 a4 &44 p4i
w- C=1 04 wrP' 4 0 % .- z~ = -
w4 P4 u -z ) "U -'5C. M: CA t^i) 1-4 2m* pg4
lo W.~ 6-4 5-.1404
0 ~ U) l ~ E- 0
.' ~ ~ ~ ( ... ~ - PA~a~ = r.4~ $E - E-4 W- P-4 b14 "IC/ w
U F 04 M - 14 P4 .4 =-Z' * -0 ' -4M4 I m0 A W.- z V 6:4 Fq 1-4D.#-1 A4 P
FA 5-0. = PA)0 u QP 1 % -4 U) P - 3
= w0 04 :z E-' E-. 04 " &4 * 1 ~ 4 En)0C Q)C C 0-40 01 4 Pa ~ ** =044 W z40 Aq1-.140 0 05 ul P4 1-4 A4 '0 W " 4 =4. u "I
E-4 W404 m $1404 P.-O E- -4 N-4C).4 A.- '-41-4 P4 0.41-0 pp .14 .. 6:4 $4 0 U) E-~
p44g "4 m E- cn 0A;40 s= 044. _'W. * E :DP 4 M) 4V)~ & 44 K . )4 0
040n= 1."-4 U) $: W *41- NeU 1-44 W 4* ) U1-4 W4 .4A**U 1-4 04 PA :m ~ 4h pqAZw-4 V) ~ il
E- E =) -, 0 X: i-.W 0 IA & r~a- " -."0P04 = 4 0-E-4 -"-4 u~ u.. -.9 ~z L) E4 a: Ar A' -41~-4 nf-0-. 9k A 4 P4 pq
Z -. 4 U) Z4)04 u4- a:* 14 -II - pzP 404 -- -89 cn -- 4 4i AA - ) 4v )~ 0. 4 z4 W- Z C04 C.0a .4 z 4 &-.W -
040 04 W 1 -)544 All A4- A.0 E- * -lZ tl -3. o-. - t 414.0PAV) %4 LC) FP4040w 0-4 -V- -Vl4.5&4 E-4-- P44 WZ .44 W 4V) 144 r4 u. 0 Pa w -4 E-4s- 5-,&4 -4fl -4 A -4 0 z Ww4 *q : -4 -W " A"4 4 04a &. - =i 04 -W aq Pa pC..) ". 4/4p -%^ PI L 4 A4.4 0 A4 =) -. &4 4 -1PA1-4 Nd x6= 5i PN 44 .1c Y* P. U) =)-0 =.0 E-0= D4 1- PA 1-mg- S=
04, "a "n0 04 E-z E- =- 6-~ ~ 44.d5-.4 .- 4- " -,z
L C) 8, I-4-4 =C) 0 0-4 U1-
A* 3 U~ PA'~ E- 1-4
0r4
04 P
N~ y4 N N y4 NN q 4
4-4 -4 - 4-
0..
128
NN'
PC; *4 P4 t
E- * *C.A K; :b* *4"
-~E W)'
E- E- C. O) .N' CA
-C, "3 " E- P4 0Ap -4 W. C* 0' Nr-i 0 61 a * -
p ~ ~ ~ c P4 '0
E-, -C N' N' 1.4V
&4Z 1-4 0 E-* -4-
6-4 E- "1 *- -94*- IN.- x 0 at k0
qc3~ C,) 01. *f 0 *n En
0 N'. u0 * N'
Cr E-~ 4r 4A' rap' *~ lE- ~ ~ -nu 4flA m- *q cn ' ~
Z- C) U . * E- P4 Pd W. 04A 54 (/) 4 *4 = =) =*
I*qP.-0" - 1-4 * E- E-' rI CTM ) F
o- 94- pq pq 0 4et M' m W' X E-m- 00 a P4~ gx: C> - ' 5
Mg 0 u~**
CD ~ ~ ~, 5 FE-4 P4 *4 P4 * *C) PLr. C-4 W.*V~4 N ~f
1-4~n -. 0 0 $4' .-99c ' r1-4 r ' 14
N' N' N
w-- Nf V) Ic Ul to **
0 N' N'4 N' CJ.m
6-.~ 54 .** F4 P~. N'* 129 ~
0
&,4 * E
* .4 :aV
*~0 ra4 C.. CZ 4 m
E- -K z2 E-
*~~~~F E- E'~n ~ s1
* 2 E-4
M* C'J DR!E-4 -Q L j 0 -14C .
EA =~ =3. 7: 0V)
E- w- CU .. ) 0
pq AA- 64O P
32. 6- V-' M-I -.9.)
* 4fl E" 0 E- ai(
*P6 P wj~ rN4r~ Q~* q . Ln 0 ;04 .
C 4 E-' ;=k PQ 0 E-PI = ac- 6-.
* ~~~(. ) E943.~-I4 4 14~
* 4 C)i . 0 01- en 00 '* J z 3-9J4 Y- q. ZiE
44 * 04z= 0n fi-4 = E- M Z-I
E- 0Q -4& , U~- 0
z P. V9 cuI z4 C X: 0 4 " ' N9E- W 2CVJ.-4 4ra1 0rU2 C) N,~C~
ov z 244 -4 - 4 V 14 -44 Oe w W )P* .4 0-4 0~ =AE-' &4 f w 1.PApa -
W- 0 A6 0'q It: d w P- It zN
3.4 C A .4 P -4V V 4 - 4 =0 A- = 34 m 4 L i 5 4 t
*- 7- 4 " z- 5 ~ ~ ( A p q A .* P ,~ 0 : m w c - E :
2~ ~ * M E-='4- E- Pen 10. 04
* ~ ~ ~ P P4/ M)~Zf PA~h 441 P4 E E
tfl~~M = 0 =0 W~9~* P6 03'-~ '4 b
E-r t/) "3-wM P4 rs uP
0 * 0 '41
* ..)-3 2
2. * Cf- OD. II 32 .w
N C* 33m
013
.r* E- W 4 E- '* =)
-4 , ,*
* C.) PQ 0
0 V ) ;r. E*E : 4P
PQ.9 -r F= 5-E -..
u pa E- *
CLW -4 ;) u. W' 0 ::'~.
P4 0 Z -4 X NF -
P14 E ii- 0-4044ozr0
C) -4 ---- --- 44 ~- 4 W .X
P4 PZ 0. = 0 mr~Z "
*< 0t C) E- C)
b4. '-4N4
o- CA AQ E 4454
.1 3 - Q .r W. C4) -)
b- A. b- pq -- ;L P04CE-.'
E- 5 4-4C - P-4 -. $n E- = -)
%--4) 0: *- --- -0 ZErP-i CA pa uz-~
m =.- 'A P )~4 *t:
-. 4 %'- +. 115- U) Q4 4 X.
oi -04 '% U)44 v-Z * ,L'-
En4 W U" e-4 cn E, -4 * cn
w~ "4 PA .- * w 0 =)"E WW E
u b.-4I " 5-4 t E4 -E - E- ~ =) ( E~-4 E- O
0- P4, r- 4 4 P* r- P0C C wNu
.-I "- "+a P.a " to or m N' de
'- pa 64 P4 p . 64 Pa * c A. a. W
7- 4 *+J te ..0. 5.O to K U)- CC).- CE *.1 I--4i4 te
tri t.4 .- 4 - 54 4
U) C.'-4 5- U 5- ZZ.~~ -4) C) ~131 N
E-b
E-d0 * r P
E- E- E-~
.14 P, E- s;* nLir V3* V)4 3*014;
C9 w- .r v" 0Z 3o!P4.4 CD0- E - - 3*
z~~~~~~3 rx0 W)3*o 04--uP 0
=- W* 0-4. E-E4A*) r# = 04.1 r E-'~ 3
1- 0- U) x* zO 3C1, E- tn En 3
m E-. P-;. -Q' -t: oE o-g- = z M -m W41- P4 E- -
X 0 - 4E -W. 0&- -L2~4 444nC- 0 -.^ C-3= I04 0- to-- ;P po PO 3Q 11- P-'4 = *
P6. 9: -I .4P r 0 4- cn E- E- -E-Z E- do ::. WPA 4 0-4d -0 4- A- A -0 1 0.- P4~.- 0 ,lo- P3* 6 t-~ !k4 :I
w )- P4p 4Ck oC E- p A CQ in 940 .Q P* E-1 X E40 0-o E- E-.4;kWP v- . .... = -- C 6-4-4 U = -- E - CH E- 11- o I- 0- C-) LAa =* -4 -:1
c. C- " O >- *- 0-4 *D- 144 1-41- -. 4 w Apq w- m'C( 0- 0- i .14 C9 i 4 14U 14 e-4 W*
o- W.~ 0-CO Pc- =- M-. P4 = ;3r P4 "-D pZ -C -' W4 4-* -14 .1:. CC4 C.) C. 3* O
E- 0 - -^ I- 0- 4^ E-- v zPA 0 pa0 w' w- 0- w- 0 w - E- a* -4-
a...4~~~E E- E--. E-nifl E-- En 0 ~ s - M) s-4* 3
0-W N-n wwww'- 5 1-4 0 < 3 14 3
ll-o 004 1.- P- ;-% :- w. F. := 0- 3
1-4 0P44 A40 w- P--4 r.; w - 3* i -- -
04 -0 00 ~ . *31-4 P.. M-en ni-i-ni- ~ 0- 0 * ~
IN) 0-i 0-l 0- i 0-0 0-0 0 C~ 0 -4 N * ?4
OD0 / - 14 -O' -~ * i-.~ 3I. * ~ 3
o ~ ~ ~ ~ ~ ~ ~ l v. .t 3*s C.) 0C).C,) 3 - 3 -C)"4 1. C)3 -1-0 * . C * 1 ~ 3
04 0-3* ~ ~ 3* .~ ~ 3132
E-4C..)U= M
E-4 a; 4 *UZC4 04
49 E~f- M N = 3F-- 4P:: E-4o-4C u 5m - 0.-
z .~ AiN1 4E-4ci -U 0 M *-.4 04P-
E-) =) 1-40.1 PA N
PQ w D 040ai lcr E-. .L ZNC. 5-.-v4C
$Z m)- V2 9=1 &0U, M:0E0 4 C-
PC: U) e-5.40 4 Aq XP4 .09 m0z N
z 64 ral EN -4U W -E-44E- 4 E-1En - E-4~140 0 M M = IA
04 044 E-444 0.4 W6.4 tn~ 4 pJC. -vv Da
PQ W4 =E u W- E-44 54 W -Fr. W. 94c-W M -4 -)Ni -4 2- aP .. 4;
pq f 5-. E.-4 4 ~0 = 0" w c 0.4z' Z4 Z -w.= n n 4 - AI =
4-4 P"C. *q W)" a :P 0 0 I -'t1110 C)~ &/) G-4 PAC3 EPAZ E 04 0
C4 P4..- pa = 0E -4 (f)ZMNX 0 c M~ E- PA E~U N - 6= 0 4 -4
0 4E- 0n E- P- O n 0 C)tt0 U $= W4 04 " =W C N Ln 04i4 CD E-
0 < 0- A40 4 04W A 04 -<4 -N -f V2=) - in- AA04 4p04t NE- E" 64& m, tb. =-0u 0 " e.0 0 0 -E -E P
11- E- E-C3 040 - AQ PR p, 11- 0-4Z c Z4-. 3p 4p mUL~L 51-541 A# N.~N Al n NN" E-0 W P P4 14i -WN N . .. )-
::. MS.- 5-5- W4 PqpaW A E4 04L S-00 E- 000E.5-E- V1 Ce M E-E4--E-'i- PZC = $uE-.4 " E-0 P4 E- &4&-&-& PE- -4 P4P4- /P- -; b: p pq 0- P)n~4 -C .6 a. 0 i un- C.
E-) E-0 9 ) AQ P4 5- N 04 N ... PR M = 54 C A ap lz M)~ od E~~, 4 - M~0 WI M44400 0412.> O -t.
vi4 IA: PitNNN &4 pq =-~ pq . 4 0000 $34 E -E4E4E -W- oa~ 04 'C V) E4 &0 P 4 N Aq A AwP4 . 04
CA' E- MM:P4 PAW - .- =Z = =N u0 N0' 4 -/ ~) 6=4C- z4 li' ~I j A:5- 1-"4 4 P45- m crNN N4=m
-. 4-I orN ix5-0C0 x cr 1-4
vl, pa PA.-1 N N04 W- =>-5-- -5=k I.* N- &4 &4 41-ZN-4 E- M44440
04 f- 5 N N N
94 04C k 04NC ~
04
03
H* 3* * 5
3* * *
-31= *
~~4 *P*
*E-4
E- r*= q0-n
3*) " -. .-. .- Q4 ZbPA A4 .4) C) E- 4 4
3*~P * C> *
Z * 3* 4 W r- 0-4 -k w C> A m 0Nd *4 )- :z) E- = E I
3* V~=a,, o., %-- 4 Uv ~ 4E-4 0 LD s E- W q E
3* 0P tn *-4 W4 04 w4 PL;0~
3* 13: 11 d44) Aq .4 ,K PQ0 0n .-.irl M Z: it- r' AM E- E--Cn E- W4 " 1-4 r2A 00-. 00.4.-W z bcZ 0- 0. :4 P "W E P=) t- *4 -4. -.nzO 41$- E- * V-cn1-4 4A 4A- "4 N4- 0: =) 0-, P-4 Mc
P, G-4 3* 4 FAv4 19 'L PA P.- E-E4.9tn4 PA 0. 3*w -J.)= - " t-41-
Pg *3 4-I ~ 4~-144 6-4 p n"
064 P4 al P.' b-- 44.. -W4-.1-4 "* 1. A%~ .-4 2:. -01 14 - 0.403~ r- L
'-43 3* 14 b- ;m 0 -4 " 4 (3 t4 #- s-4 0
v-4w- v-4 " -4 e -. 4 -~4-' r4 v-4 "4 " V4 4 af4
w* to to-. iflV. tot:Q t- tL) 0- t-'L C"- 0 -
'-4 * * ~a6- 2: -44- P4~134
-4
0 -
1-4
0-4
-
04 P14 r-
P-4 W4 -4-" -
". gZl 0. FA 0
1 -4 tn A=4113 PpaE - iE-4
w 0-4 r-= Iq4 PA = 0 r
0 C. P44 .4 -- " 0C. pa 6- x
N Q " 4t4 6 . nC P-c 04
135
0
-
E-8-4
itw
pa (3C.%
1.4 %- '
.14 P4~
P4 Q.. vU) % w4 a) *
E- U. P4 N- 'C E- ''% C *
0 ~ w Q O ;i 4 -4E-Vof >- C4 P $Z 6- " -) E- %~ 0
A % -4 -4 E- 4C) G " w -4
C) 0 84 0 6-4 (S) N 4 E 44il E-4~4 M6.1 C
ob% E-~' E- E-1411 Z g 0 W~O E- E- "
v~ 0.**Z4U "-~- sZ-8-if " PL EC)1 E-4 = &-.40. &4 O~ "C~' "z4 -E- 0z. M 9)-: ,4-4=.U C44-.u A- 0 94 -I
CA EC.)lE--4
E4: CDm A- 1 , 1 =I"CD E-4 pq Z14p 4 a I
=4 *4 r "4n 4-4r-E i
.-4 paI-z E- mC-. q t - .
P-4 01 04pqP
A4 w p0
cu136
E4-ai-
E-4icnl
-b U
E-4 to.- 4 - bd pa~
'-4 6- 2q E- co PA-4Wpa Cp e MJ E- - ~z W
W - - 4 -s >- 1 -4 p ) al ~ C
-~84~ E-..- .4 ;.q -4 1- 11 4P-4 CA
W V) ~ -i P4 Oq hd V) E-'u b 0c q p 40t -
2-4 -M 04 N 1-' a; =r- - n=-EM-4 ~ p-4 pa pa- UU) t -A z - 14P4 c - & a4 " &. -9 &q = 2- M) Ep-a
vi Nd U)9 4f .-I p - -4 V'- V- P'.. E)-4 04 -w.
44 1. Zf~ ~ "z- I-4 2: 0 0 E-~ -i4 cn-4 " - E )&
z =4). 4n - X: 0 44 -4 m -4U24 @4-1.24: = --u /)u
Z j P4 - 4~ 0-Z o- '-4' W dU l q 4-4,E 4 (4 P~~~~~3 V.1 V. 3~.- -
0-4
0C-)
137
E*.-
rarr
9-4/
m AA ~-4
E_ 0-- "4 -4
pa=Z E_ e4-' E-zct = -- pq V- ) C/) -461-
540 fz =Z =~ W /~- En 00 6:4 1= 0 -4 04 4~ PAa 0- E4
pi ~ .4 4 E-r4E- P% P4 M aI W
E- C-4 C. 0- V=iP -Z PQ &Ir E-' -4- AP PP41 ;ig cnG AlI E-Z -4- 0 101 i-si- b- E-4 ZFs-I 1 Upi _ E-4 Zcn2 i-Q E
~~~& 64 b- i .4 pq cn PA ~ 1''4 ~ P1~IZ~ E-4 * C) E-)CA E-4 9-4
g= " E ( - P ) & pt 0 E -4 J tn 0
-41E 4 FEqV b..4E Irs COs CL.G Im A ..
&4 w 50 N61 pa4 pq-4 ' t4- V- -4 pa - 0 EI-fPsi Ul D9- aPArj 0144-~ 1 VIP.i- E- E-0 J~g Pq - 1-
o~~~~~~~~ oo (/2 A4 /(2ClUC) E4 -E- E
P1 - 4T 4E : . - AAl
=3=-: -
Pei
138
E-
E4*E-
IA44*- E-
* * 9-4-4
pa * r C.1) 0* 9:4 &4 .4 E
PA W. m 0
u 0 :. . C.) PC; E-*4 C-) 4 0
* ~ ~ r FA P 94 04.4* 4 4 rA E- 4 E- P4
or 4L *. uP$4C. $
4* C:4 E-0 4 L) W. PAZ)_ 0 4 * 1-. q M
E4 4* 04-* 4 .04
* ~ * .~ r=~ 9 -4 -4 $Cd)~V V* $ * 0 0 - .) E- 0
oe *n P- G-~E- C)4 CA En $
pi fr' *n W4 E- E-4 4PA4 E- PA) P* -- w~- p- 04 0'4r.q 4 :0. w* C.), Q~ q 4 W4 PAC.
E- 40 44 U* .4 WP W=4 pq $4 1=1 04 - U -1/ 04 w- C-4
0 C4> 044.-04 p4 =$$ " - M '4 ;D427 0 4* U C 049- ::. $4 5- pa
:14* too 9. 4 -4 -- 94 - :0 m04 = d 1E-4 .-I I4* 1- 4 04 4 44 -4~I 04 4L) rK
pq P4 1*.~* 9404 04 $4*44 E 4 044 "4 0pa 4 '4 P4 M A4 04 C) 04 W4 M4 0 -
0 4 * 4 0- ..)- M 0. 4 ~ M. ** L4 A4 P140.44* 0 4 0 "4 E- - 4 04 ) cn 04 $
04 * -4 4* '4 04C2~ 94 6.i4/' = 4 .- 1- - .U -.. P 4P0 * 4 * 4 $21- u4 0 1-4 u p a u
4* ~ ~ c 4*1: 44 E-.'4 Q 4 V) sfl-044 i- 4 p-4~ ~~~ 0- 4* * M4r ~ a-4 ui z
4* ~ ~ ~ ~ ~ ~ ~ P u* W 4-4 0 5'- ) 4- . .-
04~~~~~ 4*l 4*44**4 N N N4 N.0 $ . $4 N C)
.0 to toL c as Mv4C
-44W-
013
a.~r -4.* . *
in- * a. * a. P4 W-* * * a. 14 ~. E-4
E- -4 X .* a - s
E-4 a. * . ..1-4 a. a..~ rxi
E~*~ a -4 0 P4 Pf
E-4 pq r- = m. o e
PZ 0- 4= 09 E- o.1 0- 2-4 04 FA E- M . ~ ~ -
E4 Qr' E- a. P, . pa z'-4 pa X- *g a.4 F~-4 Q z
rA A IT -. pq pa 2. a- 0 P IV P4
0 pa ~ 24 0a E- hd a. pl P-
Pt. &n- E-- a. c.4
Z0 E-4 * * x~~0
~P 0P4 .~-~ = a. 00. -
Va4 0.04 .4 a. A. a. U~ o V) -4
W A- 4 -to. -&-. cn a.4 a . 0-4~ri 0 m V)~ 4 a.; 0 a. a.4 E- W2 Psi WP4 oq o A- W o T- pa E- * U =
cn .~ 44 a. a. a. In = E-4 E -
0 34-' Dl -4 a. V)- *q F4 V) - ~..
P4 M C.? 00. W a. * x. t.. P4 w ~ -0
PE .14 44i~~ CA.~ w i w.a . .. -V~ FI
W 40 pqC. xn M a. a. a W
tnri-~~~ q a.4 to a. -A- q-4Ia CV~
P&oI i-or 0 .a . U 41 OF-i P ~~~~~~ F~- . .a .~ ~ ~ -
P -n- =i~ ~rxi p a. a. r-a ~ ~ ~ p maI m- n ~ n z a . a
-C Cy 1- CV rC.a.aVcu- s-v .4 . a .
F-i4
014
0g
~ re
*P4 k -N.
*4P 0 FA .N1
.~~~ * .t4
enS4 *C11
PI * n 0.
pa -i *
P4* PA4 PQ4
A -i *n 134 E-*A L
*0 0- =2
0- -4 z -
~~~~- * e e 1'-
CD~ = -i P41 A.1 -4 u 8-'I p
pa & -4 w E- E- E- 0- -- t CA N.r-4 =V *- 0- pq- 5. * c
;.4 010 *9 2c- ~ Vi - -pq. * 6. 0.9 E- ~ En pq-
X-i -4A PA pq : 4 PQ P- -0 E P4 1-izW E W-4 En -i -4 Z 8-4 Ci V) .1 u C
PA i alV- C- 5-4 5-'-i5 "n l b. E-4i w C-4
V- E *, P4n E-fr r-i- N/ . - t,
-4 0Ip*q - l .4 0 0-4 CA ~. c
= - .) 0 -4 ,0 Pen 0 i - ~ v
~~A *n b- TVipq~ ~ i - t -
ori -4 cn ~ pq54 U~~ ~ 0 k-4e -' e0 ~ ~i 8-4Z-4 n ~ -4+* i-
C14 Ci eCnj N~ N- N- -l eM N- n
141
-4 =
14 Owl
0 P& P 0
ta c 4 r, 6-
ZE-4 Q
C-4 -
:E4 4- "=4 (=4
.4 t-4 -46 CAp4 0
0
- -t N6
A . F M N 4 1 44 t o W .4 C 4 4 q~
E46 n " E-' P4~ 1.~ 0 -Z PA
Ila- =~( CA II AL)0
L
44 ~ . 0 11 V-
w4~ w-4 IIZ n 0 -- =- 96 Zf) C.)
=. WA N~ 6- =- Cjj c . If
E- 0-4 C /2 4 1- PC: E CA 0 4
V2 E-4 w = 154~
P4 N-' P 0 (m4 n PQ r2 e4
6-1 6--4 1- E- .11 P4 6-E L
(=A pa Pt2O 6-4 E-4 -4 6- (
M FA 11A 11-'( 4 + E/ - .d-4(
M) -. Fa2- 01 vv-- un~6-
0 ~ p V6(6 -4 CD1 0 6~- 6 66
Z E (~fl4 * + a (m ~ ,* ~L. E2-. 4
'-4~~ P-. *~ (4
4
142
iE
0* rP4* 0-
PA.~i*E- VsV.*
P4 39 -
mU z
;P-4 0
E- E-( 4 E4U b
49 64 ** *% - M
r ON. 04 E -4 % *.
E.~ - 0- W . u *
in- 0 - E- Q
~ .E- P", P4.+. + E-4 0 +4 -+ + -
to "- P4 6-4 1 4-4 b- i 1~c f * -4 0-4 A4 P4.E-4 E-4 P4 tn x. ) ~ ~ 4 l
-l p * . *- 04p 4WP P x 1
0~ P.. m-~. E- c. = r z r-E- m~ 2: Z C.) At .-"p.. O-4.-A P e -4 . u pq 0 4 -q... 4-
P6 n - P L *-4#* 2-2 - wwo w =. W. 0 m. 0 *4 =cP =m
4 n - ) " ' VV- f=4 P4 4 4 V~o a4 P4 P4 F&4 04 *PI -. sr- Q~3 E-4 4NP 5 W M~ri=.a P4 P4 H4 T-o, L>) M.r- W 4in- =l = =) ::) pq t)= )0-p
u pil 0 E-4 2qp 4p -4 ml P4 0m ncW 0 A4 L) u. 0- ~~I 41 . -*1 All An-4I/,#- A- An
w Q =. C4* C 4z = 0 z ~ZZZ &n p %W 0 E- 114 E- -4 V.) M4 UcnU n p % "qU cn *r tnMV
Z Q 0 PQ C.) *
0.4 cn 6=1 *Qp
-4
IZ
~ f 0LO In 4 n 1 0 CD OMDCD t w t CD)
143
0-d 0n cn
&44 pi. pq *
E-U) b p C.)*0 pq 0 =
;u " - * 44E
0~ F4 z * -P14
0 -4 P64 E- tn * C1-.4 pa E- *
C4- -0 0 CAAl w -4.4 C) 4 -
E) 4 PAP
o~~1 Z)0 E -* -P
DA - ZP E-4 vi W. W 0-
u- 9-' C* iNPZc AP
44 PAC> 0 -4 *= tn ;flt-Cc-P4 *. W E-9-4 E- cr vcn M ~ Aq EAP W4 w- P *
ZI- r-- .P4 W E-4- &4P- Q 4M QE~PA P4g w- b * u.~P P4 0lp 0 4l
CD E-4f = z -- P4 pq A
4-E-4 E-4 i N P4V A-44 5- Q W. En 04Y-N4w ~ C-)i 64 = := 4 " nA 4 *4 :0- E/-
1- did CV) 0 0l q F dg '-e UP4 -44 mP4040 P4- .44 6-' t-. *m =4 09-i P~I E- 4P
U)P0 0-4' *) =4 Z4C v-4 P 4 E- P4m4 P-4 ~ PP C 6tn P4 *n14 M -44 w EH AP
cn E-4 P40 0 w, *-1 N w4~-Jr~ ~ p. bo PPA) rA -4 4 E- w4 E-i-~ -~ P P E -rn 4 Y i n
0 P4 w4P .- 9 E- PA ma =44~i- 1-4 zP4C! 9-il z *4 * . 0 En W4P P E-4 -m4
* =- -4 '-4 :N.PP4PU ~ P4 N --4~Vu E- .. 4 4P *a z4 4^)4 '~4
-. vl* MfO~P ~~N P~ 4f-
1-4 iU -~* Z~~' U) '~~~g.~74 U~P4 U)U) * I-4 4 4 ~ C) 0 C2 i 14 .J
U)0U i4~, 4) N ~ ~ ~ PP4444 ~ 1i Pr-.)4 I4.94- N i- ii )-n ~ P
* 0 to (
14
* E-* zm~ F4
C- E ) m
z A - 5-op EI- En.
W. .14 E- FAP
pq Q : ) C1
w 11* E- P4 Wz E-
-9 E- 114 =- U):~ z. I)-- C
os-4 0 PA - .C-4 (
0 a. A.- P- 90 a E-
C4 E- -14 I-I PI4 C. A4 In
+ + +P En ~ pr 0 " VI" -W "- II rPan1 ~-n d C di 1- E-'4
PA .4 -1 N u 1F. 0i 6 0-. U
o - +i- U) fl V- 0 ' ~ ~ ~P.1 U 4' -C 4^ P4Z W 4 0- E-) E-- c C.)-
04 W- X:.. r- * X: PL. M-4 P Z4 W = E-
"4 74 .n4144 U) 6-4j) p (.a'v - PA E- MC s- P
Pa;_ .. 0 A E44' AA~ 11 .0n 0= En w-6- L- ~ P4 64 -) -0. 1 v* P r-P CAt P4- CNC PA~ A.' - E
C4 0-4 .4. ad ZZ -E4 &4 PA 0 0E-4 b-4 0o- = m. =2 X: E-4 P4 1. 4p -4 1.- Id)- 2
S0 An. _Q1--.d0- vn- 4A -,)-tl- E- P4 -.f 44 Pa -
a4 P4 X: '--4.-' " ) pq E-Z = W E-4 E- 0 -4i i)
U 000 1. - * %2p *q q 0.4 *Vi-a- 0 w -~i - z *'-X: * I Z£ 4 *F (n U
.4~E- z W w -. -
4Pa
Nl NN N N ~ V') Ve N n' te
a)
145
*i E- A z z ~ '
W4 E- ~ E~
'4 0 0- - L7 A. 1
m - &-.E- o4 E- ~Edi *: w- 0040
0 ww 0 E g.
*4 zj .1c L Z
o* P6 b- ~ 'd4 or aV)jr,*~~~~~o- 0 zO B . * 21'
E'. in- I ;z-.4 '.4 E ' a -.
s-4 bd Nq A^ U C-4 * 04'
A. 2e f. A PA AA b4B (f C
z f-. *q 0 dig "~ -~ 4P4, 1.4 N -) - & -P4 1%- zP
C-4 E- : *f z- r. d 0 .. E-.-
pa r- 4 :w E-4 4 m " ~ -"e mCzP P- -* ~~ 4 #- PA ".
~~F -. 1 ri C-. E- . ~ -. E '4 -E-- 4-4 P' V Mji,~L -Q.24 N
8.4 &4 41 r m J-n- .
PR E4 4"- o-4 'in W E. -4C e .E s-4 N' $.-A ac
z,. X- u/ N:2 C- 4 4 4 1V-U q bd-lZ N' .
(.:" V) An.4 * b14 E-4~CJ- A- N
B-O 0- .4 -14 1: *.. .7 .4(4 N'P)(.4 ..i ~ ~ 0 *- " * 4-4 (4 I- N' (
r-4- 0 ~ N..~ be ~ ~ ~ z-' N
cl' Pn1 4 P i'. L3 :r . ~ '
.4 -~444 LO 0 B- ND a)E .0N
cu OD' Lu co co - ~ S44f 4.(4 N n .
~ .0.4 B- (. (4 in (4C4 '146'~ .
l-. -Ile-
1-4 C4
.44 A-q *~
.u CF4 0- 1-4 " s x* - b
w. 0; V 6.4 A.* - E- P
1-4 -4 1-11 14 1- LD * i-
X- 0'4 1-4 u~ * -*
;A C-) iA4 a; *-*
~~~~~- OEi. pq-C ~ * .
E-4 C- E- E- 4
* X'. do Ef~~N 1 -4 "q
P- E-4 04 * 0-4 4 A
PQ V-) PA E-~ W- dcb4dI ^ * a. PL
w 6-.) z )-- b) tn 0/ x-49 1-) V) ) E- A4~ ( A 9=1 -4= -" to~ uf -C . r4
Q Q4 - 4 P4 e-- E- a-P4 or 0 ~ OCia n
94-14- E-4 r4- *" P E- Ig=u Z-~ mnaf pr .- * A C
E-oCE P-.4-4 E-~ 0d P4 * .C ) -4
u 0 E-.1 4:1 ~ if- 0 C 0- r C
PI A .) E-..4 Art ibz. pqE" E-
-) " - C-UCs) hj zd *e zd r* C.)
42. pq c4~ P p4 z w4 ;z E-4PO $L;04 En E - 9. 014 " 4) 0 * V-0- P-
O-L 04 Le C.4* f.-04w/ OAa 4AZ u- C -3-
C-)P- -C~~-C ~ Z 1 ~ - ) C~-
04 I-4P-4 b)-4 1c N4C),~P-4 m ~ .- Z1 C) ~ *~ -
C- - C-i C' ) C) - J 0-4 *P4 ;.4 F-4 ;;L 0-4 0 41- 0C .i 4-
P4 ~ -- -C) ~~ - a ~ *~ 5
1471 C) * C/ 0
E- *N6 5-
-4 ifl- E- t7E
1. CA 11- * .-0-4 + La14U E-
-n = E--XP4) ;z V)o4.
to-i C) p -
~P m N,- U
z C-.) * q C- Z P-4 V 00-4i' t E-N *+ U) 2.-. " d9 0:n ;-4*r~ >-.44 W.= *. *1;:4 V) 04 l)$: )E M: " aP.
=. * 4L' CA. r-l *k 1 0 P4P W
P9* c- P4 ~ U~ 1: E-t -1-D *: P4 0 :-m * pq M4 -9l -4
z ;A E- A.= A-~ 0 L +
E- z cn PA =t PPE4-4E-P w5-4 4A 1- .4 m5 1 -al)=. =) V.1 PL, C
o1 . *E- X 11-F 4.A . = 5-4. V) PC =0 1E- * 04 IF 5-.9 pq. aIn *X PAn E-. A ai
0 * P4 4A E-4i E -n (n 0 - - ; r- -
*4 AQ K E- P4 4Cn j--dgp Az9w F1: E- Q . r -4r- W &4Y 4W .- C
Ez P- * -in &4 z =- 0.4 AA 1 (
E-4 pq 0.4 pq :z w 2c CA Vl-r
6-4W
'-4)
P64
T-4 Nc to~ E N' n) 1
C. v4l CD m~ Cha 4~~ )4
a4
148
o *-.
* -4 *- 0 L
E-~ re*
~~o-4E- E- ~P-~
*) A/I) v4t
0 pq o-4 - E- r
V')- 4q o-4
E" V) cw :- q0
E- t~ -4 ** 2
1- E-4 04 + - 11~ 0.t-
V) * ) :)* a U) E- i 1E z-4 t)
PA 6' 0 E-4 P4ra 9C
04 X- E- - a) A. vi-~~E V-i 1- ;o-4 * -
a c: IA- E- -Z- 4 EH E-1C~~~lf ic Uo ) = W i/i- -mf- AA -4E
tri cri : (- U) 4 1 V uw .q cd ~ C.3 =u w4- P9 PL W
Fm i fU . E-4 ., U
1- r -i4 2: CIA N .. N -cl N: C
v- *4 1- q C -4 -4 -4 "4 P-i TP4'6~.
C.~ c. * -) *-: ~-.s~~ 149p
4--4 44 -4 .- 4- q~
~ E- Pl ;
E-4- P4 M
* E- E-- r-14 0
~ to~4 ~0-4 IZ'- - 1-4 Ar I ii- I- U)-4
U5 0 O 4 '-4 P -0r'L C) -4 E-. En L-
w =4 A 4 -J C(Jq&IE 4 )rc
P4 : . L P)944. Ar 4 -~ m ~ * A PC;
w 9= ~ -4000:~ -.4 0t En I'- :4 0 *) P4 9-4 AP-- 414
.W4 P: v-\ Ng* *.. -4 319 co4N. $4m D l
P") PE; E- POZ E - - P
E- - 4 -4 1(4 11 t 4 J 4 4A n/
P4l E4Ob~ '-4 0-4C&"4- 4~ 0L E-C~ 0
04 >- P.4 P- VI 11 W, Z =
74 1-4 Pin c.q :m - C5 0&4s4I - iEr -4 s-4 " t-40-4f4 P-4 C). r4 -
P. 0 N 000 -4 iP4: A4 P4 P4. 000 =P9b- -il 111 1 0i 4 . :7 nE
P4 '4 0 - P4
Wn 1P4. 1 C14 ()T- \ -
0-4
b4P 4 - - 04E44 . .
w-4 0- " 0.4~ 4dV-4j-, 444 E" $N N- "
2: ~ ~ 0- (U-4N' -4C0 *a 0-4 CD) v4 s)fl-( -
-~ - 4 .. 4.-4 .4-4-I MM= 4~- v.4 A^4 r4 -- r.4 ,
EnS4 00 --4- 0
0 44^ 24 Z= Ez zCL4 Z'sVo
*- E- 49-
W C 0 UE-
2- k, A P4
E- 0 0 -
N.. z )
0 -1 %Z4
*p -0 4. 0 >4 -
*~L "4 E-- . -
0e 0 b4 Cl 64 ,
* 11 . 0-, C-)
2* i.
E- 1-. CA Z V)-
* ) ~ ~6i . ~ E- U) U U
*~P 0. P14 r4ii~ -U
E -4 P- E- -4 10- P4 E -4 iI0 U
* 4-A a. &I d0 z V)
* 0 ifr ZU) to Pill = fl vl 0 44
x W- 0- P4 6-1 P 4U U) mP Z14
* ' I A r lZ C-7) .4 0,4 e.
* L)) n 0- W Vf- P4-) ~ 0-
*E) -4~ 1: -4* pc Ic E -4 -
L3 EC - -4 U U') 0 4A4 ;i P --
*x E- 0 * ~ ~ i- ~ - b1 ~ -J
.:,i - 11 U C -- ) E- - -U)(=% 1- It~* V-I'~ ) E ~ U -4
4- P -4U)t
Cb-4
V-4C' N Nv N N N IN IN
(1j
I- N )- 04 Ln (0 C- cc Qa '-4
Ln IA Lin, LA In fL uj kA L
Y-4 - ~ ~ ~ -4 r4 *4 94 94 - -
151
E-4
-9--
*q 0 2-w
P-4 E-4;4E- C ) C! -
E- E 7404 1P-4 PQ cn E.
4 ce u 1-4 - . .
2-. 1:4 -g -E
.E - E -1 C ) .* -- -. PC Mc
)
k E- t Cl) -. II -6
L- E- V-p Cl) 1M.1 lf-' * - -
* .- l - 4 ZUA W.4 CD4*
Z- - 4 -- n- P4 '2-4 ;M q c o4-
*- gA: P4~U Z4 d'g pq~ P424 W A- -0 , 4 = "
o W r -- "-Cl Q A:* E-.= w: cq; c
P* Wl - - 1- CA . C W --"p Art-
pq 0 q.9 J:l) m 1-4 tJ.; -r- m ) z-p1.4 &) A
PC E- &- 4 Aft "4 - ~4 4A PA .4 X u~C
re PA CA, P4 p4 o --4E- 04 U cr -.C4 0 -4E- V,-94 K
N4 5): Aff) IIA 1- 0-44 0-~ 0z E-) E- '1'4 0 .9 E . E-2e 1-41 -A
W G4 v- E-4rt- A.~-4I l -0-i W V .-
0-4 E--4 p P- w' 2 w- Ili~ bld-4 5) C
0- *s 0- C'-.4 P '4 piz =):Pi* FA 2-4 *- 6--44
ot:~- 4 E t -- 4 I f b 4 b -4 P 4 & 4 - .
15-4'- P 4- - CA4 P4~ P44 4 2 4£~6:: We 2-'L -0 E-4 E-4 C. -1--
E-4 P% '-4- E
CA)
vl I N N Nt'V n n N (71 \ N
kot to) t o r- E - L')
.4 v.4 ~~~4 ,-4 -1-4 -44 .4i 44 .
152
o -40)G
4-4 '-4
0 " Af) 4P 0
- .4 cf VW 2: r=-I -el at
2: ~0
Ga 0 4-40)
;A r-) X:LOC P
2: P
153
9-4
C, * * *
P4
1-4
E-4*
0) %
Cl)4 CAb
cn~~ .9%
.4 P4 % UV) P
% %i;'.4~~~ CS -
2-. 4:. CI iE - 50.4 ~ ~~~~ ~ ~ ~ ~ 6= -c A -E4E E4"P c
2 ~~~~~~~~~ ' P 4 4"14 WE -A :
on -. P4 *D E- p )C)X - 4- qr 40
Ul m6- *f - U Ao4 E - =- P4 &-& t, NP
C. C/ .4 0- Pi-4P
pq a.. 1:4UC %
C) P4 C. 4 .. C.X:0~.4 ~ ~ -'- *~
.4 % ~ ~ ~ ClUA*CL * 0-4-'- .4 C)/
x~*1~ U)= a.P.fI0.4 CL4 b-q C~E~
C.) *. ~ 4% 1'- ~ ~ 2- 02-~ 154.
0 E** -E-
E- E-
* 0
W 0. C/)*
44 0
*t .4 t - qw W E
*A Cl) Zt En 0*- E- .q
E4 0 -N P4t:
0- 4E4 P P-4 f
P4A*- .4 D o : : E- Pq W . t
*9 N. = Z% e .= 0 . m EP .
*z c P 4 04 = 0- .x4;A pq P4 6-.-4 6zP4 V) Cd') * .) PA..
Wl V-4 90 .4 - w- E- PA C.A - r-I F-4 AA4 Q~ s-.4
* . W ~ CJf. ~ Z 0 0 E- VCl) lx d-.- O
U'~0 V)fr 04 N- C/ 4
Ns " 04 = U2 ;b.C/ P4 to
Pl ile FS) An01- N4 p.. q P..4 ,4 44 .4 .U4 PA PA- AA F g4 A "l mZ.
pa w 1u -4 E-4~ En4 MI Q4 t/) 41*-P P . V) C( P14 &
.4 . l U' Fa - "La W4 &,- 0- 6- 64 " . C.) - 0
z "-'. _: 9: pqa4; P4 =W p P' §. Z4 1:4 Pk .4 p1 p)~ *4 )~ 9
m *i W z * 1-
04 N 9- 0 V- N. C14 0 I N, N- ..
.4 * ~ 4 .4' E- O.) Cr E-I&l 4 CD-* C
U'~~V- 4- - . J- . 00 - .PA ' '4 E4- r. *14 14 C) f. ~ I- ~ . ~ 2 - i.
U'~'4 '~4'4 i~ ~**I4 4 4C)~4 '. P bs -
E- E--
* -.. - ~ P..
*E 0
PI wE-) *
E- C4 d<
4 E- -W
C..) C- re-
F04 Ur V):~. .. oPC; *- A4 pc z ~
- *q Wt. i E-4 **L C- 4c p G n=
E- 0- t
I- pa
; PQ~*C14 Q 04 .4'
a. )i m Uv.4 0 ~ N~ ~ *~* U P E
1-4 ~ .,-~U.O i*
cn ~ ~ Ei * fl~ ~ U156.
-4
E- U)q-
E- P4 a-*
rJ4 ~ ~ 041- n
6- co* -D U)d r *" 0 C ,1 -
dz 14 P4 - 2-' P4
AM4 " E . W 4 P4 x( C
4 cmP n ; - 0 pa C- tpFs P*
0 -ca C.>~U
t-. 0 Wn cn P4C.E)W W
-4 Ia.# C.)-4 E- E- 0i * -
~J~U) M-i '- *U0 *
pa r.;Z)W U F P4 1=1 PQ C.)
& U)P4~ P1 0 ICd- 4 -V)- 41U)2
o ~ ~ 4 -'~ P4 (n W* P P.
D a 0 r n . P . W v l-4 0 0 A n - r _ . t P - E - 4 c - V n P .
0..1 do do CC.) 0 .-CA..)P C.> 0 C-4 It~ V-P pq PQ F
Dg 00 E- -4 E- ce PU 40~
E-U P4 4- 4 4 OD a)' '-4
P4 A.~ 13, *g pa _0. apq1-
*') - Er E- PQ r*4ck
P-4 f4;
0-
CD)
N N V \ ( t.
04
157
mew,
€.--' * •
= w
.- ,5-4 0
0 .. * ,-, -4 0Pa 1-.Cf0c- 1 - * E -- "
0 E 0 PAPo - Ad . E4 -W
, 0
E - *. " P A C4 0Z E
- 4 0 0 0 a p q
u0 -c -4 - ' 0 pi :- 0 '
= = C-4- W44 - P
E-1 . ~4 P4 Z p
+PP
o -P
1- 4 p E f; N. / -4
~~~~~~~c CE-S E E ' ~ II* I
~~o 0 i4~ U)0 *. Ze, .. c
w -' U~ E.~- yP4 Cr 0 0 0P4
1-4 cnZ 04 In- C) E' '-4 Er-0 P
C.) Cl) -4 ~ P-4 P-4 N -f0
CA- P4l -4 0 -4- 40 :bZ lZ ~6-s1- =. "4 ZE~
E -4 lj0 W E - Z- E - C e P
-4 C4 P4 N4 4w P4 P -- A -4 E Cy.
E- U U
0-P1
P ~ j4E- ;-4 E.) C-) PL aC
CA f)
ci QJF XO 0E4 ZO - 0E
158 Atn=W
0 cnpq m ;j
C-4
E-.
E-= P.4
C4
*r 1U~-4
4-4 &.
U.. .- P
. E-,-4 C-
in. .1 C_--4 0-4 U 1.4
u Q X C) -4
0 % Ln WC-') 0
A 0- - %- t- 0-4 W4
Pk 0 C ) L..) .1 11 - = W=) E- Fa 0 4 W E-4
So-4 - - - E-- • = 4-CA ' P4 PQ -lW4 ,4 44 E-P-40 C-
rq PA 0 P4 in- 0 0r P W + + + r4 0 W - P4
-- --' P-4 --I 0.
Si - Ej- P. . 0- o--4 E I- - -AAi- M Aii I n- Cu. -. D-
Z.; 1" .. . ,. 0 " "4Z = -- r
{JI -r ~ in 0 r r Z r-a r. . . U)4 0 ---- .V . . r1 " 0 rW0 E- 4 3c = PA.,-
P4 w- -- w = - E- -4 in =
-C.) P4 P4 P. 4 rA= w. E -F41- =) m n po- P-4 S4 4 A *
P.P, PO 9-4~ Ppo 2 A4 F4 N4 P4 1-4 4 1-4 E-4E-~ 4 EM A).-.-Z -"l = "- P; L)P4 0~ P4 P4- pq pqp E-4
U) Cn -4 E-4 Z E-. 4 4A-I in- Q.,U) ~ .. ~+ pa4 par. zq E -
AA- wn 1 -- 4 -m -ma C/ r=qA . . -P-.4 =- m 0s-
A4 lz . r-A* P6 P64 4 P.,. 0-4 i.4 C
Y- E-~ 6i r-4 5ZE 7 -4 r I
E- 0-4 0, &4 F- 0- U N,
r4
I
P.-9
CCQ C L. n N to nt' N\ N NQ N
N V; 44 'LOCO L%-j au ~ 0) &'44 l 44444 4444444 44L A Jr ) Lr)A ' LO
159
.**
N It
'-'Nx V -
U.) (n0(\J E-4 E-*3
-44 E- t-4
1-4C/1) IA 0 --P4- 04 0
1- U) En *A CrAP N =). *Q P -
E-N-E4 - : Ckl) V* ClpZ4 N4 = *
W - n- 6- u 0 P
E- Af - E4*x Q 0- 0 * -
.-4 -zn N AC.
NP.. E- 0= C) UI 0t- vlNE 4 : W C) 0. AN *M pq p s6-. U0 X: E- " wp 0 *E
E-p p P Nfl *- -W - E- E-~ - . 15-
4-) >- U)N vLS =: oN =-. a * -igr-VP pq 4^ PEI N 0. G6 N 6.C.. C) Q- .- E- a-) = ~ -n C> ^ " W
cn NA 0 + ~ En In ~.. 7-u r4 NtIX; If -In 1-4~ 0 - ~ 2
$z P .-i 04 #-. P4 N.; 0% 0I 0 )-
'41. 0 N-1 a; O *2: C) ~- -in. 6-. in- 0 ~in- ~. N N s- *2
N g ~ L ~. Z :6- -i N 0 6-. * tN 6- ~ N ~ N N ~ -a 6.- 6-s ~ . * N
U)~c to1 0o a-) -4 .42:N * )tri Nl 0 N ) W,.~I-4Z to- tD D ) N toN
N" - I -144 ~- -
P.. n- s- 5- N 5qx~~.4"~160
E- E-0c
0 w
~E- 1 i.
r- Z lo E- *- 14*.4 .a
w ~ =3 *4 VvL P-
E- 0 C-) *- * l
-4 * C) ~
0- 0 tvC -
0-4 *-0 * 6' -
E-0 c~ .- 40 *- PAE4 04 0 ;-
=r 0 " tr P. X0 z II
xw L) &I4 " P4 P - E-V- W N
Cl)6w C) En Pi 15. wI I- X- 0C3
~ -4 3 4 W. - sZ ) ,~~~ W* zn zV)P. - ~ E
=. 1d, t-4 A^- *1 P4 wl P4)~ L ~ l -
ti) W Z " r- C.) U) E0 f-
in- 4 ~ 3* -4 1: n f X4 m pa
u. -. *- C.) 51 U .~E.pq w .P4 = zC--E-4 PA~ An- 11 -"V' 1: E-4
0-. - 0 1. A* W A *4 W 4 W=94 ; -
C' ;4 - 0 -4 P4 *; 1-, ')C) P, = 1--i V) -. 4 ) 4 = PC
PL* 0 *q 6I)q -c - P9 -. 0 U, Ws. C)0
C9CA -4 -4 - U P4 A.' P14 6i ~ ~ 1~
-w L) -'- P4 C. r 0 P.. fr- 400 C-4 *4 -e = 0pa/) ~ ~ 4-
0* CM) * .4
Nl C'I *~ C\ V. td)'.
161
zV
C-4*
B- *
C-)-
P.. E- m
E- E -
NC w)-
o- Cl) 0-B
P4 A +- + + 0-
U) E- re *
X- E- a - -
P4 E- 4 E- .~T- L) m~ P4
pq E - '4" -4
0- wZ oll E- En %M~ -
pq cnG :2 :P4.4 .- -* 0 W 0
(nC o . -14 -P E-4 p .4 GIE-
V) PA C) pq w ) z- CA -
1-4~~~ E-4 HI E- -' B ~C- jCX4 u r 4 A r-.)4 P4
C) 0-4 P4~ 04 r-1 C) W E- W
B- u .- o -. 4.-4 -3 "4 E-~ pt: = Np
cN =. PQ -C' PQ .14 rB- a.
N~~~E 0 - 0 0 NU) ~~~P 1-.-4U - N 4 N
N, C- pq f-) -- * Nc
NN C\) to n N N N- '
X.) '- 0 NE L .Goi 0) IS r- CV C) to -
.4 -.- -. -4 ZZo c.) co CU C.o cuN . CC)
Cl) C. N 0in-n-tfl N U) N ~162 -
-
E-4 pq-C
z 0 E
a-- E-rs -..
0n P4 4 .-
u 4 -4 - "
P- 4 * --
-Z E- do E- If r C i
04 P40 0 - m~ P4hU X:w
W E4 P Z-4 0- E- P E-4 4E0.. ; 0 ) >- E- 5-. 0i 0..
&.4 .4 94".- WP-E M
A4 P45 - =I) i-I N- V)~ V V) OE- *
.V E lo- PEI - '-r ifl W C-,' -4 C - 4 Z
0-. .0411-4 0 W=~ E-4 .N + i-.
b4,A0- 5-4 P4- u C* 44 = )
-r'- -4 X: E-4 X: r-4 04 C) 0.) *-
A 4n 000.0 C/) m f- L3 * =~ - 0 u0 4 4 , ' + E- U 0V -
= CA ii 0 0-4 3 4V C. .-
=1 -V)- A. A. p. 0 -"X
0P 0i ~-4 E -1
6=1 N. -
s-4
14
N) NN N~ 01.t) tote N C\ V)r N~ ~ N
104
163
-x E-4~Z * -
*:i* Z .14 mn E *
W. 0 0- 31-
*~E 5-P -. L* z .
* C) 1,-- 0 P-4 P. p
-N E--2 0 E-4 A- =
3 0 $ .-
* Z 34C1) NP54
* -4 1- 6.4 -4 W4 4.
E-4 04 E0 ' - 0X* ,.. U~- E- 0P4 E-4i
*IP 0 -; = 0- E- P.. P p*4 L3 &41- :m.a z p
=* 0 Doc: P. PL -4 a p - 94
M4 PA Pl) W 3- C)p 1-- -4
*- w PA~L .e 0m iJr-Pe.5-* q Pl -4 . 5- .= A X:- 1.'-PI " -* 9 " -W. C-)E- E-. lp -. r40M
P* to V2 r- U 0 =4 X An v")- 4^30 ::) VP- 4 VC> 0 W-, PO PO ~ 0. rA E- .- 4 - E- .M l(O )W &
*. i.. ~ PC.) 5-4P m.- zci pc 4"V C4uC-E
*2 / -4 4-4 rA M--Cl :m M-~ 0Cl)-W40-41- ;.1cn ~ 'a-. L- pa .4 E- = P9 M.. i C3 l "E4&4 p :)"M
vl = =~ 0 P. mm U) PQ 4 W POg 0 4
- 4 -.1
* Cl 5-4/) ~ l) ~ 3* ~ 5-5-1-4lV- ui*~~2 Cl) Cl)l ~ ) 0l * F if~f-t,~ng-/- *
d Cl P40
(I C- . 0 4eZ.=.'4-
* 1-45-. ~ - . -
33tt Li) . .
1-4
1164
0E- V)~ u
E- r4 0
Pi Ul = .1 wE l
E -4 E--
;Af E- ~ *P 4 0 .-4 -0
.1f v -. X-4 oC4 .g;
CA) V : --4 E-4 6-41 = = - A" "- :m 4q -4 -4 E E
w- . -E - E G- P4 ~00 P4 '-*- '14 u i C-)
z E-4 PQr.LU6- l :wr P: VP4 -94 P-4 0M)V) 6- * E- "* C-
C.. En 0 * r -P9= l. 0 )
a 4 ~ P ZPLcnE -4 Z= , 4 4E0CiM
o 00 -4 044 '9E
= -4 P 1j-4 .- 1--4 -4 11- 4NC\2 N N N6:4. r4 u4y E-4v 40 v a - -4 1= Y C
p44
A16
E- E-
6-i-
U 11
FA W. *oV
V) ) p* - "
P-4 A'- " 0 IlCa)C -) E- *q CJ.) u
L) 0- b- 0 4 *
on =) *q 13 C) *
oq 0 0. P. Pb4 .. * M P-i
E-4 (12 6-i CC-- 1- PZ * --z x' WC. X: '4 =l 0 6-i A4 2
CL4 04 E-=> P44
P4) - C 1- U) Zq PQ .1- -U Z k u .7
u 0 . En C-6- E-i' PL X:n -0 g* -IK &4 F.4. w - *q CA = : i-4E -4WP
0. P4 Ing C-3 C- E-4 * CA.~ C. I
~~~p *4 Er-4 ~ .* - -in- 4 q q .-
F)N *m E-0P409
vPA NN; N -4
~~pr Pc- PC U2 4N ' f
0P4
166n
E- g** r r* l **
* *
-4 o u l
*f s-4 *4
O* - =: C-) *l
4- -4E 0 P6
E- 1-47 1 -, E
tm E- 1- O ..4l
4 w - re P4 W
V4 -UN' 0, E-- =) -3- O-R "-4 0 E-
* Oa c 04z t~ '--" . 1: t* z: '- *1- 0 -
= W- 00 ', -4 ,4
F- .44 -4 p u-4 =. W (n r - " P14 U-) r6= .4
l:"4 U FII 0 o-.,4 ,I H ' E- N+ u &E-
E- E-4 4A
k-* E-o 04 *L P=- -4 4-4 1-4 m
W* N, A* C4 C
CQ' ZQ to 0P v- n* Ntn
w- rqi tv n .-r to ~ * - C mc I
n K tQI- w- v- 31. 04 04 * - q -WOin
v4 -4 w- -4 " v -4 w4 4 14
1.67
S II .. . .. I 31 . .. ... ..* v-io- Z
C-*~
PA L)
* o a~. 3.* " 3*
o ~ ~ ~ ~ 0 E-0Cl:4 3 *3
pq -0: W *
3* ca4J) 3B P4
1- W). 3* PC;
En * A W En3* ~ ~ ~ - k4I3 3 3
W *3 * *3
ra~~E- * :-.3 * . E40c; E- Q *3 /)3 -
4L.) 3-4 M - * 3* m P43
0* tfo- E- it. 0 04 E-4 -
Cd) * -4 P4 E-4 6 -4
C.) ~gcn)d 3* cn C
33 t u~- 3* *- 02:*- -ill3 * - Z 3
C) .- r4 0 W* 0
3* .40q z* p -4 a 3
(n 1-.4=V- E-*4 ~ 3
P4 Q E-4.3 M * W * c.3* r- 0 L4 Aq 3*PA/ * -
3*4 E-*3 -'~ * p3*P4'- * *C) 3
3*04' 3 * C) :
0 ~3* ~ 3 * 2 0~ *
z* F 1d0 3 * ~ 0. 3 -
F~~~~~4 * ** . * -
Obd. 3 * r~ 2. * rC30*F~' 3 3 - 3 .
Ln U') 3*4 - 4 *3 -. U * ~ 4~
Cl) *4~3 3 i - * ~ - 0. i
~ r3 e4 * 0~"~ ~ 3* .- ~'~3* :~168Cd
~-E-
= .4
% % 1-4
V.4 I = 04
P44 I. PS
C.,Ir E- PA~- . N
P 4 E- Q .. * V.
P(n cn E-~p. ~ -
In V E- C4 ~V4 '- .
All, E- V.p pUq*%)
(a~~ ~ cn Zi)Vt pa-i'* 4 .
E-4 4 *. FRI 0 A &
W' 4 &n .- E- =
= - d $-4 8 4 -4 ' 4 V.4 E 4 -
Z ~ ~E-4 %. Eu- ~
E t4 .:i *PA P4 J'14
d1 a P4V. r* m. W. E-4 P4
P4 , - W P4 "~ '- ) En- En11) ~ (a *
P(a b-4 CL4 6-
c n E -4s - E -4 * * -4 Er - / 4 V 0 4 - lN
V.4 ~ ~ ~ ~ - "C1 4 - =)46- 4-44 4 .
P4 ~PP4~-441 A4 1-P 4 1- 1- \/ 0 .)C
C/ ,0 PC.) .PM-'- F-e-04~ ~~ &- **4 VU) W
4a -"
E =. 0-14 C
Nr.
dW - 4 j. 14P
1-44
P.
04CiCjNCjC nn ont )V 44C.)i
1-4 q
169
* * 0
* 0Pcn
b- E-4 E-4 E-4~*C
PC E- 1I4
FE-4
W4 P-4 4:
W4 + E-4' o p.Q 4 :
4 PACzD b.4 + E
-4 -F-4 -ALf
+:.- 1- .4 P C
PA. Pa 04 P4 E-44s- cnE-4CC4 -4 %:)*rM c
En0 1.4 s-41. . 'f
7-14*. ..4 6:4
z)L) 1.4 b- -WC) .) U A )
P6 a 4-1-
X: p 14 UC/
0 ='di to 44 C
PA u~
(00 I-
q- NS :~~
170
r34
04
PA
ma
04
Q- E-4
04 I
0
Ul 0
04 4
171
wo*
#-4
s-4
'E-40-4
C'-
8-P4
-4 E- #A - -F-I--
paP9cn4
r- n -4. AW.=E
$1 1. 4. N -aE E Cj
0-4 " - &4 " . -4 9 -
.4. - 8- W w4 . 4P4"PE>4 -4 -4 --. -4 o-4 E- 0 P9 5 --l 4A) A -0 Q14
X: ~ . 1..) C0 .4 o = U)) 0 % 9-e1 -9 )C z- -4 C
tnza 0 P- C4 -4~ 1- X E- P4 En PL) 1-4 PQ. a.04-4
C:,~c 0- CA PC, 44 N8 E4 - ~ E.-'
8-I ~ ~ ~ ~ ~ - P4 pr-FI ~ ~ if - -. P.40 Z.-F&4 F-14m- F-F-8- -4.e- g8-
U) ) uZ .A- P4 U)F-4 -4m48- E-C6-.. 1
- .4 F-I
F- o Wa~- Nbs-I Pl)
8-4 I172
4*
cn*
~** 4** * *
* * *E -4 * a
-N
3* * E-3* * ~ X.
E* P-1** * **
*
* * V *
:z E- m*-fr* 0 * C--
*x 1-4 pa Q3
*.. fri * M1~%
* 4 Fx E- E- *
-4 m : - fr
*E- * z 4P4 E-J 3* '-
-Z
n F-4a E- PE; u co4 0. E
*- 9= P3 . AP P4 *
*0 C.) *l 44 PQ. C , 3
* r*q .- -4 ri.- P-
*4 E- P4 E.-4 Z4 -4
P-0 'n 1* E-4 AA- .4 C)
-4 *= ) E-4 " -4 0
*- P4 *A =~ $364~ Ci4 P4 P4 At
*n -4 E- P-- V) 04 I- ~ A~
0~~~E o- C: *-W ~ ' ~0 0 c26
P4 * A4 PA A- o P4~4 -'2 P4
1-4 * Z * ~~2 P E40P P4 3
*~~~0 N N* v-
dlP 6- - ~ ' 0 P
40P ~0 0 1 - 4 -43
E-IE-4
* 'E-
wt
* + J
a Q
*E-4
-4 ~ r-4E- ~ ~ -A-i
~4. P-4 0 .*
-44 t* I- 9z;
0." -, -4~
m -1 E-. r44 *I
P- -4Uq I n r~ PE -1 IE-6 P1 E-4 M .W q..- P14
I-, ) *-.4.-
.4 * .4 i .4 E4 f=14 l~. j4~ -
U) U) 1/C.3 I - 4 -W E- to~4 g-44 .f (5(.
0 m . ~ 04 A -4 U 14 C -- 1 E-4
A4 *n " =- z4 * 0.-E
P-44 .0 A .4n
tzO E-4 :::. s-4 N L4 VC)C En W ~-4 1V 1- y 4 -4C'JV N E-4. P-4. NL C 1'4 P4
0-4 w P 4 P.-4 1
P.1 74
E-n
% E-44
i.1
4L P -
0 E-
P4. P .. E-4'A E P*P c
n PO E. PI
% -e 1- -% ~ ~~ ~ W -U) ) -
i0 U c.. 6-4 C.)
E-4r f-4 WP6 )A CD) 1 -C r4P7 14 "=E
P 4. 0 - P 4 P U; ~ i - E - C S% ~ 9.-:m. .-C -- "!p "N ~ -
pq 6- M V) Pd 04-Q L 4 D C&)
=) tf E
C. -- * m.n -K4 W. r-. P.44Q zA8-- p) =..P. .- A.' u Qf4U P
P.. Pq An-4P Ul W z- A. PQ PQ. ZPpquU. If- .. ~C.) (n 4 >. CA s M .. r- -4 A4.4 -S4 E- -4 PC; 1- P4. M~I ) W/ =3U
= AA.4~ - '04 -- A4 I4 - $= PI E- ;4 Ce. iq n- X 4^e.4e. P4- 8-i EA V; . 1 = p.. C. P"s i-
A- V) ". 0..c E- M W 04ta" j - A " = 0 1
u S.) C.C.) ;Z r- .1m. ".-4 OA 0- W. Z P.. '
A4 A4N A U 1- - W -4 P
0- QP:
pa A
0
C.)-4 NC'J N N N NNN N .-4 N C N N NNNc
175
o-40
-0
:zbW-4
0 0-4o -
t-4 E
W4 E-E
o. E- * W 4J-) 0 '**
~ ~ ~s-4
E'- r-4 0 44
S 4".- Cl) 04 U'l E- V.- l
Cl)P 00 EE"s P4 6-. n. .4 Z V) E- CA
PAE- P OC) E. U'n pq P4 0. V) O E- p
u 614 pq Q - =) .4 P: 6( -0 E: I" W 0 0) C-) = ,4V
6-4 Qc r4 ho .E-4 -4 J- C3 -- 0 9:
0 ws: z** V). ~Zl4A -. 4 -. cl) m~ 9=1 ='4 P. U)~ W he: P-!C4 4
-V iVl -4 C4 '-'V.4-- 6='.-4p'-4 t.-4 *
.- C-) 9: P. 0-4 -4 4 An4 6: =.4 -
-e- 0- pi X: .a'4 1=4-- 4 4" 4 . EE-r ~V4 " Ou) => "q. 92, v - u E- Oc,'
PA' a.4 xl 4".- Ow ..-4 P- 0*- 4 C . -
E. s~-4 cn V)44 0-4- Z / E-~~ -PL4 C") E- 4 P4-4 X~ -"C. .1c C-)
cn . = r-4 4 PL s4 9:4 x.
PV P E- -4 0- *4 0- - 4 V) " = ) -
V.4 -.4 -. . 1 94o4P4 U
PL
0
.-4 N C'JC'NJCN N N N -4
CL1
C.~ Lf) iLLnf cO'D (D to (P4
176
C-
4-P4
.- -c
E- 0
po z' :4 C- E- c
9-4 P,4 UJ vl *- Y-E
(f, 4=1-4 p , -4 q
E-4 A/)- - % 4 C4 ipt .=0. -c -1pA
4r E,- P1.- )P; 4 4
P4 a4 IA E- (/Z44 .,- V) ;4 - a
WE-e-'4) C) 6- V)2 x c4 q
"4 t- C1 0 -1 E- W .4/ AA z"
p.. = -. 4 ..~ .4
U E-4 =- w= E-4/ P
-1 A4-4 PL V)~~-/ -. 3 IS2. u -zU c
Cl it C4 -l 42 ~E- z -Z
% cr c.. 2-1 L; o 4 #-4 p. A Z E- (/2 U- V ' P
- w - -4- , ^-- 0" '4 u- 4; E-
C.- 4 t1 9: = L -
- ~ ~ az P.2 Et (2 4t tt*f l-1 .0-4 7/- ' ; = - * (.. (
S -41- 0a- -40 . 0- -f: -U, *-1 * 0 - P4c
Ar 4E o4E-4$- - v-
-i pr- P4 C- 1P- Z C- -
P - --N -4 - -
:e \J JN4 4 --1 -4 -.42 N N "4- 4N4 -: -c
N N OC\) C)' i QC~- N~ ~ r ~ ~ N *4 tlD- Ol CJ,-N \ 'l
0-4
-4 P
E- 2-
.14 PCE- in-
Z- pr % n
0-4)
Pq -4 0- X
-440k-4
~-4 E-4
~ LJ Z 0 -.4 f'
% -C t- W n
~~)E iV)Z -tra
z Z1- P-l E-
Pr'4 % u
tn l; qU) PL E- Cd0'
U ); E -4 -e 9 = E - 0)- - 42 -
.- - 1 E -
14 h4 b-4 E- - P. Pr W PQ
W4' x- i- fr.4 -Z ~U
E- 0- C'Pa tp ''- -~- U -'1.
CC, %- k. -4 0 4) CnEJ4A C
pq E- P.. 0- P- rA 06 -4)pq 4i ~
C) 1-4 P I:--- "- C:)-,- ~ . ~ E ~ 0 U C ~ .
pL. 1-4) PZ P.t W. 41P - PC: Vi u) bCi) P W~n iNd - 4c V, 0.,E-4
Z: mf' r.- E- /)-P E-4~ 'el r.- -Zf- ~ f- U
0-4 w -L U)- W)- E-4- 0- "1PlP -=
U) -CO P.. E- E- p4 . ,4 C.)q .j ~ .4 U
UV)1 f'q E-4 Z4 ;-C Z)
C/ - - -.4 W4 E.-4C.. 04 ,.-4 Ci I-40 >-. p
1- ~J ~ C~i-'4 U) 0-0 4e -4~t ~ C.
* or4 :4 C.).) 4 # C) P
CZ- * ) 2! *4 $1 / V
"4 0- -4 V)= V
0- 4 - C)C
P4 - -;P
Lfl)
C-4Lr
~$:4
17
-4. -a. E-
IL CA~ w I~
E-- P4 0
.S4 1-.0 0 C0
C.)C- P 4Q 0
0 '.4 E,~ .. E-1t_4 QC. 2: 2
0= E- E4 E4
9--- E-. V) :pq A; & =C E-4 C
E-- &4 E:- ..)
0.4 r)'-4 CA- * f I/-fJ -
U4 .a4 -a; III !II !I I ) E-E- -4 P
E-C.E4 P4 a ) P l L
U) . m T) l.4 tf -179 ~
E-
-..4
P-4 $X4 ~
04 E-4
'- -4 E-*
s-4 +
- . E. 64 0 -g P
PI 0E- Cl) jz ..- p-
o .. .-%nl- V) PO ~ m 4 C -4 P1
o - wi E P4-'- W
pr ;a &48 &4 0a r-
Wn rV .4CII- .1%
1-4 pq .04 PC4 4 4% ~ ~1. E.- AA1- Pe E-C.) L'In- P in- l..4 1 -- 4~ ) -~ >-. Ai' -9 -e -4
E-Cl '4 pqd PA C L . * c cin~~ -
r-4 Mr -~; FAh 0- w-C ) - ~ C)4
PA 4 E. -4 E4 tr A .4 E A -E-40- - C)~- - -
- . -. fk ac 4
a. *4 -4
'-4 P -
N N. M4 PC loN N N CJ N N C-4
L) " V) Afl* N CP4tC )V)
018
0-4
E--4
PL; A- E- E'I- C PA 9. 0Qq
Vl) 2-. 3 9f* 4 -A-.0- C.-0 E- A-
C-') : C-1:-4
4..-- ft. Pr -1 A9. 0-4~z 9-u4 0.-.- $zC) E 0- &4~ C4'- - .E- C0 E- PQ
E- 2 I' -4 V-I -tA fl 4-^ -I- 4I
4P VL 1- 0-- Pi -Z - 4 0-9 >.EC
m ~4 C ~ 49Z -t ETz -4 PAt -.4A4
.4 1 -4 An'Z. Q E-) 0 E-44 o-4.- 0 0 -
)--4 = A l *- ;z AA. C/) 0C C -V t 02- MI/--W
- T fr M 0-q%/p 4-4 - -, 04 2 L..E- pc. =i - ii -Ir- pi -.- 4 -n-" -.3 tpZ
E-A- 0 ~ 4 -4AI- C " I f-> -ItII 0 - -lA-X-9 C- -c)b 10; V
-4~9: P44~ 9 C) 0 C- 1) C-) 0.A E. - PL; If)V)4 /Z CV) V-.- A=4l-b cb 1 C;1 " 1 1- . 1-)-1) p P-
Cl)P- P4. >4- M. ~ ~)) P. .- ). -4 P4.)'.- *V C)t -V)2-V. W-i~'- . r- If 4A- X .4 - 11 zr-. m 1 P fV-c:. 1 ^W
d.4 I n- Pq CZ * E-4 >- E V-4 E-4 L)-cc P- 0q Wo . Pl a ~ 0 .A
$.C) -4. E- A Nt44, &IE - - - fl.E4o4A,
An -4 :- . - 0- 41- " t.- L 1' ' 4>
o-4P4 P- : 4V p M V)sZ CIE l qV C4 iV r4
P14 " 9r 0-4ftC Wh-4)L "C(~ o-4D~ :2 -COL .- !04 -42
C.3 )C.'.Q
o181
_--
V2
V 4 x --4VP42
0- 4p
1. 0 1:4 P4/)~PQ -,&V, b- 4 -tI
0.4 C :14"
W-4 E-4
;-,- E
b-44E-~I "e E-
P E-
Pe C-d)
C.') + P4'
P4 C.! r -f 4 0 t '4 E-Z
-4 .. -4
E- PC -.140-4 pq C- C.)
P4 ,-4 P"
w 1
-4 P .4E
a,) A~ E-4-e
re. P4 -44A
0 E4 4 V182 4
LO
E-4
.4
r4
s-4
pq
g4.4
4
.+
*-4 A4 F4UP
44 PE"mE- -e, G
o-4 w P14 D G-4
6-4-
A4 E-Z It
.40. P E- r4 FA E0
aa 0- 0- - -
0 W M.C)~I 0
PC P E, m -4P-4 di .4 cn Xl: m
- P4 -4~ X-. A;
0 P-4 -4 M: 100. F-l-.4 C- P
0 .4 o
Io 0
4y.4
W-4 -4 01
183
0o - uZ
>4-
01.4 M -
-4 t4 Z
( sl 0d .41
C-44 6
E-4 -
-. %4 c'0- z P
0-4 P M 14
o= .- 4 u im - 4P2: Z ! . ACb 44 -4V E-4
pq"U C PE4 * ~ -.4 4 P.o- 1: P, % to-4 pq w
% -4 E- E -4 C-.l
C-4 X:V- " 14 M) 94 At 4E
z g .. ) E- -4 P - 1-44'-' s~-4 14C 4 :C
X E-.cii14 . 4 C L.W .4 pq- AC 0 - P%-~ 0. E-
X: 4 a " -9 V * P- 1:iIV-f- V. 9: P %Zb.$4 .- 0.-
04 P4 . : 0 W. 1- W q (1.P 14r L.p N 9=E4
El) OZP o- 9 dg -4 -4 z.~~ *.1i 0
~~~-g P14' C , r 24 2:2: * 4
0~: 1= C. , ~ z 0Z94 M: ~ : 54
00 0
X: V- 'j N 4C)
C-) Q 0-
P4 M4 Fa*
184
U77
1-4 ~~
W/G. P- -Z~4C) PA L P4
-4 E- % -d4 E
P4E X cC; P..
E- E-0
la,4 CA " - pZ
pr. L)4 = U 14 m
4 &4 0
;x4~4E E-E -4 E - P4I
-a r 4 pq -4 CDu
&4C) PA -~' 9ZI 004
U= 4 04-4 X -t.4E-1--4 0. E-)-
o-4 % 1-
0A40 A4 P4 C I-cc
f~~ * :a'- :3 -4 14 -
E-4 E-44 *4C.4PC040P0I E-G4"- .4E-
C)Lnc C 0 :D pq 6. -
E-4- 4~ 0 * 44 E-
0. -It -. 4 V)E0, E-4GU * r4 EC/4 PL.
E- b-4. M- tn- PI u- 4
4 E- P cfl 04 ad E- C)O0 M ME4 "K; E
-. 40 *VI p
'-4 ~ ~ C) 1-4 4 4 4 4 P6-4.
u- 4 4C P44 PA-' U -4 A- E- '4
Eo $ -164-" -4(\2144 0C /2 .-n E-*74. 1-44 -4 1: (n,
=4 En cn 5-4~ En ~ .4 - " 3 0 0 -
C- "0 cd)C m.4 64 C4*~Z- 0- E-4 E 04
En E-'40' P. P4oP V) PL 4 Z1
* 04C)04Z * 6-4~CZ~
54 p
0
a)
r4 V4 4-4 N\2 C\N
185
e.-4
* 6--4
6-' 0
L) w
Fpil
F-. -.4E-
p-. e4i
F-i-
0 4 --.41i M ) =E- -
pq n E- C14 C-0r0- Ui6 -4 P4 )
C.>~~~~C. Gi W P4P )> r
E- n P -4U a4L= - PC;P. I-P a Z .G
0 44 4- -i -> W.* -i NALI. C.)- - ;. = - -ad- --- -c
x:.4r> n - W . 6. 0-4 n Q - P4 ) W4 1-
0- v i - 4" Ar- -b.4= . , . 04 1. - . c* 6-. .4. a4 P- :
U) $=I C.) P-4 P." b4i;IAP4A 404A
.r.~P. m.~ U) tn C.1 4- 1 : L . 4 iL -el;:
P4)C. *.> a 6: u .C) U.. z - *- It"4-4L3:
Xo %4 ) CD. .. /- co wV- ~jV 4 4 X) to L.- cu C-4 'C\'
2: Cj Cj ~ V) V)4 V.) V).. v-i- V)ici m- n.i-~ n'4a n~i L 44 ,rF-i - 1l-4-. ~ / ~ P.-0 P. ~ - F i ,..I .i 0 .
P186
6-4-4
c--
z ~ U
PC -4 1=
X:E-PE-Cl E- -- W
C-)
E4 F
E-4 ,- 4-
PQ 4C) i4 Z)1 P-
P4 4.4 =A - P4 r-I -44 zU) -4 E- Cn 2-4 u -1 2
0 -. *- Z >-. E4P "m = C) " nC A
2- P- - 2-' $;. . P14i4 i-
£/2 ~ - E-' = -PA~~J
Cp A4E4+
44 .4-.P4 P
0m 0 Qb40 w q P 1 P4L
.0 n14 - Nr
E- E-0 E-4 1= E- pa 4D~D
=04 90 Q =
w 1. E4 - " Q P u::w V4w V 187E
-
E-
E-
OX4 E-4i
IIn V) VGq Vr C4
-p - e/) -
If \o -4 \ - 4 wl -
cc -0 2 44
Pll v-4/ 6- 0
Z+ + 4- 00- V) *-E ---~slcl " - P dC * 4-'' -4
P 4 = pq
rA ZVP E- E-i A.-
fn 004 0 P :;paE
c- - =A E4E4 PQ> p -0 q w2 1414- o4p t
w f" .
rAN 1-4~C "~ PA A 4 W A t 0 4 - -
D-4 P
1188
E- El
A- r-4 *
friE-4
L) .9) C-) C
w- Z- r/A T-4 r-4~/
r-4* = + + 0 b ~ 0 .e- .
W ~ ~ I II E I@ - - 3
E-4 W4 p\ + E-4 1 Ar E- P4~
a - :d5 -4P q. L E-
6-4 94 :; .- )-P4 =Z 4) P4 PA) E- A 4 E-4 E-E- 4 (,,.P14 PI P-
0)WP 1 n = Aa a o. PeP 400 )
(n - - ) .4 E4 0 4AE qE qa
4 lqAnp- PA Atw 0 pl,189E
E--P
cz t-
E-' -
PK P-4o
~~$-4
C- CI-4 0-4
X:4 E--4 P4
p..4 P -4 14
E-4 o~.-4 u -- - 4
= -44 *-4
E-4 d04P \0 9:P40 E-~' W 4
W P4 = L P0
N P4 P4E ZP
0 V P-4 C4 PL E4 r4 -) 0Z fr1' PL .40. g0
.9 ;P PQ0 * PL P4
P4 0- P0 t\L; Uc*0Z C) 4 E" PA %7- -
PL 4 P.. z &Ipq-Wp f0 0- 0L
tM -9 -4 - 0 +I +4 P + E-4
E/) 1-4 o-4 " = =4 4 4 E-4n - W 0- 4P4p -3C U q-4 04-4 E4 .4.
0-4 W P4Q P 4 . 44 4 Z hg
p- 1 pc PC 00 pq "4-40Iq - 0c E A40 A QE-4 - -. l
&4N j .140 4N -a
c'EJ 149:z 4a i.9- 1 W~4N 1 U110C-
co V)- P-4 "4 -4 -14 -- 4- -4', -4 *-4 -j "4 -
P-4
PL9O
-4P: E C Z
0-s
0-
E-4
o~p crxl
C.) ZO E-.
=4 "-4 zP -
va 4 0 C4E- (0-4 Cj "
C-) PO -64'-4 = E- =0 ; 04
A4 0 -%E L
V) = C- P -0 -Cl) C> -a cl) -' Pi Z
PQ P4~ X: g ' - 64G- Z r r-)*1/) P.w w t . . P i 9
=3 m A . 4 1 - .0 "-4 4W
El ~ b4 CI2 " C. 4 A . C/ P- ( -4 4 E-4 ~ E-&
;z -P-4 r- .4 z 2-I P4
E- C) %= .- E4 S4 *-p-,v r AA . dl .4P
-4 1-4 =/ "C)J X.' " " 2-04 k o 0 s4
V) 9-4 1f -PL ~ L9.).- S.-4 -.2C) 0 C4
f. PA..4
-4L
C
CU)
Nl UsN (! -4t~) N 4\
tr 4 4 44 O.4 44L 'd, LaOJ- Nr L.'-zDa U)
-4 44-4 -4 --4 -4 -4 4---4 -4 -4 4 -4
191
AD-A092 404 NAVAL POSTGRADUATE SCHOOL MONTEREY CA F/G 9/2DYNAMIC LINKING IN A MICROCOMPUTER ENVIRONMENT.(u)SEP 80 6 B BLANTON
.CLASSCFIED NL
3 I I IIn
IunnlfllfflffllfllfllEEEEEllEllIEmmllllIl
r~- z
'.44 4
W cn -4-f
E"- 0 4 E- W U
4 % C4 Up4
in- .- ~.4 - 4 AC UE
0 E- 0;E-4:- 4 2, z 0l PQ 2c
4 n AA pa 0
04 04 0 O 0'4-4C'~P_ 0 0 ia .4
N E- C.) P4 b.4 Il V
V-4 E-4 0-4 -: 1- C
W) 0 0-4 1-4 0 Va PI.CA
b.OI = E- Mn 0E-E~-4~ W4
.-4 N 2 n Aq1 5-0
E - 0"Z =
o ~ C. U -o 0 -4 44 1 4 0
o~~ " =) E- M. 4e.4 ~Q % OD PAi 44 r4 E-ai P4u 0C
e-4 -4 .f -4 F-4 W -9 '- P.4 a
in 4 A. -' p V) Q x#0
P4~ 0-40-0 cn =) W e -4 p -4L' Z 1-c -
ft c.; vPM04 4 .- a.ow0 Q 0zV'rA0 040 x
ca N-~ i-U ul asc 4"qP na -- MM 4 44 i~
r nQ M Pal4 P 0 Ui V- QhC4Z r- 4 = W E- P
2A a-411- 0.4 0 PVAi P14~ pU. -w - = LlW M
W. hbd - - U 04 ?. A~4r fl- .- r E004 p z11E4U- 0 CZI
14 -.4 A N ~ ad 40 0 -4 P4d r04 4 W% z .4
94 .0' 4 0.4a- nga pq A4 44 .4 . CA r2404 0i44 E-4
0 411-0- U') At 4 s-4 b4 ." 444 0-4 bd 0P w Pn- N
E- E44 1-4 J2CV) 6. -4 to6-0 r-4P (n Ea-i4 'a0
22z ~-" -4 F-4 AN4 04 "4 U) Ar- 6-4 = 1-4 E a '.
S 00 Nli Q n p v 4 a4 % 1-A-4 wa A= .2 "ul hdP4 A4
L-4 4fl*4I 0 P4 4 Wa 0 P4 20 Q' 44 c5p -4 =)
U) 04 WE E .4 -4 e~- A4 .4 -40' 0.4-4 A4 -04-4 n W-14P40 ~1:4:0-0 a- 0.6 04 C.) pa rL' " - U ra 0 04 z C9 4- 14
cl) P-4 " Ii4U C n a2 C4 a4 .PQ 4 0 a -4 Q~- 0-4
Cada,~FA 0- Qs =a p aC33 ..4..
pa'4P-4
04
19
-4
5- - w14
N E- M W N
0r4 E-4 W rera4r=4n *6 E- -W. u
% -64 E- :4 PA =
pa E-4 -, m n4.
-4 EZ4-4 PQ W P4P4 0-O04U~ -m - N3 4 E-
I.4 pq- p 4 P
w Q "'-4-
brA4r. 0404P 4 cnp P :
a ~ Aq W P-4 -- 4 V) c UE-%S0 L) = 4-~ " V.1 PAQN 1-
ig0 0 4 ~- 41-V.4 0 -4P4cn A4 xi P- NV."-0 0- C. 00uV1 E M M E- E-4 Pg z $A W4p
- W Wc~. X-V C- -0 E-4 P- P :E fl-4 &4 CI0 " = qa M 4&
U) pq E- P4Z4 *4- : 1 ; r 0*4I-U
01 a)4 E ) -4 I- &4 lqM" -
ifl- 04-14- N Aq ; ~ i Z A 24 Qn E-4' %bd 1-4~ *q ,-fV A pV.1 V.1 p 5P a 4 F bd
1-4 PL* 04 r:04 P4 Cn = a. r-4 P) A jr -
pq.1-I Er :ZE 3&4 4 P4 . .- '4~~~V.1~P U 0. 44n-i V1 , - V 4 K..Aft.. V41
S - 44 E.-4E-'4-4 04 04 W. = = *i-0-4 W V.U qC. E- = 0 P464P '-4 4 I=4P-4 *- -- ~ *- " Vx W .04 PQ4 P4o- P 3. P4 Nl *-M1 4 w
tn -.4 C. 464 W.-4 C3 4O-tE4 WQ. q 4>4l- -V.; V.1 -- C -4 -4 4 rr1'4 = ) " -: q . C pa .19 4n-lC.)
0 4 W44W 4 4 i WU Z-WP bd 044.~1 - E- CO -- 0 M* I.4 1-44
1-. 2m wn-E.- 04 " "-M" "4 P" 04~ V.1 w 04 ;q - 0-4 En CnEn
0 -4Z..Q 9 94=o. -4 " E-Q W P1 v-4 P4 E-4 I--*4"r- 09P l IP64r r 0 4 Vl-i0- 4-1.- .-1 V) W Az: z Q $;
pa=m04 1: Q C HR3 4P 0 M M 6-I. 4 V.1 0 p
6-. P4 CJ1 04 a: u C.) A4M .9-MF I 4 -4 PA '4 44 d0
pq 01=-4- r
P4
N Ntf' m nte N yN N N1 ) f to V)
-0 00C CD 7) IS W4N V) W4 W) O -ODa) M% C- C- C- - - L a) (ha) a) a)o o CDo oCOC.I ,- 4 -4 f -4-r4 V4 9-4-4 V4 94 -4 q4y-"I T -4
193
Q F14
V2 00
.40
04 IA4
6-4
P4 C.) 1- L4 14.-W4 tc 0n; ~
319 M E- V 0 4
~0 rs ~ l 44 .
14 -4 - sE) pa E- agQ04c
gn E -4 = - 1= 14 P4.4 QQa
C%)pa 0-. 0 49 '41E4 w e PI
b4U) 0 A4 r" -
-43 p P4 %- Pq 0 P4 P64
P-4 A X: q(4 E-.4 -~ -14 -41 -m w AQp
2m- P4~ M M V-4 Pa A4 6= 0.4
E-4 bd 04 P 'Q ca -4 .1.4 a4 Mq 44 44 p P4 A4cn 64 A Va. £'4 P '- P A * 1-4 -
o 0.4 0-1-' 4 1- CVJO P14 0.4 0.4 01 *4r4 V P4P4 b4~ = 1E4 ~--4 4^) 14 M Wm~ P4 q-4 4A.
.n.- 4/1. P-- 04 N 4 04 "v. E IQ &4E & I-. - pqp: pq MM P4 0 cn ;c 14o PM b4 = E-4 M 1-4
pq " 4 " f.P =IN 0-4 4 -4Z = a.-4 ~ P4Z
E-4 " 14,- E- ra 4 :4 pq ,.q 04- a: M 0n roa. E"C. '4 04. "~ CA- N- -~ ~
gn ;KJ0 44 P. .M-4 .- I 26.4 C.> aq ~
Z~~~a Q C.) 6 4 -4 C.
cm q- NI M4 CZ MC - k mc0
Z: N to U L M T4 1
P19
U27 7
W4 1-4
Wn t-s'c
C- 0 U2cn M 4 C4
,nu4 .1'4
0. 0
" 4 w 49 m Y-
.4 to
0 -. 4 X A0P
195
;The System ?outines invoKe the CPlm operatin? syrstem;to perform their rpspective eurctions. This centailscalling tpne sutroutines monitor 1 (cnon1) and
;monitor 2(mon2). moni andi ron2 very sirr.ply transfer;control to the CF/,, ojperatinp Systemr via a Jvrro vec torlocate, at 05F The pseudocode for moni and morA2 isas follows:
;mon/rnjon2 : PROCErURE (functiorn nurpber, arrumert);
DECLARE function number ZTFareurent ADDritS,
load the C repister %ith function numberload tne Dl & 'E register with ari-vnent
Jum~p to the CP/M entry point /* location 5
/V- CP/M ncw performs tie desired function asdetermined by the function number arlarguments *
return byte value In the H A L. rep IV rron2 only ~
;end mroni
;the followin? is the assem'bly cod~e for mon1 and mor2
ORG V?100H
CSEG ;csep tells tne assembler to prod!!ce;relocatable code
'LIC irrnl, rnon2
bdos equ OU1SH5
Monl : ;ronl and rror.2 are public labelsrron2:
JM? bdlcs
END £1l'C?
196
APPMIX C - TEST PROGRAMS SOURC LISTINGS
-4
0i
W4 P
4' 74 E r
PA- I. Dc
0 P4 ( 1-4 -
o
'4.'"" 5I-,, ..+r
.5-, ...0 --, . .=-44 >. -4.-41
' W E- 0 I ,,- ,,
j- 9." r-: I= .-O 'q r.¢ p - r.4 r-
eu aj .-I PQ -4t-
-- ' . . - . - . 0 ,
0+ 0;g g " " o
-40 ~ ( (L -4 -4 0 U-4.-4
9.. =- (. . .
001- " 4 .- .) -4 ,04 "* 0-:
C. =-19 A u r u 197P
V, r- L5 ~ m. cj- Z-1 Q wr- .O.. . rf~ 5- - 04 C-1~.-
pa- w L-, d( - * .in.'~ .4- U ' ~ ~ E
c-0,.4U ) -1 ' ~ ~ ~ ' -
;4 E (... .,.r_5- 0 U ~ ~ e. r~ r ~ ii - ~** -4-
0 ~ -- ~ 1974,-
* - 0
4-' "" * a; =
V W E11P
0 IV E- 0G
0 -4 - inUPmI a).- (Ii cLi E
-4 ~4 0.4 p- I"' *.4 4. 5 0i -4OC -4 i- z* ~
4. *% a J 0 .U
(Li~2 IQ. C. i198
5- VIv%r v k
CL0 z0 -
-4-
(L W Q
'a. 'au
0. r1.-4
(4 -i' Adf (L v 4
0 £ 0.-0- I4 .E -4-- -4
I .4 "4~P4 s-- E-4- 4
1-4 E.-.. 0-4~5 4
N- M, V- fP
o:4P4P - 4 k 64 r-4 W ru
W- C9 l r~4- P4 . J .
z E- W-4., " b-4 w
M - M- Us- uX:-4 --c.
oc v'
"7r. 4.4 IQ 4
to P;-. -
V)C)% )c = akt a 4uP pr-: P C' (U .41O.. IV
a* Q'L~'-CT 6... j..~~
199
0~ 0 0 &.
P . & e O 9-
,a 0 4 *5.
1 an V~ -4 4.~-
to3 to 00. 5-. 5-.-
0) aj t -. 4 -*-
to 4-D Ill Q) 1-4
54 5=. C C t
4k. C - 0 j OSZ1 r -0 W-4 -
S. i. ~a c j
0 p %A 1
Cd Qj- 0t I 4.4 a) 515 *
0 C. C4d .-0 .- i 0)
w' W #..-0 4L' 0
(u 1i CL 5. to,0 Q -4 5-4 a)* (U V
4. = ~ E c. - ic r. ,- a 0 a.,..
4- -3= 4-"S to 4 44 * -4
*'U44
r. Q) - .4j U4 0 0 0
a, (L Q 4-a ILI 4 pq a
0 V -0 £eU. ev- 0 0 p *
E to EV l - 4 U ~
P,
- * I
-4 So. --
CL 5w n ~ t,4 E-
r *)L L f01 * W 44 tr . *qz **
-4 ~ v- * 54 v4 1 -4
tw Cw (S.~J~. C.P- QP4 * Ls.-
20
4Co.
C,
I- &1010 U 4) 4 0 4'~
CLI (0 (a) /
5.-. a. , 4
-a V- ) CL0 0) 4-
0)4 5-0 0 ' ' 4 0
0l 5- ti -:0a l
0A (L $,.4 ~4.V L -0 a- in)5 0
ro a, )0 - ) )1
401 0 bc..5 ul .,i. 4
4S. f~ r-. c: 43 .C- 1-C
91. -4 (L'-
d)44 4 -4 CU I.I-0 4*4 . c~'s.
&.Z~ CU a, -4 ' W IV4 w I4 Q)Q)
C4 u ' .- =-4 =) =. =0 = Z
0)j fu- a' * W, Q) 10 .) .
5-Cu- 000 0) , 00)0 Q
00P4 Ur00J 1-4 E-. lz0 0
z0 10-2 M0 P4 -4
PK Eo FYI) 0>
100 04OP- a.0' (a C)04' 0
(0 ~ s -4>4. 4 E 0. :nd w -C4 #0W A-4 o . 0 ,44 4 a- 4
V2 -- 4
C))
to -4 V-1
4( 4 Ce_\W2r -4 U)I C4 0 ) C -4
-464 4 C- W W W. 0b n -r- C-
tt;Z 4 -4 4 V- 04wiv4-
20
L
-4
(1) s-
-4 a)r-4 3:Qj ~ z ,I a --
t6 P, - $. % 0
0 -
a. 0 C.L -
'-4 03 3 0
.. 4s > 4 -E-E' E %.4 (o o 0 0-
(L.U O. 0C.'.4 ~ O
0 ru f C : Er -
o ~ -4~j C~ I * ,-4 ~ C) ~ s
04 P4 -4 .4- a-4 0(E..
PQ010 *
--- 9 PL 0-4 0L P'4/ -4 r-~ S-
.. -4
-4 -4 -4-
G,- r -42 T -4 PL
W Ut c,. T)M;. 7a, *u w. U) I- L
*4 V4 14 -4-4
0, C
- 0 W U P2020
04-
a: -44 f
44- 41
4- 4-.-1
CS-.L C.)~
(U (-4 U) 44
C) L+., CL -
.Z 0 .r o -
LA . .-4 '- uE 0 -
!k ~ ~ ~ tL C0 -r
d i l0
t) C - .14C.~
M t - C. -- 0 W" ~ + (L
" *-. -4 Q; C*-.* ' CL :.
C.) '0 A.;4-*-~ ~
4 Q 0J aju c .j 4-' -4 a, Ca 0.
D't'4 re
-4
-4 *-h ~ 4
ro; 144 -4
E"JL 4 1- V--
-41 ,-P4
~V-
CC
C)-zP 1 -4P
'0-
C.PC
-4 4-4
CE, *-4- C-
203
-4-4 n4
-4 -4 .44 1 4 -
0 -0
00j 0'- a- O
0O 0 r-. C- 0-.-Q.WC~-4 WOt US~ -4 t
X . 4 U)(L ,r, 'u :q
-4 F -- k. Cc0c j -u -4 g ~ 41 -V)
cuO~ cWr ' 0 ab.4
V.~ -04 (51 Izr 0G eu O a,0a
Q;4 C.) 1-4 0u a /-- Q0 4- -. 4 (L 4 ~ fl
kn -4 -3w a ri-4 "
4. +r + 4s- + id".-(U lt' u-
.3 0- 4- 1-44.
= L1 = a )0 r - L S-1 41 a; s (V r 't- * #a. g.-
r-4
c~.1-4 1- i
PC' ;-# PL E-
U~C4 E,' -24 E-. 4~ U .a)~~0- Li4 0. L. . -4 .
0T* 1-> 4 P- 9Cc.S-
0 P .~C C .. C..J.C. C..) C/~4. C 7 0-1
t204
-4-
4-2 -4 +
4.,. = -
u- 4j. wk
tv - . eff 04 P~ r.-4 _
11) " - L .14 ;: 0 -
Ut ) V.44) 00 0 v' 00
CU-i iT 0 (a 4.2 V)0.) ~ ; l C
o a. G, 0 0 010 a) 04.' $-. 5 0 P , C,-.-4 k - C.t -C
-40404 I'V 044-. 4-
E .- ( . a -4 f*. a'0 .0
44-4I
C_ 'U *~E -4. W -- 4 aj C)44- 4AO- 4W .4 0 ~ A- X
,- 4.. 4..-4 ) 0u VI/ 4( 9. O(L 0 a = i 9- a:
s: a) (b 0
-4 -4 U4
.- E:.- 4p. -
4-4~~- Ln,4 JCA 0 'V pt * V.-
iU Z 2 P-4 U M: L"A
b.4 -a -4A=2-4 L ~ a- l EC
.-4 ci Y .A j C4 ; a .4 4 - - 4 1 0 g-146"t4F1-4 4. a) c.
P4 F= -4~
IC Pr CQ C FI0
205
(L(
r- A
CU ~ ' cu Z
04 .-4 J4 c.a
0 0
o 'I (A,
W IL4 C- E-4 -
$=a 4 T
W.)- (U - X V 14C4 - 4o. w~-4 E1494$4; I
o, C) 0
0 0 -4 c. -4J-C& -
* M." E-4 c-, -- ;-!0 c .:0 1-1Ca t. L f7l 71E
* 'TI 0 ~ ~ 5-
4..a 3~~. I
V- P4 r-. 0) 41 14 4 41 4 -4 r4
*~ P4. 0 C. S -U . 0 I 0. 1
r-ha P1 ~ C4~I- N) -4 W.-4 -. 4
E ~ C ClQ C1 5-. *l 0~ CM IN >l N.ZIN-N
*U Ca *a.j QWcl C . i
U20
a-I
IN , AL 4 es QJ !G.4 1-'. C. ,-s4w a S)S
rl r-4
I Wd
'-a-
a, .4 m .ub"c," ,
LO Lr) .C
4 a'-. tr-
CC ~ C-. LO esaQ.LOl cs - C
'tN0
U) C~ Lr'.Qb 14 -4" - C.t C
207
41.0
4-4 4-
.44
00
- -- 4r-
n 4.A. .4
(. p- 44 44- -
.. .. .. P"E- oV
0n = b. =04E s
oZ
CQ CD m1 v0
to aa. o. I- L % OV- l 4C
94 9 =14 : 4A
m w- F- 4n 4N(9 G16 61 a j 4 q494q- 4*4W0 V4 Q C
61 q4 v-4 rq 4 4 P 4 4V4 r4 P4"4 q-4 4 61I
61 G r 61 GZ C. Q 6iCmw cm 1Q .
.1-4 ~ ~ /~ ~ cfl ~~V2086
0
pCP 0 1P4f464a p .
a i 'mQemN b b 4m 44 U .N h SL-4 4 A 4 A1 r - ~jQ
G - 5 S s 94- % 94e
.s ew M m Qa 4 t.'*&ZAm-.N a m
0 scW'U-wwS .9 m&4
"& (S S S 49 dw5
-4 Zkl
0 - # 4 9- .
C6 l 0NQ Go 044,4.-49-l,-4,-4-4q-4.-49v,-Nes -
CloJ & , tpd 1-4 WJ A2 44 44 W j % Cw. G. W q- Gw N.
9-0 M - 4 4
.4 lv4
W4 4 4
49W4 V4-4 "4 -4 -4 V-4
45 S QiN wa .G ca 0t N ot.(wtQ. Cl
209
0c
a)0
tv.cu
'Ul
IV-
Aa C
W Id-pq I-4 -4 7
4)I-4 w -4 -%U C C.) 4 0-y
V) P I
'-4 q494-4 Ii-4 -4L W
W, CIA 44 N 044Q
1-4 "Ja ci a. p CA.ar
N.- 0. N- C1 s N
Nr G) N"C' tf)CQ
15) N N N c NN NI & ClQ
m ~ ~ ~ ~ ~ .CM* k q oc ) C
210
cu
Q4 1-4 (1)
0 *.
fe. z6. 0 6
&. cb(9.V% -4
0k 0 0)-
(a 94 p r4 p
X. LO vA'4- E
0J 64 A m4 " (S W b-4 C9
tsl o ~ cr 0 - Ng0 -P-
X; ec - 4
>,~4r4- Q4 0. 4z"PAW
-4 ~ E 64 ~2 44 5- 4 '
.3,q C.)~tf
'kc s4 0. G
to 0~ Qb2 (fl W) G. .a
'r - W4r -4 4
211
I.I
a, CLpEL
Ir 0E S
oroC
4c4-
- .
L.212
F- (I m
4-4-
AE z:
00 0
C, 'o0* W0
-4 64
Ln aj 40 C
'0c al E
Aa ~. S.I L
alC 4t- a) , 0- C,
4-c, C -4 r,-4
E -'V -, M. 0 -4 i
ru( 90Q -5-(C La. lb CL
C, 0 4-0 .C)C,4 c, r-
V) G,.
1-4 M6
E- -4
cr r-4 L
E- w -
C,. re 7. 0 C-) b< 0 E- M C,- E .-
P42 .14 . 2L: ,-r - 4U I clU 6..06L A0c')
Cs C'. !
i- 44 C . ?V ^ -4 4.4 2Q.4 .-.4
0~r -44 IOC CCL C-- ai m P4 C.
(-,w cw .'J C. ejC -C' C
N u h h b cw C-4.-- C-411.c-4
213
Z -v
o , 0o va
;19 VS. :3 -. 0 :. S..
F. 4- $n. -4 Z
+-0.? > 0 oi Ei tk eu
U, E &- 4L.' 4
4-.=; 0- 4 4-D ai4- (
1-4 4- S; U - 4 If-) 0--
0- > Ci
E 1 - 00 (U ..
a) ai 4-f~ W £L10 ) J. al~U -- f -
= ;,Q p) -4'4 X:+ . -4
m - 10 tofl > (c
000z*-0C"4-0 CO0W0 00 Go
C-4 -- ') -- (Uu '' ( Vr- u -4 E 5 ~ 4
4-f
C)0
-, 4 -4 s- ::p E- 6-
P- 4 - cr 0.) 7: PL 4* - Z
0..
0
:t'.-.4 -4 .. 7 44 (C -4 ... 4 W l)4V. ; N
X- v, P .. )t ' ol '~ L-b 1~ N U. C , C- r.r
* ~ \ jc " \ f t')4 Q)",ZvV) t2LcaCT' t4. q,'; 11,~
V4-4 _4 4 -4 _q 4 444v44 v -4 -4- ,4l
214
UIL
4- ro r -4 U
0 )U E W U (L0L .0 .P
F-. &-. =;)O - o L %~
:3 1 .. - 0~-' '0 .L V -, -4
E.' M U N, .- ;= ( F.a L 4 .PL f. #- g-. e0
a:0 (1' -4A E 0 C ul-4 0 k -t, - Q, 0 jc 6;)4- C0C-L
a; 4 r LU ' d 4-~U - C) U -.-4 10 t
6'. .- ~ -4 u. 0 eG. =
C f) *.-' 0I (V 4U *.3 m F () = -q"f.. S.-.- -1-4 X4.C 'c4 cz -Z( - i
0 cu +rC.oI 0'- ~ ,.
E' 0- 0- Sm00 l r~ 04S. cp~ a.) 0W04'4 (L (I.2 '06- 40 WI
4--,~-4SE E. (U.~ 6- ~ . 0 (L 4 0 4
L(Q UJ '5 OL a) j -4 p-4- > --- E kn i-
>---4 E ~ E .- 4 m 4v m>E f ( 0 .---' 00 'V -0 Cia 0d 0 0u''t
E V- . ' ) -4.4 E -4 E .. .. . ..
4 7 r0- C
I-Wl L) 4 -
-V #- W -4~ P-
'-44 :3: Y' P. . C -4-- .. i;
6-4 -C r- ;J -6. Ia.- .4 ,L*C,-Z 'Pr u ;--4 CC ;F. Z
2. PL P4S f-4t PI4 ~ .~ -X PA 1-
di-
n 4 . j 14)- W
4 4 -L W-4 -e ' 4-n-e - 4 r,-I r 0' cr. .4-
L. 'it' N ~ C-)~ N~ F., Ni PL C-. r-
-. lP4*d F C m -14 5a I 4 c\2 tf, (o C P, C-r C.
4 -4 44-4 .S"-4 44"-i-44 q4 -4 4-4- 4-4-4-q
215
0-4
wa a w
a: *X P4 t-a
*k E- 7-- ,- .
* l C-i0i a) a
a, U~
C, cn a) Qw cs M
L%- *-- C- .4- C-- La:a)
.0 IA r -r4-4 "
216
E -4
-4 -4
-4 -
-4 -4
-4 -4
0
S 0
-44 -4zi S
-4 ~ ~ - 0 491 4 5
ul - .. . r - --4 p . n S
P4 104P4 0
-4-
4217
C~w -4 -4~ Cw(,CS
ri-4 4 s ~
-4Id& (.Qti-
-4 G4G j
Zb -4 -4 -
L X 4 H0 14 (-Q4 94
C- A r -4r-4 . *G- -4W
-4 -4y-"4-4 rA 14 -4 -4
PE4 Cw , MC.. Z cz C,.d218Z-
0 -4)
E-4 -4
4-4 -
W >. -4 C
UJ-4 0 -4) (
E- > .-
C.) -4 E-F 4
(U m 0 UU . WU
-%,0 E Q) a .
1-4 L) -4 a;-4E-4 ki
(U4f 6n 4 *9 0 ~ 1. VU -.
0 r -I -1.1 C -i k 9- .-, u - C-) (Ii (Ui. -4 CL. CS r
4'-- V) .. 4G .- 0 4w i-4>b 4 v -4 + C -4 .- W-4 VP
o C- I(o eU) k4. (v..>-IPC 4k .,I-, (a4 CL -4 I Aa cu4. C- ,0 r J
4-IS. >- W =.) m.4(~ I v,- -49 -
o0 U-' C C ) L r = 4 w-' r- ( ii A'I -ZL -m 0 rc - C - .-4 E) C- 0,- L n
+a -4 'Tj =-4 10 4.N 4I ..- C0-- 0- 9= P'..- U) Q, 0 0 NI4
A ~ s C. - . f-4 -4 P4 u . 4 .4 4l
P4 PC; 10 C) k- 6:4 W 0 W. 4 0
(UC 1-4 COJ U 0.4 04 C- 9:4 Nr .- 5
-4 1.) I' - P 0 C) 4
P40 P4P C.
~ .'~ 5-219
I+
4- 44
4-' 0 14
c'd "-4
E-
4-0a *4 - 4-3
1 -4 - 14-
0j1- E-4 i3U -4 4 4
a) J P4 a 4- O -4/ -
~ '4 5.P -*- P.rq ~ -4 WW $. &4 Cc=
o- 4-j 0 1= .0P4 0 -
w -. 4 -: = m0 -W p0.N 0 U ;14- .~-
IE0 p0 ;:4 -~
W E-~ I - 5- 4-sz
~4 ~ ' U (4 ~ .Q I-r5.rc-4l1
N I 1W w ~ ~ . 5. 220.
(1) 0 a3
64-4
IIE -24 n4
* 0 0
(uo - 5-. 0
a V
9: Ea) (/ a
vi*c E- -4 "- W
10 P-4 PO4 E4 A~ W
0 i0 z4 E ~
0. C.W e '40)~~L tr U.,1 4~ =
4 ~ -0- vL* ZEUC(
Vq -4-4
04 ZtZa C.
221
7o
1.0 0 fa
Id~ r- a a&. a
o0 rI 0 r 0 0o
iV E , a,
4, P- (U 0 a
5-:w C 0 (11 .. S4d 4.) ( V) 'to 4 V 9
0 - 0 i. X_ CS .r O+.X 4. 4.- 4
cui.- E a;( 04ra -4 0 0 0
(o 0 C.) &. c..uE
P4 -4 -4 , C
a)4 Q ) 0U a, Aj 0
CLn 5-. 04- .0 -4&0 &A 4) .t 4- 4-
0 0*0 000 > o0OV 0
0L -- U -- - --
~ C4
z. 0 w0 - P00 .4 z el) -
54 4 EC)-4 -e134.4 -' I
04 .a o- Z p . .*a. a r4 *.a S
CO P. E 4
E 4 -4 -.
4-SS
Ua -4 1- 41
LO) w- cr .C 3 4 445C 'T.' -4
V-4 .- 4.* ItI)W4 NC\.- q- q 14 .-4 NC'-4 CM J4t-4
222
r34
4- 4-
0 S~J(.. 4-
* rd 1-
*~~42 4...- ~I 5
-4 a) -- ai Q) (0Z.
4 4 =U E 1-(U
-* 45- Zs ajW 4C)1 . -Q 4- ;. - 0.6
o IL -4
r- (1) -r- (1) CU 0 4 ,>4a'A QIL- 4.2.4 w 4 - _ ,
(a 4 .- 0 ! 4.0q 0
*j 4L . 'El (U w (U -- Q.> o "- 0 4 ra >- >C to ;:I >
E. -4 .- ca-* 0 E F.F E(
~ (U *..4-4Lt ~ ~ *-'C
- ~ * ~ L4~ U(a
E. :w z.-4. q Qj..
-4 l (U o-4 ~ U~. C-)J.- L) - --4 s- -4 ~ QV X P I ,- -4 , -- 5 I 0-.
GV Sf) .4, PL 'UE' - -4 '* ~~ ~ P *.4 * c . saa. a *a* a*
PL to0.W1P 4L-w AcPN E- C 4 CP- -Lju NC rE- .1 0.-I r4C LJt - -c :i
n~~~~ j' )Ur r 4 0l 4 1 4 4 r
4~~ ~ I4- 4 - 4- 4 4 - 4- 4tw0 Ca. i. tv Q.
* :~ ~ 4 223
.4 4 t:
a* 3.4D~ w- r_
-4-4-.-I
* ~ Z..,WC. -4
0 3t V. L .I r-
*Q -4~- -)4 .3 *,,9
(U r4 &44 a)4-E 0 CL "3 4 5--.- a5 -4 j
") (o : - 1*.-4 j4-. -4 1'3 X. Q
o - ot to '3 4- Z.-4 L.3 * 5-. 0~C4. 64 -Or-l
cu >-- 0) ".43- r-. $-Q) 14
.3 0 a0 r-4 # 4-) 0 =l-6j 4' tn vi 4- v a= 4
0) ~~u Q) (* LA -44. 0a4 .IB~-
C. (U o (L 04 .,. a) V -4
>1- 0 - 0 0 P U~--4 0 0 = 0 01=0 L; . -4 E. I ) 0 0o0 c
EV0- fl~C~Q'- .40 . 04P4 L-
p. a PI -t PO
= P4. L- W.Z-L.1 0) 0. Z 4 - )P.
* 4 44Z- P 44 0~ i * '
* ~ ~ -4~1Z.--4 ~ r P4-4 *
C5- rJ) Cu CZ W *P CJ I * C-
- 4 *q 0-1 P3~ *- 4 w~ "-- . "
14 u *i N NC) C- PL U LOuN0
I.* .4r, m N 4 % * ,P;P - -04 LO U)~ *nL n L at t O o -
r4, 1- v- 41- 4 4r -4. 4-41 4 r
0 ~ z z .. u . - dcdQ
C224
0.J -4
;n.~ 12 4cP. - P -4 >..~9= r = P J -,- '0
P4c~ 9- - .4-
-it ~ £. C. m PC, 0
4-:0~ r- -4W L-6V P4.4P
P4-
Co 0LL4 v
w. caG M. v- r..
C9. lw VI4 S..-LIto) C- 0) A 0 )C04 E L%-L%- %- L) aiji U
GJ a.4 q-4 w- 414 4o.I c. k;w Iw
22
-4 -
C, V
A... C -
41.-
IEEo ta
a)C.
w 10 P4
G d5GO
4&4
V-4 r- -
Ci ,4C..-4 - - -
t' Qba (.
ifl q- * 226
-4
0d
-44
e- .1 - .4 z
Cb a 4 -
ow:. 4Q 4"Z. -I m S o
o4c. Z h ()ZwW ':iW4NZi w ~ S
oX -Q4 4P4949
s-4 p-4
ILI
-4 -4~
-4 - 14 "- -~c.4 -4 -4.4 P
~' ~ 4 ~ j
-- 4 Qk
cm C. 5 C N1
- 4 - 1 r4464 -4- 4 -6 -4 -4
227
io S,
'.i..
-a. N5-. b- (L
E- Ul tr
4..
4-E---'i I u -
a- " a li f4%* .-. 0u -
Q; E 5. 3.5-
>-. W4.
1 ar- > 4- a.0
CL IV4 1z 0 i X-. B.. .
0~~~ v -1 - -A
r.. Pv
U'S. *. 4 I.Or *~228~G
-4
10
a)
diU
-44
-4-
E E
0n S-0pL
UE E E5-1 04 :3'
W -4 L/~ o5.. V -4
1-4 CL %- e-)
4L E- -4
ru C. .C,. .4
lu OA -4 :L E- E-0P.C
cu' >. E -1 r
ci) Q)E-
to A," ) ilMa. E
0) -4 -4 owI)
IV-
t.- CC'0)~o .f
, 9
W G- -c~tC
-4 -'4 V-
229
Ur -
4- 4 -
4. ) 4- V)
V) ~ ~ U Le0d( . . 6 -
.1 (a U) a0 W 0 C L
4- 4- :3- ;)5 . i. U cs V 1 0 (lu
(D (L- A4 - '- CC 4 It)
.~.9'--- 'D 5 ' U i ;3
U) (UC c (L (
0 4-4 4-4 -z O AE p
WU)C --4 .. 0 ea..* ~
-4. - 4 d 0i U CL C
0,4 ~ -. 4 W - 4 5-Cv4 o CLL
(L $ 4 ~ - - -0 -4-- F-nOS-
ro ~ -4 :.,1.-4 0 4
_S 4- IL. I>eC 054 ~~e
:- 0j CL4 a- r- = -1M
m ~ ~ I m0 W0-WQ0 00 ) 00
:z 0 a, -- -4
a) Q) SD s.. a (L - 4- 0 41 Q) ;- C* q 1
> uLEV 0 f 4( - c u>r
ru f" 0 -0 j04 U0g -o0o0:
U ~ IN -4 g 4 4- 4 - - 4 .4
4-- CI)' V'-4 I )
CL W4LC4-OC~ 4~C.4- -4 -
4---.4-4- .4 1-44 -4 1-- -4 -4 F-1
PO230
PrI 1.
4-,,
1-4 (U
k-0 - '
'V 0 0 'o r-L-
0 0
ZZ o-' ajZ ,
o0 -4 -4 5Lnf
a. (a C4.- - *4
o 45-~-- 4, . * a
I cL (vG a . a;
j-4 ::3 (
F-
I~ CL f.-4a
V- rd = = vV * Lc*
a. a
0 4 -4 a ,. 0 ' 4 P - 0- 0-,
E, E~.-
0-4J C-
zE -44 X4-4
2314
4-..
0 o 44n(
fu ~ 4 0
t. cu CL44 _ *a
'0 U L 4
o
0 4-. w4'', ~ Ut6 lai 0: C 0- -4- 0k t"Q) (s-. a- k 0 T-' (L .- Is
6' '4 jL r- - 0 6' 4U CL -4 0C: CL i fu a C = . s- . 0 W (D f . CL-4 .- 4s- L. 0 r- W4 -4 *-. vi
4 -4 et) cQ. tr - (U (L~
aj- 4--~~ ' .' 0 * ~ -~
(U ,4s- A4 X, . 0 T4 r' A-- r- Ul 0
.4 '~ .- 4., .-. ~ Q Il 4- 4.-W ~ a.
'0 l L cc 4s cu. a, a) ui 'r-. ,
0- 0.ir Wa. (U C)", OO a,. r
0 ~ r -04 'at OPa. ' s4 'td c ~ a
E- -4
-4
A4 o-4 P4>.: q - L 14>4 P L -
-44 -4 :
L U CS -15 -c 2 -
0 NI= if (D (La u:IC)C, qC. .tu. 0C LL a)u d r 3 % 7 )C)c 0 -. 4
-4 4 A - 4W1 4' U 41 -4 -4 -4 -4 . -4 -4c_-;,'I., S. zw t (Nitb. . h Q. J
4-' ~ '~' - .232
4-4
4-.4
U) cu
a) r-4
I. 4.)U
44 0 :: 5zhl
6 -.~ U U ) - 4 0Ci l -4 -4
4- "'d to..0-
D .-4 (U C~
- 41 d z l 0 -
vi a- ) 4- U) U4 -*. 4 I4-s.. C -c-- ~ E
-4 4 . JC3CL0 U)-4 4j~( 44-~ +- 4-4 4 b* 4..
p~ 00
> > F-E me
-4 ~ ~ ~ ~ W) vi - - --
0c LC V, '0'-
-4 C (-4 14 E- r $Z 44 .
WU P (D 4 (C
En va P-- V4 U-)4 CL E- C.
E- >. 0.
% n W) U)
U
'-4
u CS, w- L ra) v-4 U-) _4 u) -4O~T .-)O cn 3 , .t
C1 C\WL -. C-C-..4 P mW XP4X
E.-4 v4-,-4 -4 -4-4 -4 -4-4 - 44-
233
. !SG.I. Q
m fr T
..m.."
O S S % (4. isC
"L4. pl.~ E~ l U 4A, 4P;P;r4 94 6= - -9Z 9= 9:1 C'UZ 9
L tr C L.
2! E" x >Z v) EI-FZ X En E4I
-4 9=1 1. P- - - - 4 Z I
-4 r
U-) ir. L
E 4-~ r4
-4 -4r4 -4 q 4 4
Q.Ii ZC-.C
234
CU.
Ln nkn S.-4 -4
%.. 4-'4-
- -4-4 .- 4
- 4-4-
-4 0 0
0.4
-4
V-' ... = P.
L-4 1:: g:::l A -4 C, P4 C .83r -= 0
04 .44G9-4 k
N 1:.. N 44 .14 P P F4 Id t- q44 L)o O 0
-4 4 - -4 -4--4 --4 4 - 4 q-4 -4 -
235
M QP 4P E P 40ts s Cb -4nb ) G
5... C4C. - (Sc j.tl ;0&CQ1. s d .1C s
-44.) .
(S Z~j LN(): ~ G No&G Q
LO -4 tl 4 ks s
P; PIP 4 A Q$4 4P q9.. 4 6= 4 P : 4 Sa 4P
C. Nl
.- 4- "4 -44 "4 v-4 .r 4 W-4
-- " 1. P- - -- a -I" 04 4
V.)
4.2
t-q-
n m
-4 Cthi lw ~
q4-4 1-4
237
IL
,0
0 00E.
diU
(I(0
C.) 0.rk
"-. L- g
Q, V"4~ *
-4 1-
P-74 Lr)L.
C.) pU el)Z C.V
1.4 4 4 4 -4 "M4.'C O
'23
A\>FTFC DEMO t
DYNAVIC I.INKFR VERSION 1.£
MTLTIPLICATION TABLES
0 1 2 3 4 5 6 7 S 9 A I cr F F
00 00 00 Z 00 Z ' 00 00 00 ,00 £O 0 ' Z0 O , £0 00
00 e1 02 03 04 05 V6 07 OE 09 LA LB OC CD OE VFe0 e2 04 V6 £ LA £c eF i 12 14 16 16 IA IC iF00 03 06 02 C ZF 12 15 18 1? IE 21 24 27 2A 2D00 04 0 CC 10 14 iF 1C 2e 24Z 2C 30 35 3E 3C00 e5 eA OF 14 19 IF 23 26 2r 3? 37 3C 41 46 41z0 0e 0 C 12 18 IF 24 2A 30 36 3C 42 49 4F -4 5A00 ? OE 15 1C 23 2A 31 36 3F 46 4D 54_ 5B 62 6900q3 1C 1;-:2C26 3e038 404F5e 5P660667C 7E00 09 12 1B 24 2D 36 3F 48 51 5A 63 6C 75 7E a7LO OA 14 IF 28 32 3C 4:6 59 5A 64 6E 76 82 EC 9600 eB 16 21 2C 37 42 4i 56 64 6E 79 84 EF 9A A500 OC 16 24 30 3C 4& 54 6e 6C 7e6 4 90 C -B400 Or 1A 27 34 41 4E 5B 6E 75 82 EF 9 A9 6 C00 eE 1C 2A 3S 46 54 62 7C 7E SC 3A AE E6 CA D200 ZF IF "D 3C 4- 5A 69 78 S7 96 A5 34 C3 L2 El
ADDITION TABLES
0 1 2 3 4 5 6 7 8 9 A B C D E F
00 01 e2 03 04 05 06 07 O6 v9 OA 0-9 OC eD cE OF0i e2 03 e4 05 06 C7 es e9 LA el 0c O CE F 1'02 03 04 05 06 07 06 09 OA 03 ZC OD OE OF 1Z 110 304 05 06 07 06 q9 0A OB 6C D £0 C2 1O 11 1204 05 06 07 0 9 CA ep C D E OF ik U1 12 1305 06 07 08 09 0A 9B 00 OD VE OF 1l 11 12 13 14106 07 e8 e OA LB CC OD eE OF 10 11 12 13 14 1IV7 e8 09 a aC c Or LE OF i 11 12 13 14 1 16e9 eA OA LB 00 OD OF OF 10 1112 13 14 15 16 1709 LA Op 0C D OE OF 10 11 12 13 14 15 16 17 1&LA LB eC00 1 O O OF 10 11 12 13 14 15 16 17 1& 1P0? oC OD OE OF 1e 11 12 13 14 15 1e 17 16 19 IAec eD oE OF o 011 12 13 14 14 5 16 17 i19 1A 1£D e OF e 011 12 13 14 15 16 17 1 19 !A 1E iCOF OF 10 11 12 13 14 15 16 17 IS 19 1A 1P 1,0 IDOF 10 11 12 13 14 15 16 17 18 19 1A 1B IC ir I
239
- -- wood"
THE PROCESS REFERENCE TABLE
I : OBECT NAYv - LVO.COMEA.E ADDRESS - E699
2 : OBJECT NANT - HEADER.DTAEASE ArrpFSS - 9211
3 : OBJECT NAMF - DISPLY.COMBASE ADDRESS - 9595
4 : OBJECT NAME - tULT.CO"B3SE A-DRESS - 9979
5 : NO ENTRY6 : NC ENTRY7 : NO ENTRYI : NO ENTRY9 : NO ENTRY
le : NO ENTPT11 : NO ENTRY12 : NO ENTRY13 : NO ENTRY14 : NO ENTRY15 : NO ENTRY16 : NO ENTRY
240
C ON IN FL L-17S :k.
lINKAGE TATIZ I (Tp 7CZ(pemo)
SIZE - -5
ST- C-96F
UNS NAPP iLINCOMING LINK
JUrP TO 7117 SNAPPzr PPOCEr-F.E IINK (ArEP-rsS- 7k-
IOAr PT? 922E3 SNAPPED ZATA LINK (Ar227SSI.......................
--------------------------*:tTM4 TO 7096 ISNAPPEr pFOC~rrFE :1 NK tPD BESScc - 7 k55
.JME TO 7lk2 S NAPPEr FROCED"RE IINK (ArlESS - 7k'5,,,
LINitAG7. TABL.E 2 (Ip = 7C66 I (tEbIL)
ISIZE - 2I.....................
SN-1 - 77-----------------------
DATA 9"201LIC NAME TABIE (ArDPEss - 01
rESCRIPTCE - 0'6HLINK 'FFSET -
ENTRY POINT -
NAM~E - FEArER
DESCRIPTOP - 05HLINK OFFSET -
ENTRY POINT - 1?NAME T-
241
F . ...-.....
IINKAGT TA2IE 3 (1p 7 V12 ,(sPLY)
L0,At LP 7092 IjNCO,I~ r LINK IA Z,-IFSS - 7! 2'
"" . .. ..96EF,
!IZF -
SNT - 3713
I)AD LP 712 INCOI1N 1 i. (AING11 - 711Z
.-- ----- -- ------ - -'': ' ' -, SS ? ;J'mP TO W96 S, . ,,7
-----------------
$IZ242
DTNA'vI^ ITNKF VERSICN 1.0
TAFF F'TM Or TFE rATA ARRAY IF 4AEND OF Sl
TFT PROCESS iFFFI FNCE TAW..?
1 OBJECm NAMF - STUM.COH?ACT ALD;VcS - E3: EIFCT '4Ami - AFRAY.DTAAqT AIPFFS - 11
34 "JECT NAMF - rlSPIv.C0"IATE Arr.RF~s - 9,139
4 : N 0 EN T R'5 :NO EN TRY
r! % EN TEY7 :~J EN"rv
S: NO -N TR Y9 : NO ENTPY
1-7 NO ;,N J~v11 NO ENT?Y12 *4 FN T FY13 NO ENTD'w14 NC 3 NT T15 NO FNTFY
I - NO FIN T?
243
T;; -.c f IiNEr IINKAGE TABIF
LINKAG7 TABLE I (Ip = 7e3V ('AM )
-- - - - --- --
SIZE - ?5
S,%T - 8C-77
'IN SNAPPEDINCOMING LINX
IOAD WTT 9 CS3 SNAPED F-ATA LINK (AD:Z.Es -..... ..... ,......R- ?ETTTR N
JU"P TO 7e%! SNAFFED PROCEDURE LINK (ADERESS - ?V45)
JT,'P TO 7075 SitAPPTD PROCEURZ IINK ALZDPSS - 7050)
I-
LINTAGE TA31E 2 (lp =7e56 ) (AK.AY)
I
SIZE - 14!-.. .•_'':, * ..
I-
rATA S",*BOLIC NA.M!_ TAZ.L_- (ADDESS -7C6Z)
DESCRIPTCE - 5FLINE OFFSET - 0ENTRIY POINT - 0NAME - ARFAY
244
LINKAGE TABLE 3 (1p = 717J. (bISPLY)
S~E- 16S177
ILOAD LF 771 INCONiNG LINK (ADrRESS - 7C75)
JTMP TO 939', ILOAD LP 7V71 INCOMING LINK (AEERFSs - 71cl
I.. . . . .....*
JUP TO 9429----____------
245
1. 7ensor ss a n, A., C linp-er, C. ,And TZa Iey, . ~V-ultics Virtual ~e-mcry , Cor~runctc~c tn,=Y'
2. Cemarrn, ~*~,Security Kern-l Dpsir for%I-orcso-ee >Xult i Ieve I, Archjv-.l 3to 7a~S.rstem, %,astEr's Tlesi s, Nivavl Fost ,radiate Scnocl'.'Dpcerber, 1-)79.
1.Taley, P. C. and Fennis. :. i., -Virtua'. Xercry.rocosses, and. Snariri. ir Y ul tirs C omm; nice t or 5
o:- t r A C I, v . I1 1 0o. 5, ay 1 q,.
A. Dennir , J. B. , "3egrenta tion and the ci 'r of >'vli-p rOp'rarnrrinp Cornputer Systems ,Journal of tIe I C'-v . 12 No. 4, p. 5FE-6 '2, October 1OF65
5. on 0v - r, J. j. , systpms Prorrar-ing, Fr~ ill , 19-2.
G. Fa br y. F* C Capabili t y-Ea s Ed Ad- re ss ir.~ p -________c_t ions of t- kCI, v . 17 No . 7 , p.42-siT,J uly 1974-.
7. Janson, P. A., ternovi.: tiie Dynamic :irker. f rom iSecurity errel of a Com-)utiro-- 7.tility, 'srsr~esi S, rMu55acflu5et ts L~is titu te 0of e Iaoloa-y
MIT/mAC TIZ-17?, June 197?-.
~.3Jasoc-, F . A. :yna mic 1ir kini c-and 'Env1-r or e nt I n it-1i l-ization in a rulti-romair1 Process" , Te ra 11 1r,-- FSvtLem-Bq-vi ew, v . D No . 5 , p. 43-50, N ovembe r 1--75.
9. -'adnick, S. E. and Lonovan. ' peratir- SystE.-,McC~raw-F l1, 19741.
1g.. C'Connell, J S. and Richardson,. t. nit~ue.'S-cure Desi~'r for a "ult4.-Micrc 7cessor 2:rt-Sys tem, Xastpr 's The,'sis, Naval Fos *,-r-3ia te -'7clocl:une 1979.
11. Crganip-, E. i., Tne Multics SystF7-: An 2xiirticr ofits S tructure , M*IT I-ress, 77
12. Peuto, --. I., "Architecture ef a NE-o %'icroircoesscr'*Com-puter, p.0-1. February 1979.
246
:' . lr:sr . and 74'nite, . R. "Tinkers and :o2,:-zsCo pout in e Sur jfys, v. 4, 14-29-167 , Se..te7 -r,
14. Snaw, A. C., Tne -lo I ical Desi rn of Oueratiri, Sys terr5,
15. Tafvelir,, 5ven, Dynamic Microproi-ramrnine and ExternalSubroutine Calls in a Multics-Type Ervirornert"BEIT, v. 15, p. 192-20'?, 1975.
1 F. W.,atson, 'D. W., Timesnarin-, System D.Psi,-,n Concepts,
17. CP/tV Assembler (AStl,) User's Gr.ide, :-itital Pesearcn,Copyrig'it (c; 1976, 1.97E.
12. IntelI FC&L? icrocorrputer Syster5 Tser'5t- Na r ia~Irtel Corporation, September 1975.
19. ISIS-TI System User's Guide, Intel CorpJoration,Copyripp~t (c) 1976.
2C. Pt/M.-S Prograrnrvive Mianual, Intel Cor, crdticn,Copyrietit (c)~ 1976-1977.
21. ~frIntrfac GudeDi-ital jOesearch, Co-yrihtt
247
1. efense Techn~ical Inforration Certer2Cameron SztationAle-xardria, 7treinia 2271i;
2. ibrary, Code 114?3Niaval Posteraduate Scnool' onterey, UCalifcrnia 9Z340'
3. -Lepartrent Chairrmai, Code 52Eepartment of Corputor ScipnceNaval Post,'raduate School,%onterey, California 9234
4.Lt.Col. 71. ". Schell,Coe53repartrent of' Cor-puter SciencpNaval Post;,raduate ScflooltMonterey, California 93940
5. Iruce :. Yaclennan, Cod~e 527-1lZoTartnent of Computer Scien~ceNaval -ostrraiuate Schoolr'onterey, California 9394k,
6. It. Gerald B. Blanton, Code 523v 2lepartment of Coirputer ScienceNaval Postgraduate ScftoolYotry Californi a 93940
L. t. P-lark "oranville, USNNaval Elpctronics Systemrs Eneinmerie C"enterP. 0.. Box EL337San Diego, California 9213E
,3. lcdr. Pobert Stillwell, Ccde 525b:epartm"ent of Corputer Scien~ceNaval Postgraduate SclioolMonterey, Calif'ornia 9%3940
D. Office of R.esearc2 Admrinistration.Code Z12ANaval Posteraduate SchcclMonterey, California 93-c4C
248
NOW,