home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Geek Gadgets 1
/
ADE-1.bin
/
ade-dist
/
dld-3.2.6-diffs.gz
/
dld-3.2.6-diffs
Wrap
Text File
|
1996-10-13
|
283KB
|
12,172 lines
This file contains patches that transform the baseline version into
the amiga version. Assuming that you have unarchived the baseline
version in the current directory, just run the command:
patch -p1 -E -b .pbak <diff-file
where 'diff-file' is this patch file. After running patch you should
remove all the generated *.pbak files, and look for any *.rej files
that indicate a problem patching the baseline source.
diff -rup --new-file baseline/fsf/dld/.name amiga/fsf/dld/.name
--- baseline/fsf/dld/.name Wed Dec 31 17:00:00 1969
+++ amiga/fsf/dld/.name Sat Sep 28 00:00:00 1996
@@ -0,0 +1 @@
+Dynamic Loader Version 3.2.1
diff -rup --new-file baseline/fsf/dld/Makefile amiga/fsf/dld/Makefile
--- baseline/fsf/dld/Makefile Sun Mar 19 18:42:30 1995
+++ amiga/fsf/dld/Makefile Sat Sep 28 00:00:00 1996
@@ -5,34 +5,40 @@ LIBS = dld.o find_exec.o define.o get_fu
remove.o error.o
INCLUDES = dld.h defs.h
-prefix = /usr/local/
-exec_prefix = $(prefix)/
-libdir = $(exec_prefix)lib/
-infodir = $(prefix)info/
-includedir = $(prefix)include/
+prefix = /ade
+exec_prefix = $(prefix)
+libdir = $(exec_prefix)/lib
+infodir = $(prefix)/info
+guidedir = $(prefix)/guide
+idvidir = $(prefix)/dvi
+psdir = $(prefix)/ps
+includedir = $(exec_prefix)/include
CC= gcc
CFLAGS = -O6 -I.
CXXFLAGS = -O6 -I.
-all: ${ARCHIVE}
-all++: ${ARCHIVE++}
+TEXI2DVI = texi2dvi
+DVIPS = dvips
-install: $(ARCHIVE) dld.info
+all: ${ARCHIVE} ${ARCHIVE++} ar2hunk showsyms
+
+install: $(ARCHIVE) dld.info dld.guide
-cp $(ARCHIVE) $(libdir)
# -cp dld.info $(infodir) # makeinfo called so as to make dld.info there
-cp dld.h $(includedir)
-
-install++: $(ARCHIVE++) install
-cp $(ARCHIVE++) $(libdir)
-
-prefix = /usr/local/
-infodir = $(prefix)info/
+ -cp ar2hunk $(prefix)bin
+ -cp showsyms $(prefix)bin
info: $(infodir)/dld.info
$(infodir)/dld.info: dld.texinfo
makeinfo dld.texinfo -o $(infodir)/dld.info
+guide: $(guidedir)/dld.guide
+$(guidedir)/dld.guide: dld.texguide
+ makeinfo --amiga dld.texinfo -o $(guidedir)/dld.guide
+
srcdir=$(HOME)/dld/
dvidir=../dvi/
dvi: $(dvidir)dld.dvi
@@ -55,6 +61,12 @@ $(ARCHIVE++): ${LIBS} gxxload.o ${INCLUD
ar q $(ARCHIVE++) ${LIBS} gxxload.o
ranlib $(ARCHIVE++)
+ar2hunk: ar2hunk.c
+ gcc -o ar2hunk -O ar2hunk.c
+
+showsyms: showsyms.c
+ gcc -o showsyms -O showsyms.c
+
clean:
-rm -f ${ARCHIVE} *.o *~ *.rej
cd test; make clean
@@ -91,8 +103,7 @@ dist: dld.tar.gz # dld-bin.tar.gz
.cc.o:
${CXX} -c ${CXXFLAGS} $*.cc
- # mv -f dld-bin.tar.*z $(HOME)/dist/
- cp -f dld*.lsm $(HOME)/dist/
+
tar.gz: dld.tar.gz
dld.tar.gz: dld.tar
-rm -f dld.tar.*z
@@ -134,9 +145,10 @@ dld-bin.tar.gz: dld-bin.tar
-rm -f dld-bin.tar.*z
gzip dld-bin.tar
chmod 664 dld-bin.tar.*z
-dld-bin.tar: $(libdir)libdld.a $(infodir)dld.info $(includedir)dld.h
+dld-bin.tar: $(libdir)/libdld.a $(infodir)/dld.info $(includedir)/dld.h $(guidedir)/dld.guide
cd $(prefix); tar cohf dld-bin.tar include/dld.h \
- lib/libdld.a info/dld.info src/dld/COPYING src/dld/README
+ lib/libdld.a info/dld.info src/dld/COPYING src/dld/README \
+ info/dld/guide
cd $(prefix); chmod 664 dld-bin.tar
mv $(prefix)/dld-bin.tar ./
diff -rup --new-file baseline/fsf/dld/Product-Info amiga/fsf/dld/Product-Info
--- baseline/fsf/dld/Product-Info Wed Dec 31 17:00:00 1969
+++ amiga/fsf/dld/Product-Info Sat Sep 28 00:00:00 1996
@@ -0,0 +1,25 @@
+.name
+dld
+.fullname
+GNU dynamic linker
+.type
+Developer Tool
+.short
+library to perform dynamic linking
+.description
+"DLD" is a library package of C functions that performs "dynamic link
+editing". Programs that use dld can add compiled object code to or
+remove such code from a process anytime during its execution. Loading
+modules, searching libraries, resolving external references, and
+allocating storage for global and static data structures are all
+performed at run time.
+.version
+3.2.6
+.author
+Free Software Foundation
+.requirements
+Amiga binaries require ixemul.library.
+.distribution
+GNU Public License
+.described-by
+Fred Fish (fnf@amigalib.com)
diff -rup --new-file baseline/fsf/dld/TAGS amiga/fsf/dld/TAGS
--- baseline/fsf/dld/TAGS Wed Dec 31 17:00:00 1969
+++ amiga/fsf/dld/TAGS Sat Sep 28 00:00:00 1996
@@ -0,0 +1,115 @@
+
+define.c,23
+dld_define_sym 28,731
+
+defs.h,36
+#define del_link_list_elt(171,5546
+
+dld.c,2122
+#define ABSOLUTE_FILENAME_P(1514,43772
+#define ABSOLUTE_FILENAME_P(1517,43871
+#define N_BSSADDR(96,2839
+#define N_DATADDR(83,2482
+#define N_DATADDR(88,2655
+#define N_TXTADDR(74,2357
+#define N_TXTADDR(77,2402
+#define RELOC_ADDRESS(163,5594
+#define RELOC_ADDRESS(191,6740
+#define RELOC_ADDRESS(202,7090
+#define RELOC_ADD_EXTRA(167,5807
+#define RELOC_EXTERN_P(164,5654
+#define RELOC_EXTERN_P(192,6783
+#define RELOC_EXTERN_P(203,7133
+#define RELOC_MEMORY_SUB_P(166,5774
+#define RELOC_MEMORY_SUB_P(194,6871
+#define RELOC_MEMORY_SUB_P(205,7221
+#define RELOC_PCREL_P(168,5870
+#define RELOC_PCREL_P(196,6938
+#define RELOC_PCREL_P(207,7277
+#define RELOC_SYMBOL(165,5716
+#define RELOC_SYMBOL(193,6826
+#define RELOC_SYMBOL(204,7176
+#define RELOC_TARGET_BITSIZE(172,6130
+#define RELOC_TARGET_SIZE(171,6057
+#define RELOC_TARGET_SIZE(197,6993
+#define RELOC_TARGET_SIZE(208,7318
+#define RELOC_VALUE_RIGHTSHIFT(170,5978
+_dld_enter_global_ref 643,19457
+_dld_getsym 562,16820
+_dld_getsym_soft 597,17623
+_dld_malloc 289,10004
+_dld_patch_all_files 1645,47694
+_dld_unlink_entry 2061,57982
+clean_up 1860,53243
+cleanup_obsolete_entries 1776,51248
+cleanup_symtab 756,22625
+concat 303,10266
+decode_library_subfile 857,25313
+dld_function_executable_p 2097,58772
+dld_get_bare_symbol 2038,57445
+dld_init 1925,54598
+dld_link 1987,56238
+do_local_relocation 1190,35332
+do_unlink 1887,53910
+enter_file_symbols 743,22259
+fatal 279,9838
+file_close 345,11261
+file_open 357,11568
+find_all_executable_modules 1710,49520
+hash_string 543,16500
+insert_entry 321,10780
+invalidate 1690,49094
+kill_entry 1809,52087
+linear_library 1066,31684
+make_entry 1522,44038
+perform_relocation 1423,41646
+read_entry_strings 481,14684
+read_entry_symbols 444,13736
+read_file_symbols 1548,44832
+read_header 390,12260
+read_text_and_data 1586,45835
+reloc_info_ok 507,15456
+relocate_entry_symbols 1624,47109
+relocate_local_refs 1323,38649
+relocate_symbol_address 1147,33863
+remove_cross_references 1744,50427
+search_library 824,24333
+st_read_header 411,12712
+subfile_wanted_p 1114,32927
+symdef_library 913,26917
+
+dld.h,0
+
+error.c,20
+dld_perror 47,1657
+
+find_exec.c,119
+#define ABSOLUTE_FILENAME_P(46,1242
+#define ABSOLUTE_FILENAME_P(49,1341
+copy_of 32,996
+dld_find_executable 53,1423
+
+get_func.c,21
+dld_get_func 25,735
+
+get_symbol.c,23
+dld_get_symbol 26,727
+
+list_undef.c,31
+dld_list_undefined_sym 31,873
+
+mk_dummy.c,32
+_dld_create_dummy_entry 25,705
+
+ref.c,29
+dld_create_reference 29,893
+
+remove.c,34
+dld_remove_defined_symbol 28,780
+
+ul_file.c,49
+dld_unlink_by_file 48,1171
+search_files 24,656
+
+ul_symbol.c,29
+dld_unlink_by_symbol 24,654
diff -rup --new-file baseline/fsf/dld/ar2hunk.c amiga/fsf/dld/ar2hunk.c
--- baseline/fsf/dld/ar2hunk.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/dld/ar2hunk.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,55 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <ar.h>
+
+static char buf[10240];
+
+main(int argc, char **argv)
+{
+ FILE *exe, *arc;
+ int id, r;
+
+ if (argc != 3)
+ {
+ fprintf(stderr, "usage: ar2hunk <executable> <archive>\n");
+ exit(2);
+ }
+ exe = fopen(argv[1], "r+");
+ arc = fopen(argv[2], "r");
+ if (!exe || !arc)
+ {
+ if (!exe)
+ fprintf(stderr, "cannot open %s\n", argv[1]);
+ if (!arc)
+ fprintf(stderr, "cannot open %s\n", argv[2]);
+ exit(2);
+ }
+ fseek(exe, -4, SEEK_END);
+ fread(&id, 4, 1, exe);
+ if (id != 0x3f2)
+ {
+ fprintf(stderr, "%s is malformed (no hunk_end found)\n", argv[1]);
+ exit(1);
+ }
+ fread(buf, SARMAG, 1, arc);
+ if (*((long *)buf) != 0x10107 && strncmp(buf, ARMAG))
+ {
+ fprintf(stderr, "%s is malformed (not an archive)\n", argv[2]);
+ exit(1);
+ }
+ fseek(exe, -4, SEEK_END);
+ id = 0x3f1;
+ fwrite(&id, 4, 1, exe);
+ fseek(arc, 0, SEEK_END);
+ id = ftell(arc);
+ id = (id + 3) / 4;
+ fseek(arc, 0, SEEK_SET);
+ fwrite(&id, 4, 1, exe);
+ while (r = fread(buf, 1, 10240, arc))
+ {
+ r = (r + 3) & ~3;
+ fwrite(buf, 1, r, exe);
+ }
+ id = 0x3f2;
+ fwrite(&id, 4, 1, exe);
+}
diff -rup --new-file baseline/fsf/dld/dld.c amiga/fsf/dld/dld.c
--- baseline/fsf/dld/dld.c Fri Feb 10 06:10:46 1995
+++ amiga/fsf/dld/dld.c Sat Sep 28 00:00:00 1996
@@ -55,7 +55,7 @@
#include <alloca.h>
#endif
#endif
-
+
/* System dependencies */
#ifdef atarist
@@ -211,7 +211,23 @@ static int reloc_target_bitsize[] = {
/* Size of a page; obtained from the operating system. */
static int page_size;
-
+
+#ifdef __amigaos__
+
+#undef MAXINT
+#undef MININT
+#undef BITSPERBYTE
+#undef LONGBITS
+
+#include <proto/exec.h>
+#include <exec/execbase.h>
+
+static int amiga_debug_hunk_offset, amiga_debug_hunk_size, input_offset;
+static int amiga_debug_file;
+#else
+#define input_offset (0)
+#endif
+
/* The symbol hash table: a vector of TABSIZE pointers to struct glosym. */
symbol *_dld_symtab[TABSIZE];
@@ -238,7 +254,7 @@ struct dld_reloc_info {
using a separate definition for each system. */
struct relocation_info reloc_info;
};
-
+
/* Format of __.SYMDEF:
First, a longword containing the size of the 'symdef' data that follows.
Second, zero or more 'symdef' structures.
@@ -264,14 +280,14 @@ struct file_entry *_dld_dummy_entry = 0;
if no file is open.
*/
static struct file_entry *input_file = 0;
-static int input_desc = 0;
+static FILE *input_desc = 0;
/* global variables to return the error code to the caller */
int dld_errno;
/* true if the executable flags are up-to-date */
char _dld_exec_flags_valid;
-
+
/* Miscellaneous routines */
/* save the error code in dld_errno */
@@ -343,9 +359,9 @@ register struct file_entry *entry;
/* Close the input file that is now open. */
static void
-file_close ()
+file_close (void)
{
- if (input_desc) close (input_desc);
+ if (input_desc) fclose (input_desc);
input_desc = 0;
input_file = 0;
} /* file_close */
@@ -354,11 +370,11 @@ file_close ()
The open file is remembered; if the same file is opened twice in a row,
a new open is not actually done. */
-static int
+static FILE *
file_open (entry)
register struct file_entry *entry;
{
- register int desc;
+ register FILE *desc;
if (entry == 0) fatal (DLD_ENOFILE);
@@ -370,9 +386,23 @@ register struct file_entry *entry;
if (input_file) file_close ();
- desc = open (entry->filename, O_RDONLY, 0);
+ if (amiga_debug_file = (entry->filename[strlen(entry->filename) - 1] == 1
+ && amiga_debug_hunk_size))
+ {
+ char *p = entry->filename + strlen(entry->filename) - 1;
- if (desc > 0) {
+ *p = 0;
+ desc = fopen (entry->filename, "r");
+ *p = 1;
+ }
+ else
+ desc = fopen (entry->filename, "r");
+
+ if (desc) {
+ if (amiga_debug_file)
+ fseek(desc, input_offset = amiga_debug_hunk_offset, SEEK_CUR);
+ else
+ input_offset = 0;
input_file = entry;
input_desc = desc;
return desc;
@@ -380,9 +410,9 @@ register struct file_entry *entry;
fatal (DLD_ENOFILE);
- return(1); /* To supress warning message */
+ return (stdout); /* To supress warning message */
} /* file_open */
-
+
/* Medium-level input routines for rel files. */
/* Read a file's header into the proper place in the file_entry.
@@ -391,14 +421,14 @@ register struct file_entry *entry;
static void
read_header (desc, entry)
-int desc;
+FILE *desc;
register struct file_entry *entry;
{
register int len;
struct exec *loc = &entry->header;
- lseek (desc, entry->starting_offset, 0);
- len = read (desc, loc, sizeof (struct exec));
+ fseek (desc, input_offset + entry->starting_offset, 0);
+ len = fread (loc, 1, sizeof (struct exec), desc);
if (len != sizeof (struct exec))
fatal (DLD_EBADHEADER);
if (N_BADMAG (*loc))
@@ -446,7 +476,7 @@ register struct file_entry *entry;
static void
read_entry_symbols (desc, entry)
struct file_entry *entry;
-int desc;
+FILE *desc;
{
int str_size;
@@ -458,16 +488,16 @@ int desc;
entry->symbols = (struct nlist *) _dld_malloc (entry->header.a_syms);
- lseek (desc, N_SYMOFF (entry->header) + entry->starting_offset, 0);
+ fseek (desc, input_offset + N_SYMOFF (entry->header) + entry->starting_offset, 0);
if (entry->header.a_syms !=
- read (desc, entry->symbols, entry->header.a_syms)) {
+ fread (entry->symbols, 1, entry->header.a_syms, desc)) {
free (entry->symbols);
entry->symbols = 0;
fatal (DLD_ENOSYMBOLS);
}
- lseek (desc, N_STROFF (entry->header) + entry->starting_offset, 0);
- if (sizeof str_size != read (desc, &str_size, sizeof str_size)) {
+ fseek (desc, input_offset + N_STROFF (entry->header) + entry->starting_offset, 0);
+ if (sizeof str_size != fread (&str_size, 1, sizeof str_size, desc)) {
free (entry->symbols);
entry->symbols = 0;
fatal (DLD_ENOSTRINGS);
@@ -483,16 +513,15 @@ int desc;
static void
read_entry_strings (desc, entry)
struct file_entry *entry;
-int desc;
+FILE *desc;
{
if (!entry->header_read_flag)
read_header (desc, entry);
entry->strings = (char *) _dld_malloc (entry->string_size);
- lseek (desc, N_STROFF (entry->header) + entry->starting_offset, 0);
- if (entry->string_size != read (desc, entry->strings,
- entry->string_size)) {
+ fseek (desc, input_offset + N_STROFF (entry->header) + entry->starting_offset, 0);
+ if (entry->string_size != fread (entry->strings, 1, entry->string_size, desc)) {
free (entry->strings);
entry->strings = 0;
fatal (DLD_ENOSTRINGS);
@@ -538,7 +567,7 @@ register int sym_size;
return extern_count++; /* this postincrement does nothing */
/* but preincrement causes bug */
} /* reloc_info_ok */
-
+
/* symbol table management */
/* Compute the hash code for symbol name KEY. */
@@ -846,7 +875,7 @@ cleanup_symtab ()
}
}
} /* cleanup_symtab */
-
+
/* Searching libraries */
static struct file_entry *decode_library_subfile ();
@@ -861,7 +890,7 @@ static void read_text_and_data ();
static void
search_library (desc, entry)
-int desc;
+FILE *desc;
struct file_entry *entry;
{
int member_length;
@@ -898,7 +927,7 @@ struct file_entry *entry;
static struct file_entry *
decode_library_subfile (desc, library_entry, subfile_offset, length_loc)
-int desc;
+FILE *desc;
struct file_entry *library_entry;
int subfile_offset;
int *length_loc;
@@ -910,9 +939,11 @@ int *length_loc;
struct ar_hdr hdr1;
register struct file_entry *subentry;
- lseek (desc, subfile_offset, 0);
+ fseek (desc, input_offset + subfile_offset, 0);
- bytes_read = read (desc, &hdr1, sizeof hdr1);
+ if (amiga_debug_file && subfile_offset >= amiga_debug_hunk_size - 4)
+ return 0;
+ bytes_read = fread (&hdr1, 1, sizeof hdr1, desc);
if (!bytes_read)
return 0; /* end of archive */
@@ -954,7 +985,7 @@ int *length_loc;
static void
symdef_library (desc, entry, member_length)
-int desc;
+FILE *desc;
struct file_entry *entry;
int member_length;
{
@@ -969,7 +1000,7 @@ int member_length;
struct file_entry *prev = 0;
int prev_offset = 0;
- bytes_read = read (desc, symdef_data, member_length);
+ bytes_read = fread (symdef_data, 1, member_length, desc);
if (bytes_read != member_length) {
free (symdef_data);
fatal (DLD_EBADLIBRARY);
@@ -1107,7 +1138,7 @@ int member_length;
static void
linear_library (desc, entry)
-int desc;
+FILE *desc;
struct file_entry *entry;
{
register struct file_entry *prev = 0;
@@ -1184,7 +1215,7 @@ struct file_entry *entry;
return 0;
} /* subfile_wanted_p */
-
+
/* Relocate the addresses of the file's symbols. */
static void
relocate_symbol_address (entry)
@@ -1337,7 +1368,6 @@ int reloc_size;
}
#else
-
switch (length) {
case 0: *(char *) (data + addr) += relocation;
break;
@@ -1364,7 +1394,7 @@ int reloc_size;
*/
static void
relocate_local_refs (desc, entry)
-int desc;
+FILE *desc;
struct file_entry *entry;
{
int text_offset;
@@ -1385,10 +1415,10 @@ struct file_entry *entry;
reloc_buf = (struct relocation_info *)
_dld_malloc (entry->header.a_trsize);
- lseek (desc, text_offset + entry->header.a_text +
+ fseek (desc, input_offset + text_offset + entry->header.a_text +
entry->header.a_data, 0);
if (entry->header.a_trsize !=
- read (desc, reloc_buf, entry->header.a_trsize)) {
+ fread (reloc_buf, 1, entry->header.a_trsize, desc)) {
free (reloc_buf);
fatal (DLD_ENOTXTRELOC);
}
@@ -1415,10 +1445,10 @@ struct file_entry *entry;
reloc_buf = (struct relocation_info *)
_dld_malloc (entry->header.a_drsize);
- lseek (desc, text_offset + entry->header.a_text +
+ fseek (desc, input_offset + text_offset + entry->header.a_text +
entry->header.a_data + entry->header.a_trsize, 0);
if (entry->header.a_drsize !=
- read (desc, reloc_buf, entry->header.a_drsize)) {
+ fread (reloc_buf, 1, entry->header.a_drsize, desc)) {
free (reloc_buf);
fatal (DLD_ENODATRELOC);
}
@@ -1561,7 +1591,7 @@ int reverse;
#endif
}
} /* perform_relocation */
-
+
/* ABSOLUTE_FILENAME_P (fname): True if fname is an absolute filename */
#ifdef atarist
#define ABSOLUTE_FILENAME_P(fname) ((fname[0] == '/') || \
@@ -1599,14 +1629,14 @@ char *filename;
static void
read_file_symbols (desc, entry, load_text)
-register int desc;
+register FILE *desc;
register struct file_entry *entry;
int load_text; /* used only by dld_init */
{
register int len;
int magicnum;
- len = read (desc, &magicnum, sizeof magicnum);
+ len = fread (&magicnum, 1, sizeof magicnum, desc);
if (len != sizeof magicnum)
fatal (DLD_EBADHEADER);
@@ -1624,20 +1654,136 @@ int load_text; /* used only by dld
} else {
char armag[SARMAG];
- lseek (desc, 0, 0);
- if (SARMAG != read (desc, armag, SARMAG) || strncmp (armag, ARMAG, SARMAG))
+ fseek (desc, input_offset, 0);
+ if (SARMAG != fread (armag, 1, SARMAG, desc) || strncmp (armag, ARMAG, SARMAG))
fatal (DLD_EBADOBJECT);
entry->library_flag = 1;
search_library (desc, entry);
}
} /* read_file_symbols */
+#ifdef AMIGA
+
+static unsigned long get_num(FILE *fd)
+{
+ unsigned long t;
+
+ fread(&t, 1, 4, fd);
+ return t;
+}
+
+static void skip(FILE *fd, unsigned long t)
+{
+ fseek(fd, t * 4, SEEK_CUR);
+}
+
+static void
+amiga_read_file_symbols (desc, entry)
+register FILE *desc;
+register struct file_entry *entry;
+{
+ extern int _sdata, _stext, _bss_start;
+ int t, f, l;
+ int start, type;
+ int name_size = 500;
+ char *name;
+
+ if (get_num(desc) != 0x03f3)
+ fatal (DLD_EBADHEADER);
+ name = (char *)_dld_malloc(name_size);
+ while (t = get_num(desc))
+ skip(desc, t);
+ get_num(desc);
+ f = get_num(desc);
+ l = get_num(desc);
+ skip(desc, l - f + 1);
+ while (l >= 0)
+ {
+ switch (get_num(desc) & 0xffff)
+ {
+ case 0x03e9: /* text */
+ type = N_TEXT | N_EXT;
+ skip(desc, get_num(desc));
+ start = (int)&_stext;
+ break;
+ case 0x03ea: /* data */
+ type = N_DATA | N_EXT;
+ skip(desc, get_num(desc));
+ start = (int)&_sdata;
+ break;
+ case 0x03eb: /* bss */
+ type = N_BSS | N_EXT;
+ get_num(desc);
+ start = (int)&_bss_start;
+ break;
+ case 0x03e8: /* name */
+ case 0x03e7: /* unit */
+ skip(desc, get_num(desc));
+ break;
+ case 0x03f1: /* debug */
+ t = get_num(desc);
+ if (t > 2 && amiga_debug_hunk_size == 0)
+ {
+ char armag[SARMAG];
+
+ fread (armag, 1, SARMAG, desc);
+ if (*((long *)armag) == 0x10107 || !strncmp (armag, ARMAG, SARMAG))
+ {
+ amiga_debug_hunk_size = t * 4;
+ amiga_debug_hunk_offset = ftell(desc) - SARMAG;
+ }
+ t -= 2;
+ }
+ skip(desc, t);
+ break;
+ case 0x03ee: /* reloc8 */
+ case 0x03ed: /* reloc16 */
+ case 0x03ec: /* reloc32 */
+ while (t = get_num(desc))
+ skip(desc, t + 1);
+ break;
+ case 0x03ef: /* ext */
+ while (t = get_num(desc))
+ skip(desc, (t & 0xffffff) + 1);
+ break;
+ case 0x03f0: /* symbols */
+ while (t = get_num(desc))
+ {
+ struct nlist nl;
+
+ while (t >= name_size)
+ {
+ char *buf = (char *)_dld_malloc(name_size * 2);
+
+ free(name);
+ name = buf;
+ name_size *= 2;
+ }
+ fread(name, 1, t * 4, desc);
+ name[t * 4] = 0;
+ nl.n_type = type;
+ nl.n_value = get_num(desc) + start;
+ /* ___gnu_compiled_c is (for some reason) defined twice, so we
+ filter out all multiple defined symbols. */
+ if (!_dld_getsym_soft(name))
+ _dld_enter_global_ref (entry, &nl, name);
+ }
+ break;
+ case 0x03f2: /* end */
+ l--;
+ break;
+ }
+ }
+ free(name);
+}
+
+#endif /* AMIGA */
/* Allocate memory for all text, data and bss segments and read them in
from the file. */
static void
read_text_and_data (desc, entry)
-int desc;
+FILE *desc;
register struct file_entry *entry;
{
register size = entry->header.a_text + entry->header.a_data +
@@ -1656,9 +1802,9 @@ register struct file_entry *entry;
Note that the bss segment does not actually take up space in the
object file, so its size must be subtracted from SIZE */
- lseek (desc, entry->starting_offset + N_TXTOFF(entry->header), 0);
+ fseek (desc, input_offset + entry->starting_offset + N_TXTOFF(entry->header), 0);
size -= entry->header.a_bss;
- if (size != read (desc, (char *)entry->text_start_address, size)) {
+ if (size != fread ((char *)entry->text_start_address, 1, size, desc)) {
free ((void *)entry->text_start_address);
entry->text_start_address = entry->data_start_address =
entry->bss_start_address = 0;
@@ -1675,7 +1821,7 @@ register struct file_entry *entry;
symbols */
static void
relocate_entry_symbols (desc, entry)
-int desc;
+FILE *desc;
register struct file_entry *entry;
{
/* Compute start addresses of each sections and symbols. */
@@ -1759,7 +1905,7 @@ struct file_entry *entry;
* For those that can, set the flag executable_flag.
*/
static void
-find_all_executable_modules ()
+find_all_executable_modules (void)
{
register struct file_entry *p;
@@ -1790,7 +1936,7 @@ find_all_executable_modules ()
_dld_exec_flags_valid = 1;
} /* find_all_executable_modules */
-
+
/* remove all reference pointers *TO* ENTRY */
static void
remove_cross_references (head_of_chain, entry)
@@ -1973,12 +2119,12 @@ struct file_entry *entry;
_dld_exec_flags_valid = 0;
return entry;
} /* do_unlink */
-
+
int
dld_init (myname)
char *myname;
{
- int desc;
+ FILE *desc;
page_size = getpagesize ();
bzero (_dld_symtab, TABSIZE * sizeof(symbol *));
@@ -1999,6 +2145,11 @@ char *myname;
}
_dld_latest_entry = make_entry (myname);
desc = file_open (_dld_latest_entry);
+#ifdef AMIGA
+ amiga_read_file_symbols (desc, _dld_latest_entry);
+ relocate_symbol_address (_dld_latest_entry);
+#else
+
#ifdef atarist
st_read_header (desc, _dld_latest_entry);
#endif /* atarist */
@@ -2023,6 +2174,8 @@ char *myname;
relocate_symbol_address (_dld_latest_entry);
#endif /* atarist */
+#endif /* AMIGA */
+
if (_dld_latest_entry->symbols) {
free (_dld_latest_entry->symbols);
_dld_latest_entry->symbols = 0;
@@ -2040,7 +2193,7 @@ int
dld_link (object_file)
char *object_file;
{
- register int desc;
+ register FILE *desc;
struct file_entry *old_latest_entry = _dld_latest_entry;
if (setjmp (_dld_env)) {
@@ -2082,6 +2235,8 @@ char *object_file;
file_close ();
_dld_patch_all_files (_dld_latest_entry);
+
+ CacheClearE(0, (ULONG)-1, CACRF_ClearI); /* clear instruction cache! */
_dld_exec_flags_valid = 0;
return 0;
diff -rup --new-file baseline/fsf/dld/doc/SPE.ps amiga/fsf/dld/doc/SPE.ps
--- baseline/fsf/dld/doc/SPE.ps Wed Dec 31 17:00:00 1969
+++ amiga/fsf/dld/doc/SPE.ps Sat Sep 28 00:00:00 1996
@@ -0,0 +1,8967 @@
+%!PS-Adobe-1.0
+%%Creator: ivy:how (W. Wilson Ho,4435 Chem Annex,2680,9167584811,Prof. Ron Olsson)
+%%Title: stdin (ditroff)
+%%CreationDate: Mon Oct 15 14:10:23 1990
+%%EndComments
+% Start of psdit.pro -- prolog for ditroff translator
+% Copyright (c) 1985,1987 Adobe Systems Incorporated. All Rights Reserved.
+% GOVERNMENT END USERS: See Notice file in TranScript library directory
+% -- probably /usr/lib/ps/Notice
+% RCS: $Header: psdit.pro,v 2.2 87/11/17 16:40:42 byron Rel $
+/$DITroff 140 dict def $DITroff begin
+/fontnum 1 def /fontsize 10 def /fontheight 10 def /fontslant 0 def
+/xi {0 72 11 mul translate 72 resolution div dup neg scale 0 0 moveto
+ /fontnum 1 def /fontsize 10 def /fontheight 10 def /fontslant 0 def F
+ /pagesave save def}def
+/PB{save /psv exch def currentpoint translate
+ resolution 72 div dup neg scale 0 0 moveto}def
+/PE{psv restore}def
+/m1 matrix def /m2 matrix def /m3 matrix def /oldmat matrix def
+/tan{dup sin exch cos div}bind def
+/point{resolution 72 div mul}bind def
+/dround {transform round exch round exch itransform}bind def
+/xT{/devname exch def}def
+/xr{/mh exch def /my exch def /resolution exch def}def
+/xp{}def
+/xs{docsave restore end}def
+/xt{}def
+/xf{/fontname exch def /slotno exch def fontnames slotno get fontname eq not
+ {fonts slotno fontname findfont put fontnames slotno fontname put}if}def
+/xH{/fontheight exch def F}bind def
+/xS{/fontslant exch def F}bind def
+/s{/fontsize exch def /fontheight fontsize def F}bind def
+/f{/fontnum exch def F}bind def
+/F{fontheight 0 le {/fontheight fontsize def}if
+ fonts fontnum get fontsize point 0 0 fontheight point neg 0 0 m1 astore
+ fontslant 0 ne{1 0 fontslant tan 1 0 0 m2 astore m3 concatmatrix}if
+ makefont setfont .04 fontsize point mul 0 dround pop setlinewidth}bind def
+/X{exch currentpoint exch pop moveto show}bind def
+/N{3 1 roll moveto show}bind def
+/Y{exch currentpoint pop exch moveto show}bind def
+/S /show load def
+/ditpush{}def/ditpop{}def
+/AX{3 -1 roll currentpoint exch pop moveto 0 exch ashow}bind def
+/AN{4 2 roll moveto 0 exch ashow}bind def
+/AY{3 -1 roll currentpoint pop exch moveto 0 exch ashow}bind def
+/AS{0 exch ashow}bind def
+/MX{currentpoint exch pop moveto}bind def
+/MY{currentpoint pop exch moveto}bind def
+/MXY /moveto load def
+/cb{pop}def % action on unknown char -- nothing for now
+/n{}def/w{}def
+/p{pop showpage pagesave restore /pagesave save def}def
+/abspoint{currentpoint exch pop add exch currentpoint pop add exch}def
+/dstroke{currentpoint stroke moveto}bind def
+/Dl{2 copy gsave rlineto stroke grestore rmoveto}bind def
+/arcellipse{oldmat currentmatrix pop
+ currentpoint translate 1 diamv diamh div scale /rad diamh 2 div def
+ rad 0 rad -180 180 arc oldmat setmatrix}def
+/Dc{gsave dup /diamv exch def /diamh exch def arcellipse dstroke
+ grestore diamh 0 rmoveto}def
+/De{gsave /diamv exch def /diamh exch def arcellipse dstroke
+ grestore diamh 0 rmoveto}def
+/Da{currentpoint /by exch def /bx exch def /fy exch def /fx exch def
+ /cy exch def /cx exch def /rad cx cx mul cy cy mul add sqrt def
+ /ang1 cy neg cx neg atan def /ang2 fy fx atan def cx bx add cy by add
+ 2 copy rad ang1 ang2 arcn stroke exch fx add exch fy add moveto}def
+/Barray 200 array def % 200 values in a wiggle
+/D~{mark}def
+/D~~{counttomark Barray exch 0 exch getinterval astore /Bcontrol exch def pop
+ /Blen Bcontrol length def Blen 4 ge Blen 2 mod 0 eq and
+ {Bcontrol 0 get Bcontrol 1 get abspoint /Ycont exch def /Xcont exch def
+ Bcontrol 0 2 copy get 2 mul put Bcontrol 1 2 copy get 2 mul put
+ Bcontrol Blen 2 sub 2 copy get 2 mul put
+ Bcontrol Blen 1 sub 2 copy get 2 mul put
+ /Ybi /Xbi currentpoint 3 1 roll def def 0 2 Blen 4 sub
+ {/i exch def
+ Bcontrol i get 3 div Bcontrol i 1 add get 3 div
+ Bcontrol i get 3 mul Bcontrol i 2 add get add 6 div
+ Bcontrol i 1 add get 3 mul Bcontrol i 3 add get add 6 div
+ /Xbi Xcont Bcontrol i 2 add get 2 div add def
+ /Ybi Ycont Bcontrol i 3 add get 2 div add def
+ /Xcont Xcont Bcontrol i 2 add get add def
+ /Ycont Ycont Bcontrol i 3 add get add def
+ Xbi currentpoint pop sub Ybi currentpoint exch pop sub rcurveto
+ }for dstroke}if}def
+end
+/ditstart{$DITroff begin
+ /nfonts 60 def % NFONTS makedev/ditroff dependent!
+ /fonts[nfonts{0}repeat]def
+ /fontnames[nfonts{()}repeat]def
+/docsave save def
+}def
+
+% character outcalls
+/oc {/pswid exch def /cc exch def /name exch def
+ /ditwid pswid fontsize mul resolution mul 72000 div def
+ /ditsiz fontsize resolution mul 72 div def
+ ocprocs name known{ocprocs name get exec}{name cb}
+ ifelse}def
+/fractm [.65 0 0 .6 0 0] def
+/fraction
+ {/fden exch def /fnum exch def gsave /cf currentfont def
+ cf fractm makefont setfont 0 .3 dm 2 copy neg rmoveto
+ fnum show rmoveto currentfont cf setfont(\244)show setfont fden show
+ grestore ditwid 0 rmoveto} def
+/oce {grestore ditwid 0 rmoveto}def
+/dm {ditsiz mul}def
+/ocprocs 50 dict def ocprocs begin
+(14){(1)(4)fraction}def
+(12){(1)(2)fraction}def
+(34){(3)(4)fraction}def
+(13){(1)(3)fraction}def
+(23){(2)(3)fraction}def
+(18){(1)(8)fraction}def
+(38){(3)(8)fraction}def
+(58){(5)(8)fraction}def
+(78){(7)(8)fraction}def
+(sr){gsave .05 dm .16 dm rmoveto(\326)show oce}def
+(is){gsave 0 .15 dm rmoveto(\362)show oce}def
+(->){gsave 0 .02 dm rmoveto(\256)show oce}def
+(<-){gsave 0 .02 dm rmoveto(\254)show oce}def
+(==){gsave 0 .05 dm rmoveto(\272)show oce}def
+end
+% DIThacks fonts for some special chars
+50 dict dup begin
+/FontType 3 def
+/FontName /DIThacks def
+/FontMatrix [.001 0.0 0.0 .001 0.0 0.0] def
+/FontBBox [-220 -280 900 900] def% a lie but ...
+/Encoding 256 array def
+0 1 255{Encoding exch /.notdef put}for
+Encoding
+ dup 8#040/space put %space
+ dup 8#110/rc put %right ceil
+ dup 8#111/lt put %left top curl
+ dup 8#112/bv put %bold vert
+ dup 8#113/lk put %left mid curl
+ dup 8#114/lb put %left bot curl
+ dup 8#115/rt put %right top curl
+ dup 8#116/rk put %right mid curl
+ dup 8#117/rb put %right bot curl
+ dup 8#120/rf put %right floor
+ dup 8#121/lf put %left floor
+ dup 8#122/lc put %left ceil
+ dup 8#140/sq put %square
+ dup 8#141/bx put %box
+ dup 8#142/ci put %circle
+ dup 8#143/br put %box rule
+ dup 8#144/rn put %root extender
+ dup 8#145/vr put %vertical rule
+ dup 8#146/ob put %outline bullet
+ dup 8#147/bu put %bullet
+ dup 8#150/ru put %rule
+ dup 8#151/ul put %underline
+ pop
+/DITfd 100 dict def
+/BuildChar{0 begin
+ /cc exch def /fd exch def
+ /charname fd /Encoding get cc get def
+ /charwid fd /Metrics get charname get def
+ /charproc fd /CharProcs get charname get def
+ charwid 0 fd /FontBBox get aload pop setcachedevice
+ 40 setlinewidth
+ newpath 0 0 moveto gsave charproc grestore
+ end}def
+/BuildChar load 0 DITfd put
+%/UniqueID 5 def
+/CharProcs 50 dict def
+CharProcs begin
+/space{}def
+/.notdef{}def
+/ru{500 0 rls}def
+/rn{0 750 moveto 500 0 rls}def
+/vr{20 800 moveto 0 -770 rls}def
+/bv{20 800 moveto 0 -1000 rls}def
+/br{20 770 moveto 0 -1040 rls}def
+/ul{0 -250 moveto 500 0 rls}def
+/ob{200 250 rmoveto currentpoint newpath 200 0 360 arc closepath stroke}def
+/bu{200 250 rmoveto currentpoint newpath 200 0 360 arc closepath fill}def
+/sq{80 0 rmoveto currentpoint dround newpath moveto
+ 640 0 rlineto 0 640 rlineto -640 0 rlineto closepath stroke}def
+/bx{80 0 rmoveto currentpoint dround newpath moveto
+ 640 0 rlineto 0 640 rlineto -640 0 rlineto closepath fill}def
+/ci{355 333 rmoveto currentpoint newpath 333 0 360 arc
+ 50 setlinewidth stroke}def
+
+/lt{20 -200 moveto 0 550 rlineto currx 800 2cx s4 add exch s4 a4p stroke}def
+/lb{20 800 moveto 0 -550 rlineto currx -200 2cx s4 add exch s4 a4p stroke}def
+/rt{20 -200 moveto 0 550 rlineto currx 800 2cx s4 sub exch s4 a4p stroke}def
+/rb{20 800 moveto 0 -500 rlineto currx -200 2cx s4 sub exch s4 a4p stroke}def
+/lk{20 800 moveto 20 300 -280 300 s4 arcto pop pop 1000 sub
+ currentpoint stroke moveto
+ 20 300 4 2 roll s4 a4p 20 -200 lineto stroke}def
+/rk{20 800 moveto 20 300 320 300 s4 arcto pop pop 1000 sub
+ currentpoint stroke moveto
+ 20 300 4 2 roll s4 a4p 20 -200 lineto stroke}def
+/lf{20 800 moveto 0 -1000 rlineto s4 0 rls}def
+/rf{20 800 moveto 0 -1000 rlineto s4 neg 0 rls}def
+/lc{20 -200 moveto 0 1000 rlineto s4 0 rls}def
+/rc{20 -200 moveto 0 1000 rlineto s4 neg 0 rls}def
+end
+
+/Metrics 50 dict def Metrics begin
+/.notdef 0 def
+/space 500 def
+/ru 500 def
+/br 0 def
+/lt 250 def
+/lb 250 def
+/rt 250 def
+/rb 250 def
+/lk 250 def
+/rk 250 def
+/rc 250 def
+/lc 250 def
+/rf 250 def
+/lf 250 def
+/bv 250 def
+/ob 350 def
+/bu 350 def
+/ci 750 def
+/bx 750 def
+/sq 750 def
+/rn 500 def
+/ul 500 def
+/vr 0 def
+end
+
+DITfd begin
+/s2 500 def /s4 250 def /s3 333 def
+/a4p{arcto pop pop pop pop}def
+/2cx{2 copy exch}def
+/rls{rlineto stroke}def
+/currx{currentpoint pop}def
+/dround{transform round exch round exch itransform} def
+end
+end
+/DIThacks exch definefont pop
+
+ditstart
+(psc)xT
+576 1 1 xr
+1(Times-Roman)xf 1 f
+2(Times-Italic)xf 2 f
+3(Times-Bold)xf 3 f
+4(Times-BoldItalic)xf 4 f
+5(Helvetica)xf 5 f
+6(Helvetica-Bold)xf 6 f
+7(Courier)xf 7 f
+8(Courier-Bold)xf 8 f
+9(Symbol)xf 9 f
+10(DIThacks)xf 10 f
+10 s
+1 f
+xi
+%%EndProlog
+5(Helvetica-Narrow)xf 5 f
+1 f
+
+%%Page: 1 1
+5(Helvetica-Narrow)xf 5 f
+10 s 0 xH 0 xS 5 f
+8 s
+1 f
+10 s
+32(--)Y
+4323(--)X
+3 f
+16 s
+1121 984(An)N
+1316(Approach)X
+1895(to)X
+2034(G)X
+2134(enuine)X
+2529(Dynam)X
+2927(ic)X
+3052(Linking)X
+2 f
+12 s
+2036 1464(W.)N
+2164(Wilson)X
+2455(Ho)X
+1 f
+719 1644(Division)N
+1074(of)X
+1178(Computer)X
+1587(Science,)X
+1935(University)X
+2365(of)X
+2469(California,)X
+2908(Davis,)X
+3180(CA)X
+3337(95616,)X
+3625(U.S.A.)X
+1734 1764(Email:)N
+2016(how@cs.ucdavis.edu)X
+2 f
+1966 2004(Ronald)N
+2268(A.)X
+2375(Olsson)X
+1 f
+719 2184(Division)N
+1074(of)X
+1178(Computer)X
+1587(Science,)X
+1935(University)X
+2365(of)X
+2469(California,)X
+2908(Davis,)X
+3180(CA)X
+3337(95616,)X
+3625(U.S.A.)X
+1694 2304(Email:)N
+1976(olsson@cs.ucdavis.edu)X
+3 f
+10 s
+2090 2608(SUMMARY)N
+1 f
+12 s
+576 2816(This)N
+781(paper)X
+1029(describes)X
+1421(a)X
+1498(new)X
+1692(approach)X
+2080(to)X
+2190(dynamic)X
+2557(link/unlink)X
+3015(editing.)X
+3366(The)X
+3551(basis)X
+3778(of)X
+3893(this)X
+576 2968(approach)N
+965(is)X
+1065(a)X
+1144(library)X
+1436(of)X
+1551(link)X
+1736(editing)X
+2039(functions)X
+2432(that)X
+2612(can)X
+2781(add)X
+2955(compiled)X
+3349(object)X
+3620(code)X
+3837(to)X
+2 f
+3947(or)X
+576 3120(remove)N
+1 f
+909(such)X
+1135(code)X
+1367(from)X
+1604(a)X
+1697(process)X
+2035(anytime)X
+2396(during)X
+2697(its)X
+2838(execution.)X
+3311(Loading)X
+3682(modules,)X
+576 3272(searching)N
+982(libraries,)X
+1359(resolving)X
+1754(external)X
+2102(references,)X
+2559(and)X
+2735(allocating)X
+3153(storage)X
+3468(for)X
+3616(global)X
+3893(and)X
+576 3424(static)N
+805(data)X
+991(structures)X
+1390(are)X
+1533(all)X
+1655(performed)X
+2081(at)X
+2176(run)X
+2329(time.)X
+2575(This)X
+2772(approach)X
+3151(provides)X
+3508(the)X
+3652(ef\256ciency)X
+576 3576(of)N
+688(native)X
+956(machine)X
+1314(code)X
+1527(execution)X
+1933(along)X
+2178(with)X
+2380(the)X
+2529(\257exibility)X
+2935(to)X
+3041(modify)X
+3350(a)X
+3424(program)X
+3781(during)X
+576 3728(its)N
+693(execution,)X
+1118(thereby)X
+1433(making)X
+1748(many)X
+1988(new)X
+2174(applications)X
+2666(possible.)X
+3055(This)X
+3252(paper)X
+3492(also)X
+3674(describes)X
+576 3880(three)N
+803(sample)X
+1110(applications)X
+1610(of)X
+1724(these)X
+1956(dynamic)X
+2322(link)X
+2506(editing)X
+2808(functions:)X
+3250(program)X
+3609(customiza-)X
+576 4032(tion,)N
+775(incremental)X
+1257(program)X
+1609(development,)X
+2157(and)X
+2322(support)X
+2636(for)X
+2774(debugging)X
+3206(and)X
+3371(testing.)X
+3702(A)X
+3797(proto-)X
+576 4184(type)N
+770(of)X
+878(this)X
+1045(approach)X
+1426(is)X
+1518(implemented)X
+2050(under)X
+2297(UNIX)X
+2563(as)X
+2670(a)X
+2740(library)X
+3024(package)X
+3367(called)X
+2 f
+3625(dld)X
+1 f
+3775(for)X
+3914(the)X
+576 4336(C)N
+664(programming)X
+1212(language)X
+1584(and)X
+1747(is)X
+1835(available)X
+2208(for)X
+2344(VAX,)X
+2599(Sun)X
+2772(3,)X
+2868(and)X
+3031(SPARCstation)X
+3615(machines.)X
+576 4820(KEY)N
+797(WORDS)X
+1440(Dynamic)X
+1817(Linking)X
+1440 4972(Incremental)N
+1925(Program)X
+2280(Development)X
+1440 5124(Program)N
+1795(Customization)X
+1440 5276(Debugging)N
+1891(and)X
+2054(Testing)X
+1440 5428(UNIX)N
+
+1 p
+%%Page: 1 2
+5(Helvetica-Narrow)xf 5 f
+12 s 0 xH 0 xS 5 f
+1 f
+10 s
+0 32(--)N
+4323(--)X
+12 s
+2224 616(-)N
+2280(1)X
+2352(-)X
+3362(October)X
+3696(15,)X
+3840(1990)X
+1942 1016(INTRODUCTION)N
+576 1348(Many)N
+840(conventional)X
+1378(operating)X
+1782(systems\320such)X
+2399(as)X
+2520(UNIX,)X
+2824(DOS,)X
+3080(and)X
+3260(VMS\320assume)X
+3887(that)X
+576 1500(programs)N
+982(are)X
+1143(static)X
+1390(entities)X
+1712(in)X
+1830(the)X
+1991(sense)X
+2242(that)X
+2430(construction)X
+2949(of)X
+3071(a)X
+3156(program)X
+3524(is)X
+3630(completed)X
+576 1652(before)N
+859(its)X
+987(execution.)X
+1447(A)X
+1554(program's)X
+1987(functionality,)X
+2542(control)X
+2853(structures,)X
+3289(number)X
+3621(of)X
+3739(subrou-)X
+576 1804(tines,)N
+815(and)X
+987(requirement)X
+1486(on)X
+1615(library)X
+1905(functions)X
+2296(are)X
+2447(all)X
+2577(well)X
+2776(de\256ned)X
+3091(and)X
+3262(do)X
+3390(not)X
+3545(change)X
+3850(once)X
+576 1956(the)N
+731(program)X
+1094(begins)X
+1382(execution.)X
+1842(However,)X
+2255(some)X
+2495(programming)X
+3056(languages,)X
+3503(such)X
+3717(as)X
+3835(LISP)X
+576 2108(and)N
+745(Prolog,)X
+1055(take)X
+1246(an)X
+1367(alternative)X
+1805(approach)X
+2188(in)X
+2293(which)X
+2558(they)X
+2754(allow)X
+2998(new)X
+3188(functions)X
+3576(to)X
+3681(be)X
+3802(added)X
+576 2260(during)N
+864(the)X
+1019(execution)X
+1431(of)X
+1548(a)X
+1628(program.)X
+2039(The)X
+2226(assumption)X
+2702(that)X
+2885(programs)X
+3286(are)X
+3442(static)X
+3684(therefore)X
+576 2412(makes)N
+863(it)X
+957(very)X
+1168(dif\256cult)X
+1513(to)X
+1628(translate)X
+1995(these)X
+2233(languages)X
+2658(directly)X
+2993(into)X
+3183(native)X
+3459(machine)X
+3826(code.)X
+576 2564(Instead,)N
+904(they)X
+1097(are)X
+1242(interpreted)X
+1687(by)X
+1810(a)X
+1880(runtime)X
+2207(support)X
+2522(system)X
+2816(or)X
+2923(pseudo-machine,)X
+3605(which)X
+3867(runs)X
+576 2716(more)N
+798(slowly)X
+1078(than)X
+1268(native)X
+1528(code)X
+1734(on)X
+1854(a)X
+1921(physical)X
+2266(machine.)X
+776 2896(This)N
+987(paper)X
+1241(presents)X
+1596(an)X
+1727(new)X
+1927(approach)X
+2320(to)X
+2435(program)X
+2801(construction)X
+3318(that)X
+3504(allows)X
+3796(object)X
+576 3048(modules)N
+932(to)X
+1037(be)X
+1158(dynamically)X
+3 f
+1664(de\256ned)X
+1 f
+1991(or)X
+3 f
+2100(rede\256ned)X
+1 f
+(,)S
+2537(and)X
+3 f
+2705(added)X
+1 f
+2984(to)X
+3088(or)X
+3 f
+3197(removed)X
+1 f
+3584(from)X
+3800(a)X
+3872(pro-)X
+576 3200(cess)N
+782(during)X
+1079(its)X
+1216(execution.)X
+1686(In)X
+1813(other)X
+2058(existing)X
+2410(systems,)X
+2785(object)X
+3068(modules)X
+3441(can)X
+3622(at)X
+3739(best)X
+3941(be)X
+576 3352(dynamically)N
+1087(loaded)X
+1378(but)X
+1535(not)X
+1692(removed.)X
+2110(Using)X
+2372(this)X
+2544(approach,)X
+2954(the)X
+3105(functionalities)X
+3690(provided)X
+576 3504(by)N
+704(a)X
+779(program)X
+1137(during)X
+1421(its)X
+1545(execution)X
+1953(can)X
+2120(therefore)X
+2501(change)X
+2807(with)X
+3011(time)X
+3216(or)X
+3329(in)X
+3437(response)X
+3806(to)X
+3914(the)X
+576 3656(environment.)N
+1155(Thus,)X
+1415(this)X
+1598(approach)X
+1995(retains)X
+2296(the)X
+2458(ef\256ciency)X
+2882(of)X
+3006(executing)X
+3425(native)X
+3705(machine)X
+576 3808(code)N
+782(and)X
+945(adds)X
+1145(the)X
+1287(\257exibility)X
+1686(of)X
+1790(modifying)X
+2215(a)X
+2282(program)X
+2632(during)X
+2907(its)X
+3022(execution.)X
+776 3988(A)N
+895(dynamic)X
+1278(link)X
+1479(editor,)X
+1779(called)X
+2 f
+2061(dld)X
+1 f
+2184(,)X
+2259(implements)X
+2760(this)X
+2950(approach)X
+3354(under)X
+3624(the)X
+3793(UNIX)X
+576 4140(operating)N
+969(system.)X
+1313(It)X
+1401(integrates)X
+1805(or)X
+1914(removes)X
+2269(object)X
+2534(modules)X
+2889(at)X
+2988(run)X
+3145(time.)X
+2 f
+3394(Dld)X
+1 f
+3566(differs)X
+3845(from)X
+576 4292(other)N
+804(dynamic)X
+1166(linkers)X
+1458(in)X
+1563(that)X
+1738(not)X
+1891(only)X
+2092(can)X
+2256(object)X
+2522(modules)X
+2878(be)X
+2999(added)X
+3259(to)X
+3364(but)X
+3517(they)X
+3713(can)X
+3877(also)X
+576 4444(be)N
+695(removed)X
+1059(from)X
+1273(an)X
+1391(executing)X
+1793(process.)X
+2156(Furthermore,)X
+2688(these)X
+2913(modules)X
+3266(do)X
+3389(not)X
+3539(even)X
+3748(have)X
+3957(to)X
+576 4596(be)N
+742(known)X
+1078(or)X
+1233(exist)X
+1490(when)X
+1773(the)X
+1966(execution)X
+2416(begins.)X
+2790(This)X
+3036(paper)X
+3325(describes)X
+3759(several)X
+576 4748(applications\320program)N
+1510(customization,)X
+2121(incremental)X
+2622(program)X
+2993(development,)X
+3560(and)X
+3744(support)X
+576 4900(for)N
+743(advanced)X
+1162(debugging)X
+1623(and)X
+1818(testing)X
+2131(features\320that)X
+2733(illustrate)X
+3127(the)X
+3301(usefulness)X
+3757(of)X
+3893(this)X
+576 5052(dynamic)N
+932(linking)X
+1229(approach.)X
+776 5232(The)N
+975(major)X
+1249(cost)X
+1453(of)X
+1582(dynamic)X
+1963(linking)X
+2286(is)X
+2400(the)X
+2568(onetime)X
+2929(overhead)X
+3332(in)X
+3457(reading)X
+3796(object)X
+576 5384(modules)N
+942(from)X
+1169(disk.)X
+1417(The)X
+1607(processing)X
+2057(time)X
+2268(spent)X
+2510(on)X
+2645(link)X
+2834(editing)X
+3141(is)X
+3244(actually)X
+3589(very)X
+3799(small.)X
+576 5536(Once)N
+806(the)X
+951(modules)X
+1304(have)X
+1513(been)X
+1723(linked,)X
+2016(the)X
+2162(executing)X
+2565(process)X
+2881(runs)X
+3074(at)X
+3172(nearly)X
+3441(the)X
+3587(same)X
+3813(speed)X
+576 5688(as)N
+687(the)X
+836(equivalent)X
+1269(statically)X
+1649(linked)X
+1921(process.)X
+2288(In)X
+2399(fact,)X
+2599(the)X
+2747(only)X
+2948(signi\256cant)X
+3379(drawback)X
+3783(of)X
+3893(this)X
+576 5840(dynamic)N
+955(linking)X
+1275(approach)X
+1675(is)X
+1786(that)X
+1979(its)X
+2118(\257exibility)X
+2541(makes)X
+2835(it)X
+2937(susceptible)X
+3413(to)X
+3536(misuse.)X
+3899(For)X
+
+2 p
+%%Page: 2 3
+5(Helvetica-Narrow)xf 5 f
+12 s 0 xH 0 xS 5 f
+1 f
+10 s
+0 32(--)N
+4323(--)X
+12 s
+2224 616(-)N
+2280(2)X
+2352(-)X
+3362(October)X
+3696(15,)X
+3840(1990)X
+576 1016(example,)N
+961(a)X
+1038(process)X
+1360(might)X
+1619(be)X
+1744(corrupted)X
+2146(by)X
+2275(linking)X
+2581(in)X
+2689(erroneous)X
+3101(code,)X
+3340(or)X
+3453(careless)X
+3791(use)X
+3952(of)X
+576 1168(dynamic)N
+939(linking)X
+1243(in)X
+1349(privileged)X
+1771(system)X
+2069(programs)X
+2464(might)X
+2721(create)X
+2984(security)X
+3321(problems.)X
+3759(A)X
+3860(later)X
+576 1320(section)N
+873(discusses)X
+1254(these)X
+1476(drawbacks)X
+1911(and)X
+2074(possible)X
+2413(remedies)X
+2785(in)X
+2884(more)X
+3106(detail.)X
+
+3 p
+%%Page: 3 4
+5(Helvetica-Narrow)xf 5 f
+12 s 0 xH 0 xS 5 f
+1 f
+10 s
+0 32(--)N
+4323(--)X
+12 s
+2224 616(-)N
+2280(3)X
+2352(-)X
+3362(October)X
+3696(15,)X
+3840(1990)X
+1966 1016(BACKGROUND)N
+576 1348(This)N
+784(section)X
+1094(presents)X
+1447(some)X
+1688(basic)X
+1924(concepts)X
+2299(of)X
+2417(program)X
+2781(compilation)X
+3280(and)X
+3457(link)X
+3645(editing;)X
+3978(it)X
+576 1500(also)N
+769(describes)X
+1165(the)X
+1321(structures)X
+1733(of)X
+1851(relocatable)X
+2313(object)X
+2587(\256les)X
+2785(and)X
+2962(executable)X
+3413(\256les)X
+3611(in)X
+3724(general.)X
+576 1652(While)N
+839(the)X
+984(description)X
+1439(of)X
+1547(these)X
+1773(structures)X
+2175(and)X
+2342(the)X
+2488(example)X
+2843(given)X
+3085(in)X
+3188(this)X
+3355(section)X
+3656(might)X
+3909(not)X
+576 1804(directly)N
+899(apply)X
+1141(to)X
+1244(all)X
+1368(operating)X
+1759(systems,)X
+2114(the)X
+2259(underlying)X
+2703(principles)X
+3110(are)X
+3255(all)X
+3379(similar.)X
+3722(Readers)X
+576 1956(already)N
+889(familiar)X
+1224(with)X
+1424(these)X
+1651(concepts)X
+2017(may)X
+2212(proceed)X
+2546(to)X
+2650(the)X
+2797(next)X
+2992(section.)X
+3342(Further)X
+3654(details)X
+3936(on)X
+576 2108(these)N
+798(basic)X
+1020(concepts)X
+1381(can)X
+1539(be)X
+1654(found)X
+1902(in)X
+2001(Reference)X
+2416(1.)X
+776 2288(Most)N
+1001(contemporary)X
+1564(programming)X
+2116(environments)X
+2668(do)X
+2793(not)X
+2945(convert)X
+3263(programs)X
+3655(written)X
+3957(in)X
+576 2440(high-level)N
+993(programming)X
+1543(languages)X
+1954(directly)X
+2275(into)X
+2450(executable)X
+2888(machine)X
+3240(code.)X
+3495(Typically,)X
+3914(the)X
+576 2592(source)N
+855(of)X
+963(a)X
+1034(program)X
+1388(is)X
+1480(contained)X
+1883(in)X
+1986(one)X
+2153(or)X
+2261(more)X
+2487(\256les,)X
+2699(or)X
+4 f
+2808(source)X
+3098(modules)X
+1 f
+3429(,)X
+3482(each)X
+3688(of)X
+3797(which)X
+576 2744(contains)N
+933(de\256nitions)X
+1375(of)X
+1490(functions)X
+1883(and)X
+2057(data)X
+2253(structures.)X
+2710(These)X
+2975(modules)X
+3336(are)X
+3489(\256rst)X
+3673(compiled)X
+576 2896(into)N
+4 f
+771(object)X
+1052(modules)X
+1 f
+1383(,)X
+1452(which)X
+1732(are)X
+1895(then)X
+2106(combined)X
+2531(together)X
+2892(into)X
+3087(a)X
+3175(single)X
+3451(\256le.)X
+3668(This)X
+3885(\256le,)X
+576 3048(known)N
+865(as)X
+973(the)X
+4 f
+1119(executable)X
+1570(\256le)X
+1 f
+1693(,)X
+1745(has)X
+1901(a)X
+1972(well-de\256ned)X
+2481(format)X
+2765(understood)X
+3219(by)X
+3342(the)X
+3487(operating)X
+3878(sys-)X
+576 3200(tem)N
+745(and)X
+908(can)X
+1066(readily)X
+1358(be)X
+1473(turned)X
+1743(into)X
+1917(an)X
+2032(executing)X
+2431(process.)X
+776 3380(An)N
+942(object)X
+1228(module)X
+1567(is)X
+1681(the)X
+1849(machine)X
+2226(code)X
+2458(equivalent)X
+2910(of)X
+3040(its)X
+3181(corresponding)X
+3781(source)X
+576 3532(module.)N
+953(It)X
+1052(contains)X
+1413(a)X
+4 f
+1496(text)X
+1 f
+1681(segment)X
+2042(\(machine)X
+2440(code)X
+2661(for)X
+2812(functions\))X
+3241(and)X
+3419(a)X
+4 f
+3501(data)X
+1 f
+3711(segment)X
+576 3684(\(machine)N
+1011(representations)X
+1670(of)X
+1826(global)X
+2143(and)X
+2358(static)X
+2638(variables,)X
+3086(string)X
+3381(constants,)X
+3839(etc.\).)X
+576 3836(Throughout)N
+1061(this)X
+1231(paper,)X
+1500(the)X
+1649(term)X
+2 f
+1857(module)X
+1 f
+2171(is)X
+2266(used)X
+2472(whenever)X
+2876(there)X
+3099(is)X
+3193(no)X
+3319(ambiguity)X
+3740(or)X
+3850(need)X
+576 3988(to)N
+677(distinguish)X
+1125(between)X
+1472(a)X
+1542(source)X
+1820(module)X
+2136(and)X
+2302(an)X
+2420(object)X
+2683(module.)X
+3047(When)X
+3304(a)X
+3374(source)X
+3652(module)X
+3968(is)X
+576 4140(compiled,)N
+989(the)X
+1137(compiler)X
+1510(generates)X
+1904(an)X
+4 f
+2025(object)X
+2290(\256le)X
+1 f
+2413(,)X
+2466(which,)X
+2754(in)X
+2858(addition)X
+3203(to)X
+3307(the)X
+3454(object)X
+3719(module,)X
+576 4292(contains)N
+930(global)X
+1204(symbol)X
+1520(de\256nitions)X
+1959(and)X
+2131(information)X
+2619(that)X
+2797(enables)X
+3120(this)X
+3293(module)X
+3616(to)X
+3725(be)X
+3850(relo-)X
+576 4444(cated.)N
+867(This)X
+1077(extra)X
+1309(information)X
+1803(is)X
+1906(necessary)X
+2319(because)X
+2663(global)X
+2943(symbols)X
+3302(de\256ned)X
+3624(in)X
+3737(a)X
+3818(given)X
+576 4596(module)N
+892(might)X
+1144(be)X
+1262(referenced)X
+1696(by)X
+1820(other)X
+2046(modules,)X
+2424(which)X
+2687(need)X
+2897(to)X
+3000(know)X
+3241(the)X
+3387(location)X
+3726(of)X
+3834(these)X
+576 4748(symbols.)N
+988(Furthermore,)X
+1537(the)X
+1699(compiler)X
+2086(or)X
+2210(assembler)X
+2639(does)X
+2859(not)X
+3025(know)X
+3281(the)X
+3442(location)X
+3796(in)X
+3914(the)X
+576 4900(address)N
+891(space)X
+1132(where)X
+1394(the)X
+1540(module)X
+1857(will)X
+2035(be)X
+2154(loaded)X
+2439(when)X
+2675(it)X
+2757(is)X
+2849(combined)X
+3257(with)X
+3456(other)X
+3682(modules.)X
+576 5052(Therefore,)N
+1012(relocation)X
+1430(information)X
+1917(must)X
+2135(be)X
+2257(recorded)X
+2625(with)X
+2827(the)X
+2976(object)X
+3243(\256le.)X
+3445(Related)X
+3771(groups)X
+576 5204(of)N
+684(object)X
+948(\256les)X
+1136(of)X
+1244(commonly)X
+1684(used)X
+1888(source)X
+2167(modules\320such)X
+2793(as)X
+2902(system)X
+3198(services,)X
+3561(input/output)X
+576 5356(operations,)N
+1027(and)X
+1192 0.3409(mathematical)AX
+1739(functions\320are)X
+2337(often)X
+2561(combined)X
+2967(into)X
+3142(archive)X
+3451(\256les,)X
+3660(or)X
+4 f
+3765(library)X
+576 5508(\256les)N
+1 f
+736(.)X
+813(As)X
+948(a)X
+1020(result,)X
+1287(users)X
+1513(can)X
+1676(specify)X
+1983(a)X
+2055(large)X
+2277(number)X
+2600(of)X
+2710(related)X
+3003(object)X
+3269(\256les)X
+3459(by)X
+3585(giving)X
+3861(only)X
+576 5660(one)N
+739(\256le)X
+886(name.)X
+
+4 p
+%%Page: 4 5
+5(Helvetica-Narrow)xf 5 f
+12 s 0 xH 0 xS 5 f
+1 f
+10 s
+0 32(--)N
+4323(--)X
+12 s
+2224 616(-)N
+2280(4)X
+2352(-)X
+3362(October)X
+3696(15,)X
+3840(1990)X
+776 1016(The)N
+952(activity)X
+1268(of)X
+1374(loading)X
+1690(and)X
+1856(relocating)X
+2269(object)X
+2532(modules)X
+2885(into)X
+3062(an)X
+3180(executable)X
+3620(\256le)X
+3770(is)X
+3861(gen-)X
+576 1168(erally)N
+825(referred)X
+1159(to)X
+1263(as)X
+4 f
+1372(link)X
+1556(editing)X
+1 f
+1858(or)X
+1967(simply)X
+4 f
+2257(linking)X
+1 f
+2540(.)X
+2616(This)X
+2815(activity)X
+3133(maps)X
+3364(each)X
+3569(module)X
+3886(to)X
+3989(a)X
+576 1320(section)N
+883(of)X
+997(the)X
+1149(virtual)X
+1436(address)X
+1759(space,)X
+2032(resolves)X
+2382(global)X
+2658(symbol)X
+2976(references)X
+3407(across)X
+3682(modules,)X
+576 1472(and)N
+764(allocates)X
+1151(storage)X
+1478(for)X
+1639(the)X
+1806(global)X
+2095(data)X
+2304(structures.)X
+2774(Each)X
+3015(module)X
+3352(is)X
+3464(then)X
+3678(relocated)X
+576 1624(accordingly)N
+1055(and)X
+1218(the)X
+1360(results)X
+1635(are)X
+1777(written)X
+2074(out)X
+2221(to)X
+2320(a)X
+2387(\256le)X
+2534(in)X
+2633(the)X
+2775(executable)X
+3212(format.)X
+776 1804(Object)N
+1068(modules)X
+1429(to)X
+1539(be)X
+1665(linked)X
+1941(together)X
+2292(can)X
+2462(be)X
+2589(taken)X
+2834(from)X
+3057(individual)X
+3484(object)X
+3756(\256les)X
+3952(or)X
+576 1956(library)N
+860(\256les.)X
+1095(A)X
+1191(typical)X
+1481(link)X
+1658(editor)X
+1910(usually)X
+2215(handle)X
+2499(these)X
+2724(two)X
+2895(types)X
+3125(of)X
+3232(\256les)X
+3418(differently.)X
+3899(For)X
+576 2108(a)N
+653(simple)X
+944(object)X
+1214(\256le,)X
+1395(the)X
+1548(object)X
+1819(module)X
+2143(it)X
+2232(contains)X
+2588(is)X
+2687(always)X
+2989(loaded)X
+3281(into)X
+3466(the)X
+3619(executable)X
+576 2260(\256le.)N
+777(For)X
+940(a)X
+1013(library)X
+1299(\256le,)X
+1475(since)X
+1702(not)X
+1854(all)X
+1980(modules)X
+2335(it)X
+2418(contains)X
+2768(are)X
+2915(generally)X
+3303(needed,)X
+3629(only)X
+3829(those)X
+576 2412(modules)N
+938(de\256ning)X
+1289(an)X
+1416(unresolved)X
+1874(external)X
+2221(reference)X
+2616(are)X
+2770(loaded.)X
+3111(Since)X
+3361(a)X
+3440(module)X
+3765(from)X
+3989(a)X
+576 2564(library)N
+860(may)X
+1053(itself)X
+1273(contain)X
+1583(references)X
+2005(to)X
+2106(other)X
+2330(modules,)X
+2706(loading)X
+3021(it)X
+3101(may)X
+3293(generate)X
+3646(additional)X
+576 2716(external)N
+917(references.)X
+1391(Therefore,)X
+1825(link)X
+2005(editors)X
+2297(are)X
+2445(responsible)X
+2913(to)X
+3019(search)X
+3296(through)X
+3626(the)X
+3775(library)X
+576 2868(\256les)N
+760(to)X
+859(ensure)X
+1134(all)X
+1255(required)X
+1600(modules)X
+1950(are)X
+2092(loaded.)X
+776 3048(The)N
+958(ability)X
+1237(for)X
+1381(a)X
+1456(linker)X
+1713(to)X
+1820 0.2812(automatically)AX
+2378(select)X
+2630(and)X
+2801(load)X
+2999(only)X
+3202(the)X
+3352(required)X
+3706(modules)X
+576 3200(from)N
+800(a)X
+880(library)X
+1174(\256le)X
+1334(is)X
+1435(very)X
+1643(important:)X
+2106(it)X
+2197(alleviates)X
+2599(the)X
+2753(need)X
+2971(for)X
+3119(a)X
+3198(user)X
+3394(to)X
+3505(keep)X
+3723(track)X
+3952(of)X
+576 3352(which)N
+842(modules)X
+1199(are)X
+1348(required.)X
+1748(However,)X
+2155(the)X
+2304(executable)X
+2748(\256le)X
+2902(might)X
+3159(still)X
+3336(contain)X
+3652(inaccessi-)X
+576 3504(ble)N
+730(functions)X
+1124(or)X
+1240(data)X
+1437(because)X
+1778(even)X
+1996(if)X
+2091(only)X
+2298(one)X
+2473(of)X
+2589(the)X
+2743(functions)X
+3137(de\256ned)X
+3456(in)X
+3566(a)X
+3644(module)X
+3968(is)X
+576 3656(needed,)N
+897(the)X
+1039(linker)X
+1288(loads)X
+1515(complete)X
+1893(the)X
+2035(module.)X
+776 3836(Figure)N
+1060(1)X
+1141(shows)X
+1413(an)X
+1537(example)X
+1898(of)X
+2012(linking)X
+2319(3)X
+2401(\256les:)X
+5 f
+2644(main.o)X
+1 f
+2881(,)X
+5 f
+2937(sub.o)X
+1 f
+3130(,)X
+3188(and)X
+5 f
+3359(libc.a)X
+1 f
+3542(.)X
+5 f
+3622(Main.o)X
+1 f
+3893(and)X
+5 f
+576 3988(sub.o)N
+1 f
+799(are)X
+947(object)X
+1213(\256les)X
+1402(and)X
+5 f
+1568(libc.a)X
+1 f
+1780(is)X
+1873(a)X
+1945(library)X
+2231(archive,)X
+2568(containing)X
+3004(object)X
+3269(\256les)X
+5 f
+3456(lib1.o)X
+1 f
+3644(,)X
+5 f
+3695(lib2.o)X
+1 f
+3883(,)X
+3936(...,)X
+5 f
+576 4140(libn.o)N
+1 f
+764(.)X
+847(As)X
+988(shown)X
+1273(in)X
+1383(the)X
+1536(\256gure,)X
+5 f
+1817(main.o)X
+1 f
+2089(contains)X
+2445(references)X
+2876(to)X
+5 f
+2985(sub.o)X
+1 f
+3214(and)X
+3389(the)X
+3543(function)X
+5 f
+3898(foo)X
+1 f
+4008(,)X
+576 4292(which)N
+839(is)X
+931(de\256ned)X
+1242(in)X
+5 f
+1343(lib1.o)X
+1 f
+1531(.)X
+1607(Function)X
+5 f
+1975(goo)X
+1 f
+2107(,)X
+2159(also)X
+2342(de\256ned)X
+2653(in)X
+5 f
+2754(lib1.o)X
+1 f
+2942(,)X
+2994(contains)X
+3343(a)X
+3414(reference)X
+3800(to)X
+5 f
+3900(hoo)X
+1 f
+576 4444(de\256ned)N
+892(in)X
+5 f
+998(lib2.o)X
+1 f
+1186(.)X
+1267(Since)X
+1514(the)X
+1665(smallest)X
+2014(unit)X
+2197(of)X
+2310(linking)X
+2617(is)X
+2715(an)X
+2840(object)X
+3110(module,)X
+5 f
+3455(lib1.o)X
+1 f
+3677(is)X
+3775(loaded)X
+576 4596(completely)N
+1046(into)X
+1237(the)X
+1396(executable)X
+1850(\256le,)X
+2038(even)X
+2261(though)X
+5 f
+2567(goo)X
+1 f
+2740(is)X
+2845(actually)X
+3191(not)X
+3354(referenced)X
+3801(at)X
+3911(all.)X
+576 4748(Furthermore,)N
+5 f
+1105(lib2.o)X
+1 f
+1319(is)X
+1409(also)X
+1590(loaded)X
+1874(because)X
+2206(it)X
+2287(de\256nes)X
+5 f
+2584(hoo)X
+1 f
+2716(,)X
+2767(which)X
+3029(is)X
+3120(referenced)X
+3554(by)X
+5 f
+3675(goo)X
+1 f
+3807(.)X
+3882(The)X
+576 4900(resultant)N
+932(executable)X
+1369(\256le)X
+1516(generated)X
+1915(will)X
+2089(contain)X
+2397(4)X
+2469(modules:)X
+5 f
+2868(main.o)X
+1 f
+3105(,)X
+5 f
+3151(sub.o)X
+1 f
+3344(,)X
+5 f
+3390(lib1.o)X
+1 f
+3578(,)X
+3626(and)X
+5 f
+3787(lib2.o)X
+1 f
+3975(.)X
+
+5 p
+%%Page: 5 6
+5(Helvetica-Narrow)xf 5 f
+12 s 0 xH 0 xS 5 f
+2 f
+1 f
+10 s
+0 32(--)N
+4323(--)X
+12 s
+2224 616(-)N
+2280(5)X
+2352(-)X
+3362(October)X
+3696(15,)X
+3840(1990)X
+10 f
+576 1168(hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh)N
+20 s
+1458 2218 MXY
+108 792 Dl
+1522 2900 MXY
+44 110 Dl
+12 -118 Dl
+1674 2002 MXY
+899 -107 Dl
+2463 1937 MXY
+110 -42 Dl
+2574 1894 MXY
+-117 -14 Dl
+10 s
+1458 2794 MXY
+0 432 Dl
+612 0 Dl
+0 -432 Dl
+-612 0 Dl
+1206 1858 MXY
+576 0 Dl
+0 467 Dl
+2326 MY
+-576 0 Dl
+0 -467 Dl
+2574 3370 MXY
+0 432 Dl
+612 0 Dl
+0 -432 Dl
+-612 0 Dl
+1822 MY
+0 647 Dl
+2470 MY
+612 0 Dl
+0 -647 Dl
+1822 MY
+-612 0 Dl
+2650 MY
+0 432 Dl
+612 0 Dl
+0 -432 Dl
+-612 0 Dl
+40 s
+2394 1642 MXY
+1008 0 Dl
+0 2267 Dl
+3910 MY
+-1008 0 Dl
+0 -2267 Dl
+20 s
+3114 2254 MXY
+D~ 360 323 -468 288
+ D~~
+3089 2782 MXY
+-83 84 Dl
+113 -35 Dl
+7 f
+9 s
+1286 2038(call)N
+1501(foo)X
+1365 1822(main.o)N
+1603 2758(sub.o)N
+2733 3334(libn.o)N
+2611 2722(hoo\(\))N
+2690 2290(call)N
+2905(hoo)X
+2733 2614(lib2.o)N
+2733 1786(lib1.o)N
+2611 2146(goo\(\))N
+2611 1930(foo\(\))N
+2733 1534(libc.a)N
+2841 3118(.)N
+2841 3154(.)N
+2841 3226(.)N
+2 f
+12 s
+1439 4110(Figure)N
+1725(1:)X
+1853(Linking)X
+2171(of)X
+2270(object)X
+2530(and)X
+2698(library)X
+2989(\256les.)X
+10 f
+576 4414(hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh)N
+
+6 p
+%%Page: 6 7
+5(Helvetica-Narrow)xf 5 f
+12 s 0 xH 0 xS 5 f
+1 f
+10 s
+0 32(--)N
+4323(--)X
+12 s
+2224 616(-)N
+2280(6)X
+2352(-)X
+3362(October)X
+3696(15,)X
+3840(1990)X
+1599 1016(DYNAMIC)N
+2080(VS.)X
+2250(STATIC)X
+2610(LINKING)X
+3 f
+576 1472(Static)N
+835(linking)X
+1147(and)X
+1325(its)X
+1445(limitations)X
+1 f
+576 1652(Most)N
+798(operating)X
+1187(systems)X
+1516(assume)X
+4 f
+1824(static)X
+2058(linking)X
+1 f
+2341(.)X
+2414(That)X
+2616(is,)X
+2730(the)X
+2874(link)X
+3050(editing)X
+3344(step)X
+3525(is)X
+3615(carried)X
+3909(out)X
+576 1804(only)N
+775(once)X
+985(to)X
+1088(produce)X
+1426(an)X
+1545(executable)X
+1986(\256le,)X
+2161(which)X
+2424(is)X
+2516(loaded)X
+2801(directly)X
+3124(into)X
+3302(memory)X
+3651(when)X
+3887(it)X
+3968(is)X
+576 1956(executed.)N
+997(During)X
+1299(the)X
+1447(lifetime)X
+1778(of)X
+1888(an)X
+2009(executing)X
+2414(process,)X
+2756(the)X
+2904(\(virtual\))X
+3250(locations)X
+3628(of)X
+3738(the)X
+3887(text)X
+576 2108(and)N
+748(data)X
+942(segments)X
+1333(cannot)X
+1623(change.)X
+1977(As)X
+2116(a)X
+2192(result,)X
+2463(these)X
+2694(operating)X
+3091(systems)X
+3427(can)X
+3593(safely)X
+3855(allo-)X
+576 2260(cate)N
+756(the)X
+898(remaining)X
+1313(address)X
+1625(space)X
+1863(for)X
+1999(the)X
+2141(stack)X
+2363(and)X
+2526(dynamic)X
+2882(data)X
+3067(storage)X
+3369(area.)X
+776 2440(Systems)N
+1127(that)X
+1303(employ)X
+1623(static)X
+1858(linking)X
+2162(require)X
+2466(all)X
+2594(global)X
+2867(symbols)X
+3219(to)X
+3326(be)X
+3449(well)X
+3647(de\256ned)X
+3962(at)X
+576 2592(link)N
+753(time.)X
+1000(This)X
+1198(requirement)X
+1690(is)X
+1780(a)X
+1849(disadvantage)X
+2378(because)X
+2709(all)X
+2832(object)X
+3094(and)X
+3259(library)X
+3542(\256les)X
+3728(must)X
+3941(be)X
+576 2744(available)N
+957(during)X
+1240(the)X
+1390(construction)X
+1898(of)X
+2010(an)X
+2133(executable)X
+2578(\256le.)X
+2782(As)X
+2921(a)X
+2997(result,)X
+3268(it)X
+3355(is)X
+3452(dif\256cult)X
+3790(to)X
+3898(test)X
+576 2896(and)N
+747(debug)X
+1014(portions)X
+1361(of)X
+1473(a)X
+1547(large)X
+1771(program)X
+2128 0.2604(incrementally)AX
+2690(before)X
+2967(the)X
+3116(whole)X
+3382(program)X
+3739(is)X
+3834(com-)X
+576 3048(pletely)N
+870(written.)X
+10 s
+1167 3008(\262)N
+12 s
+1238 3048(Furthermore,)N
+1774(the)X
+1924(entire)X
+2176(program)X
+2534(has)X
+2694(to)X
+2801(be)X
+2924(relinked)X
+3272(if)X
+3363(any)X
+3534(of)X
+3646(the)X
+3796(object)X
+576 3200(modules)N
+950(are)X
+1116(modi\256ed,)X
+1530(or)X
+1658(if)X
+1765(new)X
+1973(modules)X
+2347(are)X
+2513(to)X
+2635(be)X
+2773(added.)X
+3098(Relinking)X
+3525(of)X
+3652(all)X
+3796(object)X
+576 3352(modules)N
+938(can)X
+1108(be)X
+1235(very)X
+1442(time)X
+1650(consuming.)X
+2156(But)X
+2331(unfortunately)X
+2886(with)X
+3094(static)X
+3335(linking,)X
+3669(it)X
+3760(is)X
+3861(una-)X
+576 3504(voidable)N
+932(even)X
+1138(in)X
+1237(situations)X
+1630(where)X
+1889(most)X
+2100(of)X
+2204(the)X
+2346(object)X
+2606(modules)X
+2956(remain)X
+3248(unchanged.)X
+776 3684(These)N
+1033(drawbacks)X
+1471(make)X
+1707(static)X
+1938(linking)X
+2238(unsuitable)X
+2661(for)X
+2800(certain)X
+3090(applications.)X
+3631(For)X
+3791(exam-)X
+576 3836(ple,)N
+747(a)X
+819(graph)X
+1066(plotting)X
+1394(program)X
+1748(may)X
+1942(permit)X
+2222(users)X
+2447(to)X
+2550(specify)X
+2856(their)X
+3061(own)X
+3254(arithmetic)X
+3674(functions)X
+576 3988(to)N
+675(be)X
+790(plotted.)X
+1130(It)X
+1213(would)X
+1477(be)X
+1592(most)X
+1803(convenient)X
+2250(if)X
+2333(users)X
+2554(could)X
+2792(de\256ne)X
+3051(their)X
+3252(own)X
+3441(functions)X
+3824(using)X
+576 4140(the)N
+735(programming)X
+1300(language)X
+1689(with)X
+1901(which)X
+2177(they)X
+2384(were)X
+2611(most)X
+2838(familiar,)X
+3208(and)X
+3387(then)X
+3593(incorporate)X
+576 4292(these)N
+809(new)X
+1004(functions)X
+1397(into)X
+1582(the)X
+1736(plotting)X
+2072(program.)X
+2482(However,)X
+2894(the)X
+3048(use)X
+3212(of)X
+3328(static)X
+3568(linking)X
+3877(pre-)X
+576 4444(cludes)N
+852(this)X
+1021(obvious)X
+1355(approach)X
+1738(because)X
+2073(the)X
+2221(text)X
+2395(segment)X
+2745(of)X
+2854(a)X
+2926(program)X
+3281(cannot)X
+3567(be)X
+3687(changed.)X
+576 4596(Instead,)N
+919(most)X
+1147(plotting)X
+1488(programs)X
+1892(incorporate)X
+2372(their)X
+2590(own)X
+2797(special)X
+3107(interpreted)X
+3567(language)X
+3957(in)X
+576 4748(which)N
+847(users)X
+1079(de\256ne)X
+1349(their)X
+1561(own)X
+1761(functions.)X
+2202(Consequently,)X
+2790(users)X
+3022(are)X
+3175(forced)X
+3456(to)X
+3566(learn)X
+3794(a)X
+3872(new)X
+576 4900(language,)N
+979(which)X
+1245(might)X
+1501(not)X
+1655(be)X
+1777(as)X
+1888(powerful)X
+2266(as)X
+2377(a)X
+2452(general)X
+2768(purpose)X
+3104(programming)X
+3660(language,)X
+576 5052(thus)N
+769(limiting)X
+1108(the)X
+1259(expressiveness)X
+1863(of)X
+1976(the)X
+2126(users.)X
+2403(Furthermore,)X
+2940(the)X
+3090(design)X
+3373(and)X
+3544(implementa-)X
+576 5204(tion)N
+753(of)X
+860(an)X
+978(interpreter)X
+1407(for)X
+1546(such)X
+1749(a)X
+1819(language)X
+2195(increases)X
+2576(the)X
+2722(complexity)X
+3184(and)X
+3351(development)X
+3877(cost)X
+576 5356(of)N
+706(the)X
+873(originally)X
+1297(very)X
+1517(simple)X
+1823(program.)X
+2246(Ef\256ciency)X
+2691(of)X
+2820(the)X
+2987(program)X
+3362(is)X
+3475(also)X
+3679(degraded)X
+576 5508(because,)N
+929(in)X
+1028(general,)X
+1360(interpreted)X
+1802(code)X
+2008(executes)X
+2364(more)X
+2586(slowly)X
+2866(than)X
+3056(native)X
+3316(machine)X
+3667(code.)X
+10 s
+10 f
+576 5604(h)N
+592(hhhhhhhhhhhhhh)X
+1 f
+656 5714(\262)N
+736(The)X
+881(best)X
+1030(a)X
+1086(programmer)X
+1503(can)X
+1635(do)X
+1735(is)X
+1808(to)X
+1890(write)X
+2075(dummy)X
+2339(routines)X
+2617(for)X
+2731(the)X
+2849(un\256nished)X
+3202(part.)X
+
+7 p
+%%Page: 7 8
+5(Helvetica-Narrow)xf 5 f
+10 s 0 xH 0 xS 5 f
+12 s
+1 f
+10 s
+0 32(--)N
+4323(--)X
+12 s
+2224 616(-)N
+2280(7)X
+2352(-)X
+3362(October)X
+3696(15,)X
+3840(1990)X
+3 f
+576 1016(Dynamic)N
+968(linking)X
+1 f
+576 1196(Unlike)N
+866(static)X
+1098(linking,)X
+4 f
+1424(dynamic)X
+1790(linking)X
+1 f
+2102(allows)X
+2382(a)X
+2454(process)X
+2771(to)X
+2875(add,)X
+3067(remove,)X
+3409(replace,)X
+3741(or)X
+3850(relo-)X
+576 1348(cate)N
+766(object)X
+1036(modules)X
+1396(within)X
+1676(its)X
+1801(address)X
+2123(space)X
+2371(during)X
+2656(its)X
+2781(execution.)X
+3237(In)X
+3350(other)X
+3581(words,)X
+3872(pro-)X
+576 1500(grams)N
+841(are)X
+989(allowed)X
+1324(to)X
+1429(change.)X
+1780(During)X
+2082(the)X
+2230(lifetime)X
+2561(of)X
+2671(its)X
+2792(execution,)X
+3222(a)X
+3296(program)X
+3653(may)X
+3850(have)X
+576 1652(new)N
+773(modules)X
+1135(added,)X
+1425(old)X
+1584(modules)X
+1946(removed,)X
+2343(or)X
+2459(even)X
+2677(evolve)X
+2970(into)X
+3156(a)X
+3235(completely)X
+3700(different)X
+576 1804(program.)N
+989(For)X
+1161(compiled)X
+1559(languages,)X
+2007(the)X
+2164(traditional)X
+2600(concept)X
+2939(that)X
+3123(the)X
+3281(code)X
+3503(of)X
+3623(a)X
+3706(program)X
+576 1956(does)N
+776(not)X
+923(change)X
+1220(is)X
+1308(no)X
+1428(longer)X
+1698(valid.)X
+776 2136(Some)N
+1036(existing)X
+1382(systems)X
+1727(support)X
+2056(what)X
+2284(they)X
+2491(call)X
+2672(dynamic)X
+3045(linking)X
+3359(but)X
+3524(it)X
+3620(is)X
+3726(actually)X
+576 2288(load-time)N
+971(linking.)X
+1317(For)X
+1474(example,)X
+1849(in)X
+1948(SunOS)X
+2243(version)X
+2550(4,)X
+2646(link)X
+2820(editing)X
+3112(consists)X
+3440(of)X
+3544(two)X
+3712(phases)X
+10 s
+2248(2)Y
+12 s
+2288(.)Y
+576 2440(After)N
+805(the)X
+949(static)X
+1179(link)X
+1355(phase,)X
+1624(the)X
+1768(executable)X
+2208(\256le)X
+2358(created)X
+2664(contains)X
+3012(only)X
+3210(references)X
+3633(to,)X
+3759(but)X
+3909(not)X
+576 2592(the)N
+723(actual)X
+983(code)X
+1194(for)X
+1334(the)X
+1480(library)X
+1765(routines.)X
+2151(Integration)X
+2602(of)X
+2710(these)X
+2936(routines)X
+3274(with)X
+3473(the)X
+3619(executable)X
+576 2744(\256le)N
+732(is)X
+829(carried)X
+1130(out)X
+1286(by)X
+1415(the)X
+1566(load-time)X
+1969(link)X
+2152(phase,)X
+2428(during)X
+2712(which)X
+2980(a)X
+3056(linker)X
+3314(is)X
+3412(called)X
+3677(to)X
+3786(search)X
+576 2896(and)N
+747(load)X
+945(the)X
+1095(missing)X
+1426(routines)X
+1768(from)X
+1987(the)X
+2137(library)X
+2426(before)X
+2704(control)X
+3009(is)X
+3105(passed)X
+3393(to)X
+3499(the)X
+3648(main)X
+3872(pro-)X
+576 3048(cedure.)N
+908(This)X
+1106(system)X
+1400(requires)X
+1737(all)X
+1862(global)X
+2131(symbols)X
+2479(to)X
+2582(be)X
+2701(declared)X
+3056(in)X
+3159(the)X
+3305(library,)X
+3614(though)X
+3909(not)X
+576 3200(necessarily)N
+1040(de\256ned,)X
+1383(during)X
+1670(the)X
+1824(static)X
+2064(link)X
+2250(phase.)X
+2552(After)X
+2790(execution)X
+3200(begins)X
+3486(and)X
+3660(control)X
+3968(is)X
+576 3352(passed)N
+857(to)X
+957(the)X
+1100(main)X
+1318(procedure,)X
+1753(no)X
+1875(modules)X
+2227(can)X
+2387(be)X
+2504(added)X
+2760(or)X
+2866(removed.)X
+3277(Furthermore,)X
+3808(if)X
+3893(any)X
+576 3504(external)N
+925(symbol)X
+1246(reference)X
+1642(cannot)X
+1936(be)X
+2064(resolved,)X
+2451(the)X
+2606(program)X
+2969(will)X
+3156(be)X
+3284(aborted.)X
+3658(A)X
+3764(similar)X
+576 3656(approach)N
+964(is)X
+1064(used)X
+1276(by)X
+1408(HP-UX)X
+10 s
+1700 3616(3)N
+12 s
+3656(,)Y
+1800(UNIX)X
+2075(System)X
+2394(V)X
+2499(Release)X
+2835(4)X
+10 s
+3616(4)Y
+12 s
+3656(,)Y
+2983(and)X
+3158(VMS)X
+10 s
+3365 3616(5)N
+12 s
+3656(.)Y
+3489(In)X
+3605(addition)X
+3957(to)X
+576 3808(load-time)N
+976(linking,)X
+1303(OS/2)X
+10 s
+1500 3768(6)N
+12 s
+1570 3808(also)N
+1755(supports)X
+2110(run-time)X
+2472(linking.)X
+2823(But)X
+2992(this)X
+3161(scheme)X
+3479(requires)X
+3818(much)X
+576 3960(operating)N
+968(system)X
+1263(support)X
+1580(and)X
+1748(dynamically)X
+2254(linked)X
+2524(modules)X
+2879(cannot)X
+3165(reference)X
+3553(any)X
+3721(external)X
+576 4112(symbols)N
+929(de\256ned)X
+1245(by)X
+1374(other)X
+1605(modules)X
+1964(except)X
+2249(the)X
+2400(module)X
+2722(entry)X
+2953(point.)X
+3232(Old)X
+3408(systems)X
+3744(such)X
+3952(as)X
+576 4264(MULTICS)N
+10 s
+997 4224(7)N
+12 s
+1101 4264(and)N
+1304(languages)X
+1753(such)X
+1993(as)X
+2137(COBOL)X
+2526(also)X
+2745(support)X
+3097(some)X
+3364(kind)X
+3599(of)X
+3743(\257exible)X
+576 4416(linking/loading)N
+1204(mechanism.)X
+1730(However,)X
+2145(none)X
+2371(of)X
+2489(the)X
+2645(systems)X
+2987(mentioned)X
+3432(above)X
+3700(allows)X
+3989(a)X
+576 4568(program)N
+926(to)X
+1025(dynamically)X
+1526(modify)X
+1828(its)X
+1943(functionality)X
+2460(during)X
+2735(the)X
+2877(execution.)X
+776 4748(One)N
+964(incremental)X
+1448(compilation)X
+1937(system)X
+10 s
+2204 4708(8)N
+12 s
+2272 4748(uses)N
+2466(a)X
+2538(different)X
+2899(approach:)X
+3332(it)X
+3415(provides)X
+3775(library)X
+576 4900(procedures)N
+1022(that)X
+1191(load)X
+1381(additional)X
+1791(object)X
+2051(modules)X
+2401(into)X
+2575(the)X
+2717(data)X
+2902(area)X
+3087(of)X
+3191(a)X
+3258(running)X
+3581(process)X
+3893(and)X
+576 5052(allows)N
+858(these)X
+1087(modules)X
+1444(to)X
+1550(be)X
+1673(executed.)X
+2096(This)X
+2299(system)X
+2598(does)X
+2806(not)X
+2961(relocate)X
+3299(or)X
+3411(resolve)X
+3721(external)X
+576 5204(symbol)N
+886(references.)X
+1357(Instead,)X
+1686(it)X
+1767(locates)X
+2062(every)X
+2303(symbol)X
+2612(indirectly)X
+3008(through)X
+3333(an)X
+3450(on-line)X
+3749(symbol)X
+576 5356(table)N
+799(pointed)X
+1123(to)X
+1233(by)X
+1364(a)X
+1442(special)X
+1745(reserved)X
+2106(register,)X
+2454(thus)X
+2649(causing)X
+2978(a)X
+3056(degradation)X
+3546(in)X
+3657(execution)X
+576 5508(speed.)N
+872(Furthermore,)X
+1406(this)X
+1574(system)X
+1870(requires)X
+2209(extensive)X
+2602(modi\256cation)X
+3118(to)X
+3222(the)X
+3369(compiler,)X
+3765(assem-)X
+576 5660(bler,)N
+783(and)X
+955(the)X
+1106(libraries)X
+1455(to)X
+1563(accomplish)X
+2035(this)X
+2207(special)X
+2508(addressing)X
+2952(scheme.)X
+3322(While)X
+3592(this)X
+3765(system)X
+576 5812(allows)N
+860(modules)X
+1219(to)X
+1327(be)X
+1451(added)X
+1714 0.2604(incrementally)AX
+2278(to)X
+2386(an)X
+2510(executing)X
+2918(process,)X
+3262(old)X
+3417(modules)X
+3775(cannot)X
+
+8 p
+%%Page: 8 9
+5(Helvetica-Narrow)xf 5 f
+12 s 0 xH 0 xS 5 f
+1 f
+10 s
+0 32(--)N
+4323(--)X
+12 s
+2224 616(-)N
+2280(8)X
+2352(-)X
+3362(October)X
+3696(15,)X
+3840(1990)X
+576 1016(be)N
+695(removed.)X
+1108(Consequently,)X
+1689(using)X
+1925(this)X
+2092(system)X
+2387(to)X
+2490(implement)X
+2931(applications)X
+3425(such)X
+3629(as)X
+3737(interac-)X
+576 1168(tive)N
+760(program)X
+1125(development)X
+1661(may)X
+1865(not)X
+2026(be)X
+2155(practical)X
+2526(because)X
+2869(obsolete)X
+3228(modules)X
+3592(accumulate)X
+576 1320(and)N
+739(may)X
+929(eventually)X
+1355(\256ll)X
+1486(the)X
+1628(memory)X
+1973(space.)X
+
+9 p
+%%Page: 9 10
+5(Helvetica-Narrow)xf 5 f
+12 s 0 xH 0 xS 5 f
+1 f
+10 s
+0 32(--)N
+4323(--)X
+12 s
+2224 616(-)N
+2280(9)X
+2352(-)X
+3362(October)X
+3696(15,)X
+3840(1990)X
+1445 1016(DLD)N
+1666(\320)X
+1786(A)X
+1879(GENUINE)X
+2329(DYNAMIC)X
+2810(LINKER)X
+576 1348(This)N
+773(section)X
+1072(describes)X
+1456(the)X
+1600(major)X
+1851(design)X
+2128(and)X
+2293 0.2548(implementation)AX
+2925(issues)X
+3181(of)X
+3288(a)X
+3358(software)X
+3716(package)X
+576 1500(called)N
+2 f
+838(dld)X
+1 f
+992(that)X
+1168(provides)X
+1529(all)X
+1656(the)X
+1804(functionalities)X
+2386(of)X
+2496(a)X
+2569(dynamic)X
+2931(linking)X
+3234(system.)X
+3579(The)X
+3759(current)X
+576 1652 0.2548(implementation)AN
+10 s
+1182 1612(\262)N
+12 s
+1261 1652(of)N
+2 f
+1381(dld)X
+1 f
+1544(is)X
+1648(a)X
+1731(collection)X
+2152(of)X
+2272(library)X
+2569(routines)X
+2919(that)X
+3104(are)X
+3262(called)X
+3533(by)X
+3669(programs)X
+576 1804(written)N
+879(in)X
+984(C)X
+1078(running)X
+1407(under)X
+1656(the)X
+1804(UNIX)X
+2072(operating)X
+2465(system.)X
+2809(No)X
+2955(modi\256cation)X
+3471(of)X
+3580(the)X
+3727(existing)X
+576 1956(compiler)N
+955(or)X
+1071(assembler)X
+1492(is)X
+1592(necessary.)X
+2050(The)X
+2236(standard)X
+2598(UNIX)X
+2873(system)X
+3176(linker)X
+3437(is)X
+3537(used)X
+3749(only)X
+3957(to)X
+576 2108(create)N
+837(the)X
+985(initial)X
+1241(executable)X
+1684(\256le.)X
+1885(All)X
+2038(the)X
+2186(dynamic)X
+2547(link)X
+2726(editing)X
+3023(is)X
+3116(carried)X
+3413(out)X
+3565(by)X
+3690(invoking)X
+576 2260(routines)N
+929(provided)X
+1314(by)X
+2 f
+1453(dld)X
+1 f
+1576(.)X
+1667(Although)X
+2 f
+2073(dld)X
+1 f
+2239(is)X
+2346(targeted)X
+2700(for)X
+2855(C)X
+2963(and)X
+3146(UNIX,)X
+3453(the)X
+3615(underlying)X
+576 2412(concept\320the)N
+1124(use)X
+1286(of)X
+1400(library)X
+1691(functions)X
+2082(to)X
+2190(build)X
+2421(a)X
+2497(dynamic)X
+2862(linker\320is)X
+3280(applicable)X
+3710(to)X
+3818(many)X
+576 2564(other)N
+798(programming)X
+1346(languages)X
+1755(and)X
+1918(operating)X
+2306(systems.)X
+3 f
+576 2868(An)N
+722(overview)X
+1115(of)X
+1219(dld)X
+2 f
+576 3048(Dld)N
+1 f
+('s)S
+821(two)X
+997(basic)X
+1227(operations)X
+1660(are)X
+1810(``link'')X
+2120(and)X
+2291(``unlink''.)X
+2745(It)X
+2836(also)X
+3023(provides)X
+3386(supporting)X
+3829(func-)X
+576 3200(tions)N
+787(for)X
+923(looking)X
+1241(up)X
+1361(the)X
+1503(addresses)X
+1895(of)X
+1999(global)X
+2264(symbols)X
+2608(and)X
+2771(entry)X
+2993(points)X
+3252(of)X
+3356(functions.)X
+776 3380(The)N
+958(link)X
+1140(operation)X
+1536(is)X
+1632(performed)X
+2065(by)X
+2193(the)X
+2343(function)X
+5 f
+2694(dlink\(char)X
+3056(*\256lename\))X
+1 f
+3411(,)X
+3468(where)X
+5 f
+3734(\256lename)X
+1 f
+576 3532(speci\256es)N
+934(either)X
+1181(a)X
+1251(relocatable)X
+1702(object)X
+1965(\256le)X
+2115(or)X
+2222(an)X
+2340(object)X
+2603(library.)X
+2935(If)X
+3026(the)X
+3171(speci\256ed)X
+3540(\256le)X
+3690(is)X
+3781(a)X
+3850(relo-)X
+576 3684(catable)N
+879(object)X
+1144(\256le,)X
+1320(it)X
+1403(is)X
+1496(completely)X
+1954(loaded)X
+2240(into)X
+2420(memory.)X
+2819(If)X
+2913(it)X
+2997(is)X
+3091(a)X
+3164(library)X
+3451(\256le,)X
+3628(only)X
+3829(those)X
+576 3836(modules)N
+942(de\256ning)X
+1297(an)X
+1427(unresolved)X
+1888(external)X
+2238(reference)X
+2636(are)X
+2793(loaded.)X
+3137(Since)X
+3390(a)X
+3472(module)X
+3800(in)X
+3914(the)X
+576 3988(library)N
+868(may)X
+1069(itself)X
+1297(reference)X
+1692(other)X
+1926(routines)X
+2272(in)X
+2383(the)X
+2537(library,)X
+2854(loading)X
+3179(it)X
+3269(may)X
+3471(generate)X
+3834(more)X
+576 4140(unresolved)N
+1037(external)X
+1387(references)X
+1822(\(as)X
+1973(was)X
+2161(seen)X
+2371(in)X
+2485(the)X
+2641(example)X
+3006(in)X
+3119(\256gure)X
+3381(1\).)X
+3547(Therefore,)X
+3989(a)X
+576 4292(library)N
+879(\256le)X
+1048(is)X
+1158(searched)X
+1541(repeatedly)X
+1989(until)X
+2212(a)X
+2301(scan)X
+2518(through)X
+2864(all)X
+3008(library)X
+3312(members)X
+3712(is)X
+3823(made)X
+576 4444(without)N
+901(having)X
+1194(to)X
+1300(load)X
+1497(any)X
+1667(new)X
+1858(modules.)X
+2263(Since)X
+2508(a)X
+2582(UNIX)X
+2852(process)X
+3171(cannot)X
+3458(expand)X
+3766(its)X
+3887(text)X
+576 4596(segment,)N
+5 f
+948(dlink)X
+1 f
+1138(allocates)X
+1506(storage)X
+1814(for)X
+1956(all)X
+2083(these)X
+2311(new)X
+2501(modules)X
+2857(from)X
+3074(the)X
+3222(dynamic)X
+3584(data)X
+3775(area\320)X
+576 4748(the)N
+2 f
+735(heap)X
+1 f
+922(\320using)X
+5 f
+1265(malloc)X
+1 f
+1492(,)X
+1557(UNIX's)X
+1906(memory)X
+2268(allocator)X
+2647(\(assuming)X
+3083(the)X
+3241(system)X
+3548(has)X
+3716(writable)X
+576 4900(executable)N
+1016(memory\).)X
+1444(After)X
+1674(all)X
+1798(modules)X
+2151(are)X
+2296(loaded,)X
+5 f
+2602(dlink)X
+1 f
+2790(resolves)X
+3132(as)X
+3239(many)X
+3480(external)X
+3818(refer-)X
+576 5052(ences)N
+817(as)X
+924(possible.)X
+1314(Note)X
+1528(that)X
+1699(some)X
+1928(symbols)X
+2274(might)X
+2525(still)X
+2696(be)X
+2813(unde\256ned)X
+3218(at)X
+3314(this)X
+3479(stage,)X
+3727(because)X
+576 5204(the)N
+718(modules)X
+1068(de\256ning)X
+1407(them)X
+1624(have)X
+1830(not)X
+1977(yet)X
+2119(been)X
+2325(loaded.)X
+10 s
+10 f
+576 5402(h)N
+592(hhhhhhhhhhhhhh)X
+1 f
+656 5512(\262)N
+736(A)X
+816(number)X
+1083(of)X
+1172(functions)X
+1492(in)X
+1577(the)X
+1698(current)X
+1949(implementation)X
+2474(of)X
+2 f
+2564(dld)X
+1 f
+2689(are)X
+2811(borrowed)X
+3142(and)X
+3281(modi\256ed)X
+3588(from)X
+576 5608(the)N
+2 f
+694(ld)X
+1 f
+776(link)X
+920(editor)X
+1127(developed)X
+1477(by)X
+1577(the)X
+1695(GNU)X
+1889(project)X
+2132(of)X
+2219(the)X
+2337(Free)X
+2500(Software)X
+2810(Foundation.)X
+
+10 p
+%%Page: 10 11
+5(Helvetica-Narrow)xf 5 f
+10 s 0 xH 0 xS 5 f
+12 s
+1 f
+10 s
+0 32(--)N
+4323(--)X
+12 s
+2200 616(-)N
+2256(10)X
+2376(-)X
+3362(October)X
+3696(15,)X
+3840(1990)X
+776 1016(Unlinking)N
+1212(a)X
+1301(module)X
+1636(is)X
+1746(simply)X
+2055(the)X
+2220(reverse)X
+2545(of)X
+2672(the)X
+2837(link)X
+3034(operation.)X
+3493(The)X
+3690(speci\256ed)X
+576 1168(module)N
+892(is)X
+983(removed)X
+1347(and)X
+1513(the)X
+1658(memory)X
+2006(allocated)X
+2382(to)X
+2484(it)X
+2565(is)X
+2655(reclaimed.)X
+3110(Additionally,)X
+3647(resolution)X
+576 1320(of)N
+684(external)X
+1023(references)X
+1447(must)X
+1662(be)X
+1781(undone.)X
+2140(For)X
+2301(instance,)X
+2669(if)X
+2756(the)X
+2902(module)X
+5 f
+3217(foo)X
+1 f
+3355(is)X
+3447(to)X
+3551(be)X
+3671(unlinked,)X
+576 1472(all)N
+713(references)X
+1149(to)X
+1264(any)X
+1443(symbols)X
+1802(de\256ned)X
+2124(in)X
+5 f
+2236(foo)X
+1 f
+2385(from)X
+2611(other)X
+2848(parts)X
+3074(of)X
+3193(the)X
+3350(program)X
+3715(must)X
+3941(be)X
+576 1624(marked)N
+953(``unde\256ned''.)X
+2 f
+1596(Dld)X
+1 f
+1828(provides)X
+2247(two)X
+2479(functions)X
+2925(for)X
+3126(unlinking)X
+3584(a)X
+3716(module:)X
+5 f
+576 1776(unlink_by_\256le\(char)N
+1253(*\256lename,)X
+1626(int)X
+1748(hard\))X
+1 f
+1973(and)X
+5 f
+2150(unlink_by_symbol\(char)X
+2976(*symbol,)X
+3300(int)X
+3421(hard\))X
+1 f
+3605(.)X
+3693(The)X
+3883(\256rst)X
+576 1928(function)N
+942(requires)X
+1297(as)X
+1422(a)X
+1511(parameter)X
+1943(the)X
+2107(\256lename)X
+2485(corresponding)X
+3081(to)X
+3202(a)X
+3291(module)X
+3626(previously)X
+576 2080(linked)N
+844(in)X
+946(by)X
+5 f
+1067(dlink)X
+1 f
+1228(,)X
+1279(while)X
+1520(the)X
+1665(second)X
+1959(function)X
+2307(unlinks)X
+2617(the)X
+2762(module)X
+3077(that)X
+3248(de\256nes)X
+3546(the)X
+3690(speci\256ed)X
+576 2232(symbol.)N
+776 2412(Figure)N
+1058(2)X
+1137(shows)X
+1407(a)X
+1481(simple)X
+1770(example)X
+2129(illustrating)X
+2579(some)X
+2814(of)X
+2926(the)X
+2 f
+3076(dld)X
+1 f
+3231(functions.)X
+3669(This)X
+3872(pro-)X
+576 2564(gram)N
+805(repeatedly)X
+1238(reads)X
+1472(from)X
+1690(the)X
+1839(standard)X
+2195(input)X
+2423(the)X
+2571(name)X
+2810(of)X
+2920(an)X
+3041(object)X
+3307(\256le)X
+3460(and)X
+3629(that)X
+3804(of)X
+3914(the)X
+576 2716(user)N
+763(function)X
+1111(to)X
+1213(be)X
+1331(executed.)X
+1749(It)X
+1835(then)X
+2029(links)X
+2244(in)X
+2347(the)X
+2493(speci\256ed)X
+2863(\256le,)X
+3038(executes)X
+3398(the)X
+3544(named)X
+3829(func-)X
+576 2868(tion,)N
+774(and)X
+937(\256nally)X
+1207(removes)X
+1557(it)X
+1635(from)X
+1846(the)X
+1988(memory.)X
+776 3048(On)N
+920(line)X
+1092(13,)X
+1239(the)X
+1384(function)X
+5 f
+1730(dld_init\(char)X
+2183(*\256lename\))X
+1 f
+2565(performs)X
+2940(the)X
+3086(required)X
+3435 0.2788(initialization)AX
+3952(of)X
+576 3200(the)N
+2 f
+721(dld)X
+1 f
+871(package.)X
+1262(It)X
+1348(takes)X
+1573(as)X
+1680(argument)X
+2071(the)X
+2216(initial)X
+2469(executable)X
+2909(\256le)X
+3059(of)X
+3166(the)X
+3311(program)X
+3664(and)X
+3829(loads)X
+576 3352(the)N
+731(symbol)X
+1051(table)X
+1276(information)X
+1768(of)X
+1885(this)X
+2061(\256le)X
+2221(into)X
+2409(memory.)X
+2816(Line)X
+3031(24)X
+3165(demonstrates)X
+3711(how)X
+3914(the)X
+576 3504(entry)N
+815(point)X
+1054(of)X
+1175(a)X
+1259 0.2022(dynamically-linked)AX
+2050(function)X
+2411(can)X
+2585(be)X
+2716(obtained.)X
+3136(The)X
+3326(value)X
+3575(returned)X
+3936(by)X
+5 f
+576 3656(get_func\(char)N
+1080(*func_name\))X
+1 f
+1559(can)X
+1725(later)X
+1929(be)X
+2052(used)X
+2260(as)X
+2372(a)X
+2447(pointer)X
+2752(to)X
+2859(the)X
+3009(function,)X
+3386(as)X
+3498(shown)X
+3780(in)X
+3887(line)X
+576 3808(27.)N
+786(The)X
+1002(predicate)X
+1422(function)X
+5 f
+1807(function_executable_p\(char)X
+2797(*func_name\))X
+1 f
+3311(tells)X
+3538(whether)X
+3914(the)X
+576 3960(speci\256ed)N
+958(function)X
+1319(can)X
+1493(be)X
+1624(safely)X
+1894(executed,)X
+2301(i.e.,)X
+2484(whether)X
+2835(the)X
+2994(execution)X
+3410(of)X
+3531(this)X
+3711(function)X
+576 4112(might)N
+827(lead)X
+1014(to)X
+1115(referencing)X
+1580(any)X
+1745(unde\256ned)X
+2149(symbols.)X
+2542(The)X
+2717(precise)X
+3015(de\256nition)X
+3409(of)X
+3514(this)X
+3678(predicate)X
+576 4264(function)N
+926(is)X
+1019(described)X
+1417(later.)X
+1666(In)X
+1775(this)X
+1943(example)X
+2299(\(line)X
+2505(29\),)X
+5 f
+2684(unlink_by_symbol)X
+1 f
+3338(is)X
+3432(used)X
+3638(to)X
+3743(remove)X
+576 4416(the)N
+718(new)X
+902(module.)X
+3 f
+576 4720(Semantics)N
+1016(of)X
+1120(unlink)X
+1 f
+576 4900(As)N
+717(seen)X
+923(above,)X
+1212(the)X
+1366(unlink)X
+1648(functions)X
+2042(actually)X
+2384(take)X
+2581(two)X
+2761(parameters.)X
+3268(The)X
+3454(\256rst)X
+3639(one)X
+3814(is)X
+3914(the)X
+576 5052(name)N
+811(of)X
+917(a)X
+986(symbol)X
+1295(or)X
+1401(\256le,)X
+1574(while)X
+1814(the)X
+1958(second)X
+2251(one)X
+2415(is)X
+2504(a)X
+2572(boolean)X
+2902(parameter.)X
+3361(When)X
+3616(the)X
+3759(param-)X
+576 5204(eter)N
+5 f
+745(hard)X
+1 f
+929(is)X
+1019(zero)X
+1212(\()X
+2 f
+1244(soft)X
+1410(unlink)X
+1 f
+1651(\),)X
+1734(the)X
+1879(speci\256ed)X
+2248(module)X
+2564(is)X
+2655(marked)X
+2971(as)X
+4 f
+3078(removable)X
+1 f
+3517(but)X
+3667(it)X
+3748(is)X
+3839(actu-)X
+576 5356(ally)N
+758(removed)X
+1132(from)X
+1356(memory)X
+1714(only)X
+1922(if)X
+2018(it)X
+2108(is)X
+2208(not)X
+2367(referenced)X
+2810(by)X
+2942(any)X
+3117(other)X
+3351(modules.)X
+3761(On)X
+3914(the)X
+576 5508(other)N
+802(hand,)X
+1041(if)X
+1128(the)X
+1274(parameter)X
+5 f
+1686(hard)X
+1 f
+1872(is)X
+1964(non-zero)X
+2334(\()X
+2 f
+2366(hard)X
+2575(unlink)X
+1 f
+2816(\),)X
+2900(this)X
+3068(module)X
+3386(is)X
+3479(removed)X
+3845(from)X
+576 5660(memory)N
+930(unconditionally.)X
+1616(Since)X
+1863(unlinking)X
+2265(a)X
+2341(module)X
+2662(may)X
+2860(leave)X
+3096(some)X
+3331(remaining)X
+3754(remov-)X
+576 5812(able)N
+794(modules)X
+1177(unreferenced,)X
+1761(a)X
+1861(garbage)X
+2223(collector)X
+2618(is)X
+2740(always)X
+3065(called)X
+3354(to)X
+3487(remove)X
+3834(these)X
+
+11 p
+%%Page: 11 12
+5(Helvetica-Narrow)xf 5 f
+12 s 0 xH 0 xS 5 f
+1 f
+10 s
+0 32(--)N
+4323(--)X
+12 s
+2200 616(-)N
+2256(11)X
+2376(-)X
+3362(October)X
+3696(15,)X
+3840(1990)X
+2 f
+10 f
+576 1168(hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh)N
+7 f
+9 s
+842 1448(1)N
+971(/*)X
+1100(The)X
+1272(name)X
+1487(of)X
+1616(the)X
+1788(object)X
+2089(file)X
+2304(and)X
+2476(the)X
+2648(function)X
+3035(name)X
+3250(are)X
+3422(read)X
+3637(from)X
+3852(the)X
+842 1528(2)N
+1100(stdin.)X
+1444(The)X
+1616(named)X
+1874(function)X
+2261(is)X
+2390(invoked)X
+2734(through)X
+3078(a)X
+3164(pointer.)X
+3594(For)X
+842 1608(3)N
+1100(illustrative)X
+1659(purpose)X
+2003(the)X
+2175(object)X
+2476(file)X
+2691(is)X
+2820(unlinked)X
+3207(right)X
+3465(after)X
+3723(the)X
+842 1688(4)N
+1100(invocation.)X
+842 1768(5)N
+971(*/)X
+842 1848(6)N
+971(#include)X
+1358(<stdio.h>)X
+842 1928(7)N
+971(#include)X
+1358("dld.h")X
+842 2008(8)N
+842 2088(9)N
+971(main)X
+1186(\(int)X
+1401(argc,)X
+1659(char)X
+1874(**argv\))X
+2218({)X
+799 2168(10)N
+799 2248(11)N
+1143(char)X
+1358(file_name[80],)X
+2003(func_name[80];)X
+799 2328(12)N
+799 2408(13)N
+8 f
+1143(dld_init)X
+7 f
+1530(\(argv[0]\);)X
+799 2488(14)N
+799 2568(15)N
+1143(printf)X
+1444(\("object)X
+1831(file?)X
+2089("\);)X
+799 2648(16)N
+1143(while)X
+1401(\(gets\(file_name\))X
+2132(!=)X
+2261(NULL\))X
+2519({)X
+799 2728(17)N
+1315(register)X
+1702(void)X
+1917(\(*func\))X
+2261(\(\);)X
+799 2808(18)N
+799 2888(19)N
+8 f
+1315(dlink)X
+7 f
+1573(\(file_name\);)X
+799 2968(20)N
+799 3048(21)N
+1315(printf)X
+1616(\("function)X
+2089(name?)X
+2347("\);)X
+799 3128(22)N
+1315(gets\(func_name\);)X
+799 3208(23)N
+799 3288(24)N
+1315(func)X
+1530(=)X
+1616(\(void)X
+1874(\(*\))X
+2046(\(\)\))X
+8 f
+2218(get_func)X
+7 f
+2605(\(func_name\);)X
+799 3368(25)N
+799 3448(26)N
+1315(if)X
+1444(\()X
+8 f
+1487 -0.1969(function_executable_p)AX
+7 f
+2433(\(func_name\)\))X
+799 3528(27)N
+1487(\(*func\))X
+1831(\(\);)X
+799 3608(28)N
+799 3688(29)N
+8 f
+1315(unlink_by_symbol)X
+7 f
+2046(\(func_name,)X
+2562(1\);)X
+799 3768(30)N
+799 3848(31)N
+1315(printf)X
+1616(\("object)X
+2003(file?)X
+2261("\);)X
+799 3928(32)N
+1143(})X
+799 4008(33)N
+971(})X
+2 f
+12 s
+1345 4208(Figure)N
+1631(2:)X
+1759(Simple)X
+2045(illustration)X
+2497(of)X
+2596(the)X
+2738(dld)X
+2885(functions.)X
+10 f
+576 4512(hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh)N
+1 f
+576 4968(unreferenced)N
+1107(modules.)X
+1509(As)X
+1643(a)X
+1714(special)X
+2010(case,)X
+2228(library)X
+2513(modules)X
+2867(are)X
+3013(always)X
+3308(considered)X
+3754(remov-)X
+576 5120(able)N
+761(and)X
+924(are)X
+1066 0.2305(garbage-collected)AX
+1776(whenever)X
+2174(they)X
+2364(are)X
+2506(not)X
+2653(referenced)X
+3084(by)X
+3204(other)X
+3426(modules.)X
+10 s
+3776 5080(\262)N
+10 f
+576 5402(h)N
+592(hhhhhhhhhhhhhh)X
+1 f
+656 5512(\262)N
+736(In)X
+840(the)X
+975(next)X
+1150(version)X
+1423(of)X
+2 f
+1527(dld)X
+1 f
+1629(,)X
+1686(users)X
+1888(will)X
+2049(be)X
+2162(allowed)X
+2453(to)X
+2552(explicitly)X
+2891(keep)X
+3080(a)X
+3153(library)X
+3404(module)X
+3682(in)X
+576 5608(memory)N
+863(even)X
+1035(if)X
+1104(it)X
+1168(is)X
+1241(not)X
+1363 0.3625(referenced.)AX
+
+12 p
+%%Page: 12 13
+5(Helvetica-Narrow)xf 5 f
+10 s 0 xH 0 xS 5 f
+12 s
+1 f
+10 s
+0 32(--)N
+4323(--)X
+12 s
+2200 616(-)N
+2256(12)X
+2376(-)X
+3362(October)X
+3696(15,)X
+3840(1990)X
+2 f
+10 f
+576 1168(hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh)N
+1 f
+2718 2995 MXY
+216 216 De
+1278 1628 MXY
+216 216 De
+2034 MX
+216 216 De
+2034 2204 MXY
+216 216 De
+2732 MX
+259 259 De
+2754 1628 MXY
+216 216 De
+3114 MX
+216 216 De
+2754 2204 MXY
+216 216 De
+1566 3571 MXY
+216 216 De
+1854 2995 MXY
+216 216 De
+2790 3103 MXY
+-14 24 Dl
+2761 3151 MXY
+-14 24 Dl
+2732 3199 MXY
+-14 24 Dl
+2704 3247 MXY
+-14 24 Dl
+2675 3295 MXY
+-14 24 Dl
+2646 3343 MXY
+-14 24 Dl
+2617 3391 MXY
+-14 24 Dl
+2588 3439 MXY
+-14 24 Dl
+2591 3406 MXY
+-17 57 Dl
+3464 MY
+42 -42 Dl
+1386 1736 MXY
+0 28 Dl
+1791 MY
+0 28 Dl
+1846 MY
+0 28 Dl
+1901 MY
+0 28 Dl
+1957 MY
+0 28 Dl
+2012 MY
+0 28 Dl
+2067 MY
+0 28 Dl
+1371 2037 MXY
+14 58 Dl
+1386 2096 MXY
+14 -58 Dl
+2142 1736 MXY
+0 360 Dl
+2113 1980 MXY
+28 115 Dl
+2142 2096 MXY
+28 -115 Dl
+2862 1736 MXY
+0 360 Dl
+2833 1980 MXY
+28 115 Dl
+2862 2096 MXY
+28 -115 Dl
+3158 1729 MXY
+-223 367 Dl
+2969 1983 MXY
+-35 113 Dl
+84 -83 Dl
+1912 3096 MXY
+-194 374 Dl
+1744 3355 MXY
+-27 115 Dl
+78 -88 Dl
+11 s
+2490 3936(\(d2\))N
+2658(hard)X
+2836(unlink)X
+1522 3934(\(d1\))N
+1690(soft)X
+1844(unlink)X
+2 f
+2799 3031(B)N
+2835 1663(A)N
+2113 2239(C)N
+2833(C)X
+2115 1663(A)N
+3195(B)X
+1359(A)X
+1 f
+2994 2527(\(c\))N
+2091(\(b\))X
+1360(\(a\))X
+2 f
+1645 3607(C)N
+1935 3031(B)N
+1295 4117(Figure)N
+1557(3:)X
+1674(Illustration)X
+2094(of)X
+2185(the)X
+2315(two)X
+2465(different)X
+2787(unlink)X
+3030(options.)X
+10 f
+576 4421(h)N
+600(hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh)X
+1 f
+12 s
+776 4725(The)N
+953(semantics)X
+1360(of)X
+1467(these)X
+1692(two)X
+1863(unlinking)X
+2260(options)X
+2571(can)X
+2733(best)X
+2916(be)X
+3035(explained)X
+3438(by)X
+3562(an)X
+3681(example.)X
+576 4877(Consider)N
+951(two)X
+1123(modules,)X
+2 f
+1500(A)X
+1 f
+1586(and)X
+2 f
+1752(B)X
+1 f
+1811(,)X
+1862(both)X
+2060(containing)X
+2494(a)X
+2564(call)X
+2731(to)X
+2833(a)X
+2903(function)X
+3251(de\256ned)X
+3561(in)X
+2 f
+3663(C)X
+1 f
+3727(.)X
+3802(These)X
+576 5029(modules)N
+927(are)X
+1070(linked)X
+1336(and)X
+1500(removed)X
+1862(in)X
+1962(the)X
+2105(order)X
+2333(as)X
+2438(shown)X
+2713(in)X
+2813(\256gure)X
+3062(3.)X
+2 f
+3183(A)X
+1 f
+3268(is)X
+3358(linked)X
+3625(in)X
+3726(\256rst)X
+3901(\(a\).)X
+576 5181(Then)N
+2 f
+811(C)X
+1 f
+912(is)X
+1013(also)X
+1205(linked)X
+1483(\(b\).)X
+1680(When)X
+2 f
+1947(B)X
+1 f
+2043(is)X
+2144(linked)X
+2421(in,)X
+2556(all)X
+2689(its)X
+2816(external)X
+3163(symbol)X
+3482(references)X
+3914(are)X
+576 5333(resolved)N
+928(successfully)X
+1424(because)X
+2 f
+1755(C)X
+1 f
+1845(has)X
+1999(already)X
+2309(been)X
+2517(loaded)X
+2800(into)X
+2976(memory.)X
+3372(Thus,)X
+2 f
+3615(C)X
+1 f
+3706(does)X
+3909(not)X
+576 5485(need)N
+782(to)X
+881(be)X
+996(linked)X
+1261(in)X
+1360(again.)X
+1641(Instead,)X
+1967(it)X
+2045(is)X
+2133(shared)X
+2408(by)X
+2528(both)X
+2 f
+2723(A)X
+1 f
+2806(and)X
+2 f
+2969(B)X
+1 f
+3052(\(c\).)X
+776 5665(Now,)N
+1011(suppose)X
+1345(that)X
+2 f
+1515(A)X
+1 f
+1599(is)X
+1688(unlinked,)X
+2075(and)X
+2240(in)X
+2341(order)X
+2570(to)X
+2671(clean)X
+2901(up)X
+3023(any)X
+3188(module)X
+3503(referenced)X
+3936(by)X
+2 f
+576 5817(A)N
+1 f
+635(,)X
+2 f
+691(C)X
+1 f
+787(is)X
+883(being)X
+1129(unlinked,)X
+1522(too.)X
+1725(Should)X
+2 f
+2029(C)X
+1 f
+2093(,)X
+2149(which)X
+2416(is)X
+2512(currently)X
+2892(referenced)X
+3331(by)X
+2 f
+3459(B)X
+1 f
+3518(,)X
+3573(be)X
+3695(removed)X
+
+13 p
+%%Page: 13 14
+5(Helvetica-Narrow)xf 5 f
+12 s 0 xH 0 xS 5 f
+1 f
+10 s
+0 32(--)N
+4323(--)X
+12 s
+2200 616(-)N
+2256(13)X
+2376(-)X
+3362(October)X
+3696(15,)X
+3840(1990)X
+576 1016(from)N
+793(memory?)X
+1211(Both)X
+1428(possible)X
+1773(semantics)X
+2183(are)X
+2331(reasonable.)X
+2821(If)X
+2 f
+2915(unlinking)X
+1 f
+3309(a)X
+3382(module)X
+3701(means)X
+3978(it)X
+576 1168(may)N
+779(be)X
+907(removed)X
+1281(if)X
+1377(it)X
+1468(is)X
+1569(not)X
+1729(being)X
+1980(referenced)X
+2424(anymore,)X
+2 f
+2821(C)X
+1 f
+2921(should)X
+3213(not)X
+3372(be)X
+3499(removed)X
+3872(\(d1\))X
+576 1320(because)N
+906(it)X
+985(is)X
+1074(still)X
+1244(referenced)X
+1677(by)X
+2 f
+1799(B)X
+1 f
+1858(.)X
+1932(On)X
+2075(the)X
+2219(other)X
+2443(hand,)X
+2680(if)X
+2 f
+2765(unlinking)X
+1 f
+3155(literally)X
+3482(means)X
+3754(remov-)X
+576 1472(ing)N
+726(the)X
+871(speci\256ed)X
+1240(module,)X
+2 f
+1580(C)X
+1 f
+1671(should)X
+1954(be)X
+2071(removed,)X
+2458(resulting)X
+2821(in)X
+2 f
+2922(B)X
+1 f
+2981('s)X
+3076(reference)X
+3461(to)X
+2 f
+3562(C)X
+1 f
+3652(becoming)X
+576 1624(unresolved)N
+1022(\(d2\).)X
+776 1804(Applications)N
+1302(might)X
+1561(require)X
+1869(either)X
+2124(or)X
+2239(both)X
+2445(unlink)X
+2726(options.)X
+3092(Thus,)X
+2 f
+3343(dld)X
+1 f
+3501(supports)X
+3861(both)X
+576 1956(options)N
+888(and)X
+1056(leaves)X
+1326(the)X
+1473(decision)X
+1823(to)X
+1927(the)X
+2074(programmer.)X
+2627(For)X
+2788(example,)X
+3167(if)X
+3254(the)X
+3400(module)X
+3717(de\256ning)X
+576 2108(a)N
+656(commonly)X
+1105(used)X
+1318(function)X
+1676(is)X
+1777(to)X
+1890(be)X
+2019(replaced)X
+2384(by)X
+2518(an)X
+2647(enhanced)X
+3049(version,)X
+3394(a)X
+3475(hard)X
+3684(unlink)X
+3968(is)X
+576 2260(desirable.)N
+1000(A)X
+1097(new)X
+1285(version)X
+1596(could)X
+1837(then)X
+2030(be)X
+2148(linked)X
+2416(in,)X
+2542(and)X
+2708(all)X
+2832(references)X
+3255(to)X
+3357(the)X
+3502(original)X
+3829(func-)X
+576 2412(tion)N
+755(would)X
+1024(be)X
+1144(modi\256ed)X
+1515(to)X
+1619(point)X
+1846(to)X
+1951(this)X
+2120(new)X
+2310(function.)X
+2709(On)X
+2856(the)X
+3004(other)X
+3232(hand,)X
+3473(some)X
+3706(modules)X
+576 2564(might)N
+830(be)X
+950(referenced)X
+1386(from)X
+1602(many)X
+1845(different)X
+2206(places)X
+2476(in)X
+2580(the)X
+2727(program.)X
+3130(It)X
+3218(is)X
+3311(not)X
+3462(easy)X
+3661(for)X
+3801(a)X
+3872(pro-)X
+576 2716(grammer)N
+951(to)X
+1053(keep)X
+1263(track)X
+1484(whether)X
+1822(a)X
+1893(module)X
+2210(is)X
+2302(no)X
+2426(longer)X
+2700(referenced)X
+3135(by)X
+3259(others)X
+3522(and)X
+3689(thus)X
+3877(safe)X
+576 2868(to)N
+689(be)X
+818(removed)X
+1193(from)X
+1418(memory.)X
+1825(The)X
+2013(programmer)X
+2527(might)X
+2789(even)X
+3008(be)X
+3136(unaware)X
+3499(of)X
+3616(some)X
+3856(such)X
+576 3020(references.)N
+1052(For)X
+1217(example,)X
+1600(functions)X
+1990(such)X
+2198(as)X
+5 f
+2308(strlen)X
+1 f
+2532(and)X
+5 f
+2701(malloc)X
+1 f
+2960(are)X
+3110(referenced)X
+3549(by)X
+3677(at)X
+3779(least)X
+3989(a)X
+576 3172(dozen)N
+833(other)X
+1058(library)X
+1342(functions)X
+1727(in)X
+1829(the)X
+1974(C)X
+2065(library)X
+2349(of)X
+2456(BSD)X
+2669(UNIX.)X
+2983(Thus,)X
+3226(these)X
+3450(functions)X
+3834(often)X
+576 3324(need)N
+784(to)X
+885(be)X
+1002(kept)X
+1194(in)X
+1295(memory)X
+1642(even)X
+1850(if)X
+1935(the)X
+2079(main)X
+2298(program)X
+2650(does)X
+2853(not)X
+3003(invoke)X
+3292(them)X
+3512(explicitly.)X
+3952(In)X
+576 3476(these)N
+801(cases,)X
+1055(it)X
+1136(is)X
+1227(desirable)X
+1602(to)X
+1703(use)X
+1857(soft)X
+2027(unlink)X
+2299(so)X
+2410(that)X
+2581(the)X
+2725(speci\256ed)X
+3093(module)X
+3408(is)X
+3498(removed)X
+3861(only)X
+576 3628(when)N
+808(it)X
+886(is)X
+974(no)X
+1094(longer)X
+1364(needed.)X
+3 f
+576 3932(Implementation)N
+1256(of)X
+1360(unlink)X
+1 f
+576 4112(The)N
+761 0.2548(implementation)AX
+1402(of)X
+1517(the)X
+1670(unlink)X
+1951(functions)X
+2344(is)X
+2443(built)X
+2655(around)X
+2957(a)X
+3036(simple)X
+3329(garbage)X
+3670(collector.)X
+576 4264(For)N
+740(each)X
+948(module)X
+2 f
+1268(x)X
+1 f
+1311(,)X
+1366(a)X
+1440(reference)X
+1830(count)X
+2075(records)X
+2389(the)X
+2538(number)X
+2863(of)X
+2973(modules)X
+3329(that)X
+3504(reference)X
+3893(any)X
+576 4416(symbol)N
+886(de\256ned)X
+1196(in)X
+2 f
+1298(x)X
+1 f
+1341(.)X
+1416(If)X
+2 f
+1507(x)X
+1 f
+1577(is)X
+1668(explicitly)X
+2060(linked)X
+2328(in)X
+2430(by)X
+5 f
+2551(dlink)X
+1 f
+2739(\(as)X
+2878(opposed)X
+3225(to)X
+3327(implicit)X
+3656(linking)X
+3957(in)X
+576 4568(the)N
+724(case)X
+919(for)X
+1060(library)X
+1346(modules\),)X
+1757(it)X
+1840(is)X
+1933(considered)X
+2379(being)X
+2622(referenced)X
+3058(by)X
+3183(the)X
+3330(process)X
+3647(itself,)X
+3893(and)X
+576 4720(thus)N
+762(its)X
+879(reference)X
+1264(count)X
+1504(is)X
+1594(at)X
+1690(least)X
+1893(one.)X
+2106(A)X
+2201(soft)X
+2371(unlink)X
+2643(of)X
+2 f
+2749(x)X
+1 f
+2818(causes)X
+3095(its)X
+3212(reference)X
+3598(count)X
+3839(to)X
+3941(be)X
+576 4872(decremented)N
+1095(by)X
+1217(one,)X
+1406(while)X
+1646(a)X
+1715(hard)X
+1912(unlink)X
+2184(simply)X
+2472(resets)X
+2717(the)X
+2861(count)X
+3101(to)X
+3202(zero.)X
+3442(Furthermore,)X
+3973(if)X
+2 f
+576 5024(x)N
+1 f
+619('s)X
+721(reference)X
+1113(count)X
+1360(becomes)X
+1730(zero,)X
+1953(the)X
+2104(reference)X
+2496(counts)X
+2780(of)X
+2893(all)X
+3023(modules)X
+3382(that)X
+2 f
+3560(x)X
+1 f
+3636(references)X
+576 5176(are)N
+732(also)X
+925(decremented)X
+1456(by)X
+1590(one.)X
+1815(When)X
+2083(all)X
+2218(reference)X
+2614(counts)X
+2902(have)X
+3121(been)X
+3340(updated,)X
+3706(modules)X
+576 5328(whose)N
+845(reference)X
+1228(counts)X
+1503(are)X
+1645(zero)X
+1835(are)X
+1977(actually)X
+2307(removed)X
+2668(by)X
+2788(the)X
+2930(garbage)X
+3259(collector.)X
+776 5508(In)N
+888(addition)X
+1236(to)X
+1343(the)X
+1493(garbage)X
+1830(collector,)X
+2 f
+2224(dld)X
+1 f
+2379(maintains)X
+2786(data)X
+2979(structures)X
+3385(to)X
+3492(hold)X
+3695(informa-)X
+576 5660(tion)N
+758(necessary)X
+1164(to)X
+1271(support)X
+1591(unlinking.)X
+2040(Corresponding)X
+2643(to)X
+2750(each)X
+2959(module)X
+3280(is)X
+3376(a)X
+3451(list)X
+3601(of)X
+3712(symbols)X
+576 5812(that)N
+758(it)X
+849(references,)X
+1306(a)X
+1386(list)X
+1542(of)X
+1660(symbols)X
+2018(that)X
+2201(it)X
+2293(de\256nes,)X
+2627(and)X
+2804(a)X
+2885(list)X
+3041(of)X
+3159(relocation)X
+3583(instructions)X
+
+14 p
+%%Page: 14 15
+5(Helvetica-Narrow)xf 5 f
+12 s 0 xH 0 xS 5 f
+1 f
+10 s
+0 32(--)N
+4323(--)X
+12 s
+2200 616(-)N
+2256(14)X
+2376(-)X
+3362(October)X
+3696(15,)X
+3840(1990)X
+576 1016(\(known)N
+905(as)X
+1021(an)X
+2 f
+1148(nlist)X
+1 f
+1350(in)X
+1461(UNIX\).)X
+1815(This)X
+2021(information)X
+2511(is)X
+2610(needed)X
+2918(to)X
+3028(update)X
+3320(the)X
+3473(online)X
+3749(symbol)X
+576 1168(table)N
+802(in)X
+915(order)X
+1156(to)X
+1269(re\257ect)X
+1548(the)X
+1704(disappearance)X
+2288(of)X
+2406(the)X
+2562(unlinked)X
+2937(modules)X
+3301(from)X
+3526(the)X
+3682(program.)X
+576 1320(When)N
+832(a)X
+901(module)X
+2 f
+1216(y)X
+1 f
+1285(is)X
+1375(to)X
+1476(be)X
+1593(removed)X
+1956(from)X
+2169(memory,)X
+2540(its)X
+2656(reference)X
+3040(list)X
+3183(is)X
+3272(used)X
+3473(to)X
+3573(locate)X
+3829(those)X
+576 1472(modules)N
+935(whose)X
+1214(reference)X
+1607(counts)X
+1892(should)X
+2182(be)X
+2307(decremented.)X
+2882(Symbols)X
+3252(de\256ned)X
+3569(by)X
+2 f
+3699(y)X
+1 f
+3776(should)X
+576 1624(be)N
+694(deleted)X
+1000(from)X
+1214(the)X
+1359(symbol)X
+1669(table.)X
+1931(Other)X
+2176(modules)X
+2528(that)X
+2699(reference)X
+3084(any)X
+3249(symbol)X
+3558(de\256ned)X
+3867(by)X
+2 f
+3989(y)X
+1 f
+576 1776(now)N
+765(contain)X
+1073(unde\256ned)X
+1476(references.)X
+1944(These)X
+2198(modules)X
+2549(should)X
+2830(be)X
+2946(``reversely'')X
+3452(patched)X
+3777(so)X
+3887(that)X
+576 1928(instructions)N
+1058(pointing)X
+1412(to)X
+1520(locations)X
+1901(previously)X
+2340(in)X
+2 f
+2448(y)X
+1 f
+2491('s)X
+2593(address)X
+2914(space)X
+3161(are)X
+3312(reset.)X
+3575(In)X
+3687(short,)X
+3935(all)X
+2 f
+576 2080(dld)N
+1 f
+699('s)X
+795(data)X
+983(structures)X
+1384(have)X
+1593(to)X
+1695(be)X
+1813(set)X
+1947(to)X
+2049(the)X
+2194(state)X
+2398(as)X
+2505(if)X
+2 f
+2591(y)X
+1 f
+2661(had)X
+2827(never)X
+3069(been)X
+3279(linked)X
+3548(into)X
+3726(the)X
+3872(pro-)X
+576 2232(gram.)N
+776 2412(Finally,)N
+1106(side-effects\320such)X
+1855(as)X
+1968(modi\256cation)X
+2488(of)X
+2601(global)X
+2875(variables,)X
+3281(input/output)X
+3786(opera-)X
+576 2564(tions,)N
+812(and)X
+976(allocations)X
+1418(of)X
+1522(new)X
+1706(memory)X
+2051(blocks\320caused)X
+2684(by)X
+2804(the)X
+2946(execution)X
+3345(of)X
+3449(any)X
+3612(function)X
+3957(in)X
+576 2716(a)N
+648(module)X
+966(are)X
+1113(not)X
+1265(reversed)X
+1620(when)X
+1857(the)X
+2004(module)X
+2322(is)X
+2415(unlinked.)X
+2829(If)X
+2922(these)X
+3150(side-effects)X
+3624(need)X
+3836(to)X
+3941(be)X
+576 2868(undone,)N
+907(they)X
+1097(must)X
+1308(be)X
+1423(undone)X
+1730(explicitly)X
+2119(by)X
+2239(the)X
+2381(programmers.)X
+3 f
+576 3172(Deciding)N
+963(if)X
+1046(a)X
+1118(function)X
+1483(is)X
+1571(executable)X
+1 f
+576 3352(Since)N
+2 f
+818(dld)X
+1 f
+969(allows)X
+1248(modules)X
+1602(to)X
+1705(be)X
+1824(added)X
+2082(to)X
+2185(or)X
+2293(removed)X
+2658(from)X
+2873(an)X
+2992(executing)X
+3395(process)X
+3711(dynami-)X
+576 3504(cally,)N
+818(some)X
+1051(global)X
+1322(symbols)X
+1672(may)X
+1868(not)X
+2020(be)X
+2140(de\256ned.)X
+2500(As)X
+2635(a)X
+2707(result,)X
+2974(an)X
+3094(invocation)X
+3530(of)X
+3639(a)X
+3711(function)X
+576 3656(might)N
+836(reference)X
+1230(an)X
+1356(unde\256ned)X
+1770(symbol.)X
+2136(To)X
+2278(solve)X
+2517(this)X
+2692(problem,)X
+2 f
+3073(dld)X
+1 f
+3232(provides)X
+3599(a)X
+3678(predicate)X
+576 3808(function)N
+5 f
+931(function_executable_p)X
+1 f
+1720(,)X
+1780(which,)X
+2075(as)X
+2191(shown)X
+2477(earlier)X
+2760(in)X
+2871(\256gure)X
+3131(2,)X
+3239(takes)X
+3473(as)X
+3589(argument)X
+3989(a)X
+576 3960(function)N
+921(name)X
+1154(and)X
+1317(returns)X
+1608(non-zero)X
+1974(only)X
+2169(if)X
+2252(the)X
+2394(named)X
+2675(function)X
+3020(is)X
+3108(executable.)X
+776 4140(A)N
+882(function)X
+1240(is)X
+2 f
+1341(executable)X
+1 f
+1791(if)X
+1887(and)X
+2063(only)X
+2271(if)X
+2367(all)X
+2501(its)X
+2629(external)X
+2977(references)X
+3410(have)X
+3630(been)X
+3850(fully)X
+576 4292(resolved)N
+928(and)X
+1093(all)X
+1216(functions)X
+1600(that)X
+1771(it)X
+1851(might)X
+2102(call)X
+2268(are)X
+2412(executable.)X
+2899(This)X
+3095(recursive)X
+3473(de\256nition)X
+3867(sug-)X
+576 4444(gests)N
+799(that)X
+975(determining)X
+1472(whether)X
+1813(a)X
+1887(given)X
+2132(function)X
+2485(is)X
+2581(executable)X
+3026(is)X
+3122(non-trivial.)X
+3609(Since)X
+3855(each)X
+576 4596(function)N
+925(might)X
+1178(invoke)X
+1468(other)X
+1694(functions,)X
+2104(the)X
+2250(number)X
+2572(of)X
+2680(functions)X
+3066(that)X
+3239(can)X
+3400(be)X
+3518(reached)X
+3845(from)X
+576 4748(the)N
+721(original)X
+1048(invocation)X
+1482(can)X
+1643(be)X
+1761(very)X
+1959(large.)X
+2227(If)X
+2319(any)X
+2486(of)X
+2594(these)X
+2820(functions)X
+3206(is)X
+3298(not)X
+3449(executable,)X
+3914(the)X
+576 4900(original)N
+916(invocation)X
+1363(is)X
+1467(also)X
+1662(not)X
+1825(executable.)X
+2326(Consequently,)X
+2919(determining)X
+3425(if)X
+3524(a)X
+3607(function)X
+3968(is)X
+576 5052(executable)N
+1032(could)X
+1289(involve)X
+1621(the)X
+1782(examination)X
+2302(of)X
+2425(a)X
+2511(large)X
+2747(number)X
+3084(of)X
+3207(other)X
+3449(functions.)X
+3899(For)X
+576 5204(example,)N
+963(the)X
+1117(executable)X
+1565(\256le)X
+1723(for)X
+2 f
+1870(gdb)X
+1 f
+(,)S
+2073(a)X
+2151(popular)X
+2480(UNIX)X
+2754(debugger,)X
+3171(contains)X
+3527(174)X
+3706(modules)X
+576 5356(\(object)N
+900(\256les\))X
+1148(and)X
+1343(635)X
+1543(global)X
+1840(functions.)X
+2302(The)X
+2508(ef\256ciency)X
+2944(of)X
+3080(the)X
+3254(algorithm)X
+10 s
+3629 5316(\262)N
+12 s
+3725 5356(used)N
+3957(to)X
+10 s
+10 f
+576 5452(h)N
+592(hhhhhhhhhhhhhh)X
+1 f
+656 5562(\262)N
+736(An)X
+858(optimal)X
+1126(algorithm)X
+1461(with)X
+1627(respect)X
+1879(to)X
+1965(the)X
+2087(order)X
+2281(of)X
+2372(complexity)X
+2756(exists,)X
+2982(but)X
+3108(its)X
+3207(detailed)X
+3485(descrip-)X
+576 5658(tion)N
+728(is)X
+808(beyond)X
+1071(the)X
+1196(scope)X
+1406(of)X
+1500(this)X
+1642(paper.)X
+1888(Furthermore,)X
+2336(the)X
+2461(current)X
+2716(implementation)X
+3245(employs)X
+3543(a)X
+3606(sub-)X
+576 5754(optimal)N
+842(but)X
+966(much)X
+1166(simpler)X
+1428(solution.)X
+1747(This)X
+1911(solution)X
+2190(has)X
+2319(a)X
+2377(very)X
+2542(small)X
+2737(overhead)X
+3054(and)X
+3192(thus)X
+3347(works)X
+3565(faster)X
+576 5850(than)N
+734(the)X
+852(optimal)X
+1116(solution)X
+1393(as)X
+1480(long)X
+1642(as)X
+1729(the)X
+1847(number)X
+2112(of)X
+2199(modules)X
+2490(is)X
+2563(not)X
+2685(too)X
+2807(large.)X
+
+15 p
+%%Page: 15 16
+5(Helvetica-Narrow)xf 5 f
+10 s 0 xH 0 xS 5 f
+12 s
+1 f
+10 s
+0 32(--)N
+4323(--)X
+12 s
+2200 616(-)N
+2256(15)X
+2376(-)X
+3362(October)X
+3696(15,)X
+3840(1990)X
+576 1016(implement)N
+5 f
+1011(function_executable_p)X
+1 f
+1824(is)X
+1912(thus)X
+2096(of)X
+2200(practical)X
+2557(concern.)X
+776 1196(Several)N
+1093(methods)X
+1447(can)X
+1609(be)X
+1728(used)X
+1932(to)X
+2035(speed)X
+2282(up)X
+2406(this)X
+2573(algorithm.)X
+3024(First,)X
+3252(the)X
+2 f
+3398 0.2865(executability)AX
+1 f
+3920(for)X
+576 1348(each)N
+778(function)X
+1124(could)X
+1363(be)X
+1479(actually)X
+1810(calculated)X
+2227(only)X
+2423(once,)X
+2654(and)X
+2818(the)X
+2960(results)X
+3235(kept)X
+3425(in)X
+3524(a)X
+3591(table.)X
+3851(Sub-)X
+576 1500(sequent)N
+899(calls)X
+1105(to)X
+5 f
+1207(function_executable_p)X
+1 f
+2025(would)X
+2294(then)X
+2489(involve)X
+2807(only)X
+3007(a)X
+3080(table)X
+3298(lookup.)X
+3643(This)X
+3844(table)X
+576 1652(would)N
+842(be)X
+959(invalidated)X
+1414(whenever)X
+1814(a)X
+1883(link)X
+2059(or)X
+2165(unlink)X
+2436(operation)X
+2825(is)X
+2914(performed,)X
+3364(and)X
+3528(would)X
+3793(not)X
+3941(be)X
+576 1804(updated)N
+912(until)X
+1120(the)X
+1269(next)X
+1466(call)X
+1637(to)X
+5 f
+1741(function_executable_p)X
+1 f
+2530(.)X
+2609(As)X
+2746(a)X
+2821(result,)X
+3091(unnecessary)X
+3593(recomputa-)X
+576 1956(tion)N
+779(of)X
+912(the)X
+1083(table)X
+1324(between)X
+1698(consecutive)X
+2206(link)X
+2409(or)X
+2542(unlink)X
+2841(operations)X
+3294(could)X
+3560(be)X
+3703(avoided.)X
+576 2108(Second,)N
+912(when)X
+1149(new)X
+1338(modules)X
+1693(are)X
+1840(added)X
+2099(or)X
+2208(removed,)X
+2598(minimal)X
+2949(changes)X
+3288(to)X
+3392(the)X
+3539(table)X
+3756(of)X
+3866(exe-)X
+576 2260(cutable)N
+893(functions)X
+1288(should)X
+1581(be)X
+1709(made.)X
+2003(There)X
+2265(is)X
+2366(no)X
+2499(need)X
+2718(to)X
+2830(rewrite)X
+3140(the)X
+3295(whole)X
+3567(table.)X
+3840(Only)X
+576 2412(those)N
+812(functions)X
+1203(affected)X
+1547(by)X
+1676(the)X
+1827(changes)X
+2170(should)X
+2459(be)X
+2583(examined.)X
+3039(Lastly,)X
+3338(although)X
+3709(an)X
+3834(algo-)X
+576 2564(rithm)N
+812(that)X
+984(\256nds)X
+1197(out)X
+1347(the)X
+1492 0.2552(executability)AX
+2018(of)X
+2125(a)X
+2195(given)X
+2436(function)X
+2784(can)X
+2945(be)X
+3063(used)X
+3266(repeatedly)X
+3695(on)X
+3818(every)X
+576 2716(de\256ned)N
+887(function,)X
+1260(this)X
+1427(method)X
+1745(is)X
+1838(in)X
+1942(general)X
+2255(very)X
+2455(inef\256cient)X
+2875(because)X
+3209(a)X
+3281(lot)X
+3412(of)X
+3521(the)X
+3668(computa-)X
+576 2868(tion)N
+757(is)X
+851(duplicated.)X
+1331(Instead,)X
+1663(a)X
+1736(different)X
+2098(algorithm)X
+2503(that)X
+2678(\256nishes)X
+3001(all)X
+3128(the)X
+3276(computation)X
+3788(in)X
+3893(one)X
+576 3020(single)N
+830(pass)X
+1019(could)X
+1257(be)X
+1372(used.)X
+
+16 p
+%%Page: 16 17
+5(Helvetica-Narrow)xf 5 f
+12 s 0 xH 0 xS 5 f
+1 f
+10 s
+0 32(--)N
+4323(--)X
+12 s
+2200 616(-)N
+2256(16)X
+2376(-)X
+3362(October)X
+3696(15,)X
+3840(1990)X
+1780 1016(APPLICATIONS)N
+2485(OF)X
+2631(DLD)X
+576 1348(The)N
+758(\257exibility)X
+1165(provided)X
+1539(by)X
+2 f
+1667(dld)X
+1 f
+1822(allows)X
+2105(a)X
+2180(new)X
+2372(style)X
+2586(in)X
+2693(writing)X
+3004(programs)X
+3400(using)X
+3641(compiled-)X
+576 1500(based)N
+829(programming)X
+1387(languages)X
+1806(and)X
+1979(makes)X
+2259(many)X
+2507(new)X
+2701(kinds)X
+2943(of)X
+3057(applications)X
+3556(possible.)X
+3952(In)X
+576 1652(particular,)N
+1009(dynamic)X
+1380(linking)X
+1692(combines)X
+2100(the)X
+2257(ef\256ciency)X
+2676(of)X
+2795(executing)X
+3209(native)X
+3484(machine)X
+3850(code)X
+576 1804(with)N
+778(the)X
+927(\257exibility)X
+1333(of)X
+1444(runtime)X
+1774(program)X
+2130(modi\256cation.)X
+2 f
+2695(Dld)X
+1 f
+2869(is)X
+2963(especially)X
+3379(useful)X
+3644(for)X
+3786(highly)X
+576 1956(interactive)N
+1011(programs)X
+1401(whose)X
+1674(functionalities)X
+2254(change)X
+2555(in)X
+2658(response)X
+3022(to)X
+3125(their)X
+3330(user's)X
+3587(input.)X
+3861(This)X
+576 2108(section)N
+873(describes)X
+1255(several)X
+1552(interesting)X
+1983(applications)X
+2473(of)X
+2 f
+2577(dld)X
+1 f
+2700(.)X
+3 f
+576 2412(Program)N
+969(customization)X
+1 f
+576 2592(Many)N
+829(sophisticated)X
+1361(software)X
+1722(packages)X
+2105(usually)X
+2413(allow)X
+2657(some)X
+2890(form)X
+3107(of)X
+3217(customization)X
+3788(by)X
+3914(the)X
+576 2744(user.)N
+826(Depending)X
+1290(on)X
+1428(their)X
+1647(personal)X
+2015(preference,)X
+2488(users)X
+2727(can)X
+2903(specify)X
+3223(how)X
+3430(these)X
+3669(programs)X
+576 2896(should)N
+863(interact)X
+1184(with)X
+1387(them.)X
+1660(Usually)X
+1991(these)X
+2221(programs)X
+2616(provide)X
+2942(a)X
+3017(group)X
+3273(of)X
+3385(different)X
+3749(options)X
+576 3048(from)N
+791(which)X
+1054(users)X
+1279(can)X
+1441(select)X
+1689(those)X
+1920(that)X
+2092(suit)X
+2258(their)X
+2462(needs.)X
+2756(For)X
+2916(example,)X
+3294(in)X
+3396(the)X
+3541(UNIX)X
+3807(editor)X
+2 f
+576 3200(vi)N
+1 f
+10 s
+646 3160(9)N
+12 s
+715 3200(a)N
+787(user)X
+976(can)X
+1139(specify)X
+1446(whether)X
+1785(the)X
+1933(input)X
+2161(text)X
+2336(should)X
+2622(be)X
+2743(wrapped)X
+3104(around)X
+3401 0.2812(automatically)AX
+3957(to)X
+576 3352(the)N
+723(next)X
+918(line)X
+1092(when)X
+1329(input)X
+1556(gets)X
+1740(past)X
+1924(a)X
+1995(certain)X
+2286(column.)X
+2651(As)X
+2785(another)X
+3102(example,)X
+3481(some)X
+3712(versions)X
+576 3504(of)N
+681(the)X
+824(UNIX)X
+1088(command)X
+1493(interpreter)X
+2 f
+1920(csh)X
+1 f
+2073(provide)X
+2392(an)X
+2508(option)X
+2779(to)X
+2879(log)X
+3027(out)X
+3176(the)X
+3320(user)X
+3506 0.2812(automatically)AX
+576 3656(when)N
+808(it)X
+886(has)X
+1038(been)X
+1244(idle)X
+1413(for)X
+1549(a)X
+1616(user-speci\256ed)X
+2174(number)X
+2492(of)X
+2596(minutes.)X
+776 3836(This)N
+979(method)X
+1300(of)X
+1413(providing)X
+1820(program)X
+2179(customization)X
+2753(is)X
+2850(limited)X
+3157(in)X
+3265(the)X
+3416(sense)X
+3657(that)X
+3835(users)X
+576 3988(can)N
+735(only)X
+930(choose)X
+1221(their)X
+1422(preference)X
+1853(from)X
+2064(a)X
+2131(set)X
+2262(of)X
+2366(prede\256ned)X
+2796(options.)X
+3151(Whatever)X
+3550(is)X
+3638(not)X
+3785(antici-)X
+576 4140(pated)N
+809(will)X
+983(not)X
+1130(be)X
+1245(available.)X
+1666(For)X
+1823(example,)X
+2198(it)X
+2277(is)X
+2366(not)X
+2514(possible)X
+2854(to)X
+2954(customize)X
+2 f
+3370(vi)X
+1 f
+3465(so)X
+3575(that)X
+3745(when)X
+3978(it)X
+576 4292(breaks)N
+861(up)X
+991(a)X
+1068(long)X
+1273(line,)X
+1476(it)X
+1564(also)X
+1753(right-justi\256es)X
+2300(the)X
+2452(current)X
+2759(line)X
+2938(to)X
+3047(a)X
+3124(speci\256c)X
+3452(column.)X
+3823(Like-)X
+576 4444(wise,)N
+802(it)X
+882(is)X
+972(not)X
+1121(possible)X
+1462(to)X
+1563(tell)X
+2 f
+1713(csh)X
+1 f
+1867(to)X
+1968 0.2812(automatically)AX
+2520(log)X
+2669(out)X
+2818(at,)X
+2938(say,)X
+3117(5:30pm)X
+3438(simply)X
+3727(because)X
+576 4596(the)N
+732(need)X
+952(for)X
+1102(this)X
+1279(functionality)X
+1810(was)X
+1997(not)X
+2158(anticipated.)X
+2668(One)X
+2866(possible)X
+3219(solution)X
+3567(is)X
+3668(to)X
+3780(let)X
+3914(the)X
+576 4748(users)N
+798(modify)X
+1102(these)X
+1326(programs)X
+1715(according)X
+2121(to)X
+2222(their)X
+2425(own)X
+2616(preference)X
+3049(and)X
+3214(have)X
+3422(separate)X
+3764(private)X
+576 4900(copies)N
+853(for)X
+996(each)X
+1204(of)X
+1315(them.)X
+1586(Obviously,)X
+2040(this)X
+2209(method)X
+2528(requires)X
+2868(a)X
+2941(lot)X
+3073(of)X
+3183(disk)X
+3373(space)X
+3617(and)X
+3786(makes)X
+576 5052(system)N
+867(software)X
+1222(very)X
+1417(hard)X
+1612(to)X
+1711(maintain)X
+2073(and)X
+2236(upgrade.)X
+2 f
+776 5232(Dld)N
+1 f
+948(provides)X
+1307(a)X
+1378(better)X
+1626(solution)X
+1964(by)X
+2088(allowing)X
+2453(users)X
+2678(to)X
+2781(add)X
+2949(or)X
+3058(remove)X
+3376(new)X
+3565(functions)X
+3952(or)X
+576 5384(modify)N
+884(the)X
+1032(application)X
+1491(programs)X
+1883(to)X
+1987(suit)X
+2155(their)X
+2361(own)X
+2555(preference.)X
+3039(The)X
+3218(system)X
+3514(then)X
+3709(needs)X
+3957(to)X
+576 5536(keep)N
+786(only)X
+985(one)X
+1152(copy)X
+1367(of)X
+1475(each)X
+1680(program)X
+2034(that)X
+2207(is)X
+2300(loaded)X
+2586(with)X
+2786(default)X
+3083(options.)X
+3443(If)X
+3536(users)X
+3762(are)X
+3909(not)X
+576 5688(satis\256ed)N
+925(with)X
+1130(any)X
+1303(of)X
+1417(the)X
+1569(options)X
+1886(provided,)X
+2286(they)X
+2485(can)X
+2652(then)X
+2851(link)X
+3034(in)X
+3142(their)X
+3352(own)X
+3550(routines)X
+3893(and)X
+576 5840(tell)N
+729(the)X
+876(program)X
+1231(to)X
+1335(use)X
+1493(these)X
+1721(user-de\256ned)X
+2226(functions)X
+2614(instead)X
+2917(of)X
+3027(the)X
+3175(defaults.)X
+3558(Referring)X
+3957(to)X
+
+17 p
+%%Page: 17 18
+5(Helvetica-Narrow)xf 5 f
+12 s 0 xH 0 xS 5 f
+1 f
+10 s
+0 32(--)N
+4323(--)X
+12 s
+2200 616(-)N
+2256(17)X
+2376(-)X
+3362(October)X
+3696(15,)X
+3840(1990)X
+576 1016(the)N
+722(previous)X
+2 f
+1081(csh)X
+1 f
+1237(example,)X
+1616(if)X
+2 f
+1702(dld)X
+1 f
+1852(is)X
+1943(used,)X
+2170(a)X
+2240(user)X
+2427(could)X
+2668(perform)X
+3005(the)X
+3150(following)X
+3551(steps)X
+3770(to)X
+3872(cus-)X
+576 1168(tomize)N
+863(the)X
+1005(autologout)X
+1441(feature:)X
+10 f
+976 1348(g)N
+1 f
+1176(Use)X
+5 f
+1347(unlink_by_symbol)X
+1 f
+1996(to)X
+2095(unlink)X
+2365(the)X
+2507(function)X
+2852(that)X
+3021(handles)X
+3339(autologout.)X
+10 f
+976 1528(g)N
+1 f
+1176(Modify)X
+1512(the)X
+1678(way)X
+1887(the)X
+2054(autologout)X
+2515(function)X
+2885(interprets)X
+3298(its)X
+3438(argument.)X
+3899(For)X
+1176 1680(example,)N
+1553("17:30")X
+1876(means)X
+2148(logout)X
+2420(at)X
+2516(5:30pm)X
+2836(while)X
+3076("17")X
+3276(means)X
+3548(logout)X
+3820(if)X
+2 f
+3904(csh)X
+1 f
+1176 1832(has)N
+1339(been)X
+1556(idle)X
+1736(for)X
+1883(17)X
+2014(minutes.)X
+2402(Also)X
+2618(make)X
+2862(necessary)X
+3271(adjustments)X
+3766(so)X
+3887(that)X
+1176 1984(the)N
+1318(alarm)X
+1562(clock)X
+1795(is)X
+1883(set)X
+2014(correctly.)X
+10 f
+976 2164(g)N
+1 f
+1176(Compile)X
+1532(this)X
+1695(new)X
+1879(autologout)X
+2315(function.)X
+10 f
+976 2344(g)N
+1 f
+1176(Use)X
+5 f
+1347(dlink)X
+1 f
+1532(to)X
+1631(link)X
+1805(this)X
+1968(function)X
+2313(into)X
+2 f
+2487(csh)X
+1 f
+(.)S
+776 2524(Note)N
+996(that)X
+1174(this)X
+1346(method)X
+1669(requires)X
+2013(users)X
+2244(to)X
+2353(have)X
+2569(some)X
+2806(knowledge)X
+3262(on)X
+3392(the)X
+3544(implementa-)X
+576 2676(tion)N
+766(of)X
+886(the)X
+1044(application)X
+1513(programs.)X
+1964(Alternatively,)X
+2537(the)X
+2695(application)X
+3163(programs)X
+3565(can)X
+3738(provide)X
+576 2828(``hooks'')N
+958(or)X
+1063(some)X
+1291(well-de\256ned,)X
+1821(uniform)X
+2156(interface)X
+2519(to)X
+2619(which)X
+2880(the)X
+3024(users)X
+3247(can)X
+3407(attach)X
+3664(their)X
+3867(own)X
+576 2980(customized)N
+1054(routines.)X
+1451(Users)X
+1708(should)X
+2002(follow)X
+2291(the)X
+2447(speci\256ed)X
+2827(convention)X
+3293(when)X
+3539(writing)X
+3855(their)X
+576 3132(own)N
+771(functions)X
+1159(and)X
+1328(the)X
+1476(application)X
+1935(programs)X
+2328(may)X
+2524(provide)X
+2848(a)X
+2921(special)X
+3219(routine)X
+3522(to)X
+3627(handle)X
+3914(the)X
+576 3284(loading)N
+892(of)X
+999(the)X
+1144(user-de\256ned)X
+1646(functions.)X
+2079(This)X
+2277(routine)X
+2577(should)X
+2860(hide)X
+3053(from)X
+3267(the)X
+3412(users)X
+3636(the)X
+3780(details)X
+576 3436(of)N
+680(invoking)X
+2 f
+1046(dld)X
+1 f
+1193(and)X
+1356(of)X
+1460(setting)X
+1741(up)X
+1861(the)X
+2003(function)X
+2348(entry)X
+2570(points.)X
+3 f
+576 3740(Incremental)N
+1102(program)X
+1489(development)X
+1 f
+576 3920(Since)N
+2 f
+823(dld)X
+1 f
+979(does)X
+1188(not)X
+1344(require)X
+1650(all)X
+1780(source)X
+2064(modules)X
+2423(to)X
+2531(be)X
+2655(available)X
+3037(when)X
+3278(creating)X
+3623(an)X
+3748(execut-)X
+576 4072(able)N
+776(\256le,)X
+962(it)X
+1055(makes)X
+1340(incremental)X
+1835(program)X
+2200(development)X
+2737(possible.)X
+3138(Programmers)X
+3694(can)X
+3866(start)X
+576 4224(testing)N
+859(their)X
+1062(programs)X
+1451(before)X
+1723(they)X
+1915(\256nish)X
+2154(writing)X
+2458(the)X
+2603(complete)X
+2984(program)X
+3337(without)X
+3658(providing)X
+576 4376(dummy)N
+905(de\256nitions)X
+1346(for)X
+1493(the)X
+1646(missing)X
+1980(procedures.)X
+2485(As)X
+2626(long)X
+2832(as)X
+2947(the)X
+3100(test)X
+3269(input)X
+3502(data)X
+3698(does)X
+3909(not)X
+576 4528(cause)N
+831(the)X
+990(program)X
+1357(to)X
+1473(reference)X
+1873(modules)X
+2240(that)X
+2426(have)X
+2649(not)X
+2813(yet)X
+2972(been)X
+3195(linked)X
+3477(\(i.e.,)X
+3692(does)X
+3909(not)X
+576 4680(invoke)N
+884(a)X
+972(function)X
+5 f
+1336(f)X
+1 f
+1403(such)X
+1624(that)X
+5 f
+1812(function_executable_p\(f\))X
+1 f
+2720(returns)X
+3032(zero\),)X
+3299(the)X
+3462(execution)X
+3882(will)X
+576 4832(proceed)N
+931(smoothly.)X
+1388(Programmers)X
+1957(can)X
+2142(therefore)X
+2541(develop)X
+2897(programs)X
+3311 0.2604(incrementally)AX
+3893(and)X
+576 4984(carry)N
+802(out)X
+953(thorough)X
+1328(tests)X
+1527(on)X
+1651(individual)X
+2069(modules)X
+2422(before)X
+2695(working)X
+3042(on)X
+3165(the)X
+3310(next)X
+3503(one.)X
+3717(Further-)X
+576 5136(more,)N
+839(when)X
+1088(new)X
+1289(modules)X
+1656(are)X
+1815(added)X
+2086 0.2404(incrementally,)AX
+2682(the)X
+2842(dynamic)X
+3216(linker)X
+3483(needs)X
+3744(only)X
+3957(to)X
+576 5288(resolve)N
+892(external)X
+1241(symbol)X
+1561(references)X
+1994(related)X
+2294(to)X
+2406(these)X
+2641(new)X
+2838(modules.)X
+3249(In)X
+3366(contrast,)X
+3732(if)X
+3828(static)X
+576 5440(linking)N
+874(is)X
+963(used,)X
+1188(link)X
+1363(editing)X
+1656(of)X
+1761(the)X
+1904(whole)X
+2164(program)X
+2515(has)X
+2668(to)X
+2768(be)X
+2884(started)X
+3167(anew.)X
+3444(In)X
+3550(other)X
+3774(words,)X
+576 5592(the)N
+718(use)X
+870(of)X
+974(dynamic)X
+1330(linking)X
+1627(can)X
+1785(in)X
+1884(general)X
+2192(speed)X
+2435(up)X
+2555(the)X
+2697(program)X
+3047(development)X
+3569(cycle.)X
+
+18 p
+%%Page: 18 19
+5(Helvetica-Narrow)xf 5 f
+12 s 0 xH 0 xS 5 f
+1 f
+10 s
+0 32(--)N
+4323(--)X
+12 s
+2200 616(-)N
+2256(18)X
+2376(-)X
+3362(October)X
+3696(15,)X
+3840(1990)X
+776 1016(Some)N
+1046(systems)X
+10 s
+1350 976(10,)N
+1463(11)X
+12 s
+1594 1016(support)N
+1933(incremental)X
+2440(program)X
+2817(development)X
+3367(by)X
+3515(providing)X
+3941(an)X
+576 1168(interactive)N
+1021(interpreter)X
+1460(for)X
+1609(the)X
+1764(underlying)X
+2218(programming)X
+2779(language.)X
+3212(These)X
+3478(systems)X
+3818(allow)X
+576 1320(programs)N
+978(to)X
+1092(be)X
+1222(written,)X
+1558(tested,)X
+1846(and)X
+2024(modi\256ed)X
+2405 0.2404(interactively.)AX
+2976(However,)X
+3392(interpreted)X
+3850(code)X
+576 1472(usually)N
+880(runs)X
+1070(more)X
+1293(slowly)X
+1574(than)X
+1765(native)X
+2026(machine)X
+2378(code.)X
+2633(The)X
+2808(performance)X
+3320(of)X
+3425(an)X
+3541(interpreter)X
+3968(is)X
+576 1624(often)N
+806(unacceptable)X
+1342(when)X
+1582(executing)X
+1989(computationally)X
+2649(intensive)X
+3030(programs.)X
+3474(With)X
+3700(dynamic)X
+576 1776(linking,)N
+900(interpreted)X
+1345(and)X
+1511(\(possibly)X
+1890(optimized\))X
+2335(compiled)X
+2721(code)X
+2930(can)X
+3091(be)X
+3209(mixed)X
+3477(together.)X
+3867(Pro-)X
+576 1928(grammers)N
+987(might)X
+1238(use)X
+1392(compiled)X
+1777(versions)X
+2123(of)X
+2229(the)X
+2374(parts)X
+2588(of)X
+2695(the)X
+2840(program)X
+3193(that)X
+3365(have)X
+3574(been)X
+3783(tested,)X
+576 2080(while)N
+824(at)X
+928(the)X
+1079(same)X
+1310(time)X
+1515(they)X
+1714(can)X
+1881(use)X
+2042(interpreted)X
+2493(versions)X
+2846(of)X
+2959(the)X
+3110(modules)X
+3469(on)X
+3598(which)X
+3866(they)X
+576 2232(are)N
+719(currently)X
+1092(working.)X
+1485(The)X
+1660(compiled)X
+2044(modules)X
+2396(are)X
+2540(dynamically)X
+3043(linked)X
+3310(into)X
+3486(the)X
+3630(interpreter)X
+576 2384(of)N
+684(these)X
+910(systems.)X
+1290(These)X
+1548(systems)X
+1880(also)X
+2063(provide)X
+2385(the)X
+2531(necessary)X
+2933(interface)X
+3298(for)X
+3437(the)X
+3582(interactions)X
+576 2536(between)N
+921(the)X
+1063(interpreted)X
+1505(and)X
+1668(compiled)X
+2051(code.)X
+776 2716(As)N
+917(an)X
+1043(example,)X
+1429(suppose)X
+1773(a)X
+1851(graphical)X
+2245(front)X
+2467(end)X
+2641(is)X
+2741(to)X
+2852(be)X
+2979(added)X
+3245(to)X
+3356(an)X
+3483(existing)X
+3824(chess)X
+576 2868(playing)N
+897(program,)X
+1279(which)X
+1546(is)X
+1642(computationally)X
+2301(intensive.)X
+2729(During)X
+3032(its)X
+3154(development,)X
+3707(code)X
+3920(for)X
+576 3020(this)N
+745(graphical)X
+1134(front)X
+1352(end)X
+1522(is)X
+1617(frequently)X
+2044(modi\256ed,)X
+2441(and)X
+2611(so)X
+2727(it)X
+2812(is)X
+2907(best)X
+3093(run)X
+3252(under)X
+3502(an)X
+3624(interactive)X
+576 3172(interpreter.)N
+1062(However,)X
+1473(executing)X
+1883(the)X
+2036(chess)X
+2279(playing)X
+2603(routines)X
+2948(under)X
+3202(the)X
+3355(interpreter)X
+3792(would)X
+576 3324(be)N
+710(unreasonably)X
+1266(slow.)X
+1538(With)X
+2 f
+1774(dld)X
+1 f
+1897(,)X
+1964(compiled)X
+2366(code)X
+2591(for)X
+2746(the)X
+2907(chess)X
+3158(program)X
+3527(itself)X
+3763(can)X
+3941(be)X
+576 3476(dynamically)N
+1089(linked)X
+1366(into)X
+1552(the)X
+1706(interpreter,)X
+2168(and)X
+2343(can)X
+2513(be)X
+2640(executed)X
+3019(at)X
+3125(the)X
+3279(same)X
+3513(speed)X
+3768(as)X
+3884(if)X
+3978(it)X
+576 3628(were)N
+799(statically)X
+1184(linked.)X
+1509(Thus,)X
+2 f
+1761(dld)X
+1 f
+1921(combines)X
+2327(the)X
+2482(ability)X
+2766(of)X
+2883(an)X
+3011(interpreter)X
+3450(to)X
+3562(\257exibly)X
+3893(and)X
+576 3780(completely)N
+1034(control)X
+1336(the)X
+1483(execution)X
+1887(of)X
+1996(the)X
+2143(still)X
+2317(developing)X
+2774(routines)X
+3113(with)X
+3312(the)X
+3458(high)X
+3657(execution)X
+576 3932(ef\256ciency)N
+980(achieved)X
+1347(by)X
+1467(the)X
+1609(optimized)X
+2019(machine)X
+2370(code.)X
+3 f
+576 4236(Support)N
+935(for)X
+1082(debugging)X
+1532(and)X
+1710(testing)X
+1 f
+576 4416(A)N
+686(dynamic)X
+1059(linker)X
+1325(also)X
+1521(makes)X
+1808(possible)X
+2164(the)X
+2323 0.2548(implementation)AX
+2971(of)X
+3093(many)X
+3349(useful)X
+3626(debugging)X
+576 4568(features.)N
+956(A)X
+1052(debugger)X
+1437(can)X
+1597(be)X
+1714(used)X
+1916(as)X
+2022(an)X
+2139(interactive)X
+2573(interface)X
+2937(to)X
+3038(control)X
+3337(the)X
+3481(reconstruction)X
+576 4720(of)N
+685(the)X
+832(user)X
+1021(program)X
+1376(and)X
+1544(the)X
+1691(execution)X
+2095(of)X
+2205(the)X
+2 f
+2353(inferior)X
+1 f
+2677(process,)X
+3019(i.e.,)X
+3191(the)X
+3339(process)X
+3657(executing)X
+576 4872(the)N
+720(program)X
+1072(being)X
+1312(debugged.)X
+1760(For)X
+1919(example,)X
+2296(a)X
+2365(programmer)X
+2866(can)X
+3025(use)X
+3178(a)X
+3246(debugger)X
+3629(to)X
+3729(stop)X
+3914(the)X
+576 5024(inferior)N
+893(process)X
+1209(and)X
+1376(invoke)X
+2 f
+1666(dld)X
+1 f
+1817(to)X
+1920(remove)X
+2237(the)X
+2384(erroneous)X
+2792(routines,)X
+3155(correct)X
+3452(them,)X
+3698(and)X
+3866(then)X
+576 5176(link)N
+761(them)X
+988(in)X
+1097(again.)X
+1388(New)X
+1603(debugging)X
+2043(routines)X
+2387(can)X
+2555(be)X
+2680(linked)X
+2955(into)X
+3139(the)X
+3291(inferior)X
+3614(process)X
+3936(on)X
+576 5328(demand.)N
+955(This)X
+1152(feature)X
+1446(is)X
+1536(particularly)X
+2007(useful)X
+2268(when)X
+2502(the)X
+2647(need)X
+2856(for)X
+2995(such)X
+3198(debugging)X
+3631(routines)X
+3968(is)X
+576 5480(not)N
+733(realized)X
+1073(until)X
+1284(the)X
+1436(program)X
+1796(has)X
+1958(been)X
+2174(executing)X
+2583(for)X
+2729(a)X
+2806(long)X
+3011(time)X
+3216(and)X
+3388(\256nally)X
+3667(arrives)X
+3962(at)X
+576 5632(some)N
+803(state)X
+1004(of)X
+1108(critical)X
+1401(importance)X
+1859(for)X
+1995(debugging.)X
+
+19 p
+%%Page: 19 20
+5(Helvetica-Narrow)xf 5 f
+12 s 0 xH 0 xS 5 f
+1 f
+10 s
+0 32(--)N
+4323(--)X
+12 s
+2200 616(-)N
+2256(19)X
+2376(-)X
+3362(October)X
+3696(15,)X
+3840(1990)X
+776 1016(Just)N
+962(as)X
+1079(incremental)X
+1572(program)X
+1936(testing)X
+2231(is)X
+2333(made)X
+2580(possible,)X
+2 f
+2957(dld)X
+1 f
+3118(allows)X
+3407(un\256nished)X
+3845(frag-)X
+576 1168(ments)N
+840(of)X
+954(a)X
+1030(program)X
+1389(to)X
+1497(be)X
+1621(debugged.)X
+2076(For)X
+2242(example,)X
+2626(a)X
+2702(programmer)X
+3211(might)X
+3469(want)X
+3689(to)X
+3797(debug)X
+576 1320(and)N
+740(test)X
+899(the)X
+1042(symbol)X
+1351(table)X
+1565(routines)X
+1901(of)X
+2007(a)X
+2076(compiler)X
+2445(before)X
+2717(moving)X
+3037(on)X
+3159(to)X
+3260(\256nish)X
+3499(the)X
+3643(rest)X
+3808(of)X
+3914(the)X
+576 1472(program.)N
+983(S/he)X
+1187(might)X
+1445(set)X
+1585(up)X
+1714(a)X
+1790(debugger)X
+2181(for)X
+2326(the)X
+2476(program)X
+2834(shown)X
+3116(in)X
+3223(\256gure)X
+3479(2,)X
+3583(and)X
+3754(specify)X
+576 1624(that)N
+759(these)X
+996(functions)X
+1393(are)X
+1550(to)X
+1664(be)X
+1794(linked)X
+2074(in)X
+2188(and)X
+2366(invoked.)X
+2763(The)X
+2952(programmer)X
+3467(could)X
+3720(then)X
+3925(set)X
+576 1776(breakpoints,)N
+1081(examine)X
+1440(or)X
+1551(modify)X
+1860(program)X
+2217(variables,)X
+2620(or)X
+2731(single)X
+2992(step)X
+3178(through)X
+3508(the)X
+3657(execution)X
+576 1928(of)N
+680(statements)X
+1111(in)X
+1210(these)X
+1432(functions)X
+1814(in)X
+1913(the)X
+2055(same)X
+2278(way)X
+2463(as)X
+2568(debugging)X
+2999(a)X
+3067(complete)X
+3446(program.)X
+3845(Note)X
+576 2080(that)N
+750(information)X
+1234(such)X
+1439(as)X
+1548(line)X
+1722(numbers)X
+2081(or)X
+2189(variable)X
+2528(names)X
+2802(of)X
+2910(these)X
+3136(functions)X
+3522(would)X
+3790(not)X
+3941(be)X
+576 2232(known)N
+883(by)X
+1025(the)X
+1189(debugger,)X
+1617(and)X
+1803(must)X
+2037(be)X
+2175(loaded)X
+2479(explicitly)X
+2891(if)X
+2997(source-level)X
+3515(debugging)X
+3968(is)X
+576 2384(desired.)N
+931(Incremental)X
+1421(loading)X
+1739(of)X
+1847(symbol)X
+2158(table)X
+2374(information)X
+2857(is)X
+2949(supported)X
+3356(by)X
+3480(some)X
+3711(state-of-)X
+576 2536(the-art)N
+852(debuggers,)X
+1295(such)X
+1495(as)X
+1599(Dalek)X
+10 s
+1829 2496(12)N
+12 s
+1933 2536(and)N
+2 f
+2096(gdb)X
+1 f
+10 s
+2496(13)Y
+12 s
+2536(.)Y
+776 2716(Another)N
+1119(important)X
+1522(debugging)X
+1956(application)X
+2414(for)X
+2 f
+2555(dld)X
+1 f
+2707(is)X
+2800(to)X
+2904(help)X
+3099(speed)X
+3347(up)X
+3472(the)X
+3619(interaction)X
+576 2868(between)N
+953(the)X
+1127(debugger)X
+1541(and)X
+1736(the)X
+1910(inferior)X
+2255(process.)X
+2647(Under)X
+2943(most)X
+3186(operating)X
+3606(systems,)X
+3989(a)X
+576 3020(debugger)N
+958(can)X
+1116(only)X
+1311(control)X
+1609(the)X
+1752(execution)X
+2152(or)X
+2257(modify)X
+2560(the)X
+2703(memory)X
+3049(image)X
+3310(of)X
+3415(the)X
+3558(inferior)X
+3872(pro-)X
+576 3172(cess)N
+780(through)X
+1123(a)X
+1210(protected)X
+1613(system)X
+1924(call,)X
+2132(e.g.,)X
+5 f
+2337(ptrace)X
+1 f
+2599(in)X
+2717(UNIX.)X
+3047(This)X
+3261(system)X
+3571(call)X
+3754(usually)X
+576 3324(involves)N
+933(a)X
+1007(considerable)X
+1525(amount)X
+1845(of)X
+1956(overhead.)X
+2389(For)X
+2554(example,)X
+2937(each)X
+3146(call)X
+3318(to)X
+5 f
+3423(ptrace)X
+1 f
+3674(results)X
+3957(in)X
+576 3476(two)N
+756(context)X
+1076(switches)X
+1443(between)X
+1800(the)X
+1954(debugger)X
+2348(and)X
+2522(the)X
+2675(inferior)X
+2999(processes.)X
+3450(However,)X
+3861(with)X
+576 3628(the)N
+727(help)X
+926(of)X
+1039(dynamic)X
+1404(linking,)X
+1734(a)X
+1810(debugger)X
+2201(can)X
+2368(inject)X
+2616(the)X
+2767(most)X
+2987(frequently)X
+3416(used)X
+3626(debugging)X
+576 3780(functions)N
+982(into)X
+1180(the)X
+1345(inferior)X
+1681(process's)X
+2085(address)X
+2420(space,)X
+2705(insert)X
+2966(calls)X
+3190(to)X
+3312(these)X
+3557(functions)X
+3962(at)X
+576 3932(appropriate)N
+1040(locations)X
+1413(in)X
+1513(the)X
+1656(inferior's)X
+2039(code,)X
+2270(and)X
+2434(then)X
+2625(allow)X
+2864(the)X
+3007(inferior)X
+3322(process)X
+3636(to)X
+3737(execute)X
+576 4084(without)N
+896(any)X
+1061(intervention)X
+1553(from)X
+1765(the)X
+1908(debugger.)X
+2339(Control)X
+2658(is)X
+2747(passed)X
+3028(back)X
+3235(to)X
+3335(the)X
+3478(debugger)X
+3861(only)X
+576 4236(when)N
+808(necessary.)X
+776 4416(For)N
+938(example,)X
+1318(consider)X
+1673(a)X
+1745(conditional)X
+2209(breakpoint)X
+2651(that)X
+2826(is)X
+2920(put)X
+3073(into)X
+3253(the)X
+3401(inferior)X
+3720(process.)X
+576 4568(That)N
+790(is,)X
+915(the)X
+1070(inferior)X
+1396(process)X
+1721(is)X
+1822(allowed)X
+2164(to)X
+2276(execute)X
+2608(and)X
+2784(the)X
+2939(breakpoint)X
+3387(is)X
+3487(effective)X
+3861(only)X
+576 4720(when)N
+815(some)X
+1049(speci\256ed)X
+1422(condition)X
+1817(is)X
+1912(satis\256ed.)X
+2306(Evaluation)X
+2755(of)X
+2866(the)X
+3015(condition)X
+3411(might)X
+3668(involve)X
+3989(a)X
+576 4872(large)N
+795(amount)X
+1110(of)X
+1216(data,)X
+1426(e.g.,)X
+1614(checking)X
+1987(if)X
+2071(an)X
+2187(array)X
+2410(is)X
+2499(sorted.)X
+2807(Also,)X
+3037(the)X
+3180(inferior)X
+3494(process)X
+3807(might)X
+576 5024(hit)N
+727(the)X
+894(breakpoint)X
+1355(many)X
+1618(times)X
+1876(before)X
+2172(the)X
+2340(given)X
+2604(condition)X
+3018(becomes)X
+3405(true.)X
+3653(If)X
+3767(all)X
+3914(the)X
+576 5176(required)N
+928(information)X
+1414(is)X
+1509(transferred)X
+1957(via)X
+2105(a)X
+2178(system)X
+2475(call)X
+2645(to)X
+2750(the)X
+2898(debugger)X
+3286(everytime)X
+3702(the)X
+3850(infe-)X
+576 5328(rior)N
+745(process)X
+1063(hits)X
+1232(the)X
+1380(breakpoint,)X
+1846(the)X
+1994(overhead)X
+2377(involved)X
+2744(would)X
+3014(be)X
+3135(very)X
+3337(high.)X
+3587(With)X
+2 f
+3811(dld)X
+1 f
+3934(,)X
+3989(a)X
+576 5480(conditional)N
+1047(breakpoint)X
+1496(can)X
+1667(be)X
+1795(implemented)X
+2335(by)X
+2467(inserting)X
+2840(code)X
+3058(for)X
+3206(the)X
+3360(evaluation)X
+3798(of)X
+3914(the)X
+576 5632(condition)N
+977(into)X
+1164(the)X
+1319(inferior)X
+1645(process.)X
+2018(Only)X
+2247(when)X
+2492(the)X
+2647(speci\256ed)X
+3026(condition)X
+3427(is)X
+3529(satis\256ed)X
+3882(will)X
+576 5784(control)N
+879(be)X
+1000(passed)X
+1285(back)X
+1496(to)X
+1600(the)X
+1747(debugger.)X
+2182(This)X
+2382(scheme)X
+2700(can)X
+2863(be)X
+2983(achieved)X
+3355(as)X
+3464(follows:)X
+3832(First,)X
+
+20 p
+%%Page: 20 21
+5(Helvetica-Narrow)xf 5 f
+12 s 0 xH 0 xS 5 f
+1 f
+10 s
+0 32(--)N
+4323(--)X
+12 s
+2200 616(-)N
+2256(20)X
+2376(-)X
+3362(October)X
+3696(15,)X
+3840(1990)X
+576 1016(the)N
+722(debugging)X
+1156(code)X
+1366(is)X
+1458(linked)X
+1727(into)X
+1905(the)X
+2051(inferior)X
+2368(process's)X
+2754(address)X
+3071(space.)X
+3362(Second,)X
+3698(a)X
+3770(branch)X
+576 1168(instruction)N
+1013(is)X
+1102(overwritten)X
+1571(into)X
+1746(the)X
+1889(location)X
+2225(of)X
+2330(the)X
+2473(breakpoint)X
+2910(so)X
+3020(that)X
+3190(the)X
+3332(debugging)X
+3762(code)X
+3968(is)X
+576 1320(executed)N
+955(instead.)X
+1312(Lastly,)X
+1613(the)X
+1767(machine)X
+2130(instructions)X
+2615(that)X
+2797(were)X
+3021(originally)X
+3433(in)X
+3545(this)X
+3721(location)X
+576 1472(are)N
+728(moved)X
+1024(to)X
+1133(the)X
+1285(end)X
+1458(of)X
+1572(the)X
+1724(debugging)X
+2164(code.)X
+2428(By)X
+2574(cleverly)X
+2919(rearranging)X
+3397(and)X
+3570(relocating)X
+3989(a)X
+576 1624(few)N
+757(machine)X
+1121(instructions,)X
+1631(the)X
+1786(insertion)X
+2161(of)X
+2279(the)X
+2435(branch)X
+2735(to)X
+2848(and)X
+3025(from)X
+3250(the)X
+3406(debugging)X
+3850(code)X
+576 1776(becomes)N
+940(transparent)X
+1395(to)X
+1496(the)X
+1640(original)X
+1966(execution.)X
+2415(Since)X
+2655(many)X
+2895(unnecessary)X
+3391(context)X
+3701(switches)X
+576 1928(and)N
+742(data)X
+930(transfers)X
+1288(between)X
+1636(the)X
+1781(debugger)X
+2166(and)X
+2332(the)X
+2477(inferior)X
+2793(are)X
+2938(eliminated,)X
+3398(the)X
+3544(ef\256ciency)X
+3952(of)X
+576 2080(interactive)N
+1008(debugging)X
+1438(is)X
+1526(greatly)X
+1818(improved.)X
+776 2260(An)N
+917(alternative)X
+1349(way)X
+1534(dynamic)X
+1891(linking)X
+2189(can)X
+2348(be)X
+2464(used)X
+2665(to)X
+2765(speed)X
+3009(up)X
+3130(the)X
+3273(interaction)X
+3711(between)X
+576 2412(the)N
+735(debugger)X
+1134(and)X
+1314(the)X
+1473(inferior)X
+1803(process)X
+2132(involves)X
+2499(the)X
+2658(use)X
+2827(of)X
+2948(shared)X
+3240(memory)X
+10 s
+3561 2372(14)N
+12 s
+2412(.)Y
+3730(A)X
+3839(large)X
+576 2564(block)N
+819(of)X
+928(memory)X
+1278(is)X
+1371(allocated)X
+1749(and)X
+1917(shared)X
+2197(between)X
+2548(the)X
+2696(debugger)X
+3084(and)X
+3253(the)X
+3401(inferior)X
+3720(process.)X
+576 2716(Then)N
+817(the)X
+978(program)X
+1347(to)X
+1465(be)X
+1599(debugged)X
+2016(is)X
+2123(dynamically)X
+2643(linked)X
+2927(and)X
+3109(loaded)X
+3408(into)X
+3600(this)X
+3781(shared)X
+576 2868(memory.)N
+970(Control)X
+1289(of)X
+1394(the)X
+1537(inferior)X
+1851(process)X
+2164(is)X
+2253(then)X
+2444(passed)X
+2726(to)X
+2827(the)X
+2971(main)X
+3190(procedure)X
+3601(of)X
+3707(this)X
+3872(pro-)X
+576 3020(gram.)N
+855(As)X
+994(a)X
+1070(result,)X
+1341(any)X
+1513(update)X
+1803(of)X
+1916(data)X
+2110(made)X
+2352(by)X
+2481(this)X
+2653(program)X
+3011(is)X
+3107(readily)X
+3407(observed)X
+3786(by)X
+3914(the)X
+576 3172(debugger)N
+980(without)X
+1320(any)X
+1505(system)X
+1819(call.)X
+2054(Also,)X
+2306(instructions)X
+2802(of)X
+2929(this)X
+3115(program)X
+3488(can)X
+3669(easily)X
+3941(be)X
+576 3324(modi\256ed)N
+943(because)X
+1273(they)X
+1464(are)X
+1607(loaded)X
+1889(in)X
+1989(the)X
+2132(shared)X
+2408(memory,)X
+2778(to)X
+2877(which)X
+3136(the)X
+3278(debugger)X
+3660(has)X
+3812(direct)X
+576 3476(write)N
+798(access.)X
+
+21 p
+%%Page: 21 22
+5(Helvetica-Narrow)xf 5 f
+12 s 0 xH 0 xS 5 f
+1 f
+10 s
+0 32(--)N
+4323(--)X
+12 s
+2200 616(-)N
+2256(21)X
+2376(-)X
+3362(October)X
+3696(15,)X
+3840(1990)X
+2022 1016(DISCUSSION)N
+576 1348(The)N
+765(ability)X
+1051(to)X
+1165(dynamically)X
+1681(link)X
+1870(and)X
+2048(unlink)X
+2333(object)X
+2608(modules)X
+2973(from)X
+3199(an)X
+3329(executing)X
+3744(process)X
+576 1500(provides)N
+935(much)X
+1177(\257exibility)X
+1579(in)X
+1681(the)X
+1826(construction)X
+2329(of)X
+2436(a)X
+2506(program.)X
+2907(This)X
+3105(ability)X
+3379(allows)X
+3657(the)X
+3802(build-)X
+576 1652(ing)N
+737(blocks)X
+1026(of)X
+1144(a)X
+1225(program)X
+1589(to)X
+1702(change)X
+2014(or)X
+2133(evolve)X
+2429(with)X
+2639(time:)X
+2901(it)X
+2994(turns)X
+3225(a)X
+3307(``program'')X
+3800(into)X
+3989(a)X
+576 1804(dynamic)N
+937(entity.)X
+1234(The)X
+1413(functionalities)X
+1994(of)X
+2103(such)X
+2308(a)X
+2380(program)X
+2735(can)X
+2898(be)X
+3018(changed)X
+3368(in)X
+3472(response)X
+3837(to)X
+3941(its)X
+576 1956(interactions)N
+1070(with)X
+1285(the)X
+1447(environment.)X
+2026(As)X
+2176(a)X
+2263(result,)X
+2545(dynamic)X
+2921(link)X
+3115(editing)X
+3427(makes)X
+3717(possible)X
+576 2108(many)N
+814(new)X
+998(kinds)X
+1230(of)X
+1334(applications)X
+1824(that)X
+1993(would)X
+2257(otherwise)X
+2655(be)X
+2770(very)X
+2965(hard)X
+3160(to)X
+3259(implement.)X
+776 2288(Systems)N
+1130(with)X
+1335(similar)X
+1637(capabilities)X
+2111(have)X
+2327(been)X
+2543(introduced)X
+2989(before.)X
+3318(For)X
+3486(example,)X
+3872(pro-)X
+576 2440(grams)N
+836(written)X
+1134(in)X
+1234(languages)X
+1644(such)X
+1845(as)X
+1950(LISP)X
+2172(or)X
+2277(Prolog)X
+2558(can)X
+2717(load)X
+2908(in)X
+3008(and)X
+3171(execute)X
+3490(new)X
+3674(functions)X
+576 2592(at)N
+670(any)X
+833(time)X
+1029(during)X
+1304(their)X
+1506(execution.)X
+1954(However,)X
+2355(with)X
+2551(only)X
+2747(static)X
+2976(linking,)X
+3298(these)X
+3521(systems)X
+3850(have)X
+576 2744(to)N
+691(be)X
+822(built)X
+1039(on)X
+1175(top)X
+1338(of)X
+1458(an)X
+1588(interpreter)X
+2029(or)X
+2148(a)X
+2230(simulated)X
+2644(machine,)X
+3034(which)X
+3308(always)X
+3614(runs)X
+3818(many)X
+576 2896(times)N
+812(slower)X
+1096(than)X
+1290(real)X
+1463(machines.)X
+1903(Dynamic)X
+2284(link)X
+2462(editing,)X
+2782(on)X
+2906(the)X
+3052(other)X
+3278(hand,)X
+3517(combines)X
+3914(the)X
+576 3048(high)N
+806(execution)X
+1240(speed)X
+1518(of)X
+1657(native)X
+1952(machine)X
+2338(code)X
+2579(with)X
+2808(the)X
+2984(\257exibility)X
+3417(of)X
+3555(dynamically)X
+576 3200(modi\256able)N
+1012(programs.)X
+776 3380(As)N
+922(a)X
+1005(positive)X
+1350(side)X
+1545(effect,)X
+2 f
+1829(dld)X
+1 f
+1992(helps)X
+2235(speed)X
+2494(up)X
+2630(the)X
+2788(program)X
+3154(development)X
+3692(cycle)X
+3936(by)X
+576 3532(allowing)N
+963(incremental)X
+1469(program)X
+1845(construction)X
+2371(and)X
+2560(online)X
+2851(maintenance.)X
+3437(As)X
+3592(the)X
+3759(sample)X
+576 3684(applications)N
+1073(illustrate,)X
+1466(when)X
+1705(new)X
+1896(modules)X
+2253(are)X
+2402(added)X
+2663(to)X
+2769(a)X
+2843(program,)X
+3225(only)X
+3428(part)X
+3610(of)X
+3722(the)X
+3872(pro-)X
+576 3836(gram)N
+808(needs)X
+1061(to)X
+1170(be)X
+1295(modi\256ed\320the)X
+1884(rest)X
+2056(of)X
+2169(the)X
+2320(program)X
+2679(need)X
+2894(not)X
+3050(be)X
+3174(relinked.)X
+3571(Incremental)X
+576 3988(linking)N
+878(can)X
+1041(save)X
+1241(a)X
+1313(considerable)X
+1830(amount)X
+2149(of)X
+2259(time,)X
+2485(especially)X
+2901(for)X
+3043(large)X
+3266(programs)X
+3659(that)X
+3834(often)X
+576 4140(take)N
+776(many)X
+1029(minutes)X
+1373(to)X
+1487(link.)X
+1724(Furthermore,)X
+2268(the)X
+2425(size)X
+2614(of)X
+2733(the)X
+2890(executable)X
+3341(\256les)X
+3539(and)X
+3716(the)X
+3872(disk)X
+576 4292(storage)N
+880(requirements)X
+1409(can)X
+1569(be)X
+1686(reduced)X
+2017(because)X
+2348(the)X
+2492(system)X
+2785(can)X
+2945(now)X
+3136(keep)X
+3344(only)X
+3541(one)X
+3706(copy)X
+3920(for)X
+576 4444(the)N
+720(commonly)X
+1158(used)X
+1360(library)X
+1643(routines)X
+1979(and)X
+2144(have)X
+2352(them)X
+2571(dynamically)X
+3073(linked)X
+3339(into)X
+3514(the)X
+3657(executing)X
+576 4596(process)N
+888(on)X
+1008(demand.)X
+776 4776(Another)N
+1126(potential)X
+1499(optimization)X
+2022(of)X
+2137(storage)X
+2450(requirement)X
+2951(is)X
+3050(to)X
+3160(allow)X
+3409(commonly)X
+3856(used)X
+576 4928(library)N
+896(routines)X
+1269(to)X
+1407(be)X
+1561(shared)X
+1875(among)X
+2200(multiple)X
+2584(processes.)X
+3062(Many)X
+3348(new)X
+3570(versions)X
+3952(of)X
+576 5080(UNIX)N
+10 s
+815 5040(2,)N
+888(3,)X
+961(4,)X
+1034(6)X
+12 s
+1100 5080(already)N
+1410(support)X
+1724(shared)X
+2002(library.)X
+2334(Although)X
+2724(the)X
+2869(current)X
+3169 0.2548(implementation)AX
+3802(of)X
+2 f
+3909(dld)X
+1 f
+576 5232(allocates)N
+949(storage)X
+1262(for)X
+1409(the)X
+1562(dynamically)X
+2073(linked)X
+2348(library)X
+2639(modules)X
+2999(in)X
+3108(the)X
+3260(private)X
+3562(data)X
+3757(area)X
+3952(of)X
+576 5384(individual)N
+993(process,)X
+1331(a)X
+1400(simple)X
+1683(modi\256cation)X
+2197(would)X
+2464(allow)X
+2705(the)X
+2850(process)X
+3165(to)X
+3267(use)X
+3422(the)X
+3567(shared)X
+3845(copy)X
+576 5536(instead.)N
+776 5716(The)N
+958(price)X
+1183(for)X
+1328(the)X
+1479(\257exibility)X
+1887(provided)X
+2262(by)X
+2 f
+2391(dld)X
+1 f
+2547(is)X
+2644(perhaps)X
+2976(the)X
+3127(overhead)X
+3513(in)X
+3621(processing)X
+576 5868(time)N
+776(for)X
+916(the)X
+1062(link)X
+1240(editing)X
+1536(and)X
+1702(the)X
+1847(extra)X
+2067(memory)X
+2415(required)X
+2763(for)X
+2902(holding)X
+3223(the)X
+3368(symbol)X
+3678(table)X
+3893(and)X
+
+22 p
+%%Page: 22 23
+5(Helvetica-Narrow)xf 5 f
+12 s 0 xH 0 xS 5 f
+1 f
+10 s
+0 32(--)N
+4323(--)X
+12 s
+2200 616(-)N
+2256(22)X
+2376(-)X
+3362(October)X
+3696(15,)X
+3840(1990)X
+576 1016(other)N
+808(bookkeeping)X
+1339(information.)X
+1876(In)X
+1990(practice,)X
+2354(the)X
+2506(time)X
+2712(spent)X
+2949(in)X
+3058(performing)X
+3525(both)X
+3730(the)X
+3882(link)X
+576 1168(and)N
+746(the)X
+895(unlink)X
+1172(operations)X
+1604(is)X
+1699(very)X
+1901(small)X
+2141(when)X
+2380(compared)X
+2791(with)X
+2993(that)X
+3169(spent)X
+3403(in)X
+3509(executing)X
+3914(the)X
+576 1320(program)N
+932(itself.)X
+1203(Once)X
+1436(the)X
+1584(linking)X
+1887(is)X
+1981(\256nished,)X
+2339(the)X
+2487(program)X
+2843(can)X
+3008(execute)X
+3334(at)X
+3435(the)X
+3584(same)X
+3813(speed)X
+576 1472(as)N
+688(if)X
+779(it)X
+864(were)X
+1082(statically)X
+1462(linked.)X
+1782(Although)X
+2176(a)X
+2250(dynamically)X
+2758(linked)X
+3030(function)X
+3382(must)X
+3600(be)X
+3722(invoked)X
+576 1624(indirectly)N
+985(through)X
+1323(a)X
+1405(pointer)X
+1717(\(as)X
+1868(shown)X
+2157(in)X
+2271(\256gure)X
+2535(2\),)X
+2679(this)X
+2858(indirection)X
+3316(involves)X
+3682(only)X
+3893(one)X
+576 1776(extra)N
+795(pointer)X
+1094(reference.)X
+1527(That)X
+1730(extra)X
+1948(cost)X
+2128(is)X
+2217(negligible)X
+2628(compared)X
+3033(with)X
+3229(the)X
+3372(cost)X
+3552(of)X
+3657(executing)X
+576 1928(typically)N
+939(hundreds)X
+1316(of)X
+1421(machine)X
+1773(instructions)X
+2247(in)X
+2347(the)X
+2490(body)X
+2707(of)X
+2812(a)X
+2881(function.)X
+3276(In)X
+3382(addition,)X
+3748(prelim-)X
+576 2080(inary)N
+799(studies)X
+1091(show)X
+1318(that)X
+1488(the)X
+1631(vast)X
+1811(majority)X
+2163(of)X
+2268(the)X
+2411(time)X
+2608(spent)X
+2835(in)X
+5 f
+2932(dlink)X
+1 f
+3117(is)X
+3205(for)X
+3341(reading)X
+3654(the)X
+3796(object)X
+576 2232(\256les)N
+772(or)X
+888(libraries)X
+1240(from)X
+1463(disk.)X
+1707(In)X
+1823(other)X
+2057(words,)X
+2351(the)X
+2505(overhead)X
+2894(in)X
+3006(resolving)X
+3401(external)X
+3749(symbol)X
+576 2384(references)N
+996(and)X
+1159(maintaining)X
+1644(the)X
+1786(symbol)X
+2093(table)X
+2305(is)X
+2393(insigni\256cant.)X
+776 2564(The)N
+950(current)X
+1247 0.2548(implementation)AX
+1877(of)X
+5 f
+1979(function_executable_p)X
+1 f
+2793(is)X
+2882(not)X
+3030(complete)X
+3409(according)X
+3814(to)X
+3914(the)X
+576 2716(given)N
+832(de\256nition)X
+1243(of)X
+1365 0.2356(executability.)AX
+1953(External)X
+2321(references)X
+2758(through)X
+3098(pointers)X
+3449(are)X
+3608(not)X
+3772(traced.)X
+576 2868(That)N
+789(is,)X
+913(this)X
+1089(function)X
+1447(will)X
+1634(still)X
+1816(return)X
+2083(non-zero)X
+2462(if)X
+2558(the)X
+2713(named)X
+3007(function)X
+3365(uses)X
+3567(a)X
+3647(pointer)X
+3957(to)X
+576 3020(indirectly)N
+993(call)X
+1180(another)X
+1516(function)X
+1883(that)X
+2074(has)X
+2248(already)X
+2578(been)X
+2806(unlinked.)X
+3237(Furthermore,)X
+3788(if)X
+3893(one)X
+576 3172(external)N
+913(reference)X
+1298(of)X
+1404(an)X
+1521(object)X
+1783(module)X
+2098(is)X
+2188(unresolved,)X
+2660(all)X
+2783(functions)X
+3167(de\256ned)X
+3476(in)X
+3577(this)X
+3743(module)X
+576 3324(are)N
+723(considered)X
+1169(unexecutable.)X
+1755(This)X
+1955(approximation)X
+2546(results)X
+2826(in)X
+2930(a)X
+3001(very)X
+3200(ef\256cient)X
+3544(implementa-)X
+576 3476(tion,)N
+774(albeit)X
+1013(conservative.)X
+776 3656(Like)N
+979(many)X
+1219(other)X
+1443(powerful)X
+1816(tools,)X
+2053(there)X
+2272(is)X
+2362(always)X
+2655(a)X
+2724(danger)X
+3012(that)X
+2 f
+3184(dld)X
+1 f
+3334(could)X
+3575(be)X
+3693(misused.)X
+576 3808(Similar)N
+910(to)X
+1035(its)X
+1176(static)X
+1430(counterpart,)X
+1943(a)X
+2036(dynamic)X
+2418(linker)X
+2692(simply)X
+3003(combines)X
+3421(object)X
+3706(modules)X
+576 3960(together)N
+924(and)X
+1096(does)X
+1305(not)X
+1461(provide)X
+1788(any)X
+1960(extra)X
+2186(protection)X
+2610(on)X
+2739(the)X
+2890(existing)X
+3228(code)X
+3443(against)X
+3749(corrup-)X
+576 4112(tion.)N
+801(For)X
+961(example,)X
+2 f
+1339(dld)X
+1 f
+1489(does)X
+1692(not)X
+1842(check)X
+2094(if)X
+2180(a)X
+2250(function)X
+2598(to)X
+2700(be)X
+2818(unlinked)X
+3182(is)X
+3273(still)X
+3445(active)X
+3703(\(i.e.,)X
+3904(has)X
+576 4264(a)N
+649(corresponding)X
+1229(activation)X
+1640(record)X
+1917(on)X
+2044(the)X
+2193(stack\).)X
+2502(If)X
+2597(such)X
+2804(a)X
+2878(function)X
+3230(is)X
+3325(unlinked,)X
+3717(the)X
+3866(exe-)X
+576 4416(cuting)N
+848(process)X
+1167(might)X
+1423(crash)X
+1657(when)X
+1896(control)X
+2200(is)X
+2295(passed)X
+2582(back)X
+2795(to)X
+2900(it)X
+2984(because)X
+3319(the)X
+3467(memory)X
+3818(origi-)X
+576 4568(nally)N
+806(holding)X
+1137(the)X
+1292(code)X
+1511(for)X
+1660(the)X
+1815(function)X
+2173(might)X
+2435(have)X
+2654(been)X
+2873(garbage)X
+3216(collected)X
+3603(and)X
+3780(reallo-)X
+576 4720(cated.)N
+862(Also,)X
+1101(a)X
+1178(function)X
+1533(that)X
+1712(was)X
+1895(executable)X
+2342(at)X
+2446(one)X
+2619(point)X
+2851(in)X
+2960(time)X
+3166(might)X
+3425(not)X
+3582(be)X
+3706(so)X
+3824(when)X
+576 4872(other)N
+804(routines)X
+1144(are)X
+1293(removed.)X
+1709(Therefore,)X
+2144(the)X
+2 f
+2293 0.2865(executability)AX
+1 f
+2818(of)X
+2929(a)X
+3003(function)X
+3355(should)X
+3642(in)X
+3748(general)X
+576 5024(be)N
+719(veri\256ed)X
+1065(everytime)X
+1503(before)X
+1801(it)X
+1907(is)X
+2023(called,)X
+2329(or)X
+2460(everytime)X
+2897(after)X
+3125(modules)X
+3502(are)X
+3671(added)X
+3952(or)X
+576 5176(removed.)N
+776 5356(Another)N
+1115(potential)X
+1477(hazard)X
+1758(occurs)X
+2033(when)X
+2266(a)X
+2334(dynamically)X
+2836(linked)X
+3102(routine)X
+3400(is)X
+3489(erroneous)X
+3893(and)X
+576 5508(its)N
+693(invocation)X
+1126(could)X
+1366(crash)X
+1595(the)X
+1738(executing)X
+2138(process.)X
+2499(Thus,)X
+2740(programs)X
+3128(that)X
+3298(allow)X
+3537(user)X
+3722(custom-)X
+576 5660(ization)N
+872(by)X
+1001(means)X
+1280(of)X
+1393(dynamic)X
+1758(linking)X
+2064(expose)X
+2364(themselves)X
+2826(to)X
+2935(potential)X
+3307(misuse)X
+3608(or)X
+3722(destruc-)X
+576 5812(tion.)N
+799(In)X
+904(particular,)X
+1322(privileged)X
+1737(system)X
+2028(commands)X
+2469(should)X
+2749(never)X
+2987(allow)X
+3225(user)X
+3409(modi\256cation)X
+3920(for)X
+
+23 p
+%%Page: 23 24
+5(Helvetica-Narrow)xf 5 f
+12 s 0 xH 0 xS 5 f
+1 f
+10 s
+0 32(--)N
+4323(--)X
+12 s
+2200 616(-)N
+2256(23)X
+2376(-)X
+3362(October)X
+3696(15,)X
+3840(1990)X
+576 1016(the)N
+721(same)X
+946(reason)X
+1224(that)X
+1396(privileged)X
+1814(UNIX)X
+2080(commands)X
+2524(should)X
+2807(not)X
+2957(allow)X
+3198(shell)X
+3407(escapes)X
+10 s
+3701 976(15)N
+12 s
+1016(.)Y
+3856(Oth-)X
+576 1168(erwise,)N
+877(an)X
+994(intruder)X
+1325(can)X
+1485(easily)X
+1736(gain)X
+1928(unauthorized)X
+2457(access)X
+2729(to)X
+2830(system)X
+3122(resources)X
+3510(by)X
+3631(modifying)X
+576 1320(an)N
+695(existing)X
+1029(privileged)X
+1449(command.)X
+1906(For)X
+2068(other)X
+2295(application)X
+2753(programs,)X
+3169(a)X
+3241(well-de\256ned,)X
+3775(simple)X
+576 1472(interface)N
+938(should)X
+1218(be)X
+1333(designed)X
+1699(for)X
+1835(users)X
+2056(to)X
+2155(hook-in)X
+2478(their)X
+2679(own)X
+2868(functions.)X
+
+24 p
+%%Page: 24 25
+5(Helvetica-Narrow)xf 5 f
+12 s 0 xH 0 xS 5 f
+1 f
+10 s
+0 32(--)N
+4323(--)X
+12 s
+2200 616(-)N
+2256(24)X
+2376(-)X
+3362(October)X
+3696(15,)X
+3840(1990)X
+1995 1016(CONCLUSION)N
+576 1348(This)N
+778(paper)X
+1023(describes)X
+1412(a)X
+1486(concept)X
+1817(of)X
+1928(genuine)X
+2264(dynamic)X
+2627(link)X
+2808(editing)X
+3107(and)X
+3277(the)X
+3426 0.2548(implementation)AX
+576 1500(of)N
+696(a)X
+779(working)X
+1139(dynamic)X
+1511(linker)X
+2 f
+1776(dld)X
+1 f
+1899(.)X
+1987(This)X
+2198(new)X
+2398(approach)X
+2791(of)X
+2911(dynamic)X
+3283(link)X
+3473(editing)X
+3781(allows)X
+576 1652(users)N
+801(to)X
+905(add,)X
+1097(remove,)X
+1439(or)X
+1548(modify)X
+1855(compiled)X
+2243(object)X
+2508(modules)X
+2863(of)X
+2972(a)X
+3044(program)X
+3399(while)X
+3642(it)X
+3725(is)X
+3818(being)X
+576 1804(executed.)N
+1019(As)X
+1177(a)X
+1272(result,)X
+1562(application)X
+2043(programs)X
+2458(using)X
+2718(dynamic)X
+3102(linking)X
+3427(enjoy)X
+3692(both)X
+3914(the)X
+576 1956(ef\256ciency)N
+987(of)X
+1099(executing)X
+1506(native)X
+1774(machine)X
+2133(code)X
+2347(and)X
+2518(the)X
+2668(\257exibility)X
+3075(of)X
+3187(modifying)X
+3620(their)X
+3829(func-)X
+576 2108(tionalities)N
+982(in)X
+1082(response)X
+1443(to)X
+1543(the)X
+1686(changing)X
+2064(environment.)X
+2624(A)X
+2718(large)X
+2936(number)X
+3254(of)X
+3358(new)X
+3542(applications,)X
+576 2260(such)N
+776(as)X
+880(those)X
+1107(presented,)X
+1524(are)X
+1666(thus)X
+1850(made)X
+2083(possible.)X
+2 f
+776 2440(Dld)N
+1 f
+953(has)X
+1114(been)X
+1329(implemented)X
+1866(for)X
+2011(VAX)X
+2251(machines)X
+2648(running)X
+2980(Ultrix,)X
+3267(and)X
+3440(for)X
+3586(SUN)X
+3811(3)X
+3893(and)X
+576 2592(SPARC)N
+911(workstations)X
+1434(running)X
+1765(Sun)X
+1946(Operating)X
+2363(System)X
+2678(version)X
+2993(3.4)X
+3145(or)X
+3257(4.0.)X
+3457(It)X
+3547(is)X
+3642(a)X
+3716(package)X
+576 2744(of)N
+704(library)X
+1009(functions)X
+1415(callable)X
+1764(by)X
+1908(C)X
+2020(programs;)X
+2458(it)X
+2560(requires)X
+2918(no)X
+3062(modi\256cation)X
+3598(of)X
+3727(existing)X
+576 2896(software,)N
+971(such)X
+1187(as)X
+1307(the)X
+1465(compiler)X
+1848(and)X
+2027(the)X
+2185(assembler.)X
+2657(Programs)X
+3064(using)X
+2 f
+3311(dld)X
+1 f
+3473(suffer)X
+3736(a)X
+3818(slight)X
+576 3048(overhead)N
+959(in)X
+1064(loading)X
+1383(new)X
+1573(modules)X
+1929(from)X
+2146(disk)X
+2336(and)X
+2506(performing)X
+2970(runtime)X
+3301(link)X
+3482(editing.)X
+3829(Once)X
+576 3200(these)N
+810(steps)X
+1038(are)X
+1192(completed,)X
+1654(statements)X
+2097(in)X
+2208(the)X
+2362(newly)X
+2633(added)X
+2899(routines)X
+3245(execute)X
+3576(at)X
+3681(the)X
+3834(same)X
+576 3352(speed)N
+835(as)X
+956(if)X
+1056(they)X
+1263(were)X
+1491(statically)X
+1881(linked.)X
+2 f
+2211(Dld)X
+1 f
+2396(can)X
+2571(be)X
+2703(obtained)X
+3076(free)X
+3267(of)X
+3388(charge)X
+3686(from)X
+3914(the)X
+576 3504(authors.)N
+
+25 p
+%%Page: 25 26
+5(Helvetica-Narrow)xf 5 f
+12 s 0 xH 0 xS 5 f
+1 f
+10 s
+0 32(--)N
+4323(--)X
+12 s
+2200 616(-)N
+2256(25)X
+2376(-)X
+3362(October)X
+3696(15,)X
+3840(1990)X
+1824 1016(ACKNOWLEDGMENT)N
+576 1348(Many)N
+826(thanks)X
+1103(to)X
+1204(Richard)X
+1535(Stallman)X
+1904(and)X
+2069(others)X
+2330(who)X
+2521(made)X
+2756(the)X
+2900(GNU)X
+2 f
+3133(ld)X
+1 f
+3234(available)X
+3609(to)X
+3711(the)X
+3856(pub-)X
+576 1500(lic.)N
+746(A)X
+840(number)X
+1159(of)X
+1264(functions)X
+1647(from)X
+2 f
+1859(ld)X
+1 f
+1959(are)X
+2102(modi\256ed)X
+2469(and)X
+2633(used)X
+2834(as)X
+2939(the)X
+3082(basis)X
+3298(of)X
+3402(the)X
+3544(implementa-)X
+576 1652(tion)N
+758(of)X
+2 f
+870(dld)X
+1 f
+993(.)X
+1073(Rick)X
+1287(Crawford,)X
+1711(Carole)X
+2000(McNamee,)X
+2457(Chris)X
+2697(Wee,)X
+2930(and)X
+3101(the)X
+3251(anonymous)X
+3727(referees)X
+576 1804(provided)N
+943(very)X
+1139(useful)X
+1399(comments)X
+1820(on)X
+1941(earlier)X
+2213(drafts)X
+2457(of)X
+2562(this)X
+2726(paper.)X
+3013(Various)X
+3342(people)X
+3623(around)X
+3914(the)X
+576 1956(world)N
+844(who)X
+1053(beta-tested)X
+2 f
+1515(dld)X
+1 f
+1683(have)X
+1910(provided)X
+2297(valuable)X
+2669(feedback.)X
+3110(Their)X
+3364(help)X
+3575(is)X
+3684(sincerely)X
+576 2108(appreciated.)N
+
+26 p
+%%Page: 26 27
+5(Helvetica-Narrow)xf 5 f
+12 s 0 xH 0 xS 5 f
+1 f
+10 s
+0 32(--)N
+4323(--)X
+12 s
+2200 616(-)N
+2256(26)X
+2376(-)X
+3362(October)X
+3696(15,)X
+3840(1990)X
+3 f
+576 1016(References)N
+1 f
+576 1224(1.)N
+776(L.)X
+894(L.)X
+1012(Beck,)X
+2 f
+1269(System)X
+1571(Software:)X
+2004(An)X
+2146(Introduction)X
+2663(to)X
+2774(System)X
+3077(Programming,)X
+1 f
+3675(Addison-)X
+776 1376(Wesley)N
+1089(Pub.)X
+1286(Co.,)X
+1470(Reading,)X
+1839(Mass.,)X
+2113(1985.)X
+576 1556(2.)N
+776(R.)X
+914(A.)X
+1057(Gingell,)X
+1420(M.)X
+1580(Lee,)X
+1800(X.)X
+1944(T.)X
+2078(Dang,)X
+2361(and)X
+2551(M.)X
+2711(S.)X
+2839(Weeks,)X
+3176(``Shared)X
+3558(Libraries)X
+3957(in)X
+776 1708(SunOS,'')N
+1181(in)X
+2 f
+1302(USENIX)X
+1679(Conference)X
+2169(Proceedings)X
+1 f
+2650(,)X
+2719(pp.)X
+2884(131-145,)X
+3273(USENIX,)X
+3693(Phoenix,)X
+776 1860(AZ,)N
+952(Summer)X
+1302(1987.)X
+576 2040(3.)N
+776(M.)X
+948(Sabatella,)X
+1389(``Issues)X
+1750(in)X
+1888(Shared)X
+2218(Libraries)X
+2630(Design,'')X
+3054(in)X
+2 f
+3193(USENIX)X
+3588(Conference)X
+776 2192(Proceedings)N
+1 f
+1257(,)X
+1305(pp.)X
+1449(11-23,)X
+1721(USENIX,)X
+2120(Anaheim,)X
+2521(CA,)X
+2702(June)X
+2902(1990.)X
+576 2372(4.)N
+776(AT&T,)X
+2 f
+1117(ANSI)X
+1375(C)X
+1494(&)X
+1624(Programming)X
+2217(Support)X
+2576(Tools,)X
+1 f
+2869(UNIX)X
+3164(System)X
+3503(V)X
+3628(Release)X
+3984(4)X
+776 2524(Programmer's)N
+1350(Guide,)X
+1633(Prentice-Hall,)X
+2195(Englewood)X
+2657(Cliffs,)X
+2924(NJ,)X
+3078(1990.)X
+576 2704(5.)N
+776(J.)X
+862(Hobbs,)X
+1162(``Installed)X
+1584(Shareable)X
+1990(Images,'')X
+2 f
+2382(Dec.)X
+2587(Professional)X
+1 f
+3073(,)X
+3123(vol.)X
+3296(6,)X
+3394(no.)X
+3540(4,)X
+3638(pp.)X
+3784(78-82,)X
+776 2856(April)N
+1003(1987.)X
+576 3036(6.)N
+776(G.)X
+904(Letwin,)X
+1236(``Dynamic)X
+1688(Linking)X
+2028(in)X
+2138(OS/2,'')X
+2 f
+2458(Byte)X
+1 f
+2630(,)X
+2690(vol.)X
+2873(13,)X
+3029(no.)X
+3185(4,)X
+3293(pp.)X
+3449(273-280,)X
+3829(April)X
+776 3188(1988.)N
+576 3368(7.)N
+776(R.)X
+896(C.)X
+1016(Daley)X
+1278(and)X
+1449(J.)X
+1542(B.)X
+1662(Dennis,)X
+1990(``Virtual)X
+2359(Memory,)X
+2746(Processes,)X
+3175(and)X
+3347(Sharing)X
+3679(in)X
+3787(MUL-)X
+776 3520(TICS,'')N
+2 f
+1096(Communications)X
+1771(of)X
+1870(the)X
+2012(ACM)X
+1 f
+2215(,)X
+2263(vol.)X
+2434(11,)X
+2578(no.)X
+2722(5,)X
+2818(pp.)X
+2962(306-312,)X
+3330(May)X
+3530(1968.)X
+576 3700(8.)N
+776(M.)X
+937(K.)X
+1082(Crowe,)X
+1414(``Dynamic)X
+1883(Compilation)X
+2417(in)X
+2545(the)X
+2716(Unix)X
+2961(Environment,'')X
+2 f
+3605(Software\320)X
+776 3852(Practice)N
+1127(and)X
+1295(Experience)X
+1 f
+1729(,)X
+1777(vol.)X
+1948(17,)X
+2092(no.)X
+2236(7,)X
+2332(pp.)X
+2476(455-467,)X
+2844(July)X
+3028(1987.)X
+576 4032(9.)N
+776(W.)X
+926(Joy)X
+1094(and)X
+1268(M.)X
+1412(Horton,)X
+2 f
+1743(An)X
+1885(Introduction)X
+2401(to)X
+2511(Display)X
+2845(Editing)X
+3164(with)X
+3365(Vi,)X
+1 f
+3510(University)X
+3952(of)X
+776 4184(California)N
+1191(at)X
+1285(Berkeley,)X
+1681(Computer)X
+2090(Science)X
+2414(Division,)X
+2793(May)X
+2993(1986.)X
+576 4364(10.)N
+776(S.)X
+883(Kaufer,)X
+1204(R.)X
+1322(Lopez,)X
+1617(and)X
+1786(S.)X
+1893(Pratap,)X
+2193(``Saber-C\320An)X
+2815(Interpreter-based)X
+3503(Programming)X
+776 4516(Environment)N
+1313(for)X
+1459(the)X
+1611(C)X
+1709(Language,'')X
+2211(in)X
+2 f
+2320(USENIX)X
+2685(Conference)X
+3163(Proceedings)X
+1 f
+3644(,)X
+3702(pp.)X
+3856(161-)X
+776 4668(171,)N
+968(USENIX,)X
+1367(San)X
+1535(Francisco,)X
+1957(Summer)X
+2307(1988.)X
+576 4848(11.)N
+776(B.)X
+891(B.)X
+1006(Chase,)X
+1292(``Selective)X
+1737(Interpretation)X
+2289(as)X
+2396(a)X
+2467(Technique)X
+2902(for)X
+3042(Debugging)X
+3497(Computation-)X
+776 5000(ally)N
+947(Intensive)X
+1326(Programs,'')X
+2 f
+1808(Proc.)X
+2045(of)X
+2146(the)X
+2290(SIGPLAN)X
+2700(87)X
+2821(Symposium)X
+3283(on)X
+3404(Interpreters)X
+3888(and)X
+776 5152(Interpretive)N
+1255(Techniques)X
+1 f
+1693(,)X
+1741(pp.)X
+1885(113-124,)X
+2253(St.)X
+2381(Paul,)X
+2600(MN,)X
+2802(July)X
+2986(87.)X
+576 5332(12.)N
+776(R.)X
+903(A.)X
+1035(Olsson,)X
+1364(R.)X
+1491(H.)X
+1623(Crawford,)X
+2054(and)X
+2233(W.)X
+2388(W.)X
+2543(Ho,)X
+2724(``Dalek:)X
+3109(a)X
+3192(GNU,)X
+3463(improved)X
+3872(pro-)X
+776 5484(grammable)N
+1290(debugger,'')X
+1816(in)X
+2 f
+1971(USENIX)X
+2382(Conference)X
+2905(Proceedings)X
+1 f
+3386(,)X
+3489(pp.)X
+3688(221-231,)X
+776 5636(USENIX,)N
+1175(Anaheim,)X
+1576(CA,)X
+1757(June)X
+1957(1990.)X
+
+27 p
+%%Page: 27 28
+5(Helvetica-Narrow)xf 5 f
+12 s 0 xH 0 xS 5 f
+1 f
+10 s
+0 32(--)N
+4323(--)X
+12 s
+2200 616(-)N
+2256(27)X
+2376(-)X
+3362(October)X
+3696(15,)X
+3840(1990)X
+576 1016(13.)N
+776(R.)X
+898(M.)X
+1042(Stallman,)X
+2 f
+1444(GDB)X
+1676(Manual)X
+2010(\(The)X
+2221(GNU)X
+2458(Source-Level)X
+3001(Debugger\),)X
+3476(Third)X
+3724(Edition,)X
+1 f
+776 1168(Free)N
+971(Software)X
+1342(Foundation,)X
+1828(Cambridge,)X
+2304(MA,)X
+2506(Jan.)X
+2682(1989.)X
+576 1348(14.)N
+776(Z.)X
+890(Aral)X
+1092(and)X
+1262(I.)X
+1349(Gertner,)X
+1698(``High-Level)X
+2237(Debugging)X
+2695(in)X
+2802(Parasight,'')X
+2 f
+3280(ACM)X
+3515(Workshop)X
+3936(on)X
+776 1500(Parallel)N
+1116(and)X
+1284(Distributed)X
+1746(Debugging)X
+1 f
+2173(,)X
+2221(pp.)X
+2365(151-162,)X
+2733(Madison,)X
+3117(WI,)X
+3288(May)X
+3488(1988.)X
+576 1680(15.)N
+776(P.)X
+894(H.)X
+1028(Wood)X
+1304(and)X
+1484(S.)X
+1602(G.)X
+1736(Kochan,)X
+2 f
+2101(UNIX)X
+2367(System)X
+2676(Security,)X
+1 f
+3058(Hayden)X
+3399(Book)X
+3649(Co.,)X
+3851(Has-)X
+776 1832(brouck)N
+1067(Heights,)X
+1414(NJ,)X
+1568(1985.)X
+10 s
+0 6360(--)N
+4323(--)X
+
+28 p
+%%Trailer
+xt
+
+xs
diff -rup --new-file baseline/fsf/dld/doc/dld.ps amiga/fsf/dld/doc/dld.ps
--- baseline/fsf/dld/doc/dld.ps Wed Dec 31 17:00:00 1969
+++ amiga/fsf/dld/doc/dld.ps Sat Sep 28 00:00:00 1996
@@ -0,0 +1,1206 @@
+%!PS-Adobe-2.0
+%%Creator: dvips 5.45 Copyright 1986-91 Radical Eye Software
+%%Title: dld.dvi
+%%Pages: 9 1
+%%BoundingBox: 0 0 612 792
+%%EndComments
+%%BeginProcSet: tex.pro
+/TeXDict 200 dict def TeXDict begin /N /def load def /B{bind def}N /S /exch
+load def /X{S N}B /TR /translate load N /isls false N /vsize 10 N /@rigin{
+isls{[0 1 -1 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale
+Resolution VResolution vsize neg mul TR matrix currentmatrix dup dup 4 get
+round 4 exch put dup dup 5 get round 5 exch put setmatrix}N /@letter{/vsize 10
+N}B /@landscape{/isls true N /vsize -1 N}B /@a4{/vsize 10.6929133858 N}B /@a3{
+/vsize 15.5531 N}B /@ledger{/vsize 16 N}B /@legal{/vsize 13 N}B /@manualfeed{
+statusdict /manualfeed true put}B /@copies{/#copies X}B /FMat[1 0 0 -1 0 0]N
+/FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{/nn 8 dict N nn begin
+/FontType 3 N /FontMatrix fntrx N /FontBBox FBB N string /base X array
+/BitMaps X /BuildChar{CharBuilder}N /Encoding IE N end dup{/foo setfont}2
+array copy cvx N load 0 nn put /ctr 0 N[}B /df{/sf 1 N /fntrx FMat N df-tail}
+B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]N df-tail}B /E{pop nn dup definefont
+setfont}B /ch-width{ch-data dup length 5 sub get}B /ch-height{ch-data dup
+length 4 sub get}B /ch-xoff{128 ch-data dup length 3 sub get sub}B /ch-yoff{
+ch-data dup length 2 sub get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B
+/ch-image{ch-data dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0
+N /rw 0 N /rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S
+dup /base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx 0
+ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff setcachedevice
+ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff .1 add]{ch-image}
+imagemask restore}B /D{/cc X dup type /stringtype ne{]}if nn /base get cc ctr
+put nn /BitMaps get S ctr S sf 1 ne{dup dup length 1 sub dup 2 index S get sf
+div put}if put /ctr ctr 1 add N}B /I{cc 1 add D}B /bop{userdict /bop-hook
+known{bop-hook}if /SI save N @rigin 0 0 moveto}N /eop{clear SI restore
+showpage userdict /eop-hook known{eop-hook}if}N /@start{userdict /start-hook
+known{start-hook}if /VResolution X /Resolution X 1000 div /DVImag X /IE 256
+array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for}N /p /show load N
+/RMat[1 0 0 -1 0 0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X
+/rulex X V}B /V statusdict begin /product where{pop product 0 7 getinterval
+(Display)eq}{false}ifelse end{{gsave TR -.1 -.1 TR 1 1 scale rulex ruley false
+RMat{BDot}imagemask grestore}}{{gsave TR -.1 -.1 TR rulex ruley scale 1 1
+false RMat{BDot}imagemask grestore}}ifelse B /a{moveto}B /delta 0 N /tail{dup
+/delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}B /c{-4 M}B /d{-3 M}
+B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{3 M}B /k{4 M}B /w{0
+rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w}B /q{p 1 w}B /r{p 2 w}
+B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{3 2 roll p a}B /bos{/SS save N}B
+/eos{clear SS restore}B end
+%%EndProcSet
+TeXDict begin 1000 300 300 @start /Fa 5 117 df<387CFEFEFE7C38000000000000387C
+FEFEFE7C3807147D930D>58 D<FFC007FEFFC007FE0FE000600FF000600DF800600DF800600CFC
+00600C7E00600C7E00600C3F00600C1F80600C0FC0600C0FC0600C07E0600C03F0600C03F8600C
+01F8600C00FC600C007E600C007E600C003F600C001FE00C000FE00C000FE00C0007E00C0003E0
+0C0003E00C0001E00C0000E0FFC00060FFC000601F1F7E9E24>78 D<03F8000FFE001F0F003E07
+803C07807C07C07C07C0FC07C0FFFFC0FFFFC0FC0000FC0000FC00007C00007C00003E00C03E00
+C01F038007FF0001FC0012147F9315>101 D<01F8000FFF001F0F803E07C07C03E07C03E07C03
+E0FC03F0FC03F0FC03F0FC03F0FC03F0FC03F0FC03F07C03E07C03E03E07C01F0F800FFF0003FC
+0014147F9317>111 D<0300030003000300070007000F000F003F00FFF8FFF81F001F001F001F
+001F001F001F001F001F001F001F181F181F181F181F180F3007F003E00D1D7F9C12>116
+D E /Fb 1 59 df<60F0F06004047C830C>58 D E /Fc 27 121 df<3C7EFFFFFFFF7E3C08087D
+870F>46 D<00380000780001F800FFF800FFF800FFF80003F80003F80003F80003F80003F80003
+F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003
+F80003F80003F80003F80003F80003F80003F80003F8007FFFC07FFFC07FFFC012237CA21B>49
+D<01FC0003FF0007FF800F0FC01F0FE03F87F03FC7F03FC7F03FC7F01F87F00F07E0000FE0000F
+C0000F80001F0001FE0001FF80000FC00007E00007F00003F80003F80803FC3E03FC7F03FCFF83
+FCFF83FCFF83FCFF83F87F03F87E07F03E0FE01FFFC00FFF8001FC0016237EA21B>51
+D<FFFFFFF0FFFFFFF0FFFFFFF007F807F007F801F807F800F807F8007807F8003807F8003807F8
+003807F8383807F8381C07F8381C07F8381C07F8780007F8F80007FFF80007FFF80007FFF80007
+F8F80007F8780007F8380007F8380E07F8380E07F8381C07F8001C07F8001C07F8001C07F8003C
+07F8003807F8007807F8007807F801F807F807F8FFFFFFF0FFFFFFF0FFFFFFF01F257EA424>69
+D<FFFFFFE0FFFFFFE0FFFFFFE007F80FE007F803F007F801F007F800F007F8007007F8007007F8
+007007F8007007F8703807F8703807F8703807F8700007F8F00007F9F00007FFF00007FFF00007
+FFF00007F9F00007F8F00007F8700007F8700007F8700007F8700007F8000007F8000007F80000
+07F8000007F8000007F8000007F8000007F80000FFFFE000FFFFE000FFFFE0001D257EA422>I<
+FFFFC0FFFFC0FFFFC007F80007F80007F80007F80007F80007F80007F80007F80007F80007F800
+07F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F800
+07F80007F80007F80007F80007F80007F80007F80007F800FFFFC0FFFFC0FFFFC012257EA416>
+73 D<FFFFE000FFFFE000FFFFE00007F8000007F8000007F8000007F8000007F8000007F80000
+07F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F800
+0007F8000007F8000007F8000007F8007007F8007007F8007007F800E007F800E007F800E007F8
+00E007F801E007F803E007F803E007F807E007F81FC0FFFFFFC0FFFFFFC0FFFFFFC01C257EA421
+>76 D<FFFFFE00FFFFFFC0FFFFFFE007F80FF007F803F807F801FC07F801FC07F801FE07F801FE
+07F801FE07F801FE07F801FE07F801FE07F801FE07F801FC07F803FC07F803F807F80FF007FFFF
+E007FFFF8007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8
+000007F8000007F8000007F8000007F8000007F80000FFFFC000FFFFC000FFFFC0001F257EA425
+>80 D<FFFFC0FFF8FFFFC0FFF8FFFFC0FFF807F800070007F800070007F800070007F800070007
+F800070007F800070007F800070007F800070007F800070007F800070007F800070007F8000700
+07F800070007F800070007F800070007F800070007F800070007F800070007F800070007F80007
+0007F800070007F800070007F800070007F800070007F800070003F8000E0003F8000E0001FC00
+0E0001FC001C0000FE003800007F81F000001FFFE000000FFFC0000001FE000025257EA42A>85
+D<07FC001FFF003E0F807F07C07F03E07F03F03E03F01C03F00003F0003FF003FFF00FF3F01F83
+F03E03F07E03F0FC03F0FC03F0FC03F0FC03F0FC07F07E07F03E0DFF1FF8FF03F07F18187E971B
+>97 D<FFC00000FFC00000FFC000000FC000000FC000000FC000000FC000000FC000000FC00000
+0FC000000FC000000FC000000FC000000FC000000FCFC0000FFFF0000FF87C000FE03E000FC03F
+000FC01F000FC01F800FC01F800FC01FC00FC01FC00FC01FC00FC01FC00FC01FC00FC01FC00FC0
+1FC00FC01FC00FC01F800FC01F800FC03F000FC03F000FE03E000FF0FC000F3FF0000E0FC0001A
+267FA51E>I<00FE0003FF800F87C01F0FE03F0FE03F0FE07E07C07E0380FE0000FE0000FE0000
+FE0000FE0000FE0000FE0000FE00007E00007E00E03F00E03F01C01F01C00F878003FF0000FC00
+13187E9718>I<00FC0007FF000F87801F03C03F03E03E03E07E01E07E01F0FE01F0FE01F0FFFF
+F0FFFFF0FE0000FE0000FE0000FE00007E00007E00703F00703F00E01F00E00F83C003FF0000FE
+0014187E9719>101 D<01FC1C07FF7E0F07FF1F07DF3E03EE7E03F47E03F07E03F07E03F07E03
+F07E03F03E03E01F07C00F07801FFF0039FC003800003800003800003C00003FFFC03FFFF01FFF
+F80FFFFC1FFFFE7C007E78003FF8001FF8001FF8001FF8001F7C003E3C003C1F00F80FFFF001FF
+8018247F971B>103 D<FFC00000FFC00000FFC000000FC000000FC000000FC000000FC000000F
+C000000FC000000FC000000FC000000FC000000FC000000FC000000FC3E0000FCFF8000FDC7C00
+0FF07C000FE07E000FE07E000FE07E000FC07E000FC07E000FC07E000FC07E000FC07E000FC07E
+000FC07E000FC07E000FC07E000FC07E000FC07E000FC07E000FC07E000FC07E00FFFCFFE0FFFC
+FFE0FFFCFFE01B267EA51E>I<0F001F803FC03FC03FC03FC01F800F0000000000000000000000
+00000000FFC0FFC0FFC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00F
+C00FC00FC00FC0FFF8FFF8FFF80D277FA60F>I<FFC00000FFC00000FFC000000FC000000FC000
+000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC000000FC3
+FF800FC3FF800FC3FF800FC070000FC0E0000FC1C0000FC380000FC700000FCE00000FDE00000F
+FF00000FFF80000FEF80000FCFC0000F87E0000F83E0000F83F0000F81F0000F80F8000F80FC00
+0F807C00FFF1FFC0FFF1FFC0FFF1FFC01A267FA51D>107 D<FFC0FFC0FFC00FC00FC00FC00FC0
+0FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00F
+C00FC00FC00FC00FC00FC00FC00FC00FC0FFFCFFFCFFFC0E267FA50F>I<FF83F00FC000FF8FFC
+3FF000FF9C3E70F8000FB03EC0F8000FB03FC0FC000FE03F80FC000FE03F80FC000FC03F00FC00
+0FC03F00FC000FC03F00FC000FC03F00FC000FC03F00FC000FC03F00FC000FC03F00FC000FC03F
+00FC000FC03F00FC000FC03F00FC000FC03F00FC000FC03F00FC000FC03F00FC000FC03F00FC00
+FFFCFFF3FFC0FFFCFFF3FFC0FFFCFFF3FFC02A187E972D>I<FF83E000FF8FF800FF9C7C000FB0
+7C000FE07E000FE07E000FE07E000FC07E000FC07E000FC07E000FC07E000FC07E000FC07E000F
+C07E000FC07E000FC07E000FC07E000FC07E000FC07E000FC07E000FC07E00FFFCFFE0FFFCFFE0
+FFFCFFE01B187E971E>I<00FC0007FF800F87C01F03E03E01F03E01F07E01F87E01F8FE01FCFE
+01FCFE01FCFE01FCFE01FCFE01FCFE01FCFE01FC7E01F87E01F87E01F83F03F01F03E00F87C007
+FF8001FE0016187E971B>I<FFCFC000FFFFF000FFF87C000FE07E000FC03F000FC03F000FC03F
+800FC01F800FC01FC00FC01FC00FC01FC00FC01FC00FC01FC00FC01FC00FC01FC00FC01FC00FC0
+1F800FC03F800FC03F000FC03F000FE07E000FF0FC000FFFF0000FCFC0000FC000000FC000000F
+C000000FC000000FC000000FC000000FC000000FC00000FFFC0000FFFC0000FFFC00001A237F97
+1E>I<FF9F00FFBFC0FFE3E00FE7F00FE7F00FC7F00FC3E00FC1C00FC0000FC0000FC0000FC000
+0FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC000FFFE00FFFE00FFFE0014187F
+9717>114 D<07F3001FFF00381F00700F00F00700F00700F00700F80000FF00007FF0007FFC00
+3FFE000FFF0003FF00003F80000F80600780E00780E00780F00700F00700FC1E00FFFC00C7F000
+11187E9716>I<01C001C001C001C001C003C003C003C007C007C00FC03FFEFFFEFFFE0FC00FC0
+0FC00FC00FC00FC00FC00FC00FC00FC00FC00FC70FC70FC70FC70FC70FC707C707EE03FC00F810
+237FA215>I<FFC7FE00FFC7FE00FFC7FE000FC07E000FC07E000FC07E000FC07E000FC07E000F
+C07E000FC07E000FC07E000FC07E000FC07E000FC07E000FC07E000FC07E000FC07E000FC07E00
+0FC07E000FC0FE0007C0FE0007C1FFE003FF7FE000FE7FE01B187E971E>I<FFF1FF80FFF1FF80
+FFF1FF8007C0700007E0F00003F1E00001F1C00001FBC00000FF8000007F0000007E0000003F00
+00003F0000003F8000007FC00000F7C00000E7E00001E3F00003C1F0000781F8000700FC00FFE3
+FFC0FFE3FFC0FFE3FFC01A187F971D>120 D E /Fd 61 126 df<70F8F8F8F8F8F8F8F8F8F8F8
+F8F8F8F8F870000000000070F8F8F870051C779B18>33 D<4010E038F078E038E038E038E038E0
+38E038E038E038E038E03860300D0E7B9C18>I<007000F001E003C007800F001E001C00380038
+007000700070007000E000E000E000E000E000E000E000E0007000700070007000380038001C00
+1E000F00078003C001F000F000700C24799F18>40 D<6000F00078003C001E000F000780038001
+C001C000E000E000E000E00070007000700070007000700070007000E000E000E000E001C001C0
+038007800F001E003C007800F00060000C247C9F18>I<01C00001C00001C00001C000C1C180F1
+C780F9CF807FFF001FFC0007F00007F0001FFC007FFF00F9CF80F1C780C1C18001C00001C00001
+C00001C00011147D9718>I<1C3E7E7F3F1F070E1E7CF860080C788518>44
+D<3078FCFC78300606778518>46 D<000300000780000780000F80000F00001F00001E00001E00
+003E00003C00007C0000780000780000F80000F00001F00001E00003E00003C00003C00007C000
+0780000F80000F00000F00001F00001E00003E00003C00003C00007C0000780000F80000F00000
+F0000060000011247D9F18>I<01F00007FC000FFE001F1F001C07003803807803C07001C07001
+C0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0F001E07001C07001C07803
+C03803801C07001F1F000FFE0007FC0001F000131C7E9B18>I<183C7E7E3C1800000000000000
+00183C7E7E3E1E0E1C3C78F060071A789318>59 D<7FFFC0FFFFE0FFFFE0FFFFE0000000000000
+000000000000FFFFE0FFFFE0FFFFE07FFFC0130C7E9318>61 D<00700000F80000F80000D80000
+D80001DC0001DC0001DC00018C00038E00038E00038E00038E0003060007070007070007070007
+07000FFF800FFF800FFF800E03800E03801C01C01C01C07F07F0FF8FF87F07F0151C7F9B18>65
+D<FFFC00FFFF00FFFF801C03C01C01C01C00E01C00E01C00E01C00E01C01E01C01C01C07C01FFF
+801FFF001FFFC01C03C01C00E01C00F01C00701C00701C00701C00701C00F01C00E01C03E0FFFF
+C0FFFF80FFFE00141C7F9B18>I<00F8E003FEE007FFE00F07E01E03E03C01E03800E07000E070
+00E0700000E00000E00000E00000E00000E00000E00000E00000E000007000007000E07000E038
+00E03C00E01E01C00F07C007FF8003FE0000F800131C7E9B18>I<7FF800FFFE007FFF001C0F80
+1C03C01C03C01C01E01C00E01C00E01C00F01C00701C00701C00701C00701C00701C00701C0070
+1C00701C00F01C00E01C00E01C01E01C01C01C03C01C0F807FFF00FFFE007FF800141C7F9B18>
+I<FFFFF0FFFFF0FFFFF01C00701C00701C00701C00701C00001C00001C0E001C0E001C0E001FFE
+001FFE001FFE001C0E001C0E001C0E001C00001C00001C00381C00381C00381C00381C0038FFFF
+F8FFFFF8FFFFF8151C7F9B18>I<FFFFE0FFFFE0FFFFE01C00E01C00E01C00E01C00E01C00001C
+00001C1C001C1C001C1C001FFC001FFC001FFC001C1C001C1C001C1C001C00001C00001C00001C
+00001C00001C00001C0000FFC000FFC000FFC000131C7E9B18>I<01F1C003FDC00FFFC01F0FC0
+1C03C03803C03801C07001C07001C0700000E00000E00000E00000E00000E00000E00FF0E01FF0
+E00FF07001C07001C07003C03803C03803C01C07C01F0FC00FFFC003FDC001F1C0141C7E9B18>
+I<7F07F0FF8FF87F07F01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01FFF
+C01FFFC01FFFC01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C07F07
+F0FF8FF87F07F0151C7F9B18>I<7FFF00FFFF807FFF0001C00001C00001C00001C00001C00001
+C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001
+C00001C00001C00001C0007FFF00FFFF807FFF00111C7D9B18>I<01FFC003FFC001FFC0000E00
+000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00
+000E00000E00000E00000E00000E00F00E00F00E00F03C007FFC003FF0000FC000121C7D9B18>
+I<7FE000FFE0007FE0000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00
+000E00000E00000E00000E00000E00000E00000E00000E00700E00700E00700E00700E00707FFF
+F0FFFFF07FFFF0141C7F9B18>76 D<FC01F8FE03F8FE03F83B06E03B06E03B06E03B06E03B8EE0
+3B8EE0398CE0398CE039DCE039DCE039DCE038D8E038D8E038F8E03870E03870E03800E03800E0
+3800E03800E03800E03800E0FE03F8FE03F8FE03F8151C7F9B18>I<7E07F0FF0FF87F07F01D81
+C01D81C01D81C01DC1C01CC1C01CC1C01CE1C01CE1C01CE1C01C61C01C71C01C71C01C31C01C39
+C01C39C01C39C01C19C01C19C01C1DC01C0DC01C0DC01C0DC07F07C0FF87C07F03C0151C7F9B18
+>I<0FF8003FFE007FFF00780F00700700F00780E00380E00380E00380E00380E00380E00380E0
+0380E00380E00380E00380E00380E00380E00380E00380E00380E00380F00780700700780F007F
+FF003FFE000FF800111C7D9B18>I<FFFE00FFFF80FFFFC01C03C01C01E01C00E01C00701C0070
+1C00701C00701C00701C00E01C01E01C03C01FFFC01FFF801FFE001C00001C00001C00001C0000
+1C00001C00001C00001C0000FF8000FF8000FF8000141C7F9B18>I<7FF800FFFE007FFF001C0F
+801C03801C03C01C01C01C01C01C01C01C03C01C03801C0F801FFF001FFE001FFE001C0F001C07
+001C03801C03801C03801C03801C03801C039C1C039C1C039C7F01F8FF81F87F00F0161C7F9B18
+>82 D<03F3801FFF803FFF807C0F80700780E00380E00380E00380E000007000007800003F0000
+1FF00007FE0000FF00000F800003C00001C00000E00000E06000E0E000E0E001E0F001C0F80780
+FFFF80FFFE00E7F800131C7E9B18>I<7FFFF8FFFFF8FFFFF8E07038E07038E07038E070380070
+000070000070000070000070000070000070000070000070000070000070000070000070000070
+0000700000700000700000700007FF0007FF0007FF00151C7F9B18>I<FF83FEFF83FEFF83FE1C
+00701C00701C00701C00701C00701C00701C00701C00701C00701C00701C00701C00701C00701C
+00701C00701C00701C00701C00701C00700E00E00F01E00783C003FF8001FF00007C00171C809B
+18>I<7F8FE07F9FE07F8FE00E07000F0700070E00078E00039C0003DC0001F80001F80000F000
+00F00000700000F00000F80001F80001DC00039E00038E00070F000707000E07800E03801E03C0
+7F07F0FF8FF87F07F0151C7F9B18>88 D<FF07F8FF07F8FF07F81C01C01E03C00E03800F078007
+0700070700038E00038E0001DC0001DC0001DC0000F80000F80000700000700000700000700000
+700000700000700000700000700001FC0003FE0001FC00151C7F9B18>I<FFF8FFF8FFF8E000E0
+00E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000
+E000E000E000E000E000E000E000E000E000FFF8FFF8FFF80D24779F18>91
+D<FFF8FFF8FFF80038003800380038003800380038003800380038003800380038003800380038
+00380038003800380038003800380038003800380038003800380038FFF8FFF8FFF80D247F9F18
+>93 D<7FFF00FFFF80FFFF807FFF0011047D7F18>95 D<1FE0003FF8007FFC00781E00300E0000
+070000070000FF0007FF001FFF007F0700780700E00700E00700E00700F00F00781F003FFFF01F
+FBF007E1F014147D9318>97 D<7E0000FE00007E00000E00000E00000E00000E00000E00000E3E
+000EFF800FFFC00FC1E00F80E00F00700E00700E00380E00380E00380E00380E00380E00380F00
+700F00700F80E00FC1E00FFFC00EFF80063E00151C809B18>I<01FE0007FF001FFF803E078038
+0300700000700000E00000E00000E00000E00000E00000E000007000007001C03801C03E03C01F
+FF8007FF0001FC0012147D9318>I<001F80003F80001F80000380000380000380000380000380
+03E3800FFB801FFF803C1F80380F80700780700380E00380E00380E00380E00380E00380E00380
+700780700780380F803C1F801FFFF00FFBF803E3F0151C7E9B18>I<01F00007FC001FFE003E0F
+00380780700380700380E001C0E001C0FFFFC0FFFFC0FFFFC0E000007000007001C03801C03E03
+C01FFF8007FF0001FC0012147D9318>I<001F80007FC000FFE000E1E001C0C001C00001C00001
+C0007FFFC0FFFFC0FFFFC001C00001C00001C00001C00001C00001C00001C00001C00001C00001
+C00001C00001C00001C00001C0007FFF007FFF007FFF00131C7F9B18>I<01E1F007FFF80FFFF8
+1E1E301C0E003807003807003807003807003807001C0E001E1E001FFC001FF80039E000380000
+1C00001FFE001FFFC03FFFE07801F0700070E00038E00038E00038E000387800F07E03F01FFFC0
+0FFF8001FC00151F7F9318>I<7E0000FE00007E00000E00000E00000E00000E00000E00000E3E
+000EFF800FFFC00FC1C00F80E00F00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00
+E00E00E00E00E00E00E07FC3FCFFE7FE7FC3FC171C809B18>I<03800007C00007C00007C00003
+80000000000000000000000000007FC000FFC0007FC00001C00001C00001C00001C00001C00001
+C00001C00001C00001C00001C00001C00001C00001C00001C000FFFF00FFFF80FFFF00111D7C9C
+18>I<0038007C007C007C003800000000000000000FFC1FFC0FFC001C001C001C001C001C001C
+001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C6038F078FFF07F
+E03F800E277E9C18>I<FE0000FE0000FE00000E00000E00000E00000E00000E00000E3FF00E7F
+F00E3FF00E07800E0F000E1E000E3C000E78000EF0000FF8000FFC000F9C000F0E000E0F000E07
+000E03800E03C0FFC7F8FFC7F8FFC7F8151C7F9B18>I<7FE000FFE0007FE00000E00000E00000
+E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000
+E00000E00000E00000E00000E00000E00000E0007FFFC0FFFFE07FFFC0131C7E9B18>I<7CE0E0
+00FFFBF8007FFFF8001F1F1C001E1E1C001E1E1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C
+1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C001C1C1C007F1F1F00FFBFBF807F1F1F0019
+14819318>I<7E3E00FEFF807FFFC00FC1C00F80E00F00E00E00E00E00E00E00E00E00E00E00E0
+0E00E00E00E00E00E00E00E00E00E00E00E07FC3FCFFE7FE7FC3FC1714809318>I<01F0000FFE
+001FFF003E0F803803807001C07001C0E000E0E000E0E000E0E000E0E000E0F001E07001C07803
+C03C07803E0F801FFF000FFE0001F00013147E9318>I<7E3E00FEFF807FFFC00FC1E00F80E00F
+00700E00700E00380E00380E00380E00380E00380E00380F00700F00700F80E00FC1E00FFFC00E
+FF800E3E000E00000E00000E00000E00000E00000E00000E00007FC000FFE0007FC000151E8093
+18>I<7F87E0FF9FF07FBFF803F87803F03003E00003C00003C000038000038000038000038000
+0380000380000380000380000380007FFE00FFFF007FFE0015147F9318>114
+D<07F7003FFF007FFF00780F00E00700E00700E007007C00007FE0001FFC0003FE00001F006007
+80E00380E00380F00380F80F00FFFF00FFFC00E7F00011147D9318>I<01800003800003800003
+80000380007FFFC0FFFFC0FFFFC003800003800003800003800003800003800003800003800003
+80000380400380E00380E00380E001C1C001FFC000FF80003E0013197F9818>I<7E07E0FE0FE0
+7E07E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E0
+0E01E00F03E007FFFC03FFFE01FCFC1714809318>I<7F8FF0FF8FF87F8FF01E03C00E03800E03
+800E0380070700070700070700038E00038E00038E00038E0001DC0001DC0001DC0000F80000F8
+0000700015147F9318>I<FF8FF8FF8FF8FF8FF83800E03800E03800E01C01C01C01C01C71C01C
+F9C01CF9C01CD9C01CD9C00DDD800DDD800DDD800D8D800F8F800F8F8007070015147F9318>I<
+7F8FF07F9FF07F8FF0070700078E00039E0001DC0001F80000F80000700000F00000F80001DC00
+039E00038E000707000F07807F8FF0FF8FF87F8FF015147F9318>I<7F8FF0FF8FF87F8FF00E01
+C00E03800E0380070380070700070700038700038600038E0001CE0001CE0000CC0000CC0000DC
+0000780000780000780000700000700000700000F00000E00079E0007BC0007F80003F00001E00
+00151E7F9318>I<0007E0001FE0007FE000780000E00000E00000E00000E00000E00000E00000
+E00000E00000E00000E00000E00001E0007FC000FF8000FF80007FC00001E00000E00000E00000
+E00000E00000E00000E00000E00000E00000E00000E00000E000007800007FE0001FE00007E013
+247E9F18>123 D<7C0000FF0000FFC00003C00000E00000E00000E00000E00000E00000E00000
+E00000E00000E00000E00000E00000F000007FC0003FE0003FE0007FC000F00000E00000E00000
+E00000E00000E00000E00000E00000E00000E00000E00000E00003C000FFC000FF00007C000013
+247E9F18>125 D E /Fe 48 123 df<0001FF0000001FFFC000007F80F00000FC00F80001F801
+F80003F803FC0007F003FC0007F003FC0007F003FC0007F001F80007F000F00007F000000007F0
+00000007F000000007F0000000FFFFFFFC00FFFFFFFC00FFFFFFFC0007F001FC0007F001FC0007
+F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC00
+07F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC
+0007F001FC0007F001FC0007F001FC007FFF1FFFC07FFF1FFFC07FFF1FFFC0222A7FA926>12
+D<1C003E007F00FF80FF80FF807F003E001C0009097B8813>46 D<003F800001FFF00007E0FC00
+0FC07E001F803F001F803F003F001F803F001F807F001FC07F001FC07F001FC07F001FC0FF001F
+E0FF001FE0FF001FE0FF001FE0FF001FE0FF001FE0FF001FE0FF001FE0FF001FE0FF001FE0FF00
+1FE0FF001FE0FF001FE0FF001FE0FF001FE07F001FC07F001FC07F001FC07F001FC03F001F803F
+001F801F803F001F803F000FC07E0007E0FC0001FFF000003F80001B277DA622>48
+D<000E00001E00007E0007FE00FFFE00FFFE00F8FE0000FE0000FE0000FE0000FE0000FE0000FE
+0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE
+0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE007FFFFE7FFFFE7FFF
+FE17277BA622>I<00FF800003FFF0000FFFFC001F03FE003800FF007C007F80FE003FC0FF003F
+C0FF003FE0FF001FE0FF001FE07E001FE03C003FE000003FE000003FC000003FC000007F800000
+7F000000FE000000FC000001F8000003F0000003E00000078000000F0000001E0000003C00E000
+7000E000E000E001C001C0038001C0070001C00FFFFFC01FFFFFC03FFFFFC07FFFFFC0FFFFFF80
+FFFFFF80FFFFFF801B277DA622>I<007F800003FFF00007FFFC000F81FE001F00FF003F80FF00
+3F807F803F807F803F807F801F807F800F007F800000FF000000FF000000FE000001FC000001F8
+000007F00000FFC00000FFF0000001FC0000007E0000007F0000007F8000003FC000003FC00000
+3FE000003FE03C003FE07E003FE0FF003FE0FF003FE0FF003FC0FF007FC07E007F807C007F003F
+01FE001FFFFC0007FFF00000FF80001B277DA622>I<00000E0000001E0000003E0000007E0000
+00FE000000FE000001FE000003FE0000077E00000E7E00000E7E00001C7E0000387E0000707E00
+00E07E0000E07E0001C07E0003807E0007007E000E007E000E007E001C007E0038007E0070007E
+00E0007E00FFFFFFF8FFFFFFF8FFFFFFF80000FE000000FE000000FE000000FE000000FE000000
+FE000000FE000000FE00007FFFF8007FFFF8007FFFF81D277EA622>I<0C0003000F803F000FFF
+FE000FFFFC000FFFF8000FFFF0000FFFE0000FFFC0000FFE00000E0000000E0000000E0000000E
+0000000E0000000E0000000E7FC0000FFFF8000F80FC000E003E000C003F0000001F8000001FC0
+00001FC000001FE000001FE018001FE07C001FE0FE001FE0FE001FE0FE001FE0FE001FC0FC001F
+C078003F8078003F803C007F001F01FE000FFFF80003FFF00000FF80001B277DA622>I<0007F0
+00003FFC0000FFFE0001FC0F0003F01F8007E03F800FC03F801FC03F801F803F803F801F003F80
+00007F0000007F0000007F000000FF000000FF0FC000FF3FF800FF707C00FFC03E00FFC03F00FF
+801F80FF801FC0FF001FC0FF001FE0FF001FE0FF001FE07F001FE07F001FE07F001FE07F001FE0
+3F001FE03F001FC01F801FC01F803F800FC03F0007E07E0003FFFC0000FFF000003FC0001B277D
+A622>I<380000003E0000003FFFFFF03FFFFFF03FFFFFF07FFFFFE07FFFFFC07FFFFF807FFFFF
+0070000E0070000E0070001C00E0003800E0007000E000E0000000E0000001C000000380000007
+800000078000000F0000000F0000001F0000001F0000003F0000003E0000003E0000007E000000
+7E0000007E0000007E000000FE000000FE000000FE000000FE000000FE000000FE000000FE0000
+00FE0000007C0000003800001C297CA822>I<003FC00001FFF00003FFFC0007C07E000F003F00
+1E001F001E000F803E000F803E000F803F000F803F000F803FC00F003FF01F001FFC1E001FFE3C
+000FFFF80007FFE00003FFF80001FFFC0001FFFE0007FFFF000F0FFF801E03FFC03C01FFC07C00
+7FE078001FE0F80007E0F80007E0F80003E0F80003E0F80003E0F80003C07C0003C07C0007803F
+000F001FC03E000FFFFC0003FFF800007FC0001B277DA622>I<007F800001FFF00007FFF8000F
+E0FC001F807E003F803F007F003F007F001F80FF001F80FF001FC0FF001FC0FF001FC0FF001FE0
+FF001FE0FF001FE0FF001FE07F001FE07F003FE03F003FE01F807FE00F807FE007C1DFE003FF9F
+E0007E1FE000001FE000001FC000001FC000001FC000003F801F003F803F803F003F803F003F80
+7E003F807C001F01F8001E03F0000FFFE00007FF800001FE00001B277DA622>I<00003FF00180
+0003FFFE0380000FFFFF8780003FF007DF8000FF8001FF8001FE00007F8003FC00003F8007F000
+001F800FF000000F801FE0000007801FE0000007803FC0000007803FC0000003807FC000000380
+7F80000003807F8000000000FF8000000000FF8000000000FF8000000000FF8000000000FF8000
+000000FF8000000000FF8000000000FF8000000000FF80000000007F80000000007F8000000000
+7FC0000003803FC0000003803FC0000003801FE0000003801FE0000007000FF00000070007F000
+000E0003FC00001E0001FE00003C0000FF8000F800003FF007E000000FFFFFC0000003FFFF0000
+00003FF8000029297CA832>67 D<FFFFFFF80000FFFFFFFF8000FFFFFFFFE00003FC001FF80003
+FC0007FC0003FC0001FE0003FC0000FF0003FC00007F8003FC00003FC003FC00001FC003FC0000
+1FE003FC00001FE003FC00000FF003FC00000FF003FC00000FF003FC00000FF003FC00000FF803
+FC00000FF803FC00000FF803FC00000FF803FC00000FF803FC00000FF803FC00000FF803FC0000
+0FF803FC00000FF803FC00000FF803FC00000FF003FC00000FF003FC00000FF003FC00001FE003
+FC00001FE003FC00001FC003FC00003FC003FC00007F8003FC00007F0003FC0001FE0003FC0003
+FC0003FC001FF800FFFFFFFFE000FFFFFFFF8000FFFFFFFC00002D297DA835>I<FFFFFFFFE0FF
+FFFFFFE0FFFFFFFFE003FC001FE003FC0007F003FC0001F003FC0001F003FC0000F003FC000070
+03FC00007003FC00007003FC01C07803FC01C03803FC01C03803FC01C03803FC03C00003FC03C0
+0003FC0FC00003FFFFC00003FFFFC00003FFFFC00003FC0FC00003FC03C00003FC03C00003FC01
+C00E03FC01C00E03FC01C00E03FC01C01C03FC00001C03FC00001C03FC00001C03FC00003C03FC
+00003803FC00007803FC0000F803FC0001F803FC0003F803FC001FF8FFFFFFFFF0FFFFFFFFF0FF
+FFFFFFF027297DA82D>I<FFFFFFFFC0FFFFFFFFC0FFFFFFFFC003FC003FC003FC000FE003FC00
+03E003FC0001E003FC0001E003FC0000E003FC0000E003FC0000E003FC0000F003FC03807003FC
+03807003FC03807003FC03800003FC07800003FC07800003FC1F800003FFFF800003FFFF800003
+FFFF800003FC1F800003FC07800003FC07800003FC03800003FC03800003FC03800003FC038000
+03FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC0000
+0003FC000000FFFFFC0000FFFFFC0000FFFFFC000024297DA82B>I<FFFFFCFFFFFCFFFFFC01FE
+0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE
+0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE
+0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE00FFFFFCFFFFFCFFFFFC16297EA81A
+>73 D<FFFFFC0000FFFFFC0000FFFFFC000003FC00000003FC00000003FC00000003FC00000003
+FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC000000
+03FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC0000
+0003FC00000003FC0001C003FC0001C003FC0001C003FC0001C003FC0003C003FC00038003FC00
+038003FC00078003FC00078003FC000F8003FC000F8003FC001F8003FC007F8003FC01FF00FFFF
+FFFF00FFFFFFFF00FFFFFFFF0022297DA829>76 D<FFFE0000001FFFC0FFFE0000001FFFC0FFFF
+0000003FFFC003FF0000003FF00003FF0000003FF00003BF80000077F00003BF80000077F00003
+9FC00000E7F000039FC00000E7F000038FE00001C7F000038FE00001C7F0000387F0000387F000
+0387F0000387F0000387F0000387F0000383F8000707F0000383F8000707F0000381FC000E07F0
+000381FC000E07F0000380FE001C07F0000380FE001C07F0000380FF003807F00003807F003807
+F00003807F003807F00003803F807007F00003803F807007F00003801FC0E007F00003801FC0E0
+07F00003800FE1C007F00003800FE1C007F00003800FE1C007F000038007F38007F000038007F3
+8007F000038003FF0007F000038003FF0007F000038001FE0007F000038001FE0007F000038000
+FC0007F000038000FC0007F000FFFE00FC01FFFFC0FFFE007801FFFFC0FFFE007801FFFFC03A29
+7DA841>I<FFFC0000FFFEFFFE0000FFFEFFFF0000FFFE03FF8000038003FF8000038003BFC000
+0380039FE0000380039FF0000380038FF80003800387F80003800383FC0003800381FE00038003
+81FF0003800380FF80038003807FC0038003803FC0038003801FE0038003800FF0038003800FF8
+0380038007FC0380038003FC0380038001FE0380038000FF0380038000FF83800380007FC38003
+80003FE3800380001FE3800380000FF38003800007FB8003800007FF8003800003FF8003800001
+FF8003800000FF80038000007F80038000007F80038000003F80038000001F80038000000F80FF
+FE00000780FFFE00000380FFFE000003802F297DA836>I<FFFFFFF800FFFFFFFF00FFFFFFFFC0
+03FC003FE003FC000FF003FC0007F803FC0007FC03FC0003FC03FC0003FE03FC0003FE03FC0003
+FE03FC0003FE03FC0003FE03FC0003FE03FC0003FE03FC0003FC03FC0007FC03FC0007F803FC00
+0FF003FC003FE003FFFFFF8003FFFFFE0003FC00000003FC00000003FC00000003FC00000003FC
+00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003
+FC00000003FC00000003FC00000003FC000000FFFFF00000FFFFF00000FFFFF0000027297DA82F
+>80 D<FFFFFFE00000FFFFFFFE0000FFFFFFFF800003FC007FE00003FC000FF00003FC0007F800
+03FC0007FC0003FC0003FC0003FC0003FE0003FC0003FE0003FC0003FE0003FC0003FE0003FC00
+03FE0003FC0003FE0003FC0003FC0003FC0007F80003FC0007F80003FC001FE00003FC007FC000
+03FFFFFE000003FFFFF0000003FC00FC000003FC007F000003FC003F800003FC003F800003FC00
+1FC00003FC001FE00003FC001FE00003FC001FE00003FC001FE00003FC001FE00003FC001FF000
+03FC001FF00003FC001FF00003FC001FF00703FC001FF80703FC000FF80703FC0007F80EFFFFF0
+03FE1CFFFFF001FFF8FFFFF0003FF030297DA834>82 D<007F806003FFF0E007FFF9E00F807FE0
+1F001FE03E0007E07C0003E07C0001E0FC0001E0FC0001E0FC0000E0FE0000E0FE0000E0FF0000
+00FFC000007FFE00007FFFE0003FFFFC001FFFFE000FFFFF8007FFFFC003FFFFE000FFFFE00007
+FFF000007FF000000FF8000007F8000003F8600001F8E00001F8E00001F8E00001F8F00001F0F0
+0001F0F80003F0FC0003E0FF0007C0FFE01F80F3FFFF00E0FFFE00C01FF0001D297CA826>I<FF
+FFF001FFFCFFFFF001FFFCFFFFF001FFFC03FC0000070003FC0000070003FC0000070003FC0000
+070003FC0000070003FC0000070003FC0000070003FC0000070003FC0000070003FC0000070003
+FC0000070003FC0000070003FC0000070003FC0000070003FC0000070003FC0000070003FC0000
+070003FC0000070003FC0000070003FC0000070003FC0000070003FC0000070003FC0000070003
+FC0000070003FC0000070003FC0000070003FC0000070003FC0000070001FC00000E0001FE0000
+0E0000FE00001C00007E00001C00007F00003800003FC000F000000FF007E0000007FFFFC00000
+01FFFF000000001FF800002E297DA835>85 D<01FF800007FFF0000F81F8001FC07E001FC07E00
+1FC03F000F803F8007003F8000003F8000003F8000003F80000FFF8000FFFF8007FC3F800FE03F
+803F803F803F003F807F003F80FE003F80FE003F80FE003F80FE003F807E007F807F00DF803F83
+9FFC0FFF0FFC01FC03FC1E1B7E9A21>97 D<FFE0000000FFE0000000FFE00000000FE00000000F
+E00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE0000000
+0FE00000000FE00000000FE00000000FE1FE00000FE7FF80000FFE07E0000FF801F0000FF000F8
+000FE000FC000FE000FE000FE0007F000FE0007F000FE0007F000FE0007F800FE0007F800FE000
+7F800FE0007F800FE0007F800FE0007F800FE0007F800FE0007F000FE0007F000FE0007F000FE0
+00FE000FE000FC000FF001F8000FF803F0000F9E07E0000F07FF80000E01FC0000212A7EA926>
+I<001FF80000FFFE0003F01F0007E03F800FC03F801F803F803F801F007F800E007F0000007F00
+0000FF000000FF000000FF000000FF000000FF000000FF000000FF0000007F0000007F0000007F
+8000003F8001C01F8001C00FC0038007E0070003F01E0000FFFC00001FE0001A1B7E9A1F>I<00
+003FF80000003FF80000003FF800000003F800000003F800000003F800000003F800000003F800
+000003F800000003F800000003F800000003F800000003F800000003F800000003F800001FE3F8
+0000FFFBF80003F03FF80007E00FF8000FC007F8001F8003F8003F8003F8007F0003F8007F0003
+F8007F0003F800FF0003F800FF0003F800FF0003F800FF0003F800FF0003F800FF0003F800FF00
+03F8007F0003F8007F0003F8007F0003F8003F8003F8001F8003F8000F8007F80007C00FF80003
+F03BFF8000FFF3FF80003FC3FF80212A7EA926>I<003FE00001FFF80003F07E0007C01F000F80
+1F801F800F803F800FC07F000FC07F0007C07F0007E0FF0007E0FF0007E0FFFFFFE0FFFFFFE0FF
+000000FF000000FF0000007F0000007F0000007F0000003F8000E01F8000E00FC001C007E00380
+03F81F0000FFFE00001FF0001B1B7E9A20>I<0007F0003FFC00FE3E01F87F03F87F03F07F07F0
+7F07F03E07F00007F00007F00007F00007F00007F00007F000FFFFC0FFFFC0FFFFC007F00007F0
+0007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F0
+0007F00007F00007F00007F00007F00007F0007FFF807FFF807FFF80182A7EA915>I<00FF81F0
+03FFE7F80FC1FE7C1F80FC7C1F007C383F007E107F007F007F007F007F007F007F007F007F007F
+007F007F003F007E001F007C001F80FC000FC1F8001FFFE00018FF800038000000380000003C00
+00003E0000003FFFF8001FFFFF001FFFFF800FFFFFC007FFFFE01FFFFFF03E0007F07C0001F8F8
+0000F8F80000F8F80000F8F80000F87C0001F03C0001E01F0007C00FC01F8003FFFE00007FF000
+1E287E9A22>I<FFE0000000FFE0000000FFE00000000FE00000000FE00000000FE00000000FE0
+0000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000F
+E00000000FE07F00000FE1FFC0000FE787E0000FEE03F0000FF803F0000FF803F8000FF003F800
+0FF003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8
+000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003
+F8000FE003F800FFFE3FFF80FFFE3FFF80FFFE3FFF80212A7DA926>I<07000F801FC03FE03FE0
+3FE01FC00F8007000000000000000000000000000000FFE0FFE0FFE00FE00FE00FE00FE00FE00F
+E00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0FFFEFFFEFFFE0F2B
+7DAA14>I<FFE00000FFE00000FFE000000FE000000FE000000FE000000FE000000FE000000FE0
+00000FE000000FE000000FE000000FE000000FE000000FE000000FE01FFC0FE01FFC0FE01FFC0F
+E007800FE00F000FE01E000FE03C000FE078000FE0E0000FE3C0000FE7C0000FEFE0000FFFE000
+0FFFF0000FF3F8000FE3F8000FC1FC000FC0FE000FC07F000FC07F000FC03F800FC01FC00FC00F
+C00FC00FE0FFFC3FFEFFFC3FFEFFFC3FFE1F2A7EA924>107 D<FFE0FFE0FFE00FE00FE00FE00F
+E00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0
+0FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0FFFEFFFEFFFE0F2A7DA914>I<
+FFC07F800FF000FFC1FFE03FFC00FFC383F0707E000FC603F8C07F000FCC01F9803F000FD801FF
+003F800FF001FE003F800FF001FE003F800FE001FC003F800FE001FC003F800FE001FC003F800F
+E001FC003F800FE001FC003F800FE001FC003F800FE001FC003F800FE001FC003F800FE001FC00
+3F800FE001FC003F800FE001FC003F800FE001FC003F800FE001FC003F800FE001FC003F800FE0
+01FC003F800FE001FC003F80FFFE1FFFC3FFF8FFFE1FFFC3FFF8FFFE1FFFC3FFF8351B7D9A3A>
+I<FFC07F0000FFC1FFC000FFC787E0000FCE03F0000FD803F0000FD803F8000FF003F8000FF003
+F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE0
+03F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000F
+E003F800FFFE3FFF80FFFE3FFF80FFFE3FFF80211B7D9A26>I<003FE00001FFFC0003F07E000F
+C01F801F800FC03F800FE03F0007E07F0007F07F0007F07F0007F0FF0007F8FF0007F8FF0007F8
+FF0007F8FF0007F8FF0007F8FF0007F8FF0007F87F0007F07F0007F03F800FE03F800FE01F800F
+C00FC01F8007F07F0001FFFC00003FE0001D1B7E9A22>I<FFE1FE0000FFE7FF8000FFFE07E000
+0FF803F0000FF001F8000FE000FC000FE000FE000FE000FF000FE0007F000FE0007F000FE0007F
+800FE0007F800FE0007F800FE0007F800FE0007F800FE0007F800FE0007F800FE0007F000FE000
+FF000FE000FF000FE000FE000FE001FC000FF001F8000FF803F0000FFE0FE0000FE7FF80000FE1
+FC00000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000F
+E00000000FE0000000FFFE000000FFFE000000FFFE00000021277E9A26>I<FFC1F0FFC7FCFFCE
+3E0FD87F0FD87F0FF07F0FF03E0FF01C0FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0
+000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE000FFFF00FFFF00FFFF00181B7E9A1C
+>114 D<03FE300FFFF01E03F03800F0700070F00070F00070F80070FC0000FFE0007FFE007FFF
+803FFFE01FFFF007FFF800FFF80003FC0000FC60007CE0003CF0003CF00038F80038FC0070FF01
+E0F7FFC0C1FF00161B7E9A1B>I<00700000700000700000700000F00000F00000F00001F00003
+F00003F00007F0001FFFF0FFFFF0FFFFF007F00007F00007F00007F00007F00007F00007F00007
+F00007F00007F00007F00007F00007F00007F03807F03807F03807F03807F03807F03803F03803
+F87001F86000FFC0001F8015267FA51B>I<FFE03FF800FFE03FF800FFE03FF8000FE003F8000F
+E003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F800
+0FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8
+000FE003F8000FE007F80007E007F80007E00FF80003F03BFF8001FFF3FF80003FC3FF80211B7D
+9A26>I<FFFE03FF80FFFE03FF80FFFE03FF8007F000700007F000700007F800F00003F800E000
+03FC01E00001FC01C00001FC01C00000FE03800000FE038000007F070000007F070000007F8F00
+00003F8E0000003FDE0000001FDC0000001FDC0000000FF80000000FF80000000FF800000007F0
+00000007F000000003E000000003E000000001C00000211B7F9A24>I<FFFE7FFC0FFEFFFE7FFC
+0FFEFFFE7FFC0FFE0FE007E000E007F003F001C007F003F001C007F807F803C003F807F8038003
+F807F8038001FC0EFC070001FC0EFC070001FE1EFC0F0000FE1C7E0E0000FE1C7E0E0000FF383F
+1E00007F383F1C00007F783F3C00003FF01FB800003FF01FB800003FF01FF800001FE00FF00000
+1FE00FF000000FC007E000000FC007E000000FC007E00000078003C00000078003C0002F1B7F9A
+32>I<FFFC0FFF00FFFC0FFF00FFFC0FFF0007F003C00003F807800001FC07800000FE0F000000
+FF1E0000007F3C0000003FF80000001FF00000000FF00000000FF000000007F000000007F80000
+000FFC0000001FFE0000001EFE0000003C7F000000783F800000F01FC00001E01FE00001C00FE0
+0003C007F000FFF01FFF80FFF01FFF80FFF01FFF80211B7F9A24>I<FFFE03FF80FFFE03FF80FF
+FE03FF8007F000700007F000700007F800F00003F800E00003FC01E00001FC01C00001FC01C000
+00FE03800000FE038000007F070000007F070000007F8F0000003F8E0000003FDE0000001FDC00
+00001FDC0000000FF80000000FF80000000FF800000007F000000007F000000003E000000003E0
+00000001C000000001C000000003800000000380000038078000007C07000000FE0F000000FE0E
+000000FE1E000000FE3C0000007C780000003FE00000000FC000000021277F9A24>I<3FFFFF80
+3FFFFF803F007F003C00FE003801FE007803FC007803F8007007F800700FF000700FE000001FC0
+00003FC000007F8000007F000000FF000001FE038001FC038003F8038007F803800FF007800FE0
+07801FE007003FC00F003F801F007F007F00FFFFFF00FFFFFF00191B7E9A1F>I
+E /Ff 31 123 df<0003E0001C1800381800703C00E03C00E03801C00001C00001C00001C00001
+C0000380007FFFF00380700380700380700380700700E00700E00700E00700E00700E00700E00E
+01C00E01C00E01C00E01C00E01C00E01C01C03801E03C0FF0FF816207E9F19>12
+D<FFC0FFC00A027D8A0F>45 D<0000100000001800000038000000380000007800000078000000
+FC000001BC0000013C0000033C0000023C0000063C0000043E0000081E0000081E0000101E0000
+101E0000201E0000200F0000400F0000400F0000FFFF0000800F0001000F800100078002000780
+0200078004000780040007800C0007C03E0007C0FF807FFC1E207E9F22>65
+D<07FFFF00007C01E0003C00F0003C00780078003C0078003C0078001E0078001E0078001E0078
+001F00F0001F00F0001F00F0001F00F0001F00F0001F00F0001F01E0001E01E0003E01E0003E01
+E0003E01E0003C01E0007C03C0007803C000F003C000F003C001E003C003C003C0078007800F00
+07803C00FFFFE000201F7E9E23>68 D<0001FC04000F030C003C009C0070007C00E0003C01C000
+3803800018078000180F0000181F0000181E0000183E0000103C0000007C0000007C0000007C00
+00007C000000F8000000F8000000F8007FFCF80003E0780001E0780001E0780003C0780003C03C
+0003C03C0003C01C0003C00E0007C007000B800380118001E06080003F80001E217B9F24>71
+D<07FFC7FFC0007C00F800003C007800003C007800007800F000007800F000007800F000007800
+F000007800F000007800F00000F001E00000F001E00000F001E00000F001E00000FFFFE00000F0
+01E00001E003C00001E003C00001E003C00001E003C00001E003C00001E003C00003C007800003
+C007800003C007800003C007800003C007800003C007800007800F000007C00F8000FFF8FFF800
+221F7E9E22>I<07FFF000007E0000003C0000003C000000780000007800000078000000780000
+007800000078000000F0000000F0000000F0000000F0000000F0000000F0000001E0000001E000
+0001E0000001E0000001E0008001E0010003C0010003C0010003C0030003C0020003C0060003C0
+060007801E0007807C00FFFFFC00191F7E9E1C>76 D<07FFFF00007C03C0003C01E0003C00F000
+7800F0007800F8007800F8007800F8007800F8007800F000F001F000F001E000F003C000F00780
+00F00F0000FFF80001E0000001E0000001E0000001E0000001E0000001E0000003C0000003C000
+0003C0000003C0000003C0000003C000000780000007C00000FFFC00001D1F7E9E1F>80
+D<3FFFFFF03C0780F03007803060078030400F0010400F0010C00F0010800F0010800F0010800F
+0010001E0000001E0000001E0000001E0000001E0000001E0000003C0000003C0000003C000000
+3C0000003C0000003C000000780000007800000078000000780000007800000078000000F00000
+01F800007FFFE0001C1F7A9E21>84 D<07F8000C0C001E06001E07001C07000007000007000007
+0000FF0007C7001E07003C0E00780E00F00E10F00E10F00E10F01E10F02E20784F401F87801414
+7D9317>97 D<0700003F00000F00000700000700000E00000E00000E00000E00000E00000E0000
+1C00001C7C001D87001E03801C01C01C01C03801C03801E03801E03801E03801E03801E07003C0
+7003C0700380700780700700700E00E81C00C4380083E00013207B9F19>I<01FC07060E0F1C0F
+380E78007000F000F000F000F000E000E000E000E000F0027004300818300FC010147C9314>I<
+0000700003F00000F00000700000700000E00000E00000E00000E00000E00000E00001C000F9C0
+0305C00E03C01C03C03801C0780380700380F00380F00380F00380F00380E00700E00700E00700
+E00700E00700700F00301E00186F000F8FE014207C9F19>I<00F800070E000E07001C07003803
+80780380700380F00380F00380FFFF80F00000E00000E00000E00000E00000F001007002003004
+001C180007E00011147D9314>I<0007800018C00031E00061E000E1C000C00001C00001C00001
+C00001C00001C0000380007FF80003800003800003800003800007000007000007000007000007
+00000700000E00000E00000E00000E00000E00000E00001C00001E0000FFE00013207E9F0E>I<
+00000E003E1100E1A301C1C20381E00780E00701E00F01E00F01E00F01E00703C0070380078700
+04FC000800000800001800001C00000FFF000FFFC007FFE01800F0300030600030C00030C00030
+C000306000603000C01C070007FC00181F809417>I<00E00007E00001E00000E00000E00001C0
+0001C00001C00001C00001C00001C000038000038F800390E003A0E003C0600380600780E00700
+E00700E00700E00700E00700E00E01C00E01C00E01C00E01C00E01C00E01C01C03801E03C0FFCF
+F815207E9F19>I<01C003E003E003C0018000000000000000000000000003801F800780038003
+800700070007000700070007000E000E000E000E000E000E001C001E00FF800B1F7F9E0C>I<00
+E00007E00001E00000E00000E00001C00001C00001C00001C00001C00001C0000380000383FC03
+80F00380C0038180038100070400070800071800073800077C00071C000E1C000E0E000E0E000E
+0F000E07000E07801C03801E07C0FF8FF016207E9F18>107 D<00E007E001E000E000E001C001
+C001C001C001C001C00380038003800380038003800700070007000700070007000E000E000E00
+0E000E000E001C001E00FFC00B207F9F0C>I<0387C07C001F9861860007A072070003C0340300
+03803803000780780700070070070007007007000700700700070070070007007007000E00E00E
+000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E001C01C01C001E01E01E00FFCFFC
+FFC022147E9326>I<038F801F90E007A0E003C0600380600780E00700E00700E00700E00700E0
+0700E00E01C00E01C00E01C00E01C00E01C00E01C01C03801E03C0FFCFF815147E9319>I<00FC
+000387000E01801C00C03800E03800E07000F0F000F0F000F0F000F0F000F0E001E0E001E0E001
+C0E003C0F00380700700380E001C1C0007E00014147D9317>I<00E3E007EC3800F01C00E01E00
+E00E01C00E01C00F01C00F01C00F01C00F01C00F03801E03801E03801C03803C03803803807007
+40E00721C0071F000700000700000700000E00000E00000E00000E00001E0000FFC000181D8093
+19>I<038E001FB38007C78003C7800383000780000700000700000700000700000700000E0000
+0E00000E00000E00000E00000E00001C00001E0000FFE00011147E9312>114
+D<01F2060E080618061802380438001E001FE00FF003F8003C401C400C400C600C6018E010D060
+8FC00F147E9312>I<0080010001000100030007000F001E00FFF80E000E000E000E001C001C00
+1C001C001C001C00380038203820382038203840384018800F000D1C7C9B12>I<1C0380FC1F80
+3C07801C03801C0380380700380700380700380700380700380700700E00700E00700E00700E00
+701E00701E00703C00305E001F9FC012147B9319>I<1FF0FF03C07801C06001C04000E08000E1
+80007300007600003C00003C00001C00002E00004E000087000107000203800603800C01C03E03
+E0FF07FC18147F9318>120 D<0FF83F8001E00E0001C00C0001C0080000E0180000E0100000E0
+200000E0200000F040000070400000708000007080000071000000390000003A0000003E000000
+3C00000038000000180000001000000010000000200000002000000040000070C00000F0800000
+F1000000E20000007C000000191D809318>I<07FFE00701E00401C00C0380080700080E00101C
+0000380000700000700000E00001C0000380800700800E00801C01001C0100380300700E00FFFE
+0013147F9314>I E /Fg 11 117 df<1F003F807FC0FFE0FFE0FFE0FFE0FFE07FC03F801F000B
+0B7A8A17>46 D<0001E0000003E000000FE000007FE0001FFFE000FFFFE000FFBFE000E03FE000
+003FE000003FE000003FE000003FE000003FE000003FE000003FE000003FE000003FE000003FE0
+00003FE000003FE000003FE000003FE000003FE000003FE000003FE000003FE000003FE000003F
+E000003FE000003FE000003FE000003FE000003FE000003FE000003FE000003FE000003FE00000
+3FE000003FE000003FE000003FE000003FE000003FE0007FFFFFF07FFFFFF07FFFFFF01C2E7AAD
+29>49 D<00FFE00003FFFC000FFFFF001F007F803C003FC07E001FE07F001FE0FF801FF0FF801F
+F0FF801FF0FF801FF07F001FF03E003FE01C003FC000007F800000FF000001FE000001F8000003
+F0000007E0000007C000000F8000000F0000000E0000000E0000001E0000001C0000001C000000
+1C0000001C0000001C0000001C0000001C00000000000000000000000000000000000000000000
+00000000001C0000007F000000FF800000FF800001FFC00001FFC00001FFC00000FF800000FF80
+00007F0000001C00001C327BB127>63 D<FFFFFE07FFFFF801FFFFFFFFFE07FFFFF801FFFFFFFF
+FE07FFFFF801FFFF03FF00000FFC000007E003FF80000FFC000003C001FF80000FFE0000038001
+FF800007FE0000038001FFC00007FE0000078000FFC00007FF0000070000FFE00003FF00000700
+007FE00003FF80000E00007FE00003FF80000E00007FF00003FF80001E00003FF00007FFC0001C
+00003FF80007FFC0001C00001FF80007FFE0003800001FF8000E7FE0003800001FFC000E7FE000
+7800000FFC001E7FF0007000000FFC001C3FF00070000007FE001C3FF000E0000007FE00381FF8
+00E0000007FF00381FF801E0000003FF00781FFC01C0000003FF00700FFC01C0000003FF80700F
+FC03C0000001FF80F00FFE0380000001FFC0E007FE0380000000FFC0E007FF0700000000FFC1C0
+03FF0700000000FFE1C003FF0F000000007FE3C003FF8E000000007FE38001FF8E000000003FF3
+8001FF9C000000003FF70000FFDC000000003FFF0000FFFC000000001FFF0000FFF8000000001F
+FE00007FF8000000000FFE00007FF0000000000FFC00003FF0000000000FFC00003FF000000000
+07FC00003FE00000000007F800001FE00000000007F800001FE00000000003F800001FC0000000
+0003F000000FC00000000001F000000F800000000001E0000007800000000000E0000007000000
+50317EB055>87 D<007FF8000003FFFF000007FFFFC0000FE01FE0001FF007F0001FF003F8001F
+F003FC001FF001FE000FE001FE0007C001FE00010001FE00000001FE00000001FE000001FFFE00
+003FFFFE0001FFF1FE0007FE01FE000FF001FE001FC001FE003F8001FE007F8001FE00FF0001FE
+00FF0001FE00FF0001FE00FF0001FE00FF0003FE007F8003FE007FC00EFE003FF03CFF000FFFF8
+7FF807FFF03FF800FF800FF825207E9F28>97 D<00000007E0000003FFE0000003FFE0000003FF
+E00000003FE00000001FE00000001FE00000001FE00000001FE00000001FE00000001FE0000000
+1FE00000001FE00000001FE00000001FE00000001FE00000001FE00000001FE0000FF81FE0007F
+FF1FE001FFFFDFE003FE03FFE007F800FFE00FE0003FE01FE0001FE03FC0001FE03FC0001FE07F
+80001FE07F80001FE07F80001FE0FF80001FE0FF80001FE0FF80001FE0FF80001FE0FF80001FE0
+FF80001FE0FF80001FE0FF80001FE07F80001FE07F80001FE07F80001FE03FC0001FE03FC0001F
+E01FC0003FE00FE0007FE007F001FFE003FC07DFF001FFFF9FFF007FFE1FFF000FF01FFF28327D
+B12E>100 D<01F800000000FFF800000000FFF800000000FFF8000000000FF80000000007F800
+00000007F80000000007F80000000007F80000000007F80000000007F80000000007F800000000
+07F80000000007F80000000007F80000000007F80000000007F80000000007F80000000007F807
+F8000007F83FFF000007F87FFF800007F8F03FC00007F9C01FE00007FB000FE00007FE000FF000
+07FE000FF00007FC000FF00007FC000FF00007F8000FF00007F8000FF00007F8000FF00007F800
+0FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF000
+07F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F800
+0FF00007F8000FF00007F8000FF000FFFFC1FFFF80FFFFC1FFFF80FFFFC1FFFF8029327DB12E>
+104 D<01C00007F0000FF8000FF8001FFC001FFC001FFC000FF8000FF80007F00001C000000000
+00000000000000000000000000000000000000000001F800FFF800FFF800FFF8000FF80007F800
+07F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F800
+07F80007F80007F80007F80007F80007F80007F80007F80007F80007F800FFFF80FFFF80FFFF80
+11337DB217>I<01F800FFF800FFF800FFF8000FF80007F80007F80007F80007F80007F80007F8
+0007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F8
+0007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F8
+0007F80007F80007F80007F80007F80007F80007F80007F80007F80007F800FFFFC0FFFFC0FFFF
+C012327DB117>108 D<00FF870007FFEF001FFFFF003F007F003C001F0078000F00F8000700F8
+000700F8000700FC000700FF000000FFF800007FFFC0003FFFF0003FFFFC000FFFFE0007FFFF00
+01FFFF80001FFF800000FFC000001FC060000FC0E00007C0E00007C0F00007C0F8000780F8000F
+80FE000F00FF803E00FFFFFC00F3FFF800C07FC0001A207D9F21>115 D<003800003800003800
+00380000380000780000780000780000F80000F80001F80003F80007F8001FF800FFFFFEFFFFFE
+FFFFFE07F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F800
+07F80007F80007F80007F80007F80707F80707F80707F80707F80707F80707F80703F80E03FC0E
+01FE1C00FFF8007FF0000FE0182E7EAD20>I E /Fh 10 122 df<1C007F007F00FF80FF80FF80
+7F007F001C0009097B8813>46 D<FFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFF03FC00003FC003
+FC00003FC003FC00003FC003FC00003FC003FC00003FC003FC00003FC003FC00003FC003FC0000
+3FC003FC00003FC003FC00003FC003FC00003FC003FC00003FC003FC00003FC003FC00003FC003
+FC00003FC003FFFFFFFFC003FFFFFFFFC003FFFFFFFFC003FC00003FC003FC00003FC003FC0000
+3FC003FC00003FC003FC00003FC003FC00003FC003FC00003FC003FC00003FC003FC00003FC003
+FC00003FC003FC00003FC003FC00003FC003FC00003FC003FC00003FC003FC00003FC003FC0000
+3FC003FC00003FC0FFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFF30297EA835>72
+D<FFFFE0FFFFE01FFFC0FFFFE0FFFFE01FFFC0FFFFE0FFFFE01FFFC003FC0003FC0000700003FC
+0003FC0000700003FE0003FE0000F00001FE0001FE0000E00001FE0001FE0000E00001FF0001FF
+0001E00000FF0001FF0001C00000FF0001FF0001C000007F8003FF80038000007F8003FF800380
+00007FC007FFC0078000003FC0073FC0070000003FC0073FC0070000003FE00F3FE00F0000001F
+E00E1FE00E0000001FE00E1FE00E0000000FF01C0FF01C0000000FF01C0FF01C0000000FF01C0F
+F81C00000007F83807F83800000007F83807F83800000007FC7807FC7800000003FC7003FC7000
+000003FC7003FC7000000003FEF003FEF000000001FEE001FEE000000001FEE001FEE000000000
+FFC000FFC000000000FFC000FFC000000000FFC000FFC0000000007F80007F80000000007F8000
+7F80000000007F80007F80000000003F00003F00000000003F00003F00000000003F00003F0000
+0000001E00001E00000000001E00001E00000042297FA845>87 D<FFE00000FFE00000FFE00000
+0FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000
+000FE000000FE000000FE1FE000FE7FF800FFE07E00FF803F00FF001F80FE000FC0FE000FC0FE0
+007E0FE0007E0FE0007F0FE0007F0FE0007F0FE0007F0FE0007F0FE0007F0FE0007F0FE0007F0F
+E0007E0FE0007E0FE0007E0FE000FC0FE000FC0FF001F80FF803F00F9C0FE00F0FFF800E01FC00
+202A7EA925>98 D<07000F801FC03FE03FE03FE01FC00F80070000000000000000000000000000
+00FFE0FFE0FFE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0
+0FE00FE00FE00FE00FE0FFFEFFFEFFFE0F2B7EAA12>105 D<FFE0FFE0FFE00FE00FE00FE00FE0
+0FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00F
+E00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0FFFEFFFEFFFE0F2A7EA912>108
+D<FFC07E00FFC1FF80FFC30FC00FC40FE00FC807E00FD807F00FD007F00FD007F00FE007F00FE0
+07F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007F00FE007F00F
+E007F00FE007F00FE007F00FE007F00FE007F0FFFE3FFFFFFE3FFFFFFE3FFF201B7D9A25>110
+D<003FE00001FFFC0003F07E000FC01F801F800FC03F0007E03F0007E07E0003F07E0003F07E00
+03F0FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F87E0003F07E
+0003F03F0007E03F0007E01F800FC00FC01F8007F07F0001FFFC00003FE0001D1B7E9A22>I<03
+FE300FFFF03E03F07800F07000F0F00070F00070F80070FE0000FFE0007FFF007FFFC03FFFE01F
+FFF007FFF800FFF80007FC0000FCE0007CE0003CF0003CF00038F80038FC0070FF01E0E7FFC0C1
+FF00161B7E9A1B>115 D<FFFE07FFFFFE07FFFFFE07FF07F000E007F000E007F801E003F801C0
+03F801C001FC038001FC038001FE078000FE070000FF0F00007F0E00007F0E00003F9C00003F9C
+00003FFC00001FF800001FF800000FF000000FF0000007F0000007E0000007E0000003C0000003
+C000000380000003800000078000380700007C070000FE0E0000FE0E0000FE1C0000FE3800007C
+7000003FE000000F80000020277F9A23>121 D E /Fi 1 14 df<0003FE0000000FFF8000003C
+01E00000F000780001C0001C00030000060006000003000C0000018018000000C018000000C030
+000000603000000060600000003060000000306000000030C000000018C000000018C000000018
+C000000018C000000018C000000018C000000018C000000018C000000018600000003060000000
+3060000000303000000060300000006018000000C018000000C00C000001800600000300030000
+060001C0001C0000F0007800003C01E000000FFF80000003FE000025277E9D2A>13
+D E /Fj 71 125 df<001F83E000F06E3001C078780380F8780300F03007007000070070000700
+700007007000070070000700700007007000FFFFFF800700700007007000070070000700700007
+007000070070000700700007007000070070000700700007007000070070000700700007007000
+070070000700700007007000070070007FE3FF001D20809F1B>11 D<003F0000E0C001C0C00381
+E00701E00701E0070000070000070000070000070000070000FFFFE00700E00700E00700E00700
+E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700
+E00700E07FC3FE1720809F19>I<70F8FCFC74040404080810102040060E7C9F0D>39
+D<0020004000800100020006000C000C00180018003000300030007000600060006000E000E000
+E000E000E000E000E000E000E000E000E000E0006000600060007000300030003000180018000C
+000C000600020001000080004000200B2E7DA112>I<800040002000100008000C000600060003
+00030001800180018001C000C000C000C000E000E000E000E000E000E000E000E000E000E000E0
+00E000C000C000C001C001800180018003000300060006000C00080010002000400080000B2E7D
+A112>I<70F8FCFC74040404080810102040060E7C840D>44 D<FFC0FFC00A027F8A0F>I<70F8F8
+F87005057C840D>I<000100030003000600060006000C000C000C001800180018003000300030
+00600060006000C000C000C00180018001800300030003000600060006000C000C000C00180018
+001800300030003000600060006000C000C000C000102D7DA117>I<03F0000E1C001C0E001806
+00380700700380700380700380700380F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003
+C0F003C0F003C0F003C0F003C0F003C07003807003807003807807803807001806001C0E000E1C
+0003F000121F7E9D17>I<018003800F80F3800380038003800380038003800380038003800380
+0380038003800380038003800380038003800380038003800380038007C0FFFE0F1E7C9D17>I<
+03F0000C1C00100E00200700400780800780F007C0F803C0F803C0F803C02007C00007C0000780
+000780000F00000E00001C0000380000700000600000C0000180000300000600400C0040180040
+1000803FFF807FFF80FFFF80121E7E9D17>I<03F0000C1C00100E00200F00780F807807807807
+80380F80000F80000F00000F00000E00001C0000380003F000003C00000E00000F000007800007
+800007C02007C0F807C0F807C0F807C0F00780400780400F00200E001C3C0003F000121F7E9D17
+>I<000600000600000E00000E00001E00002E00002E00004E00008E00008E00010E00020E0002
+0E00040E00080E00080E00100E00200E00200E00400E00C00E00FFFFF0000E00000E00000E0000
+0E00000E00000E00000E0000FFE0141E7F9D17>I<1803001FFE001FFC001FF8001FE000100000
+10000010000010000010000010000011F000161C00180E001007001007800003800003800003C0
+0003C00003C07003C0F003C0F003C0E00380400380400700200600100E000C380003E000121F7E
+9D17>I<007C000182000701000E03800C07801C0780380300380000780000700000700000F1F0
+00F21C00F40600F80700F80380F80380F003C0F003C0F003C0F003C0F003C07003C07003C07003
+803803803807001807000C0E00061C0001F000121F7E9D17>I<4000007FFFC07FFF807FFF8040
+010080020080020080040000080000080000100000200000200000400000400000C00000C00001
+C00001800003800003800003800003800007800007800007800007800007800007800007800003
+0000121F7D9D17>I<03F0000C0C00100600300300200180600180600180600180700180780300
+3E03003F06001FC8000FF00003F80007FC000C7E00103F00300F806003804001C0C001C0C000C0
+C000C0C000C0C000806001802001001002000C0C0003F000121F7E9D17>I<03F0000E18001C0C
+00380600380700700700700380F00380F00380F003C0F003C0F003C0F003C0F003C07007C07007
+C03807C0180BC00E13C003E3C0000380000380000380000700300700780600780E00700C002018
+001070000FC000121F7E9D17>I<70F8F8F8700000000000000000000070F8F8F87005147C930D>
+I<70F8F8F8700000000000000000000070F0F8F878080808101010202040051D7C930D>I<0001
+00000003800000038000000380000007C0000007C0000007C0000009E0000009E0000009E00000
+10F0000010F0000010F00000207800002078000020780000403C0000403C0000403C0000801E00
+00801E0000FFFE0001000F0001000F0001000F00020007800200078002000780040003C00E0003
+C01F0007E0FFC03FFE1F207F9F22>65 D<FFFFE0000F80380007801E0007801F0007800F000780
+0F8007800F8007800F8007800F8007800F8007800F0007801F0007801E0007803C0007FFF00007
+803C0007801E0007800F0007800F8007800780078007C0078007C0078007C0078007C0078007C0
+0780078007800F8007800F0007801F000F803C00FFFFF0001A1F7E9E20>I<000FC040007030C0
+01C009C0038005C0070003C00E0001C01E0000C01C0000C03C0000C07C0000407C000040780000
+40F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8000000F80000007800
+00007C0000407C0000403C0000401C0000401E0000800E000080070001000380020001C0040000
+703800000FC0001A217D9F21>I<FFFFE0000F803C0007801E000780070007800380078003C007
+8001E0078001E0078001F0078000F0078000F0078000F8078000F8078000F8078000F8078000F8
+078000F8078000F8078000F8078000F8078000F0078000F0078000F0078001E0078001E0078003
+C0078003800780070007800E000F803C00FFFFE0001D1F7E9E23>I<FFFFFF000F800F00078003
+000780030007800100078001800780008007800080078000800780808007808000078080000780
+80000781800007FF80000781800007808000078080000780800007808000078000200780002007
+800020078000400780004007800040078000C0078000C0078001800F800F80FFFFFF801B1F7E9E
+1F>I<FFFFFF000F800F0007800300078003000780010007800180078000800780008007800080
+07800080078080000780800007808000078080000781800007FF80000781800007808000078080
+000780800007808000078000000780000007800000078000000780000007800000078000000780
+00000FC00000FFFE0000191F7E9E1E>I<FFF8FFF80F800F8007800F0007800F0007800F000780
+0F0007800F0007800F0007800F0007800F0007800F0007800F0007800F0007800F0007FFFF0007
+800F0007800F0007800F0007800F0007800F0007800F0007800F0007800F0007800F0007800F00
+07800F0007800F0007800F0007800F000F800F80FFF8FFF81D1F7E9E22>72
+D<FFFC0FC007800780078007800780078007800780078007800780078007800780078007800780
+07800780078007800780078007800780078007800FC0FFFC0E1F7F9E10>I<FFFE000FC0000780
+000780000780000780000780000780000780000780000780000780000780000780000780000780
+0007800007800007800007800007800207800207800207800207800607800407800407800C0780
+1C0F807CFFFFFC171F7E9E1C>76 D<FF803FF807C007C007C0038005E0010005E0010004F00100
+0478010004780100043C0100043C0100041E0100040F0100040F010004078100040781000403C1
+000401E1000401E1000400F1000400F1000400790004003D0004003D0004001F0004001F000400
+0F0004000700040007000E0003001F000300FFE001001D1F7E9E22>78 D<001F800000F0F00001
+C0380007801E000F000F000E0007001E0007803C0003C03C0003C07C0003E0780001E0780001E0
+F80001F0F80001F0F80001F0F80001F0F80001F0F80001F0F80001F0F80001F0F80001F0780001
+E07C0003E07C0003E03C0003C03C0003C01E0007800E0007000F000F0007801E0001C0380000F0
+F000001F80001C217D9F23>I<FFFFE0000F80780007801C0007801E0007800F0007800F800780
+0F8007800F8007800F8007800F8007800F8007800F0007801E0007801C000780780007FFE00007
+800000078000000780000007800000078000000780000007800000078000000780000007800000
+0780000007800000078000000FC00000FFFC0000191F7E9E1F>I<FFFF80000F80F00007807800
+07803C0007801E0007801E0007801F0007801F0007801F0007801F0007801E0007801E0007803C
+00078078000780F00007FF80000781C0000780E0000780F0000780700007807800078078000780
+780007807C0007807C0007807C0007807C0407807E0407803E040FC01E08FFFC0F10000003E01E
+207E9E21>82 D<07E0800C1980100780300380600180600180E00180E00080E00080E00080F000
+00F000007800007F00003FF0001FFC000FFE0003FF00001F800007800003C00003C00001C08001
+C08001C08001C08001C0C00180C00380E00300F00600CE0C0081F80012217D9F19>I<7FFFFFE0
+780F01E0600F0060400F0020400F0020C00F0030800F0010800F0010800F0010800F0010000F00
+00000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F
+0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000001F800007
+FFFE001C1F7E9E21>I<FFFC3FF80FC007C0078003800780010007800100078001000780010007
+800100078001000780010007800100078001000780010007800100078001000780010007800100
+07800100078001000780010007800100078001000780010007800100038002000380020001C002
+0001C0040000E008000070180000382000000FC0001D207E9E22>I<FFF003FE1F8000F80F0000
+600F800060078000400780004003C0008003C0008003C0008001E0010001E0010001F0010000F0
+020000F0020000F806000078040000780400003C0800003C0800003C0800001E1000001E100000
+1F3000000F2000000F20000007C0000007C0000007C00000038000000380000003800000010000
+1F207F9E22>I<FFF07FF81FF01F800FC007C00F00078003800F00078001000F0007C001000780
+07C00200078007C00200078007C0020003C009E0040003C009E0040003C009E0040003E010F00C
+0001E010F0080001E010F0080001F02078080000F02078100000F02078100000F0403C10000078
+403C20000078403C20000078C03E2000003C801E4000003C801E4000003C801E4000001F000F80
+00001F000F8000001F000F8000001E00078000000E00070000000E00070000000C000300000004
+000200002C207F9E2F>I<7FF83FF80FE00FC007C0070003C0020001E0040001F00C0000F00800
+00781000007C1000003C2000003E4000001E4000000F8000000F8000000780000003C0000007E0
+000005E0000009F0000018F8000010780000207C0000603C0000401E0000801F0001800F000100
+0780020007C0070003C01F8007E0FFE01FFE1F1F7F9E22>I<FEFEC0C0C0C0C0C0C0C0C0C0C0C0
+C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0FEFE072D7CA10D>91
+D<FEFE060606060606060606060606060606060606060606060606060606060606060606060606
+0606060606FEFE072D7FA10D>93 D<081020204040808080B8FCFC7C38060E7D9F0D>96
+D<1FE000303000781800781C00300E00000E00000E00000E0000FE00078E001E0E00380E00780E
+00F00E10F00E10F00E10F01E10781E103867200F83C014147E9317>I<0E0000FE00000E00000E
+00000E00000E00000E00000E00000E00000E00000E00000E00000E3E000EC3800F01C00F00E00E
+00E00E00700E00700E00780E00780E00780E00780E00780E00780E00700E00700E00E00F00E00D
+01C00CC300083E0015207F9F19>I<03F80E0C1C1E381E380C70007000F000F000F000F000F000
+F00070007000380138011C020E0C03F010147E9314>I<000380003F8000038000038000038000
+038000038000038000038000038000038000038003E380061B801C078038038038038070038070
+0380F00380F00380F00380F00380F00380F003807003807003803803803807801C07800E1B8003
+E3F815207E9F19>I<03F0000E1C001C0E00380700380700700700700380F00380F00380FFFF80
+F00000F00000F000007000007000003800801800800C010007060001F80011147F9314>I<007C
+00C6018F038F07060700070007000700070007000700FFF0070007000700070007000700070007
+0007000700070007000700070007000700070007007FF01020809F0E>I<0000E003E3300E3C30
+1C1C30380E00780F00780F00780F00780F00780F00380E001C1C001E380033E000200000200000
+3000003000003FFE001FFF800FFFC03001E0600070C00030C00030C00030C000306000603000C0
+1C038003FC00141F7F9417>I<0E0000FE00000E00000E00000E00000E00000E00000E00000E00
+000E00000E00000E00000E3E000E43000E81800F01C00F01C00E01C00E01C00E01C00E01C00E01
+C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C0FFE7FC16207F9F19>I<1C
+003E003E003E001C000000000000000000000000000E007E000E000E000E000E000E000E000E00
+0E000E000E000E000E000E000E000E000E000E00FFC00A1F809E0C>I<00E001F001F001F000E0
+000000000000000000000000007007F000F0007000700070007000700070007000700070007000
+7000700070007000700070007000700070007000706070F060F0C061803F000C28829E0E>I<0E
+0000FE00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E0FF00E
+03C00E03000E02000E04000E08000E10000E30000E70000EF8000F38000E1C000E1E000E0E000E
+07000E07800E03800E03C00E03E0FFCFF815207F9F18>I<0E00FE000E000E000E000E000E000E
+000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E00
+0E000E000E000E00FFE00B20809F0C>I<0E1F01F000FE618618000E81C81C000F00F00E000F00
+F00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E
+00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E00FFE7FE7FE0
+23147F9326>I<0E3E00FE43000E81800F01C00F01C00E01C00E01C00E01C00E01C00E01C00E01
+C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C0FFE7FC16147F9319>I<01F80007
+0E001C03803801C03801C07000E07000E0F000F0F000F0F000F0F000F0F000F0F000F07000E070
+00E03801C03801C01C0380070E0001F80014147F9317>I<0E3E00FEC3800F01C00F00E00E00E0
+0E00F00E00700E00780E00780E00780E00780E00780E00780E00700E00F00E00E00F01E00F01C0
+0EC3000E3E000E00000E00000E00000E00000E00000E00000E00000E0000FFE000151D7F9319>
+I<03E0800619801C05803C0780380380780380700380F00380F00380F00380F00380F00380F003
+807003807803803803803807801C0B800E138003E3800003800003800003800003800003800003
+80000380000380003FF8151D7E9318>I<0E78FE8C0F1E0F1E0F0C0E000E000E000E000E000E00
+0E000E000E000E000E000E000E000E00FFE00F147F9312>I<1F9030704030C010C010C010E000
+78007F803FE00FF00070803880188018C018C018E030D0608F800D147E9312>I<020002000200
+060006000E000E003E00FFF80E000E000E000E000E000E000E000E000E000E000E000E080E080E
+080E080E080610031001E00D1C7F9B12>I<0E01C0FE1FC00E01C00E01C00E01C00E01C00E01C0
+0E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E03C00603C0030DC001F1FC
+16147F9319>I<FF83F81E01E01C00C00E00800E00800E00800701000701000382000382000382
+0001C40001C40001EC0000E80000E80000700000700000700000200015147F9318>I<FF9FE1FC
+3C0780701C0300601C0380200E0380400E0380400E03C0400707C0800704C0800704E080038861
+000388710003C8730001D0320001D03A0000F03C0000E01C0000E01C0000601800004008001E14
+7F9321>I<7FC3FC0F01E00701C007018003810001C20000E40000EC00007800003800003C0000
+7C00004E000087000107000303800201C00601E01E01E0FF07FE1714809318>I<FF83F81E01E0
+1C00C00E00800E00800E008007010007010003820003820003820001C40001C40001EC0000E800
+00E800007000007000007000002000002000004000004000004000F08000F08000F10000620000
+3C0000151D7F9318>I<3FFF380E200E201C40384078407000E001E001C00380078007010E011E
+011C0338027006700EFFFE10147F9314>I<FFFFFC1601808C17>I<FFFFFFFFFFF02C01808C2D>
+I E /Fk 3 109 df<FFFFFFFFFFFFC0000000FFFFFFFFFFFFFE000000FFFFFFFFFFFFFFC00000
+FFFFFFFFFFFFFFF00000FFFFFFFFFFFFFFFC0000001FFF800007FFFF0000001FFF8000007FFF80
+00001FFF8000000FFFE000001FFF80000007FFF000001FFF80000001FFF800001FFF80000000FF
+FC00001FFF800000007FFE00001FFF800000003FFF00001FFF800000001FFF00001FFF80000000
+0FFF80001FFF800000000FFFC0001FFF8000000007FFC0001FFF8000000007FFE0001FFF800000
+0003FFE0001FFF8000000003FFF0001FFF8000000003FFF0001FFF8000000003FFF8001FFF8000
+000001FFF8001FFF8000000001FFF8001FFF8000000001FFFC001FFF8000000001FFFC001FFF80
+00000001FFFC001FFF8000000001FFFC001FFF8000000001FFFC001FFF8000000001FFFE001FFF
+8000000000FFFE001FFF8000000000FFFE001FFF8000000000FFFE001FFF8000000000FFFE001F
+FF8000000000FFFE001FFF8000000000FFFE001FFF8000000000FFFE001FFF8000000000FFFE00
+1FFF8000000000FFFE001FFF8000000000FFFE001FFF8000000000FFFE001FFF8000000000FFFE
+001FFF8000000001FFFE001FFF8000000001FFFC001FFF8000000001FFFC001FFF8000000001FF
+FC001FFF8000000001FFFC001FFF8000000001FFF8001FFF8000000001FFF8001FFF8000000001
+FFF8001FFF8000000003FFF0001FFF8000000003FFF0001FFF8000000003FFF0001FFF80000000
+07FFE0001FFF8000000007FFE0001FFF800000000FFFC0001FFF800000000FFF80001FFF800000
+001FFF80001FFF800000003FFF00001FFF800000003FFE00001FFF800000007FFC00001FFF8000
+0001FFF800001FFF80000003FFF000001FFF8000000FFFE000001FFF8000007FFFC000001FFF80
+0003FFFF0000FFFFFFFFFFFFFFFE0000FFFFFFFFFFFFFFF80000FFFFFFFFFFFFFFC00000FFFFFF
+FFFFFFFE000000FFFFFFFFFFFFC00000004F477CC65B>68 D<00000000007FC00000000000FFFF
+C00000000000FFFFC00000000000FFFFC00000000000FFFFC00000000000FFFFC0000000000003
+FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC00000000000
+01FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC000000000
+0001FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000
+000001FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC00000
+000FFC01FFC0000000FFFF81FFC0000007FFFFE1FFC000001FFFFFF9FFC000007FFC03FFFFC000
+00FFF0007FFFC00001FFC0001FFFC00003FF80000FFFC00007FF000007FFC0000FFE000003FFC0
+000FFE000003FFC0001FFC000003FFC0001FFC000003FFC0003FFC000003FFC0003FFC000003FF
+C0007FF8000003FFC0007FF8000003FFC0007FF8000003FFC000FFF8000003FFC000FFF8000003
+FFC000FFF8000003FFC000FFF8000003FFC000FFF8000003FFC000FFF8000003FFC000FFF80000
+03FFC000FFF8000003FFC000FFF8000003FFC000FFF8000003FFC0007FF8000003FFC0007FF800
+0003FFC0007FF8000003FFC0003FF8000003FFC0003FFC000003FFC0003FFC000003FFC0001FFC
+000003FFC0001FFC000003FFC0000FFE000007FFC00007FF00000FFFC00003FF00001FFFC00001
+FFC0003FFFC00000FFE000FFFFE000007FF807FBFFFF80001FFFFFF3FFFF800007FFFFC3FFFF80
+0001FFFF03FFFF8000001FF803FFFF8039487CC742>100 D<007FC000FFFFC000FFFFC000FFFF
+C000FFFFC000FFFFC00003FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001
+FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC000
+01FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC0
+0001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FF
+C00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001
+FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC000
+01FFC00001FFC00001FFC00001FFC00001FFC000FFFFFF80FFFFFF80FFFFFF80FFFFFF80FFFFFF
+8019487CC720>108 D E end
+%%EndProlog
+%%BeginSetup
+%%Feature: *Resolution 300
+TeXDict begin
+%%EndSetup
+%%Page: 1 1
+bop 0 705 a Fk(Dld)p 0 738 1950 17 v 1319 789 a Fj(A)15 b(Dynamic)h
+(Link/Unlink)i(Editor)1682 843 y(V)l(ersion)e(3.2.3.)1277 897
+y(Cop)o(yrigh)o(t)1501 896 y(c)1490 897 y Fi(\015)f Fj(1991)f(W.)h(Wilson)h
+(Ho.)0 2534 y Fh(b)n(y)23 b(W.)g(Wilson)h(Ho)p 0 2570 1950
+9 v eop
+%%Page: 1 2
+bop 971 -58 a Fj(1)0 183 y Fg(1.)41 b(What)28 b(is)f(dld?)62
+354 y Ff(Dld)c Fj(is)e(a)f(library)h(pac)o(k)m(age)f(of)g(C)g(functions)h
+(that)f(p)q(erforms)g Ff(dynamic)h(link)h(editing)p Fj(.)37
+b(Programs)19 b(that)0 416 y(use)j(dld)h(can)f(add)g(compiled)i(ob)s(ject)d
+(co)q(de)h(to)g(or)f(remo)o(v)o(e)g(suc)o(h)h(co)q(de)h(from)e(a)g(pro)q
+(cess)h(an)o(ytime)g(during)0 478 y(its)d(execution.)31 b(Loading)20
+b(mo)q(dules,)g(searc)o(hing)f(libraries,)i(resolving)e(external)g
+(references,)h(and)f(allo)q(cating)0 540 y(storage)14 b(for)h(global)g(and)h
+(static)f(data)f(structures)h(are)g(all)h(p)q(erformed)g(at)e(run)i(time.)62
+677 y(Dld)g(is)g(no)o(w)e(a)o(v)m(ailable)j(for)e(V)-5 b(AX,)15
+b(Sun)h(3,)e(SP)l(AR)o(Cstation,)h(Sequen)o(t)h(Symmetry)l(,)f(and)g(A)o
+(tari)g(ST.)62 814 y(This)e(text)e(describ)q(es)j(ho)o(w)d(the)h(dld)h
+(functions)g(can)f(b)q(e)h(called)g(and)f(some)g(tec)o(hnical)h(details)g
+(that)e(should)i(b)q(e)0 877 y(a)o(w)o(are)f(of.)19 b(F)l(or)13
+b(the)h(in)o(ternals)g(of)f(dld)i(and)f(sample)g(applications,)h(please)f
+(refer)g(to)f Ff(An)g(Approac)o(h)h(to)f(Gen)o(uine)0 939 y(Dynamic)18
+b(Linking)p Fj(,)h(Soft)o(w)o(are{Practice)d(and)h(Exp)q(erirnce,)i(V)l(ol.)
+26 b(21\(4\),)16 b(375-390)g(\(April)i(1991\).)24 b(An)18 b(early)0
+1001 y(draft)d(of)f(that)h(pap)q(er)g(is)h(included)i(with)d(this)h
+(distribution.)0 1209 y Fe(1.1)35 b(Initializi)o(ng)20 b(Dld)62
+1346 y Fj(T)l(o)d(use)g(an)o(y)g(of)g(the)g(dld)h(functions,)g(y)o(ou)f(m)o
+(ust)f(include)k(the)d(header)g(\014le)i Fd(dld.h)d Fj(for)g(declaration)i
+(of)f(the)0 1408 y(functions)f(and)f(de\014nition)i(of)e(the)g(error)g(co)q
+(de)h(constan)o(ts.)62 1545 y(The)21 b(function)h Fd(dld_init)d
+Fj(m)o(ust)i(b)q(e)g(called)h(b)q(efore)f(an)o(y)g(other)f(dld)i(functions.)
+37 b(It)21 b(has)f(the)h(follo)o(wing)0 1607 y(syn)o(tax:)120
+1744 y Fd(int)i(dld_init)g(\(char)g(*)p Ff(path)p Fd(\))0 1881
+y Fj(where)15 b Ff(path)h Fj(is)f(a)g(string)g(con)o(taining)h(the)f(path)h
+(name)f(of)g(the)g(executable)h(\014le)h(of)d(the)i(executing)g(pro)q(cess.)
+62 2018 y(This)d(function)f(initialize)q(s)i(in)o(ternal)f(data)e(structures)
+h(of)f(dld)i(and)f(loads)g(in)o(to)g(memory)f(sym)o(b)q(ol)h(de\014nitions)0
+2080 y(of)17 b(the)g(executing)h(pro)q(cess.)27 b(By)17 b(doing)h(so,)f
+(other)f(dynamically)j(loaded)f(functions)g(can)g(reference)g(sym)o(b)q(ols)0
+2143 y(already)d(de\014ned)i(or)e(share)g(functions)h(already)f(exist)h(in)g
+(the)f(executing)h(pro)q(cess.)62 2280 y Fd(dld_init)i Fj(returns)g(0)g(when)
+h(successful;)i(otherwise,)e(it)f(returns)h(an)f(error)g(co)q(de)h(that)e(is)
+i(non-zero)g(\(see)0 2342 y(Section)d(1.10)e([De\014nition)i(of)f(Error)f(Co)
+q(des],)h(page)g(8\).)0 2533 y Fc(1.1.1)29 b(Lo)r(cating)18
+b(the)h(Executable)h(File)62 2670 y Fj(The)c(path)f(name)g(of)g(the)h
+(executing)g(pro)q(cess)g(as)f(required)h(b)o(y)f Fd(dld_init)g
+Fj(migh)o(t)g(not)g(b)q(e)h(easily)g(obtained)p eop
+%%Page: 2 3
+bop 971 -58 a Fj(2)0 183 y(all)13 b(the)g(time.)19 b(Not)12
+b(all)i(systems)e(passes)g(the)g(en)o(tire)h(path)g(name)f(of)g(the)h
+(executable)h(\014le)f(as)f(the)h(\014rst)f(argumen)o(t)0 246
+y(\()p Fd(argv[0])p Fj(\))d(to)i Fd(main)p Fj(.)18 b(In)11
+b(order)g(to)f(obtain)i(the)f(full)h(path)f(of)g(the)g(executable)h(\014le,)g
+(the)g Fd(dld_find_executable)0 308 y Fj(function)k(can)f(b)q(e)h(used.)21
+b(This)15 b(function)i(has)e(the)g(follo)o(wing)h(syn)o(tax:)120
+447 y Fd(char)23 b(*dld_find_executable)e(\(char)j(*)p Ff(command)r
+Fd(\))0 586 y(dld_find_executable)14 b Fj(returns)i(the)h(absolute)f(path)h
+(name)f(of)g(the)h(\014le)g(that)f(w)o(ould)h(b)q(e)g(executed)g(if)g
+Ff(com-)0 648 y(mand)k Fj(w)o(ere)e(giv)o(en)h(as)f(a)g(command.)32
+b(It)19 b(lo)q(oks)h(up)g(the)f(en)o(vironmen)o(t)h(v)m(ariable)g
+Ff(P)l(A)l(TH)p Fj(,)g(searc)o(hes)f(in)h(eac)o(h)0 710 y(of)c(the)h
+(directory)f(listed)i(for)e Ff(command)p Fj(,)g(and)h(returns)f(the)h
+(absolute)g(path)f(name)h(for)f(the)g(\014rst)g(o)q(ccurrence.)0
+772 y(Th)o(us,)f(it)g(is)h(advisable)g(to)f(in)o(v)o(ok)o(e)g
+Fd(dld_init)f Fj(as:)120 911 y Fd(main)23 b(\(int)h(argc,)f(char)g(**argv\))
+120 961 y({)215 1011 y Fb(:)7 b(:)g(:)215 1061 y Fd(if)24 b(\(dld_init)f
+(\(dld_find_executable)e(\(argv[0]\)\)\))h({)311 1111 y Fb(:)7
+b(:)g(:)215 1161 y Fd(})215 1210 y Fb(:)g(:)g(:)120 1260 y
+Fd(})120 1399 y Fa(Note:)30 b Fj(If)21 b(the)f(curren)o(t)h(pro)q(cess)g(is)g
+(executed)g(using)g(the)g Fd(execve)f Fj(call)h(without)g(passing)g(the)120
+1449 y(correct)16 b(path)g(name)h(as)f(argumen)o(t)g(0,)g Fd
+(dld_find_executable)c(\(argv[0]\))31 b Fj(will)18 b(also)e(fail)i(to)120
+1499 y(lo)q(cate)e(the)f(executable)h(\014le.)62 1638 y Fd
+(dld_find_executable)g Fj(returns)i(zero)f(if)i Fd(command)e
+Fj(is)i(not)e(found)i(in)f(an)o(y)g(of)g(the)g(directories)h(listed)g(in)0
+1700 y Fd(PATH)p Fj(.)0 1942 y Fe(1.2)35 b(Dynamically)21 b(Linking)h(in)g
+(New)g(Mo)r(dules)62 2081 y Fj(The)d(function)h Fd(dld_link)e
+Fj(dynamically)i(links)h(in)e(the)g(named)g(relo)q(catable)h(ob)s(ject)e(or)h
+(library)g(\014le)h(in)o(to)0 2143 y(memory)l(.)g(It)15 b(has)g(the)g(follo)o
+(wing)h(syn)o(tax:)120 2282 y Fd(int)23 b(dld_link)g(\(char)g(*)p
+Ff(\014lename)s Fd(\))0 2421 y Fj(where)11 b Ff(\014lename)k
+Fj(is)d(the)f(path)g(name)h(of)e(the)i(\014le)g(to)f(b)q(e)g(link)o(ed.)21
+b(Sp)q(eci\014cally)l(,)15 b(if)c(the)h(named)f(\014le)h(is)g(a)f(relo)q
+(catable)0 2483 y(ob)s(ject)h(\014le,)i(it)f(is)g(completely)h(loaded)f(in)o
+(to)g(memory)l(.)18 b(If)13 b(it)g(is)g(a)g(library)g(\014le,)h(only)f(those)
+f(mo)q(dules)i(de\014ning)g(an)0 2545 y(unresolv)o(ed)j(external)g(reference)
+h(are)e(loaded.)25 b(Since)18 b(a)e(mo)q(dule)i(in)f(the)f(library)i(ma)o(y)e
+(itself)h(reference)g(other)0 2608 y(routines)g(in)g(the)g(library)l(,)g
+(loading)h(it)e(ma)o(y)g(generate)g(more)g(unresolv)o(ed)i(external)f
+(references.)24 b(Therefore,)16 b(a)0 2670 y(library)f(\014le)h(is)f(searc)o
+(hed)f(rep)q(eatedly)i(un)o(til)f(a)f(scan)h(through)f(all)h(library)g(mem)o
+(b)q(ers)g(is)g(made)f(without)h(ha)o(ving)p eop
+%%Page: 3 4
+bop 971 -58 a Fj(3)0 183 y(to)15 b(load)g(an)o(y)g(new)g(mo)q(dules.)62
+320 y(Storage)g(for)h(the)g(text)g(and)g(data)g(of)f(the)i(dynamically)h
+(link)o(ed)g(mo)q(dules)f(is)f(allo)q(cated)i(using)e Fd(malloc)p
+Fj(.)22 b(In)0 382 y(other)15 b(w)o(ords,)f(they)h(are)g(k)o(ept)g(in)h(the)f
+Ff(heap)i Fj(of)e(the)g(executing)i(pro)q(cess.)62 519 y(After)f(all)i(mo)q
+(dules)f(are)f(loaded,)h Fd(dld_link)f Fj(resolv)o(es)g(as)g(man)o(y)g
+(external)h(references)g(as)f(p)q(ossible.)25 b(Note)0 582
+y(that)15 b(some)g(sym)o(b)q(ols)g(migh)o(t)g(still)i(b)q(e)f(unde\014ned)h
+(at)e(this)g(stage,)f(b)q(ecause)j(the)e(mo)q(dules)h(de\014ning)h(them)e(ha)
+o(v)o(e)0 644 y(not)g(y)o(et)g(b)q(een)h(loaded.)62 781 y(If)c(the)g(sp)q
+(eci\014ed)h(mo)q(dule)g(is)f(link)o(ed)h(successfully)l(,)h
+Fd(dld_link)c Fj(returns)h(0;)h(otherwise,)h(it)e(returns)h(a)f(non-zero)0
+843 y(error)j(co)q(de)i(\(see)f(Section)i(1.10)d([De\014nition)i(of)e(Error)h
+(Co)q(des],)f(page)h(8\).)0 1064 y Fe(1.3)35 b(Unlinking)22
+b(a)h(Mo)r(dule)62 1201 y Fj(The)14 b(ma)s(jor)e(di\013erence)j(b)q(et)o(w)o
+(een)e(dld)i(and)e(other)g(dynamic)i(link)o(er)f(is)g(that)f(dld)i(allo)o(ws)
+e(ob)s(ject)g(mo)q(dules)i(to)0 1263 y(b)q(e)h(remo)o(v)o(ed)g(from)f(the)h
+(pro)q(cess)g(an)o(ytime)g(during)g(execution.)23 b(Unlinking)18
+b(a)e(mo)q(dule)h(is)f(simply)h(the)f(rev)o(erse)0 1325 y(of)f(the)g(link)i
+(op)q(eration)e(\(see)h(Section)g(1.3.1)d([Imp)q(ortan)o(t)i(P)o(oin)o(ts)f
+(in)j(Using)e(Unlink],)i(page)e(4\).)k(The)d(sp)q(eci\014ed)0
+1387 y(mo)q(dule)e(is)f(remo)o(v)o(ed)f(and)g(the)h(memory)f(allo)q(cated)i
+(to)d(it)i(is)g(reclaimed.)21 b(Additionally)l(,)15 b(resolution)e(of)g
+(external)0 1450 y(references)j(m)o(ust)e(b)q(e)i(undone.)62
+1587 y(There)g(are)f(t)o(w)o(o)e(unlink)18 b(functions:)120
+1724 y Fd(int)23 b(dld_unlink_by_file)f(\(char)h(*)p Ff(path)p
+Fd(,)h(int)f Ff(hard)r Fd(\))120 1823 y(int)g(dld_unlink_by_symbol)f(\(char)h
+(*)p Ff(id)p Fd(,)h(int)g Ff(hard)r Fd(\))0 1960 y Fj(The)10
+b(t)o(w)o(o)f(unlink)j(functions)f(are)f(basically)i(the)e(same)g(except)h
+(that)e Fd(dld_unlink_by_file)f Fj(tak)o(es)h(as)h(argumen)o(t)0
+2022 y(the)18 b(path)f(name)h(\()p Ff(path)p Fj(\))f(of)g(a)g(\014le)i
+(corresp)q(onding)g(to)e(a)g(mo)q(dule)i(previously)g(link)o(ed)g(in)f(b)o(y)
+g Fd(dld_link)p Fj(,)f(but)0 2085 y Fd(dld_unlink_by_symbol)12
+b Fj(unlinks)18 b(the)d(mo)q(dule)h(that)f(de\014nes)h(the)f(sp)q(eci\014ed)i
+(sym)o(b)q(ol)f(\()p Ff(id)r Fj(\).)62 2222 y(Both)c(functions)g(tak)o(e)f(a)
+h(second)g(argumen)o(t)f Ff(hard)p Fj(.)18 b(When)13 b Ff(hard)g
+Fj(is)f(non-zero)g(\()p Ff(hard)g(unlink)s Fj(\),)h(the)f(sp)q(eci\014ed)0
+2284 y(mo)q(dule)k(is)f(remo)o(v)o(ed)f(from)g(memory)g(unconditionally)l(.)
+22 b(On)15 b(the)g(other)f(hand,)h(if)g Ff(hard)h Fj(is)f(zero)g(\()p
+Ff(soft)e(unlink)s Fj(\),)0 2346 y(this)f(mo)q(dule)g(is)f(remo)o(v)o(ed)g
+(from)f(memory)h(only)h(if)f(it)g(is)h(not)f(referenced)h(b)o(y)f(an)o(y)g
+(other)f(mo)q(dules.)20 b(F)l(urthermore,)0 2408 y(if)14 b(unlinking)i(a)d
+(mo)q(dule)h(results)g(in)g(lea)o(ving)h(some)e(other)g(mo)q(dules)h(b)q
+(eing)h(unreferenced,)g(these)e(unreferenced)0 2471 y(mo)q(dules)j(are)f
+(also)g(remo)o(v)o(ed.)62 2608 y(Hard)f(unlink)j(is)e(usually)g(used)g(when)g
+(y)o(ou)f(w)o(an)o(t)f(to)h(explicitly)j(remo)o(v)o(e)d(a)g(mo)q(dule)h(and)g
+(probably)g(replace)0 2670 y(it)h(b)o(y)f(a)h(di\013eren)o(t)f(mo)q(dule)i
+(with)f(the)g(same)f(name.)21 b(F)l(or)15 b(example,)h(y)o(ou)f(ma)o(y)g(w)o
+(an)o(t)g(to)g(replace)h(the)g(system's)p eop
+%%Page: 4 5
+bop 971 -58 a Fj(4)0 183 y Fd(printf)19 b Fj(b)o(y)h(y)o(our)f(o)o(wn)h(v)o
+(ersion.)34 b(When)20 b(y)o(ou)f(link)j(in)e(y)o(our)g(v)o(ersion)g(of)f
+Fd(printf)p Fj(,)h(dld)h(will)h(automatically)0 246 y(redirect)16
+b(all)g(references)g(to)e Fd(printf)h Fj(to)f(the)i(new)f(v)o(ersion.)62
+393 y(Soft)g(unlink)i(should)g(b)q(e)f(used)f(when)h(y)o(ou)f(are)g(not)g
+(sure)h(if)f(the)h(sp)q(eci\014ed)h(mo)q(dule)g(is)e(still)i(needed.)22
+b(If)15 b(y)o(ou)0 455 y(just)g(w)o(an)o(t)f(to)h(clean)h(up)f(unnecessary)h
+(functions,)g(it)f(is)h(alw)o(a)o(ys)e(safe)h(to)g(use)g(soft)g(unlink.)62
+603 y(Both)g(unlink)i(functions)f(returns)f(0)g(if)h(the)f(sp)q(eci\014ed)j
+(ob)s(ject)c(\014le)i(or)f(sym)o(b)q(ol)h(is)f(previously)i(loaded.)k(Oth-)0
+665 y(erwise,)15 b(they)h(return)f(a)g(non-zero)g(error)g(co)q(de)g(\(see)h
+(Section)g(1.10)e([De\014nition)i(of)f(Error)f(Co)q(des],)g(page)h(8\).)0
+968 y Fc(1.3.1)29 b(Imp)r(ortan)n(t)19 b(P)n(oin)n(ts)h(in)f(Using)g(Unlink)
+62 1115 y Fj(When)13 b(a)f(mo)q(dule)h(is)f(b)q(eing)i(unlink)o(ed,)g(dld)f
+(tries)g(to)e(clean)i(up)g(as)e(m)o(uc)o(h)i(as)e(it)i(can)f(to)f(restore)h
+(the)g(executing)0 1177 y(pro)q(cess)18 b(to)f(a)h(state)e(as)i(if)g(this)g
+(mo)q(dule)h(has)f(nev)o(er)g(b)q(een)h(link)o(ed.)29 b(This)18
+b(clean)h(up)f(includes)i(remo)o(ving)e(and)0 1240 y(reclaiming)g(the)e
+(memory)f(for)g(storing)h(the)g(text)f(and)h(data)f(segmen)o(t)h(of)f(the)h
+(mo)q(dule,)h(and)f Ff(un-de\014ning)22 b Fj(an)o(y)0 1302
+y(global)16 b(sym)o(b)q(ols)f(de\014ned)i(b)o(y)e(this)h(mo)q(dule.)62
+1450 y(Ho)o(w)o(ev)o(er,)j(side)h(e\013ects|suc)o(h)f(as)g(mo)q(di\014cation)
+h(of)f(global)g(v)m(ariables,)i(input/output)f(op)q(erations,)g(and)0
+1512 y(allo)q(cations)15 b(of)f(new)g(memory)g(blo)q(c)o(ks|caused)i(b)o(y)e
+(the)g(execution)h(of)f(an)o(y)g(function)h(in)g(this)f(mo)q(dule)i(are)d
+(not)0 1574 y(rev)o(ersed.)19 b(Th)o(us,)14 b(it)f(is)h(the)f(resp)q
+(onsibili)q(t)o(y)i(of)e(the)h(programmer)e(to)g(explicitly)k(carry)d(out)g
+(all)h(necessary)g(clean)0 1636 y(up)i(op)q(erations)f(b)q(efore)g(unlinking)
+j(a)d(mo)q(dule.)0 1955 y Fe(1.4)35 b(In)n(v)n(oking)24 b(Dynamically)c(Link)
+n(ed)j(F)-6 b(unctions)62 2103 y Fj(Dynamically)14 b(link)o(ed)g(functions)g
+(ma)o(y)e(still)i(b)q(e)f(in)o(v)o(ok)o(ed)g(from)e(mo)q(dules)j(\(e.g.,)e
+Fd(main)p Fj(\))f(that)h(do)h(not)f(con)o(tain)0 2165 y(references)20
+b(to)f(suc)o(h)g(functions.)33 b(The)20 b(function)g Fd(dld_get_func)e
+Fj(returns)h(the)h(en)o(try)e(p)q(oin)o(t)i(of)f(the)h(named)0
+2228 y(function.)g(This)15 b(returned)g(v)m(alue)g(can)g(later)f(b)q(e)h
+(used)g(as)e(a)h(p)q(oin)o(ter)h(to)f(the)g(function.)20 b(Similarly)l(,)d
+(the)d(address)0 2290 y(of)h(a)g(global)g(v)m(ariable)i(can)e(b)q(e)h
+(obtained)g(b)o(y)f(the)h(function)g Fd(dld_get_symbol)p Fj(:)120
+2423 y Fd(unsigned)23 b(long)g(dld_get_symbol)f(\(char)h(*)p
+Ff(id)r Fd(\))120 2522 y(unsigned)g(long)g(dld_get_func)f(\(char)h(*)p
+Ff(func)s Fd(\))0 2670 y Fj(A)15 b(t)o(ypical)h(use)g(of)f
+Fd(dld_get_func)e Fj(w)o(ould)j(b)q(e:)p eop
+%%Page: 5 6
+bop 971 -58 a Fj(5)120 119 y Fd({)215 169 y(void)24 b(\(*func\))f(\(\);)215
+218 y(int)h(error_code;)215 318 y Fb(:)7 b(:)g(:)215 418 y
+Fd(/*)24 b(First,)f(link)g(in)h(the)f(object)g(file)h("my_object_file.o".)287
+467 y(Proceed)f(only)g(if)h(the)f(link)h(operation)e(is)i(successful,)e(i.e.)
+i(it)f(returns)g(0.)287 517 y("my_new_func")f(is)i(a)f(function)g(defined)g
+(in)h("my_object_file.o".)287 567 y(Set)f(func)h(to)f(point)h(at)f(the)h
+(entry)f(point)g(of)h(this)f(function)g(and)g(then)287 617
+y(Invoke)g(it)h(indirectly)e(through)h(func.)g(*/)215 716 y(if)h
+(\(\(error_code)e(=)i(dld_link)f(\("my_object_file.o"\)\))e(==)i(0\))h({)311
+766 y(if)f(\(\(func)h(=)f(\(void)g(\(*\))h(\(\)\))f(get_func)g
+(\("my_new_func"\)\))f(!=)h(0\))406 816 y(\(*func\))g(\(\);)311
+866 y Fb(:)7 b(:)g(:)215 916 y Fd(})24 b(else)f({)215 1015
+y Fb(:)7 b(:)g(:)215 1065 y Fd(})120 1115 y(})62 1254 y Fj(Both)16
+b Fd(dld_get_func)f Fj(and)h Fd(dld_get_symbol)e Fj(return)i(zero)g(if)h(the)
+f(named)g(function)h(or)f(sym)o(b)q(ol)g(cannot)0 1316 y(b)q(e)g(found.)0
+1555 y Fe(1.5)35 b(Determining)20 b(If)j(a)g(F)-6 b(unction)23
+b(is)f(Executable)62 1694 y Fj(Since)f(dld)f(allo)o(ws)f(mo)q(dules)h(to)e(b)
+q(e)i(added)g(to)e(or)g(remo)o(v)o(ed)h(from)f(an)h(executing)h(pro)q(cess)f
+(dynamically)l(,)0 1756 y(some)d(global)g(sym)o(b)q(ols)g(ma)o(y)f(not)h(b)q
+(e)h(de\014ned.)23 b(As)16 b(a)f(result,)h(an)g(in)o(v)o(o)q(cation)h(of)e(a)
+h(function)g(migh)o(t)g(reference)0 1818 y(an)f(unde\014ned)i(sym)o(b)q(ol.)j
+(W)l(e)15 b(sa)o(y)f(that)h(a)f(function)i(is)f Ff(executable)k
+Fj(if)d(and)f(only)g(if)h(all)g(its)f(external)g(references)0
+1880 y(ha)o(v)o(e)g(b)q(een)h(fully)h(resolv)o(ed)e(and)h(all)g(functions)g
+(that)e(it)i(migh)o(t)f(call)h(are)f(executable.)62 2019 y(The)k(predicate)h
+(function)f Fd(dld_function_executable_p)c Fj(helps)20 b(solv)o(e)f(this)g
+(problem)g(b)o(y)f(tracing)h(the)0 2081 y(cross)13 b(references)i(b)q(et)o(w)
+o(een)f(mo)q(dules)h(and)e(returns)h(non-zero)g(only)g(if)h(the)e(named)h
+(function)h(is)f(executable.)21 b(It)0 2144 y(has)15 b(the)g(follo)o(wing)h
+(syn)o(tax:)120 2282 y Fd(int)23 b(dld_function_executable_p)e(\(char)i(*)p
+Ff(func)s Fd(\))62 2421 y Fj(Note)13 b(that)e(the)i(implemen)o(tation)h(of)e
+Fd(dld_function_executable_p)d Fj(is)k(not)g(complete)g(according)g(to)f(the)
+0 2483 y(\(recursiv)o(e\))18 b(de\014nition)h(of)e(executabilit)o(y)l(.)29
+b(External)17 b(references)i(through)e(p)q(oin)o(ters)h(are)f(not)g(traced.)
+27 b(That)0 2545 y(is,)22 b Fd(dld_function_executable)o(_p)17
+b Fj(will)22 b(still)g(return)e(non-zero)h(if)f(the)h(named)f(function)h
+(uses)g(a)e(p)q(oin)o(ter)0 2608 y(to)d(indirectly)j(call)e(another)f
+(function)i(whic)o(h)f(has)g(already)f(b)q(een)i(unlink)o(ed.)26
+b(F)l(urthermore,)16 b(if)h(one)g(external)0 2670 y(reference)22
+b(of)f(a)g(ob)s(ject)g(mo)q(dule)h(is)g(unresolv)o(ed,)h(all)f(functions)h
+(de\014ned)f(in)g(this)g(mo)q(dule)h(are)e(considered)p eop
+%%Page: 6 7
+bop 971 -58 a Fj(6)0 183 y(unexecutable.)22 b(Therefore,)14
+b Fd(dld_function_executable_p)e Fj(is)k(usually)g(to)q(o)f(conserv)m(ativ)o
+(e.)62 320 y(Ho)o(w)o(ev)o(er,)d(it)h(is)g(advisable)h(to)e(use)h
+Fd(dld_function_executable_p)c Fj(to)j(c)o(hec)o(k)h(if)g(a)f(function)i(is)f
+(executable)0 382 y(b)q(efore)k(its)f(in)o(v)o(o)q(cation.)24
+b(In)17 b(suc)o(h)g(a)f(dynamic)h(en)o(vironmen)o(t)f(where)h(ob)s(ject)f(mo)
+q(dules)h(are)f(b)q(eing)i(added)f(and)0 445 y(remo)o(v)o(ed,)h(a)f(function)
+i(that)e(is)h(executable)h(at)f(one)g(p)q(oin)o(t)g(in)h(time)f(migh)o(t)f
+(not)h(b)q(e)g(executable)i(at)d(another.)0 507 y(Under)d(most)e
+(circumstances,)j Fd(dld_function_executable_)o(p)c Fj(is)j(accurate.)19
+b(Also,)13 b(the)h(implemen)o(tation)g(of)0 569 y(this)i(function)g(has)f(b)q
+(een)h(optimized)h(and)e(it)g(is)h(relativ)o(ely)h(c)o(heap)e(to)g(use.)0
+792 y Fe(1.6)35 b(Listing)22 b(the)g(Unde\014ned)h(Sym)n(b)r(ols)62
+928 y Fj(The)15 b(function)h Fd(dld_list_undefined_sym)c Fj(returns)j(an)g
+(arra)o(y)f(of)g(unde\014ned)j(global)f(sym)o(b)q(ol)f(names.)20
+b(It)0 991 y(has)15 b(the)g(follo)o(wing)h(syn)o(tax:)120 1128
+y Fd(char)23 b(**dld_list_undefined_sym)e(\(\))0 1265 y Fj(The)e(list)g
+(returned)g(con)o(tains)f(all)h(the)g(sym)o(b)q(ols)f(that)g(ha)o(v)o(e)g(b)q
+(een)i(referenced)f(b)o(y)f(some)g(mo)q(dules)i(but)e(ha)o(v)o(e)0
+1327 y(not)e(b)q(een)i(de\014ned.)25 b(This)18 b(function)f(is)g(designed)h
+(for)e(debugging,)i(esp)q(ecially)h(in)e(the)g(case)g(when)g(a)f(function)0
+1389 y(is)g(found)f(to)g(b)q(e)h(not)e(executable)j(but)e(y)o(ou)g(do)g(not)g
+(kno)o(w)g(what)f(the)i(missing)g(sym)o(b)q(ols)f(are.)62 1526
+y(The)e(length)f(of)g(the)g(arra)o(y)f(is)h(giv)o(en)h(b)o(y)f(the)g(global)g
+(v)m(ariable)i Fd(dld_undefined_sym_count)p Fj(,)9 b(whic)o(h)k(alw)o(a)o(ys)
+0 1589 y(holds)j(the)g(curren)o(t)g(total)f(n)o(um)o(b)q(er)h(of)f
+(unde\014ned)j(global)e(sym)o(b)q(ols.)22 b(Note)15 b(that)g(all)h(C)g(sym)o
+(b)q(ols)g(are)f(listed)i(in)0 1651 y(their)f(in)o(ternal)g(represen)o
+(tation|i.e.,)f(they)g(are)g(pre\014xed)h(b)o(y)g(the)f(underscore)h(c)o
+(haracter)e(`)p Fd(_)p Fj('.)62 1788 y(Storage)h(for)h(the)g(arra)o(y)e
+(returned)j(is)f(allo)q(cated)h(b)o(y)f Fd(malloc)p Fj(.)21
+b(It)16 b(is)h(the)f(programmer's)e(resp)q(onsibilit)o(y)19
+b(to)0 1850 y(release)d(this)f(storage)f(b)o(y)i Fd(free)e
+Fj(when)i(it)f(is)h(not)f(needed)h(an)o(ymore.)0 2072 y Fe(1.7)35
+b(Explicitly)20 b(Referencing)g(a)k(Sym)n(b)r(ol)62 2209 y
+Fj(Normally)l(,)19 b(a)e(library)h(mo)q(dule)g(is)g(loaded)h(only)e(when)h
+(it)g(de\014nes)h(one)e(of)g(more)g(sym)o(b)q(ols)h(that)f(has)g(b)q(een)0
+2271 y(referenced.)27 b(T)l(o)17 b(force)g(a)g(library)h(routine)g(to)e(b)q
+(e)i(loaded,)h(one)e(need)h(to)f(explicitly)j(create)d(a)g(reference)h(to)e
+(a)0 2334 y(sym)o(b)q(ol)h(de\014ned)h(b)o(y)e(that)g(library)h(routine.)24
+b(The)16 b(function)h Fd(dld_create_reference)d Fj(is)j(designed)h(for)e
+(this)0 2396 y(purp)q(ose:)120 2533 y Fd(int)23 b(dld_create_reference)f
+(\(char)h(*)p Ff(name)s Fd(\))0 2670 y Fj(Usually)18 b Ff(name)g
+Fj(is)f(the)g(name)f(of)g(the)g(library)h(routine)g(that)f(should)h(b)q(e)g
+(loaded,)g(but)g(it)f(can)h(b)q(e)g(an)o(y)f(sym)o(b)q(ol)p
+eop
+%%Page: 7 8
+bop 971 -58 a Fj(7)0 183 y(de\014ned)15 b(b)o(y)e(that)g(routine.)20
+b(After)13 b(suc)o(h)h(a)g(reference)g(has)f(b)q(een)i(created,)f(linking)h
+(the)f(appropriate)g(library)g(b)o(y)0 246 y Fd(dld_link)g
+Fj(w)o(ould)i(cause)f(the)g(required)i(library)f(routine)f(to)g(b)q(e)h
+(loaded.)62 383 y(If)e(the)g(call)g(is)g(successful,)h Fd
+(dld_create_reference)c Fj(returns)i(0;)h(otherwise,)f(it)h(returns)g(a)f
+(non-zero)h(error)0 445 y(co)q(de)i(\(see)f(Section)h(1.10)e([De\014nition)i
+(of)f(Error)f(Co)q(des],)h(page)g(8\).)62 582 y(The)e(library)h(routine)f
+(loaded)h(b)o(y)f(this)g(metho)q(d)g(can)g(b)q(e)h(unlink)o(ed)h(b)o(y)e
+Fd(dld_unlink_by_symbol)f(\()p Ff(name)s Fd(\))p Fj(.)0 645
+y(Once)17 b(it)e(has)h(b)q(een)h(unlink)o(ed,)g(the)f(corresp)q(onding)g
+(reference)h(created)e(b)o(y)h Fd(dld_create_reference)d Fj(is)j(also)0
+707 y(remo)o(v)o(ed)f(so)f(that)h(this)h(routine)f(will)i(not)e(b)q(e)h
+(loaded)g(in)g(again)f(b)o(y)g(subsequen)o(t)h(linking)h(of)e(the)g(library)l
+(.)0 934 y Fe(1.8)35 b(Explicitly)20 b(De\014ning)i(a)h(Sym)n(b)r(ol)62
+1071 y Fj(Dld)17 b(allo)o(ws)f(a)g(programmer)f(to)g(explicitly)k(de\014ne)e
+(global)g(sym)o(b)q(ols.)23 b(That)15 b(is,)h(a)g(programmer)f(can)h(force)0
+1133 y(a)g(sym)o(b)q(ol)i(to)e(ha)o(v)o(e)g(storage)g(assigned)h(for)f(it.)25
+b(This)17 b(is)h(esp)q(ecially)h(useful)f(in)f(incremen)o(tal)h(program)e
+(testing)0 1196 y(where)e(the)g(function)g(b)q(eing)h(tested)f(needs)h(to)e
+(access)h(some)f(global)h(v)m(ariables)i(whic)o(h)e(are)g(de\014ned)h(b)o(y)e
+(another)0 1258 y(function)19 b(not)f(y)o(et)g(link)o(ed)j(in)e(\(or)e(ev)o
+(en)i(not)f(y)o(et)g(written\).)30 b(There)19 b(are)f(t)o(w)o(o)f(functions)i
+(related)g(to)f(explicit)0 1320 y(de\014nition:)120 1458 y
+Fd(int)23 b(dld_define_sym)f(\(char)i(*)p Ff(name)p Fd(,)f(unsigned)g(int)g
+Ff(size)s Fd(\))120 1507 y(void)g(dld_remove_defined_symbol)e(\(char)i(*)p
+Ff(name)s Fd(\))0 1645 y(dld_define_sym)10 b Fj(forces)i(dld)i(to)e(allo)q
+(cate)h Ff(size)j Fj(b)o(ytes)c(for)f(sym)o(b)q(ol)i Ff(name)p
+Fj(.)19 b(It)13 b(can)f(b)q(e)h(called)h(b)q(efore)f(or)f(after)f(a)0
+1707 y(reference)i(to)f Ff(name)j Fj(is)e(made.)19 b(If)12
+b(references)h(to)f Ff(name)j Fj(already)e(exist)g(when)g(it)f(is)h
+(de\014ned,)h(all)g(suc)o(h)e(references)0 1769 y(are)j(directed)h(to)f(p)q
+(oin)o(t)g(to)g(the)g(correct)g(address)g(allo)q(cated)i(for)d
+Ff(name)p Fj(.)62 1907 y Fd(dld_define_sym)i Fj(returns)h(0)h(if)g
+(successful.)28 b(Otherwise,)19 b(it)f(returns)f(a)h(non-zero)f(error)g(co)q
+(de)i(\(see)e(Sec-)0 1969 y(tion)e(1.10)f([De\014nition)j(of)d(Error)h(Co)q
+(des],)f(page)h(8\).)k(The)d(t)o(ypical)g(error)e(is)i(a)f(m)o(ultiple)i
+(de\014nition)g(of)e Ff(name)p Fj(.)62 2106 y(When)c(the)f(de\014nition)i(of)
+e Ff(name)i Fj(is)f(no)f(longer)h(needed,)h(it)e(can)g(b)q(e)h(remo)o(v)o(ed)
+f(b)o(y)g Fd(dld_remove_define_symbol)p Fj(.)0 2333 y Fe(1.9)35
+b(Prin)n(ting)22 b(out)h(the)g(Error)h(Messages)62 2470 y Fj(The)19
+b(function)g Fd(dld_perror)e Fj(prin)o(ts)i(out)f(a)g(short)f(message)h
+(explaining)j(the)d(error)g(returns)g(b)o(y)h(the)f(last)0
+2533 y(dld)e(functions:)120 2670 y Fd(void)23 b(dld_perror)g(\(char)g(*)p
+Ff(user)p Fd(_)p Ff(mesg)t Fd(\))p eop
+%%Page: 8 9
+bop 971 -58 a Fj(8)0 183 y(where)15 b Ff(user)p Fd(_)p Ff(mesg)k
+Fj(is)d(a)f(user-supplied)j(string)d(prep)q(ended)i(to)e(the)g(error)f
+(message.)0 407 y Fe(1.10)36 b(De\014nition)21 b(of)i(Error)h(Co)r(des)62
+544 y Fj(The)19 b(dld)g(functions)g(return)f(a)f(non-zero)i(error)e(co)q(de)i
+(when)f(they)g(fail.)30 b(The)18 b(de\014nitions)i(of)d(these)i(error)0
+607 y(co)q(des)d(are:)120 730 y Fd(DLD_ENOFILE)186 b Fj(cannot)15
+b(op)q(en)h(\014le.)120 792 y Fd(DLD_EBADMAGIC)138 b Fj(bad)15
+b(magic)h(n)o(um)o(b)q(er.)120 854 y Fd(DLD_EBADHEADER)114
+b Fj(failure)16 b(reading)g(header.)120 916 y Fd(DLD_ENOTEXT)186
+b Fj(premature)15 b(eof)g(in)h(text)f(section.)120 979 y Fd(DLD_ENOSYMBOLS)
+114 b Fj(premature)15 b(eof)g(in)h(sym)o(b)q(ols.)120 1041
+y Fd(DLD_ENOSTRINGS)114 b Fj(bad)15 b(string)h(table.)120 1103
+y Fd(DLD_ENOTXTRELOC)90 b Fj(premature)15 b(eof)g(in)h(text)f(relo)q(cation.)
+120 1165 y Fd(DLD_ENODATA)186 b Fj(premature)15 b(eof)g(in)h(data)e(section.)
+120 1228 y Fd(DLD_ENODATRELOC)90 b Fj(premature)15 b(eof)g(in)h(data)e(relo)q
+(cation.)120 1290 y Fd(DLD_EMULTDEFS)138 b Fj(m)o(ultiple)17
+b(de\014nitions)g(of)e(sym)o(b)q(ol.)120 1352 y Fd(DLD_EBADLIBRARY)90
+b Fj(malformed)15 b(library)h(arc)o(hiv)o(e.)120 1414 y Fd(DLD_EBADCOMMON)114
+b Fj(common)15 b(blo)q(c)o(k)h(not)f(supp)q(orted.)120 1477
+y Fd(DLD_EBADOBJECT)114 b Fj(malformed)15 b(input)h(\014le)h(\(not)d(ob)s
+(ject)h(\014le)h(or)f(arc)o(hiv)o(e\).)120 1539 y Fd(DLD_EBADRELOC)138
+b Fj(bad)15 b(relo)q(cation)h(info.)120 1601 y Fd(DLD_ENOMEMORY)138
+b Fj(virtual)16 b(memory)e(exhausted.)120 1664 y Fd(DLD_EUNDEFSYM)138
+b Fj(unde\014ned)17 b(sym)o(b)q(ol.)p eop
+%%Trailer
+end
+userdict /end-hook known{end-hook}if
+%%EOF
diff -rup --new-file baseline/fsf/dld/doc/dld.texinfo amiga/fsf/dld/doc/dld.texinfo
--- baseline/fsf/dld/doc/dld.texinfo Wed Dec 31 17:00:00 1969
+++ amiga/fsf/dld/doc/dld.texinfo Sat Sep 28 00:00:00 1996
@@ -0,0 +1,509 @@
+\input texinfo @c -*- texinfo -*-
+@c %**start of header
+@setfilename dld.info
+@settitle Dld
+@c %**end of header
+
+@iftex
+@finalout
+@end iftex
+
+@ifinfo
+This file documents dld, a dynamic link/unlink editor.
+
+This is edition 1.2 of the dld documentation.
+
+Copyright (C) 1991 W. Wilson Ho.
+
+Permission is granted to make and distribute verbatim copies of
+this manual provided the copyright notice and this permission notice
+are preserved on all copies.
+
+Permission is granted to copy and distribute modified versions of this
+manual under the conditions for verbatim copying, provided that the entire
+resulting derived work is distributed under the terms of a permission
+notice identical to this one.
+@end ifinfo
+
+@iftex
+@titlepage
+@title Dld
+@subtitle A Dynamic Link/Unlink Editor
+@subtitle Version 3.2.3.
+@subtitle Copyright @copyright{} 1991 W. Wilson Ho.
+@author by W. Wilson Ho
+@end titlepage
+@setchapternewpage off
+@headings off
+@everyheading @| @thispage @|
+@end iftex
+
+@node Top, dld_init, (dir), (dir)
+@comment node-name, next, previous, up
+@chapter What is dld?
+
+@dfn{Dld} is a library package of C functions that performs @dfn{dynamic
+link editing}. Programs that use dld can add compiled object
+code to or remove such code from a process anytime during its execution.
+Loading modules, searching libraries, resolving external references, and
+allocating storage for global and static data structures are all
+performed at run time.
+
+Dld is now available for VAX, Sun 3, SPARCstation, Sequent Symmetry, and
+Atari ST.
+
+This text describes how the dld functions can be called and some
+technical details that should be aware of. For the internals of dld and
+sample applications, please refer to @cite{An Approach to Genuine
+Dynamic Linking}, Software--Practice and Experirnce, Vol. 21(4), 375-390
+(April 1991). An early draft of that paper is included with this
+distribution.
+
+@menu
+* dld_init:: Initializing Dld
+* dld_link:: Dynamically Linking in New Modules
+* dld_unlink:: Unlinking a Module
+* dld_get_func:: Invoking Dynamically Linked Functions
+* Executability:: Determining If a Function is Executable
+* dld_list_undefined_sym:: Listing the Undefined Symbols
+* dld_create_reference:: Explicitly Referencing a Symbol
+* Explicit Definition:: Explicitly Defining a Symbol
+* dld_perror:: Printing out the Error Messages
+* Error Codes:: Definition of Error Codes
+@end menu
+
+@node dld_init, dld_link, Top, Top
+@comment node-name, next, previous, up
+@section Initializing Dld
+
+To use any of the dld functions, you must include the header file
+@code{dld.h} for declaration of the functions and definition of the
+error code constants.
+
+The function @code{dld_init} must be called before any other dld
+functions. It has the following syntax:
+
+@example
+int dld_init (char *@var{path})
+@end example
+
+@noindent
+where @var{path} is a string containing the path name of the executable
+file of the executing process.
+
+This function initializes internal data structures of dld and
+loads into memory symbol definitions of the executing process. By doing
+so, other dynamically loaded functions can reference symbols already
+defined or share functions already exist in the executing process.
+
+@code{dld_init} returns 0 when successful; otherwise, it returns an
+error code that is non-zero (@pxref{Error Codes, , Definition of Error
+Codes}).
+
+@menu
+* dld_find_executable:: Locating the Executable File
+@end menu
+
+@node dld_find_executable, , dld_init, dld_init
+@comment node-name, next, previous, up
+@subsection Locating the Executable File
+
+The path name of the executing process as required by @code{dld_init}
+might not be easily obtained all the time. Not all systems passes the
+entire path name of the executable file as the first argument
+(@code{argv[0]}) to @code{main}. In order to obtain the full path of
+the executable file, the @code{dld_find_executable} function can be
+used. This function has the following syntax:
+
+@example
+char *dld_find_executable (char *@var{command})
+@end example
+
+@noindent
+@code{dld_find_executable} returns the absolute path name of the file
+that would be executed if @var{command} were given as a command. It
+looks up the environment variable @var{PATH}, searches in each of the
+directory listed for @var{command}, and returns the absolute path name
+for the first occurrence. Thus, it is advisable to invoke
+@code{dld_init} as:
+
+@example
+main (int argc, char **argv)
+@{
+ @dots{}
+ if (dld_init (dld_find_executable (argv[0]))) @{
+ @dots{}
+ @}
+ @dots{}
+@}
+@end example
+
+@quotation
+@strong{Note:} If the current process is executed using the
+@code{execve} call without passing the correct path name as argument 0,
+@code{dld_find_executable (argv[0]) } will also fail to locate the
+executable file.
+@end quotation
+
+@code{dld_find_executable} returns zero if @code{command} is not found
+in any of the directories listed in @code{PATH}.
+
+@node dld_link, dld_unlink, dld_init, Top
+@comment node-name, next, previous, up
+@section Dynamically Linking in New Modules
+
+The function @code{dld_link} dynamically links in the named relocatable
+object or library file into memory. It has the following syntax:
+
+@example
+int dld_link (char *@var{filename})
+@end example
+
+@noindent
+where @var{filename} is the path name of the file to be linked.
+Specifically, if the named file is a relocatable object file, it is
+completely loaded into memory. If it is a library file, only those
+modules defining an unresolved external reference are loaded. Since a
+module in the library may itself reference other routines in the
+library, loading it may generate more unresolved external references.
+Therefore, a library file is searched repeatedly until a scan through
+all library members is made without having to load any new modules.
+
+Storage for the text and data of the dynamically linked modules is
+allocated using @code{malloc}. In other words, they are kept in the
+@emph{heap} of the executing process.
+
+After all modules are loaded, @code{dld_link} resolves as many external
+references as possible. Note that some symbols might still be undefined
+at this stage, because the modules defining them have not yet been
+loaded.
+
+If the specified module is linked successfully, @code{dld_link} returns
+0; otherwise, it returns a non-zero error code (@pxref{Error Codes, ,
+Definition of Error Codes}).
+
+@node dld_unlink, dld_get_func, dld_link, Top
+@comment node-name, next, previous, up
+@section Unlinking a Module
+
+The major difference between dld and other dynamic linker is that
+dld allows object modules to be removed from the process anytime
+during execution. Unlinking a module is simply the reverse of the link
+operation (@pxref{Side Effect, , Important Points in Using Unlink}).
+The specified module is removed and the memory allocated to it is
+reclaimed. Additionally, resolution of external references must be
+undone.
+
+There are two unlink functions:
+
+@example
+int dld_unlink_by_file (char *@var{path}, int @var{hard})
+
+int dld_unlink_by_symbol (char *@var{id}, int @var{hard})
+@end example
+
+@noindent
+The two unlink functions are basically the same except that
+@code{dld_unlink_by_file} takes as argument the path name (@var{path})
+of a file corresponding to a module previously linked in by
+@code{dld_link}, but @code{dld_unlink_by_symbol} unlinks the module that
+defines the specified symbol (@var{id}).
+
+Both functions take a second argument @var{hard}. When @var{hard}
+is non-zero (@dfn{hard unlink}), the specified module is removed from
+memory unconditionally. On the other hand, if @var{hard} is zero
+(@dfn{soft unlink}), this module is removed from memory only if it is
+not referenced by any other modules. Furthermore, if unlinking a module
+results in leaving some other modules being unreferenced, these
+unreferenced modules are also removed.
+
+Hard unlink is usually used when you want to explicitly remove a module
+and probably replace it by a different module with the same name. For
+example, you may want to replace the system's @code{printf} by your own
+version. When you link in your version of @code{printf}, dld
+will automatically redirect all references to @code{printf} to the new
+version.
+
+Soft unlink should be used when you are not sure if the specified module
+is still needed. If you just want to clean up unnecessary functions, it
+is always safe to use soft unlink.
+
+Both unlink functions returns 0 if the specified object file or symbol
+is previously loaded. Otherwise, they return a non-zero error code
+(@pxref{Error Codes, , Definition of Error Codes}).
+
+@menu
+* Side Effect:: Important Points in Using Unlink.
+@end menu
+
+@node Side Effect, , dld_unlink, dld_unlink
+@comment node-name, next, previous, up
+@subsection Important Points in Using Unlink
+
+When a module is being unlinked, dld tries to clean up as much as
+it can to restore the executing process to a state as if this module has
+never been linked. This clean up includes removing and reclaiming the
+memory for storing the text and data segment of the module, and
+@dfn{un-defining} any global symbols defined by this module.
+
+However, side effects---such as modification of global variables,
+input/output operations, and allocations of new memory blocks---caused
+by the execution of any function in this module are not reversed. Thus,
+it is the responsibility of the programmer to explicitly carry out all
+necessary clean up operations before unlinking a module.
+
+@node dld_get_func, Executability, dld_unlink, Top
+@comment node-name, next, previous, up
+@section Invoking Dynamically Linked Functions
+
+Dynamically linked functions may still be invoked from modules (e.g.,
+@code{main}) that do not contain references to such functions. The
+function @code{dld_get_func} returns the entry point of the named
+function. This returned value can later be used as a pointer to the
+function. Similarly, the address of a global variable can be obtained
+by the function @code{dld_get_symbol}:
+
+@group
+@example
+unsigned long dld_get_symbol (char *@var{id})
+
+unsigned long dld_get_func (char *@var{func})
+@end example
+@end group
+
+@noindent
+A typical use of @code{dld_get_func} would be:
+
+@group
+@example
+@{
+ void (*func) ();
+ int error_code;
+
+ @dots{}
+
+ /* First, link in the object file "my_object_file.o".
+ Proceed only if the link operation is successful, i.e. it returns 0.
+ "my_new_func" is a function defined in "my_object_file.o".
+ Set func to point at the entry point of this function and then
+ Invoke it indirectly through func. */
+
+ if ((error_code = dld_link ("my_object_file.o")) == 0) @{
+ if ((func = (void (*) ()) get_func ("my_new_func")) != 0)
+ (*func) ();
+ @dots{}
+ @} else @{
+
+ @dots{}
+ @}
+@}
+@end example
+@end group
+
+Both @code{dld_get_func} and @code{dld_get_symbol} return zero if the
+named function or symbol cannot be found.
+
+@node Executability, dld_list_undefined_sym, dld_get_func, Top
+@comment node-name, next, previous, up
+@section Determining If a Function is Executable
+
+Since dld allows modules to be added to or removed from an executing
+process dynamically, some global symbols may not be defined. As a
+result, an invocation of a function might reference an undefined symbol.
+We say that a function is @dfn{executable} if and only if all its
+external references have been fully resolved and all functions that it
+might call are executable.
+
+The predicate function @code{dld_function_executable_p} helps solve this
+problem by tracing the cross references between modules and returns
+non-zero only if the named function is executable. It has the following
+syntax:
+
+@example
+int dld_function_executable_p (char *@var{func})
+@end example
+
+Note that the implementation of @code{dld_function_executable_p} is not
+complete according to the (recursive) definition of executability.
+External references through pointers are not traced. That is,
+@code{dld_function_executable_p} will still return non-zero if the named
+function uses a pointer to indirectly call another function which has
+already been unlinked. Furthermore, if one external reference of a
+object module is unresolved, all functions defined in this module are
+considered unexecutable. Therefore, @code{dld_function_executable_p} is
+usually too conservative.
+
+However, it is advisable to use @code{dld_function_executable_p} to
+check if a function is executable before its invocation. In such a
+dynamic environment where object modules are being added and removed, a
+function that is executable at one point in time might not be executable
+at another. Under most circumstances, @code{dld_function_executable_p}
+is accurate. Also, the implementation of this function has been
+optimized and it is relatively cheap to use.
+
+@node dld_list_undefined_sym, dld_create_reference, Executability, Top
+@comment node-name, next, previous, up
+@section Listing the Undefined Symbols
+
+The function @code{dld_list_undefined_sym} returns an array of undefined
+global symbol names. It has the following syntax:
+
+@example
+char **dld_list_undefined_sym ()
+@end example
+
+@noindent
+The list returned contains all the symbols that have been referenced
+by some modules but have not been defined. This function is designed
+for debugging, especially in the case when a function is found to be not
+executable but you do not know what the missing symbols are.
+
+The length of the array is given by the global variable
+@code{dld_undefined_sym_count}, which always holds the current total
+number of undefined global symbols. Note that all C symbols are listed
+in their internal representation---i.e., they are prefixed by the
+underscore character @samp{_}.
+
+Storage for the array returned is allocated by @code{malloc}. It is the
+programmer's responsibility to release this storage by @code{free} when
+it is not needed anymore.
+
+@node dld_create_reference, Explicit Definition, dld_list_undefined_sym, Top
+@comment node-name, next, previous, up
+@section Explicitly Referencing a Symbol
+
+Normally, a library module is loaded only when it defines one of more
+symbols that has been referenced. To force a library routine to be
+loaded, one need to explicitly create a reference to a symbol defined by
+that library routine. The function @code{dld_create_reference} is
+designed for this purpose:
+
+@example
+int dld_create_reference (char *@var{name})
+@end example
+
+@noindent
+Usually @var{name} is the name of the library routine that should be
+loaded, but it can be any symbol defined by that routine. After such a
+reference has been created, linking the appropriate library by
+@code{dld_link} would cause the required library routine to be loaded.
+
+If the call is successful, @code{dld_create_reference} returns 0;
+otherwise, it returns a non-zero error code (@pxref{Error Codes, ,
+Definition of Error Codes}).
+
+The library routine loaded by this method can be unlinked by
+@code{dld_unlink_by_symbol (@var{name})}. Once it has been unlinked,
+the corresponding reference created by @code{dld_create_reference} is
+also removed so that this routine will not be loaded in again by
+subsequent linking of the library.
+
+@node Explicit Definition, dld_perror, dld_create_reference, Top
+@comment node-name, next, previous, up
+@section Explicitly Defining a Symbol
+
+Dld allows a programmer to explicitly define global symbols. That is, a
+programmer can force a symbol to have storage assigned for it. This is
+especially useful in incremental program testing where the function
+being tested needs to access some global variables which are defined by
+another function not yet linked in (or even not yet written). There are
+two functions related to explicit definition:
+
+@example
+int dld_define_sym (char *@var{name}, unsigned int @var{size})
+void dld_remove_defined_symbol (char *@var{name})
+@end example
+
+@noindent
+@code{dld_define_sym} forces dld to allocate @var{size} bytes for symbol
+@var{name}. It can be called before or after a reference to @var{name}
+is made. If references to @var{name} already exist when it is defined,
+all such references are directed to point to the correct address
+allocated for @var{name}.
+
+@code{dld_define_sym} returns 0 if successful. Otherwise, it returns a
+non-zero error code (@pxref{Error Codes, , Definition of Error Codes}).
+The typical error is a multiple definition of @var{name}.
+
+When the definition of @var{name} is no longer needed, it can be removed
+by @code{dld_remove_define_symbol}.
+
+@node dld_perror, Error Codes, Explicit Definition, Top
+@comment node-name, next, previous, up
+@section Printing out the Error Messages
+
+The function @code{dld_perror} prints out a short message explaining the
+error returns by the last dld functions:
+
+@example
+void dld_perror (char *@var{user_mesg})
+@end example
+
+@noindent
+where @var{user_mesg} is a user-supplied string prepended to the error
+message.
+
+@node Error Codes, , dld_perror, Top
+@comment node-name, next, previous, up
+@section Definition of Error Codes
+
+The dld functions return a non-zero error code when they fail. The
+definitions of these error codes are:
+
+@group
+@quotation
+@iftex
+@tableindent = 1.5in
+@end iftex
+@table @code
+@item DLD_ENOFILE
+cannot open file.
+
+@item DLD_EBADMAGIC
+bad magic number.
+
+@item DLD_EBADHEADER
+failure reading header.
+
+@item DLD_ENOTEXT
+premature eof in text section.
+
+@item DLD_ENOSYMBOLS
+premature eof in symbols.
+
+@item DLD_ENOSTRINGS
+bad string table.
+
+@item DLD_ENOTXTRELOC
+premature eof in text relocation.
+
+@item DLD_ENODATA
+premature eof in data section.
+
+@item DLD_ENODATRELOC
+premature eof in data relocation.
+
+@item DLD_EMULTDEFS
+multiple definitions of symbol.
+
+@item DLD_EBADLIBRARY
+malformed library archive.
+
+@item DLD_EBADCOMMON
+common block not supported.
+
+@item DLD_EBADOBJECT
+malformed input file (not object file or archive).
+
+@item DLD_EBADRELOC
+bad relocation info.
+
+@item DLD_ENOMEMORY
+virtual memory exhausted.
+
+@item DLD_EUNDEFSYM
+undefined symbol.
+@end table
+@end quotation
+@end group
+@bye
diff -rup --new-file baseline/fsf/dld/find_exec.c amiga/fsf/dld/find_exec.c
--- baseline/fsf/dld/find_exec.c Fri Feb 10 06:10:46 1995
+++ amiga/fsf/dld/find_exec.c Sat Sep 28 00:00:00 1996
@@ -38,7 +38,7 @@ static char *
copy_of (s)
register char *s;
{
- register char *p = (char *) malloc (strlen(s)+1);
+ register char *p = (char *) malloc (strlen(s)+2);
if (!p) return 0;
diff -rup --new-file baseline/fsf/dld/gxxload.cc amiga/fsf/dld/gxxload.cc
--- baseline/fsf/dld/gxxload.cc Sat Mar 18 21:49:56 1995
+++ amiga/fsf/dld/gxxload.cc Sat Sep 28 00:00:00 1996
@@ -1,5 +1,6 @@
+#include <stdlib.h>
#include <stdio.h>
-#include <string.h>
+#include </ade/include/string.h>
#include <dld.h>
@@ -80,6 +81,6 @@ void dyn_unload(char * name)
if (strncmp(symbol,"_GLOBAL_$D",10) ) continue;
symbol[strlen(symbol) - 1] = '\0';
addr = (func_ptr) dld_get_func(symbol);
- if (addr != 0) (*addr)();
+ if (addr != 0 && dld_function_executable_p(symbol)) (*addr)();
}
}
diff -rup --new-file baseline/fsf/dld/manifests/src amiga/fsf/dld/manifests/src
--- baseline/fsf/dld/manifests/src Wed Dec 31 17:00:00 1969
+++ amiga/fsf/dld/manifests/src Sat Sep 28 00:00:00 1996
@@ -0,0 +1,60 @@
+fsf/dld/.name
+fsf/dld/COPYING
+fsf/dld/ChangeLog
+fsf/dld/Makefile
+fsf/dld/Product-Info
+fsf/dld/README
+fsf/dld/TAGS
+fsf/dld/TODO
+fsf/dld/ar2hunk.c
+fsf/dld/define.c
+fsf/dld/defs.h
+fsf/dld/dld-3.2.6.lsm
+fsf/dld/dld.c
+fsf/dld/dld.h
+fsf/dld/dld.texinfo
+fsf/dld/doc/SPE.ps
+fsf/dld/doc/dld.ps
+fsf/dld/doc/dld.texinfo
+fsf/dld/error.c
+fsf/dld/find_exec.c
+fsf/dld/get_func.c
+fsf/dld/get_symbol.c
+fsf/dld/gxxload.cc
+fsf/dld/list_undef.c
+fsf/dld/manifests/src
+fsf/dld/mk_dummy.c
+fsf/dld/readme.amiga
+fsf/dld/ref.c
+fsf/dld/remove.c
+fsf/dld/showsyms.c
+fsf/dld/test/EXPECTED-OUTPUT
+fsf/dld/test/Makefile
+fsf/dld/test/SAMPLE_INPUT
+fsf/dld/test/add1.c
+fsf/dld/test/add2.c
+fsf/dld/test/call_add1.c
+fsf/dld/test/call_add2.c
+fsf/dld/test/chain1.c
+fsf/dld/test/chain2.c
+fsf/dld/test/chain3.c
+fsf/dld/test/get-sym.c
+fsf/dld/test/gxxtest.cc
+fsf/dld/test/hello.c
+fsf/dld/test/list-undefined.c
+fsf/dld/test/main.c
+fsf/dld/test/need.c
+fsf/dld/test/overlay.c
+fsf/dld/test/print_arg.c
+fsf/dld/test/print_global.c
+fsf/dld/test/read-a.out.c
+fsf/dld/test/reload-test.c
+fsf/dld/test/reload-test.s
+fsf/dld/test/reload.c
+fsf/dld/test/remove.c
+fsf/dld/test/simple.c
+fsf/dld/test/sub.cc
+fsf/dld/test/test-define.c
+fsf/dld/ul_file.c
+fsf/dld/ul_symbol.c
+fsf/dld/wrap.c
diff -rup --new-file baseline/fsf/dld/readme.amiga amiga/fsf/dld/readme.amiga
--- baseline/fsf/dld/readme.amiga Wed Dec 31 17:00:00 1969
+++ amiga/fsf/dld/readme.amiga Sat Sep 28 00:00:00 1996
@@ -0,0 +1,114 @@
+A few notes on this Amiga port of dld-3.2.6, the GNU dynamic link editor.
+
+The original archive is available (among other places) from prep.ai.mit.edu
+in pub/gnu/jacal/dld-3.2.6.tar.gz. It is the successor of dld-3.2.3.tar.gz
+in the directory pub/gnu. It fixes at least one bug and adds c++ support, so
+that's why I chose this one to work from.
+
+When I started looking at dld I didn't expect that it could work at all on
+the Amiga, let alone with a relatively minor porting effort. However, I was
+able to compile the dld-library in one go, so the code itself was clean.
+After reading through the code I saw that the dld_init function reads the
+symbols of the variables in the executable and their values in a list.
+Other functions do the same thing for objects and *.a archives. The format
+used by GCC for objects and archives is currently identical to the BSD
+format, which was also used in dld. So, that part worked OK.
+
+The executable, however, uses hunks to store the symbols, so all I had to
+do was to add a function that would scan the executable for the symbols and
+figure out their real values. After implementing that, I suddenly had a
+working version of dld. Most of the tests ran without a problem (except for
+one or two weird ones that depend on a Unix process environment).
+
+The implementation of the symbol hunk scan was done in two stages: the first
+stage was to make a program to list all the symbols, the second stage patched
+that into dld. The scanning program is useful in its own right, so I
+included it in this archive (showsyms.c). I also changed the file reads and
+seeks to their buffered counterparts (fread, fseek) improving the
+performance.
+
+Now, this is all very nice, but it doesn't make it possible to use it as
+you would use a shared library. After all, you have to do a dld_init, get
+all the values of the functions you want to call using dld_get_symbol, etc.
+However, with a bit of thought I was able to put it to that use.
+
+The idea is to realize that for every program you do know one entry point:
+main. So I made a wrapper program, which initializes dld, forces it to link
+with the real program, using 'main' as a reference (more about that later),
+specifying the libraries to use for resolving all externals, and then it
+asks for the address of the main function of the program you want to call,
+dld finds at for you, resolving all externals and loading all the code and
+data stuff in the process. Then you call that function. So you need this
+wrapper program to start up the real program.
+
+The 'real' program cannot be a executable, as the normal linker would then
+try to resolve all externals, which is precisely what you do not want.
+Instead, the program is either a single object or a group of objects. In
+the last case you must pull them together into one *.a archive. Don't
+forget to 'ranlib' this!
+
+Unfortunately, the main function of your program must be redefined to
+dld_main. Either by changing the program or passing -Dmain=dld_main to the
+compiler. The reason for this is 1) the compiler apparently does something
+special for main functions (I encountered a reference to a __main function
+right after the start of main) and 2) dld_get_symbol("main") would return
+the address of the main function of the wrapper executable and not the one
+from your own program.
+
+While compiling wrap.c (the wrapper program) you can add a define
+-DADDLIBS="lib1;lib2;...". This define is a semi-colon separated list of
+libraries that should be passed to dld for dynamic linking. The default
+value is "/ade/lib/libgcc.a;/ade/lib/libc.a".
+
+Only one thing left to do: how to incorporate your own program into the
+wrapper program. One possibility was to just let wrap link your own program
+from a separate file (e.g. if your wrapper was called 'find' it would try
+to dynamically link a file 'find.o' or 'find.a' from the same place). But
+it much better and elegant to somehow add it into the wrapper so that there
+is only one file.
+
+I have decided to misuse the debughunk for that. The debughunk is never
+loaded into memory (which is what you want, as dld_link reads from file
+anyway) and when scanning through the hunks for the symbol definitions
+during the dld_init, the dld library can remember the offset and size of
+the debughunk on the fly. IF the debughunk starts with the magic cookie for
+a BSD object or archive, THEN it knows where to link in the object/archive.
+
+I wrote a small utility to put the object or archive into the debughunk of
+the wrapper executable. The source is ar2hunk.c.
+
+One small point remains: the dld linker needs the filename of the
+object/archive to link. It does not do to specify the name of the
+executable, as that is already used up by the dld_init. The filename was
+stored by dld so that it thinks that it already loaded that file. So I
+introduced a small hack into dld: if the filename passed to dld_link ends
+with ASCII code 1 (0x01 hex) it knows that it should read the debughunk
+from the file with the given filename but without the trailing 0x01 code.
+It's dirty, but for a first version it works very well.
+
+As a practical example, I ported the GNU find utility using this scheme.
+All stays the same, except for giving -Dmain=dld_main to GCC. The link step
+is a bit more complex: first compile the wrapper with the right setting for
+ADDLIBS. In this case, one would copy libfind.a to gnu:lib and specify:
+
+ gcc -O -o find wrap.c \
+ -DADDLIBS="/ade/lib/libfind.a;/ade/lib/libgcc.a;/ade/lib/libc.a".
+
+Next do:
+
+ ar q f.a *.o
+ ranlib f.a
+ ar2hunk find f.a
+
+
+And that does the trick. Except for the fact that the resulting find
+executable is actually bigger than it would have been without using this
+shared library mechanism, as all the symbol information takes up space too,
+and the dld library must be statically linked into the wrapper executable,
+with takes another 15-20 Kb.
+
+ Enjoy!
+
+ Hans Verkuil
+ July 8, 1995
+ hans@wyst.hobby.nl
diff -rup --new-file baseline/fsf/dld/showsyms.c amiga/fsf/dld/showsyms.c
--- baseline/fsf/dld/showsyms.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/dld/showsyms.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,154 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+static unsigned long get_num(int fd)
+{
+ unsigned long t;
+
+ read(fd, &t, 4);
+ return t;
+}
+
+static void skip(int fd, unsigned long t)
+{
+ lseek(fd, t * 4, SEEK_CUR);
+}
+
+static char *amiga_buf;
+static int amiga_bufsize, amiga_bufptr, amiga_desc, amiga_read;
+
+static void amiga_buf_init(int desc)
+{
+ amiga_desc = desc;
+ if (amiga_buf == NULL)
+ {
+ amiga_bufsize = 10240;
+ amiga_buf = (char *)malloc(amiga_bufsize);
+ }
+ amiga_read = read(amiga_desc, amiga_buf, amiga_bufsize);
+ amiga_bufptr = 0;
+}
+
+static unsigned long fget_num(void)
+{
+ if (amiga_bufptr == amiga_bufsize)
+ {
+ amiga_read = read(amiga_desc, amiga_buf, amiga_bufsize);
+ amiga_bufptr = 0;
+ }
+ amiga_bufptr += 4;
+ return *((long *)(amiga_buf + amiga_bufptr - 4));
+}
+
+static void fread_string(char *buf, int size)
+{
+ while (amiga_bufptr + size > amiga_bufsize)
+ {
+ int diff = amiga_bufsize - amiga_bufptr;
+
+ memcpy(buf, amiga_buf + amiga_bufptr, diff);
+ buf += diff;
+ size -= diff;
+ amiga_read = read(amiga_desc, amiga_buf, amiga_bufsize);
+ amiga_bufptr = 0;
+ }
+ memcpy(buf, amiga_buf + amiga_bufptr, size);
+ amiga_bufptr += size;
+}
+
+static void amiga_buf_term(void)
+{
+ lseek(amiga_desc, amiga_bufptr - amiga_read, SEEK_CUR);
+}
+
+static void
+amiga_read_file_symbols (desc)
+register int desc;
+{
+ int t, f, l;
+ int start, type, sdata, sbss;
+ int name_size = 500;
+ char *name;
+
+ if (get_num(desc) != 0x03f3)
+ exit(20);
+ name = (char *)malloc(name_size);
+ while (t = get_num(desc))
+ skip(desc, t);
+ get_num(desc);
+ f = get_num(desc);
+ l = get_num(desc);
+ skip(desc, l - f + 1);
+ while (l >= 0)
+ {
+ switch (t = get_num(desc))
+ {
+ case 0x03e9: /* text */
+ skip(desc, (t = get_num(desc)));
+ break;
+ case 0x03ea: /* data */
+ skip(desc, (sdata = get_num(desc)));
+ break;
+ case 0x03eb: /* bss */
+ sbss = get_num(desc) * 4;
+ break;
+ case 0x03e8: /* name */
+ case 0x03e7: /* unit */
+ case 0x03f1: /* debug */
+ skip(desc, get_num(desc));
+ break;
+ case 0x03ee: /* reloc8 */
+ case 0x03ed: /* reloc16 */
+ case 0x03ec: /* reloc32 */
+ while (t = get_num(desc))
+ skip(desc, t + 1);
+ break;
+ case 0x03ef: /* ext */
+ while (t = get_num(desc))
+ skip(desc, (t & 0xffffff) + 1);
+ break;
+ case 0x03f0: /* symbols */
+ amiga_buf_init(desc);
+ while (t = fget_num())
+ {
+ while (t >= name_size)
+ {
+ char *buf = (char *)malloc(name_size * 2);
+
+ free(name);
+ name = buf;
+ name_size *= 2;
+ }
+ fread_string(name, t * 4);
+ name[t * 4] = 0;
+ fget_num();
+ printf("%s\n", name);
+ }
+ amiga_buf_term();
+ break;
+ case 0x03f2: /* end */
+ l--;
+ break;
+ }
+ }
+ free(name);
+ if (amiga_buf)
+ free(amiga_buf);
+ amiga_buf = NULL;
+}
+
+main(int argc, char **argv)
+{
+ int fd;
+
+ while (argv[1])
+ {
+ fd = open(argv[1], O_RDONLY);
+ amiga_read_file_symbols(fd);
+ close(fd);
+ argv++;
+ }
+}
diff -rup --new-file baseline/fsf/dld/test/Makefile amiga/fsf/dld/test/Makefile
--- baseline/fsf/dld/test/Makefile Sun Mar 19 18:43:04 1995
+++ amiga/fsf/dld/test/Makefile Sat Sep 28 00:00:00 1996
@@ -1,15 +1,16 @@
-EXECS = call_add1 dld-test overlay reload reload-test simple call_add2
+EXECS = call_add1 dld-test overlay simple #call_add2 reload reload-test
OBJS = hello.o print_arg.o read-a.out.o list-undefined.o get-sym.o \
need.o test-define.o print_global.o remove.o sub.o
LIB = ../libdld.a
+LIBXX = ../libdld++.a
INCLUDE = ../dld.h
CC= gcc
CXX= g++
# add -static to CFLAGS for Sparc Sun4.
-CFLAGS = -O6 -I..
-CXXFLAGS = -O6 -I..
+CFLAGS = -I..
+CXXFLAGS = -I..
SPECIAL = -DLIBGCC=\"`gcc --print-lib`\"
check: all
@@ -18,11 +19,11 @@ all: ${EXECS} ${LIB}
-simple
# "test call_add1"
-call_add1
- -call_add2
+ #-call_add2
# "test overlay"
-overlay
# "test reload"
- -reload reload-test
+ #-reload reload-test
# "test general"
-dld-test <SAMPLE_INPUT
# "tests complete"
@@ -65,8 +66,8 @@ hello.o: hello.c
dld-test: $(LIB) $(INCLUDE) ${OBJS} main.o
${CC} ${CFLAGS} main.o $(LIB) -o dld-test
-gxxtest: $(LIB) $(INCLUDE) ${OBJS} gxxtest.o
- ${CXX} ${CXXFLAGS} gxxtest.o $(LIB) -o gxxtest
+gxxtest: $(LIBXX) $(INCLUDE) ${OBJS} gxxtest.o
+ ${CXX} ${CXXFLAGS} gxxtest.o $(LIBXX) -o gxxtest
gxxtest.o: gxxtest.cc
${CXX} -c ${CXXFLAGS} ${SPECIAL} gxxtest.cc
diff -rup --new-file baseline/fsf/dld/test/gxxtest.cc amiga/fsf/dld/test/gxxtest.cc
--- baseline/fsf/dld/test/gxxtest.cc Sat Mar 18 21:51:34 1995
+++ amiga/fsf/dld/test/gxxtest.cc Sat Sep 28 00:00:00 1996
@@ -10,8 +10,9 @@ LIBGCC, /* link in libgcc */
0
};
-main()
+main(int argc, char **argv)
{
+ dld_init(argv[0]);
cout<<"DLD function: "<<endl;
dld_link("sub.o");
dld_unlink_by_file("sub.o",0);
diff -rup --new-file baseline/fsf/dld/test/reload-test.s amiga/fsf/dld/test/reload-test.s
--- baseline/fsf/dld/test/reload-test.s Mon Dec 13 04:02:22 1993
+++ amiga/fsf/dld/test/reload-test.s Sat Sep 28 00:00:00 1996
@@ -1,32 +1,20 @@
- .file "reload-test.c"
- .data
-.comm _387_flt, 4
- .align 2
- .globl _k
-_k:
- .long 1
- .text
- .align 2
- .globl _main
+#NO_APP
+gcc2_compiled.:
+___gnu_compiled_c:
+.text
+LC0:
+ .ascii "Hello world! -- from reload-test\12\0"
+ .even
+.globl _main
_main:
- jmp .L15
-.L14:
- pushl $.L17
- call _printf
- popl %ecx
-/REGAL 0 NOFPA NODBL
-.L13:
- leave
- ret
-.L15:
- pushl %ebp
- movl %esp,%ebp
- jmp .L14
-/DEF _main;
- .data
-.L17:
-
- .byte 0x48,0x65,0x6c,0x6c,0x6f,0x20,0x77,0x6f,0x72,0x6c
- .byte 0x64,0x21,0x20,0x2d,0x2d,0x20,0x66,0x72,0x6f,0x6d
- .byte 0x20,0x72,0x65,0x6c,0x6f,0x61,0x64,0x2d,0x74,0x65
- .byte 0x73,0x74,0x0a,0x00
+ link a5,#0
+ jbsr ___main
+ pea LC0
+ jbsr _printf
+ addqw #4,sp
+ moveq #0,d0
+ jra L1
+L1:
+ unlk a5
+ rts
+.comm _end,4
diff -rup --new-file baseline/fsf/dld/test/reload.c amiga/fsf/dld/test/reload.c
--- baseline/fsf/dld/test/reload.c Mon Dec 13 04:02:22 1993
+++ amiga/fsf/dld/test/reload.c Sat Sep 28 00:00:00 1996
@@ -19,7 +19,7 @@ char *argv[];
/* unlink itself */
printf("unlink returned %d\n", dld_unlink_by_file (argv[0], 1));
- printf("link returnd %d\n",dld_link (argv[1]));
+ printf("link returned %d\n",dld_link (argv[1]));
#if defined(sequent)
func = (void (*)()) dld_get_func ("main");
(*func) ();
diff -rup --new-file baseline/fsf/dld/wrap.c amiga/fsf/dld/wrap.c
--- baseline/fsf/dld/wrap.c Wed Dec 31 17:00:00 1969
+++ amiga/fsf/dld/wrap.c Sat Sep 28 00:00:00 1996
@@ -0,0 +1,75 @@
+#include <stdio.h>
+#include <dld.h>
+
+#ifndef ADDLIBS
+#define ADDLIBS "/ade/lib/libgcc.a;/ade/lib/libc.a"
+#endif
+
+static char *libs = ADDLIBS;
+
+main(int argc, char **argv, char **env)
+{
+ char *p = libs;
+ int done = 0;
+ void (*func)(int, char **, char **);
+ char *exe;
+ char hack[2];
+
+ hack[0] = 1;
+ hack[1] = 0;
+ exe = dld_find_executable(argv[0]);
+ dld_init(exe);
+ dld_create_reference("dld_main");
+ strcat(exe, hack);
+ if (dld_link(exe))
+ {
+ dld_perror("could not link in dld_main function");
+ exit(1);
+ }
+ while (!done)
+ {
+ while (*p && *p != ';')
+ p++;
+ if (*p == '\0')
+ done = 1;
+ *p++ = '\0';
+ if (dld_link(libs))
+ {
+ char buf[1000];
+
+ strcpy(buf, "could not link in ");
+ strcat(buf, libs);
+ dld_perror(buf);
+ exit(1);
+ }
+ libs = p;
+ }
+
+ func = (void (*)(int, char **, char **))dld_get_symbol("dld_main");
+ if (func)
+ {
+ if (dld_function_executable_p("dld_main"))
+ {
+ func(argc, argv, env);
+ exit(0);
+ }
+ else
+ {
+ char **symbols;
+ int i;
+
+ fprintf(stderr, "dld_main is not executable\n");
+ symbols = dld_list_undefined_sym();
+ if (dld_undefined_sym_count != 0)
+ fprintf(stderr, "undefined symbols:\n");
+ for (i = 0; i < dld_undefined_sym_count; i++) {
+ fprintf(stderr, "%s\n", symbols[i]);
+ free(symbols[i]);
+ }
+ free(symbols);
+ }
+ }
+ else
+ fprintf(stderr, "dld_main not found\n");
+ exit(1);
+}