|
|
1.1 ! root 1: ! 2: ! 3: ld Command ld ! 4: ! 5: ! 6: ! 7: ! 8: Link relocatable object files ! 9: ! 10: lldd [_o_p_t_i_o_n ...] _f_i_l_e ... ! 11: ! 12: A compiler translates a file of source code into a relocatable ! 13: object. This relocatable object cannot be executed by itself, ! 14: for calls to routines stored in libraries have not yet been ! 15: resolved. ld combines, or links, relocatable object files with ! 16: routines stored in libraries produced by the archiver ar to con- ! 17: struct an executable file. For this reason, ld is sometimes ! 18: called a linker, a link editor, or a loader. ! 19: ! 20: ld scans its arguments in order and interprets each option as ! 21: described below. Each non-option argument is either a relocat- ! 22: able object file, produced by cc, as, or ld, or a library archive ! 23: produced by ar. It rejects all other arguments and prints a ! 24: diagnostic message. ! 25: ! 26: Each relocatable file argument is bound into the output file if ! 27: its machine type matches the machine type of the first file so ! 28: bound; if it does not, ld prints a diagnostic message. The sym- ! 29: bol table of the file is merged into the output symbol table and ! 30: the list of defined and undefined symbols updated appropriately. ! 31: If the file redefines a symbol defined in an earlier bound ! 32: module, the redefinition is reported and the link continues. The ! 33: last such redefinition determines the value that the symbol will ! 34: have in the output file, which may be acceptable but is probably ! 35: an error. ! 36: ! 37: Each library archive argument is searched only to resolve un- ! 38: defined references, i.e., if there are no undefined symbols, the ! 39: linker goes to the next argument immediately. The library is ! 40: searched from first module to last and any module that resolves ! 41: one or more undefined symbols is bound into the output exactly as ! 42: an explicitly named relocatable file is bound. The library is ! 43: searched repeatedly until an entire scan adds nothing to the ex- ! 44: ecutable file. ! 45: ! 46: The order of modules in a library is important in two respects: ! 47: it will affect the time required to search the library, and, if ! 48: more than one module resolves an undefined symbol, it can alter ! 49: the set of library modules bound into the output. ! 50: ! 51: A library will link faster if the undefined symbols in any given ! 52: library module are resolved by a library module that comes later ! 53: in the library. Thus, the low-level library modules, those with ! 54: no undefined symbols, should come at the end of the library, ! 55: whereas the higher-level modules, those with many undefined sym- ! 56: bols, should come at the beginning. The library module ran- ! 57: lib.sym, which is maintained by the ar s modifier, provides ld ! 58: with a compressed index to the symbols defined in the library. ! 59: But even with the index, the library will link much faster if the ! 60: modules occur in top-down rather than bottom-up order. ! 61: ! 62: ! 63: ! 64: COHERENT Lexicon Page 1 ! 65: ! 66: ! 67: ! 68: ! 69: ld Command ld ! 70: ! 71: ! 72: ! 73: A library can be constructed to provide a type of ``conditional'' ! 74: linking if alternate resolutions of undefined symbols are ar- ! 75: chived in a carefully thought-out order. For instance, libc.a ! 76: contains the modules ! 77: ! 78: ! 79: finit.o ! 80: exit.o ! 81: _finish.o ! 82: ! 83: ! 84: in precisely the order given, though some other modules may in- ! 85: tervene. finit.o contains most of the internals of the STDIO ! 86: library, exit.o contains the exit() function, and _finish.o con- ! 87: tains an empty version of _finish(), the function that exit() ! 88: calls to close STDIO streams before process termination. If a ! 89: program uses any STDIO routines, macros, or data, then finit.o ! 90: will be bound into the output with its version of finish(). If a ! 91: program uses no STDIO, then the ``dummy'' _finish.o will be bound ! 92: into the output because it is the first module that defines ! 93: _finish() that the linker encounters after exit.o adds the un- ! 94: defined reference. This saves approximately 3,000 bytes. To set ! 95: the order of routines within a library, use the archiver ar. ! 96: ! 97: The available options are as follows: ! 98: ! 99: -dd Define common regions even if relocation information is ! 100: retained. By default, ld leaves common areas undefined if ! 101: there are undefined symbols or if the -r option is ! 102: specified. ! 103: ! 104: -ee _e_n_t_r_y ! 105: Specify the entry point of the output module, either as a ! 106: symbol or as an absolute octal address. ! 107: ! 108: -kk[_s_y_s_t_e_m] ! 109: Bind the output as a kernel process or linkable driver. The ! 110: starting address depends on the target machine, and ld scans ! 111: the system link file symbol table for symbols that are cur- ! 112: rently undefined. system defaults to /coherent. ! 113: ! 114: -ll _n_a_m_e ! 115: An abbreviation for the library /lliibb/lliibb_n_a_m_e.aa or ! 116: /uussrr/lliibb/lliibb_n_a_m_e.aa if the first is not found. ! 117: ! 118: -mm This option tells ld to perform in-memory load if possible. ! 119: This requires more memory, but is faster than using a buffer ! 120: file. ! 121: ! 122: -nn Bind the output with separate shared and private segments, ! 123: and with each starting on a hardware segment boundary, so ! 124: that several processes can use a single copy of the shared ! 125: segment simultaneously. ! 126: ! 127: ! 128: ! 129: ! 130: COHERENT Lexicon Page 2 ! 131: ! 132: ! 133: ! 134: ! 135: ld Command ld ! 136: ! 137: ! 138: ! 139: -oo _f_i_l_e ! 140: Write output to file (default, ll.oouutt.) ! 141: ! 142: -RR _v_a_l_u_e ! 143: Relocation base option. By default, ld links executeable ! 144: files to run at the user-base for the computer. In almost ! 145: all cases, the user-base is zero. If the -R option is used, ! 146: ld will link the executeable to run at value instead of at ! 147: zero. value can be set to any C-style constant, or to a ! 148: symbol name that ld can find in the object files and ar- ! 149: chives being linked; remember that a C-accessible symbol ! 150: must end with an underscore character `_'. This option is ! 151: used primarily to produce output files that can be burned ! 152: into ROM. These programs must make their own provisions for ! 153: relocating initialized data and other tasks. ! 154: ! 155: -rr Retain relocation information in the output, and issue no ! 156: diagnostic message for undefined symbols. By default ld ! 157: discards relocation information from the output if there are ! 158: no undefined symbols. ! 159: ! 160: -ss Strip the symbol table from the output. The same effect may ! 161: be obtained by using the command strip. The -s and -r op- ! 162: tions are mutually exclusive. ! 163: ! 164: -uu _s_y_m_b_o_l ! 165: Add symbol to the symbol table as a global reference, usu- ! 166: ally to force the linking of a particular library module. ! 167: ! 168: -XX Discard local compiler-generated symbols of the form `LL...'. ! 169: ! 170: -xx Discard all local symbols. ! 171: ! 172: ***** Files ***** ! 173: ! 174: ll.oouutt -- Default output ! 175: /ccoohheerreenntt for -kk option ! 176: /lliibb/lliibb*.aa -- Libraries ! 177: /uussrr/lliibb/lliibb*.aa -- More libraries ! 178: ! 179: ***** See Also ***** ! 180: ! 181: ar, ar.h, as, cc, commands, l.out.h, strip ! 182: ! 183: ***** Notes ***** ! 184: ! 185: By default, COHERENT allocates two kilobytes of stack to a ! 186: process. This is sufficient for most processes. To change the ! 187: amount of stack used by a given executable program, use the com- ! 188: mand fixstack. See its Lexicon entry for details. If you are ! 189: linking a program by hand (that is, running ld independently from ! 190: the cc command), be sure to include the appropriate run-time ! 191: start-up routine with the ld command line; otherwise, the program ! 192: will not link correctly. ! 193: ! 194: ! 195: ! 196: COHERENT Lexicon Page 3 ! 197: ! 198:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.