|
|
1.1 root 1: .\" Copyright (c) 1980, 1990 The Regents of the University of California.
2: .\" All rights reserved. The Berkeley software License Agreement
3: .\" specifies the terms and conditions for redistribution.
4: .\"
5: .\" @(#)ld.1 6.4 (Berkeley) 7/24/90
6: .\"
7: .Dd July 24, 1990
8: .Dt LD 1
9: .Os BSD 4
10: .Sh NAME
11: .Nm ld
12: .Nd link editor
13: .Sh SYNOPSIS
14: .Nm ld
15: .Op option
16: \&...
17: .Ar file ...
18: .Sh DESCRIPTION
19: .Nm Ld
20: combines several
21: object programs into one, resolves external
22: references, and searches libraries.
23: In the simplest case several object
24: .Ar files
25: are given, and
26: .Nm ld
27: combines them, producing
28: an object module which can be either executed or
29: become the input for a further
30: .Nm ld
31: run.
32: (In the latter case, the
33: .Fl r
34: option must be given
35: to preserve the relocation bits.)
36: The output of
37: .Nm ld
38: is left on
39: .Pa a.out .
40: This file is made executable
41: only if no errors occurred during the load.
42: .Pp
43: The argument routines are concatenated in the order
44: specified. The entry point of the output is the
45: beginning of the first routine (unless the
46: .Fl e
47: option is specified).
48: .Pp
49: If any argument is a library, it is searched exactly once
50: at the point it is encountered in the argument list.
51: Only those routines defining an unresolved external
52: reference are loaded.
53: If a routine from a library
54: references another routine in the library,
55: and the library has not been processed by
56: .Xr ranlib 1 ,
57: the referenced routine must appear after the
58: referencing routine in the library.
59: Thus the order of programs within libraries
60: may be important.
61: The first member of a library
62: should be a file named `\_\^\_.SYMDEF',
63: which is understood to be a dictionary for the library as produced by
64: .Xr ranlib 1 ;
65: the dictionary is searched iteratively to satisfy as many references as
66: possible.
67: .Pp
68: The symbols `\_etext', `\_edata' and `\_end'
69: (`etext', `edata' and `end' in C)
70: are reserved, and if referred to,
71: are set to the first location above the program,
72: the first location above initialized data,
73: and the first location above all data respectively.
74: It is erroneous to define these symbols.
75: .Pp
76: .Nm Ld
77: understands several options.
78: Except for
79: .Fl l ,
80: they should appear before the file names.
81: .Tw Ds
82: .Tp Fl A
83: This option specifies incremental loading, i.e.
84: linking is to be done in a manner so that the resulting object
85: may be read into an already executing program.
86: The next argument is the name of a file whose symbol table will be
87: taken as a basis on which to define additional symbols.
88: Only newly linked material will be entered into the text and
89: data portions of
90: .Xr a.out ,
91: but the new symbol table will reflect
92: every symbol defined before and after the incremental load.
93: This argument must appear before any other object file in the argument list.
94: The
95: .Fl T
96: option may be used as well, and will be taken to mean that the
97: newly linked segment will commence at the corresponding address
98: (which must be a multiple of 1024).
99: The default value is the old value of _end.
100: .Tp Fl D
101: Take the next argument as a hexadecimal number and pad the data segment
102: with zero bytes to the indicated length.
103: .Tp Fl d
104: Force definition of common storage
105: even if the
106: .Fl r
107: flag is present.
108: .Tp Fl e
109: The following argument is taken to be the
110: name of the entry point of the loaded
111: program; location 0 is the default.
112: .Tc Fl L
113: .Ar dir
114: .Cx
115: Add
116: .Ar dir
117: to the list of directories in which libraries are searched for.
118: Directories specified with
119: .Fl L
120: are searched before the standard directories.
121: .Tc Fl l
122: .Ar x
123: .Cx
124: This
125: option is an abbreviation for the library name
126: .Sq Pa libx.a,
127: where
128: .Ar x
129: is a string.
130: .Nm Ld
131: searches for libraries first in any directories
132: specified with
133: .Fl L
134: options, then in the standard directories
135: .Pa /lib ,
136: .Pa /usr/lib ,
137: and
138: .Pa /usr/local/lib .
139: A library is searched when its name is encountered,
140: so the placement of a
141: .Fl l
142: is significant.
143: .Tp Fl M
144: produce a primitive load map, listing the names of the files
145: which will be loaded.
146: .Tp Fl N
147: Do not make the text portion read only or sharable. (Use "magic number" 0407.)
148: .Tp Fl n
149: Arrange (by giving the output file a 0410 "magic number") that
150: when the output file is executed,
151: the text portion will be read-only and shared
152: among all users executing the file.
153: This involves moving the data areas up to the first
154: possible 1024 byte boundary following the
155: end of the text.
156: .Tp Fl o
157: The
158: .Ar name
159: argument after
160: .Fl o
161: is used as the name of the
162: .Nm ld
163: output file, instead of
164: .Pa a.out .
165: .Tp Fl r
166: Generate relocation bits in the output file
167: so that it can be the subject of another
168: .Nm ld
169: run.
170: This flag also prevents final definitions from being
171: given to common symbols,
172: and suppresses the `undefined symbol' diagnostics.
173: .Tp Fl S
174: `Strip' the output by removing all symbols except locals and globals.
175: .Tp Fl s
176: `Strip' the output, that is, remove the symbol table
177: and relocation bits to save space (but impair the
178: usefulness of the debuggers).
179: This information can also be removed by
180: .Xr strip 1 .
181: .Tp Fl T
182: The next argument is a hexadecimal number which sets the text segment origin.
183: The default origin is 0.
184: .Tp Fl t
185: ("trace") Print the name of each file as it is processed.
186: .Tp Fl u
187: Take the following argument as a symbol and enter
188: it as undefined in the symbol table. This is useful
189: for loading wholly from a library, since initially the symbol
190: table is empty and an unresolved reference is needed
191: to force the loading of the first routine.
192: .Tp Fl X
193: Save local symbols
194: except for those whose names begin with `L'.
195: This option is used by
196: .Xr cc 1
197: to discard internally-generated labels while
198: retaining symbols local to routines.
199: .Tp Fl x
200: Do not preserve local
201: (non-.globl) symbols in the output symbol table; only enter
202: external symbols.
203: This option saves some space in the output file.
204: .Tc Fl y
205: .Ar sym
206: .Cx
207: Indicate each file in which
208: .Ar sym
209: appears, its type and whether the file defines or references it.
210: Many such options may be given to trace many symbols.
211: (It is usually necessary to begin
212: .Ar sym
213: with an `_', as external C, FORTRAN and Pascal variables begin
214: with underscores.)
215: .Tp Fl z
216: Arrange for the process to be loaded on
217: demand from the resulting executable file (413 format)
218: rather than preloaded.
219: This is the default.
220: Results in a 1024 byte header on the output file followed by
221: a text and data segment each of which have size a multiple of 1024 bytes
222: (being padded out with nulls in the file if necessary).
223: With this format the first few BSS segment symbols may actually appear
224: (from the output of
225: .Xr size 1 )
226: to live in the data segment;
227: this to avoid wasting the space resulting from data segment size roundup.
228: .Tp
229: .Sh FILES
230: .Dw /usr/local/lib/lib*.a
231: .Di L
232: .Dp Pa /usr/lib/lib*.a
233: libraries
234: .Dp Pa /usr/local/lib/lib*.a
235: more libraries
236: .Dp Pa a.out
237: output file
238: .Dp
239: .Sh SEE ALSO
240: .Xr as 1 ,
241: .Xr ar 1 ,
242: .Xr cc 1 ,
243: .Xr ranlib 1
244: .Sh HISTORY
245: .Nm Ld
246: appeared in Version 6 AT&T Unix.
247: .Sh BUGS
248: There is no way to force data to be page aligned.
249: .Nm Ld
250: pads images which are to be demand loaded from
251: the file system to the next
252: page boundary to avoid a bug in the system.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.