|
|
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.