1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23: #include "sysdep.h"
24: #include "bfd.h"
25: #include "bfdver.h"
26: #include "libiberty.h"
27: #include <stdio.h>
28: #include <string.h>
29: #include "safe-ctype.h"
30: #include "getopt.h"
31: #include "bfdlink.h"
32: #include "ld.h"
33: #include "ldmain.h"
34: #include "ldmisc.h"
35: #include "ldexp.h"
36: #include "ldlang.h"
37: #include <ldgram.h>
38: #include "ldlex.h"
39: #include "ldfile.h"
40: #include "ldver.h"
41: #include "ldemul.h"
42: #include "demangle.h"
43:
44: #ifndef PATH_SEPARATOR
45: #if defined (__MSDOS__) || (defined (_WIN32) && ! defined (__CYGWIN32__))
46: #define PATH_SEPARATOR ';'
47: #else
48: #define PATH_SEPARATOR ':'
49: #endif
50: #endif
51:
52:
53: #if !defined(S_ISDIR) && defined(S_IFDIR)
54: #define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
55: #endif
56:
57: static void set_default_dirlist (char *);
58: static void set_section_start (char *, char *);
59: static void set_segment_start (const char *, char *);
60: static void help (void);
61:
62:
63: int parsing_defsym = 0;
64:
65:
66:
67: enum option_values
68: {
69: OPTION_ASSERT = 150,
70: OPTION_CALL_SHARED,
71: OPTION_CREF,
72: OPTION_DEFSYM,
73: OPTION_DEMANGLE,
74: OPTION_DYNAMIC_LINKER,
75: OPTION_SYSROOT,
76: OPTION_EB,
77: OPTION_EL,
78: OPTION_EMBEDDED_RELOCS,
79: OPTION_EXPORT_DYNAMIC,
80: OPTION_HELP,
81: OPTION_IGNORE,
82: OPTION_MAP,
83: OPTION_NO_DEMANGLE,
84: OPTION_NO_KEEP_MEMORY,
85: OPTION_NO_WARN_MISMATCH,
86: OPTION_NO_WARN_SEARCH_MISMATCH,
87: OPTION_NOINHIBIT_EXEC,
88: OPTION_NON_SHARED,
89: OPTION_NO_WHOLE_ARCHIVE,
90: OPTION_OFORMAT,
91: OPTION_RELAX,
92: OPTION_RETAIN_SYMBOLS_FILE,
93: OPTION_RPATH,
94: OPTION_RPATH_LINK,
95: OPTION_SHARED,
96: OPTION_SONAME,
97: OPTION_SORT_COMMON,
98: OPTION_SORT_SECTION,
99: OPTION_STATS,
100: OPTION_SYMBOLIC,
101: OPTION_SYMBOLIC_FUNCTIONS,
102: OPTION_TASK_LINK,
103: OPTION_TBSS,
104: OPTION_TDATA,
105: OPTION_TTEXT,
106: OPTION_TRADITIONAL_FORMAT,
107: OPTION_UR,
108: OPTION_VERBOSE,
109: OPTION_VERSION,
110: OPTION_VERSION_SCRIPT,
111: OPTION_VERSION_EXPORTS_SECTION,
112: OPTION_DYNAMIC_LIST,
113: OPTION_DYNAMIC_LIST_CPP_NEW,
114: OPTION_DYNAMIC_LIST_CPP_TYPEINFO,
115: OPTION_DYNAMIC_LIST_DATA,
116: OPTION_WARN_COMMON,
117: OPTION_WARN_CONSTRUCTORS,
118: OPTION_WARN_FATAL,
119: OPTION_WARN_MULTIPLE_GP,
120: OPTION_WARN_ONCE,
121: OPTION_WARN_SECTION_ALIGN,
122: OPTION_SPLIT_BY_RELOC,
123: OPTION_SPLIT_BY_FILE ,
124: OPTION_WHOLE_ARCHIVE,
125: OPTION_ADD_NEEDED,
126: OPTION_NO_ADD_NEEDED,
127: OPTION_AS_NEEDED,
128: OPTION_NO_AS_NEEDED,
129: OPTION_WRAP,
130: OPTION_FORCE_EXE_SUFFIX,
131: OPTION_GC_SECTIONS,
132: OPTION_NO_GC_SECTIONS,
133: OPTION_PRINT_GC_SECTIONS,
134: OPTION_NO_PRINT_GC_SECTIONS,
135: OPTION_HASH_SIZE,
136: OPTION_CHECK_SECTIONS,
137: OPTION_NO_CHECK_SECTIONS,
138: OPTION_NO_UNDEFINED,
139: OPTION_INIT,
140: OPTION_FINI,
141: OPTION_SECTION_START,
142: OPTION_UNIQUE,
143: OPTION_TARGET_HELP,
144: OPTION_ALLOW_SHLIB_UNDEFINED,
145: OPTION_NO_ALLOW_SHLIB_UNDEFINED,
146: OPTION_ALLOW_MULTIPLE_DEFINITION,
147: OPTION_NO_UNDEFINED_VERSION,
148: OPTION_DEFAULT_SYMVER,
149: OPTION_DEFAULT_IMPORTED_SYMVER,
150: OPTION_DISCARD_NONE,
151: OPTION_SPARE_DYNAMIC_TAGS,
152: OPTION_NO_DEFINE_COMMON,
153: OPTION_NOSTDLIB,
154: OPTION_NO_OMAGIC,
155: OPTION_STRIP_DISCARDED,
156: OPTION_NO_STRIP_DISCARDED,
157: OPTION_ACCEPT_UNKNOWN_INPUT_ARCH,
158: OPTION_NO_ACCEPT_UNKNOWN_INPUT_ARCH,
159: OPTION_PIE,
160: OPTION_UNRESOLVED_SYMBOLS,
161: OPTION_WARN_UNRESOLVED_SYMBOLS,
162: OPTION_ERROR_UNRESOLVED_SYMBOLS,
163: OPTION_WARN_SHARED_TEXTREL,
164: OPTION_REDUCE_MEMORY_OVERHEADS,
165: OPTION_DEFAULT_SCRIPT
166: };
167:
168:
169:
170:
171: struct ld_option
172: {
173:
174: struct option opt;
175:
176: char shortopt;
177:
178: const char *arg;
179:
180:
181: const char *doc;
182: enum {
183:
184: ONE_DASH,
185:
186: TWO_DASHES,
187:
188:
189:
190:
191:
192:
193:
194:
195:
196: EXACTLY_TWO_DASHES,
197:
198: NO_HELP
199: } control;
200: };
201:
202: static const struct ld_option ld_options[] =
203: {
204: { {NULL, required_argument, NULL, '\0'},
205: 'a', N_("KEYWORD"), N_("Shared library control for HP/UX compatibility"),
206: ONE_DASH },
207: { {"architecture", required_argument, NULL, 'A'},
208: 'A', N_("ARCH"), N_("Set architecture") , TWO_DASHES },
209: { {"format", required_argument, NULL, 'b'},
210: 'b', N_("TARGET"), N_("Specify target for following input files"),
211: TWO_DASHES },
212: { {"mri-script", required_argument, NULL, 'c'},
213: 'c', N_("FILE"), N_("Read MRI format linker script"), TWO_DASHES },
214: { {"dc", no_argument, NULL, 'd'},
215: 'd', NULL, N_("Force common symbols to be defined"), ONE_DASH },
216: { {"dp", no_argument, NULL, 'd'},
217: '\0', NULL, NULL, ONE_DASH },
218: { {"entry", required_argument, NULL, 'e'},
219: 'e', N_("ADDRESS"), N_("Set start address"), TWO_DASHES },
220: { {"export-dynamic", no_argument, NULL, OPTION_EXPORT_DYNAMIC},
221: 'E', NULL, N_("Export all dynamic symbols"), TWO_DASHES },
222: { {"EB", no_argument, NULL, OPTION_EB},
223: '\0', NULL, N_("Link big-endian objects"), ONE_DASH },
224: { {"EL", no_argument, NULL, OPTION_EL},
225: '\0', NULL, N_("Link little-endian objects"), ONE_DASH },
226: { {"auxiliary", required_argument, NULL, 'f'},
227: 'f', N_("SHLIB"), N_("Auxiliary filter for shared object symbol table"),
228: TWO_DASHES },
229: { {"filter", required_argument, NULL, 'F'},
230: 'F', N_("SHLIB"), N_("Filter for shared object symbol table"),
231: TWO_DASHES },
232: { {NULL, no_argument, NULL, '\0'},
233: 'g', NULL, N_("Ignored"), ONE_DASH },
234: { {"gpsize", required_argument, NULL, 'G'},
235: 'G', N_("SIZE"), N_("Small data size (if no size, same as --shared)"),
236: TWO_DASHES },
237: { {"soname", required_argument, NULL, OPTION_SONAME},
238: 'h', N_("FILENAME"), N_("Set internal name of shared library"), ONE_DASH },
239: { {"dynamic-linker", required_argument, NULL, OPTION_DYNAMIC_LINKER},
240: 'I', N_("PROGRAM"), N_("Set PROGRAM as the dynamic linker to use"),
241: TWO_DASHES },
242: { {"library", required_argument, NULL, 'l'},
243: 'l', N_("LIBNAME"), N_("Search for library LIBNAME"), TWO_DASHES },
244: { {"library-path", required_argument, NULL, 'L'},
245: 'L', N_("DIRECTORY"), N_("Add DIRECTORY to library search path"),
246: TWO_DASHES },
247: { {"sysroot=<DIRECTORY>", required_argument, NULL, OPTION_SYSROOT},
248: '\0', NULL, N_("Override the default sysroot location"), TWO_DASHES },
249: { {NULL, required_argument, NULL, '\0'},
250: 'm', N_("EMULATION"), N_("Set emulation"), ONE_DASH },
251: { {"print-map", no_argument, NULL, 'M'},
252: 'M', NULL, N_("Print map file on standard output"), TWO_DASHES },
253: { {"nmagic", no_argument, NULL, 'n'},
254: 'n', NULL, N_("Do not page align data"), TWO_DASHES },
255: { {"omagic", no_argument, NULL, 'N'},
256: 'N', NULL, N_("Do not page align data, do not make text readonly"),
257: EXACTLY_TWO_DASHES },
258: { {"no-omagic", no_argument, NULL, OPTION_NO_OMAGIC},
259: '\0', NULL, N_("Page align data, make text readonly"),
260: EXACTLY_TWO_DASHES },
261: { {"output", required_argument, NULL, 'o'},
262: 'o', N_("FILE"), N_("Set output file name"), EXACTLY_TWO_DASHES },
263: { {NULL, required_argument, NULL, '\0'},
264: 'O', NULL, N_("Optimize output file"), ONE_DASH },
265: { {"Qy", no_argument, NULL, OPTION_IGNORE},
266: '\0', NULL, N_("Ignored for SVR4 compatibility"), ONE_DASH },
267: { {"emit-relocs", no_argument, NULL, 'q'},
268: 'q', NULL, "Generate relocations in final output", TWO_DASHES },
269: { {"relocatable", no_argument, NULL, 'r'},
270: 'r', NULL, N_("Generate relocatable output"), TWO_DASHES },
271: { {NULL, no_argument, NULL, '\0'},
272: 'i', NULL, NULL, ONE_DASH },
273: { {"just-symbols", required_argument, NULL, 'R'},
274: 'R', N_("FILE"), N_("Just link symbols (if directory, same as --rpath)"),
275: TWO_DASHES },
276: { {"strip-all", no_argument, NULL, 's'},
277: 's', NULL, N_("Strip all symbols"), TWO_DASHES },
278: { {"strip-debug", no_argument, NULL, 'S'},
279: 'S', NULL, N_("Strip debugging symbols"), TWO_DASHES },
280: { {"strip-discarded", no_argument, NULL, OPTION_STRIP_DISCARDED},
281: '\0', NULL, N_("Strip symbols in discarded sections"), TWO_DASHES },
282: { {"no-strip-discarded", no_argument, NULL, OPTION_NO_STRIP_DISCARDED},
283: '\0', NULL, N_("Do not strip symbols in discarded sections"), TWO_DASHES },
284: { {"trace", no_argument, NULL, 't'},
285: 't', NULL, N_("Trace file opens"), TWO_DASHES },
286: { {"script", required_argument, NULL, 'T'},
287: 'T', N_("FILE"), N_("Read linker script"), TWO_DASHES },
288: { {"default-script", required_argument, NULL, OPTION_DEFAULT_SCRIPT},
289: '\0', N_("FILE"), N_("Read default linker script"), TWO_DASHES },
290: { {"dT", required_argument, NULL, OPTION_DEFAULT_SCRIPT},
291: '\0', NULL, NULL, ONE_DASH },
292: { {"undefined", required_argument, NULL, 'u'},
293: 'u', N_("SYMBOL"), N_("Start with undefined reference to SYMBOL"),
294: TWO_DASHES },
295: { {"unique", optional_argument, NULL, OPTION_UNIQUE},
296: '\0', N_("[=SECTION]"),
297: N_("Don't merge input [SECTION | orphan] sections"), TWO_DASHES },
298: { {"Ur", no_argument, NULL, OPTION_UR},
299: '\0', NULL, N_("Build global constructor/destructor tables"), ONE_DASH },
300: { {"version", no_argument, NULL, OPTION_VERSION},
301: 'v', NULL, N_("Print version information"), TWO_DASHES },
302: { {NULL, no_argument, NULL, '\0'},
303: 'V', NULL, N_("Print version and emulation information"), ONE_DASH },
304: { {"discard-all", no_argument, NULL, 'x'},
305: 'x', NULL, N_("Discard all local symbols"), TWO_DASHES },
306: { {"discard-locals", no_argument, NULL, 'X'},
307: 'X', NULL, N_("Discard temporary local symbols (default)"), TWO_DASHES },
308: { {"discard-none", no_argument, NULL, OPTION_DISCARD_NONE},
309: '\0', NULL, N_("Don't discard any local symbols"), TWO_DASHES },
310: { {"trace-symbol", required_argument, NULL, 'y'},
311: 'y', N_("SYMBOL"), N_("Trace mentions of SYMBOL"), TWO_DASHES },
312: { {NULL, required_argument, NULL, '\0'},
313: 'Y', N_("PATH"), N_("Default search path for Solaris compatibility"),
314: ONE_DASH },
315: { {"start-group", no_argument, NULL, '('},
316: '(', NULL, N_("Start a group"), TWO_DASHES },
317: { {"end-group", no_argument, NULL, ')'},
318: ')', NULL, N_("End a group"), TWO_DASHES },
319: { {"accept-unknown-input-arch", no_argument, NULL,
320: OPTION_ACCEPT_UNKNOWN_INPUT_ARCH},
321: '\0', NULL,
322: N_("Accept input files whose architecture cannot be determined"),
323: TWO_DASHES },
324: { {"no-accept-unknown-input-arch", no_argument, NULL,
325: OPTION_NO_ACCEPT_UNKNOWN_INPUT_ARCH},
326: '\0', NULL, N_("Reject input files whose architecture is unknown"),
327: TWO_DASHES },
328: { {"add-needed", no_argument, NULL, OPTION_ADD_NEEDED},
329: '\0', NULL, N_("Set DT_NEEDED tags for DT_NEEDED entries in\n"
330: "\t\t\t\tfollowing dynamic libs"), TWO_DASHES },
331: { {"no-add-needed", no_argument, NULL, OPTION_NO_ADD_NEEDED},
332: '\0', NULL, N_("Do not set DT_NEEDED tags for DT_NEEDED entries\n"
333: "\t\t\t\tin following dynamic libs"), TWO_DASHES },
334: { {"as-needed", no_argument, NULL, OPTION_AS_NEEDED},
335: '\0', NULL, N_("Only set DT_NEEDED for following dynamic libs if used"),
336: TWO_DASHES },
337: { {"no-as-needed", no_argument, NULL, OPTION_NO_AS_NEEDED},
338: '\0', NULL, N_("Always set DT_NEEDED for following dynamic libs"),
339: TWO_DASHES },
340: { {"assert", required_argument, NULL, OPTION_ASSERT},
341: '\0', N_("KEYWORD"), N_("Ignored for SunOS compatibility"), ONE_DASH },
342: { {"Bdynamic", no_argument, NULL, OPTION_CALL_SHARED},
343: '\0', NULL, N_("Link against shared libraries"), ONE_DASH },
344: { {"dy", no_argument, NULL, OPTION_CALL_SHARED},
345: '\0', NULL, NULL, ONE_DASH },
346: { {"call_shared", no_argument, NULL, OPTION_CALL_SHARED},
347: '\0', NULL, NULL, ONE_DASH },
348: { {"Bstatic", no_argument, NULL, OPTION_NON_SHARED},
349: '\0', NULL, N_("Do not link against shared libraries"), ONE_DASH },
350: { {"dn", no_argument, NULL, OPTION_NON_SHARED},
351: '\0', NULL, NULL, ONE_DASH },
352: { {"non_shared", no_argument, NULL, OPTION_NON_SHARED},
353: '\0', NULL, NULL, ONE_DASH },
354: { {"static", no_argument, NULL, OPTION_NON_SHARED},
355: '\0', NULL, NULL, ONE_DASH },
356: { {"Bsymbolic", no_argument, NULL, OPTION_SYMBOLIC},
357: '\0', NULL, N_("Bind global references locally"), ONE_DASH },
358: { {"Bsymbolic-functions", no_argument, NULL, OPTION_SYMBOLIC_FUNCTIONS},
359: '\0', NULL, N_("Bind global function references locally"), ONE_DASH },
360: { {"check-sections", no_argument, NULL, OPTION_CHECK_SECTIONS},
361: '\0', NULL, N_("Check section addresses for overlaps (default)"),
362: TWO_DASHES },
363: { {"no-check-sections", no_argument, NULL, OPTION_NO_CHECK_SECTIONS},
364: '\0', NULL, N_("Do not check section addresses for overlaps"),
365: TWO_DASHES },
366: { {"cref", no_argument, NULL, OPTION_CREF},
367: '\0', NULL, N_("Output cross reference table"), TWO_DASHES },
368: { {"defsym", required_argument, NULL, OPTION_DEFSYM},
369: '\0', N_("SYMBOL=EXPRESSION"), N_("Define a symbol"), TWO_DASHES },
370: { {"demangle", optional_argument, NULL, OPTION_DEMANGLE},
371: '\0', N_("[=STYLE]"), N_("Demangle symbol names [using STYLE]"),
372: TWO_DASHES },
373: { {"embedded-relocs", no_argument, NULL, OPTION_EMBEDDED_RELOCS},
374: '\0', NULL, N_("Generate embedded relocs"), TWO_DASHES},
375: { {"fatal-warnings", no_argument, NULL, OPTION_WARN_FATAL},
376: '\0', NULL, N_("Treat warnings as errors"),
377: TWO_DASHES },
378: { {"fini", required_argument, NULL, OPTION_FINI},
379: '\0', N_("SYMBOL"), N_("Call SYMBOL at unload-time"), ONE_DASH },
380: { {"force-exe-suffix", no_argument, NULL, OPTION_FORCE_EXE_SUFFIX},
381: '\0', NULL, N_("Force generation of file with .exe suffix"), TWO_DASHES},
382: { {"gc-sections", no_argument, NULL, OPTION_GC_SECTIONS},
383: '\0', NULL, N_("Remove unused sections (on some targets)"),
384: TWO_DASHES },
385: { {"no-gc-sections", no_argument, NULL, OPTION_NO_GC_SECTIONS},
386: '\0', NULL, N_("Don't remove unused sections (default)"),
387: TWO_DASHES },
388: { {"print-gc-sections", no_argument, NULL, OPTION_PRINT_GC_SECTIONS},
389: '\0', NULL, N_("List removed unused sections on stderr"),
390: TWO_DASHES },
391: { {"no-print-gc-sections", no_argument, NULL, OPTION_NO_PRINT_GC_SECTIONS},
392: '\0', NULL, N_("Do not list removed unused sections"),
393: TWO_DASHES },
394: { {"hash-size=<NUMBER>", required_argument, NULL, OPTION_HASH_SIZE},
395: '\0', NULL, N_("Set default hash table size close to <NUMBER>"),
396: TWO_DASHES },
397: { {"help", no_argument, NULL, OPTION_HELP},
398: '\0', NULL, N_("Print option help"), TWO_DASHES },
399: { {"init", required_argument, NULL, OPTION_INIT},
400: '\0', N_("SYMBOL"), N_("Call SYMBOL at load-time"), ONE_DASH },
401: { {"Map", required_argument, NULL, OPTION_MAP},
402: '\0', N_("FILE"), N_("Write a map file"), ONE_DASH },
403: { {"no-define-common", no_argument, NULL, OPTION_NO_DEFINE_COMMON},
404: '\0', NULL, N_("Do not define Common storage"), TWO_DASHES },
405: { {"no-demangle", no_argument, NULL, OPTION_NO_DEMANGLE },
406: '\0', NULL, N_("Do not demangle symbol names"), TWO_DASHES },
407: { {"no-keep-memory", no_argument, NULL, OPTION_NO_KEEP_MEMORY},
408: '\0', NULL, N_("Use less memory and more disk I/O"), TWO_DASHES },
409: { {"no-undefined", no_argument, NULL, OPTION_NO_UNDEFINED},
410: '\0', NULL, N_("Do not allow unresolved references in object files"),
411: TWO_DASHES },
412: { {"allow-shlib-undefined", no_argument, NULL, OPTION_ALLOW_SHLIB_UNDEFINED},
413: '\0', NULL, N_("Allow unresolved references in shared libaries"),
414: TWO_DASHES },
415: { {"no-allow-shlib-undefined", no_argument, NULL,
416: OPTION_NO_ALLOW_SHLIB_UNDEFINED},
417: '\0', NULL, N_("Do not allow unresolved references in shared libs"),
418: TWO_DASHES },
419: { {"allow-multiple-definition", no_argument, NULL,
420: OPTION_ALLOW_MULTIPLE_DEFINITION},
421: '\0', NULL, N_("Allow multiple definitions"), TWO_DASHES },
422: { {"no-undefined-version", no_argument, NULL, OPTION_NO_UNDEFINED_VERSION},
423: '\0', NULL, N_("Disallow undefined version"), TWO_DASHES },
424: { {"default-symver", no_argument, NULL, OPTION_DEFAULT_SYMVER},
425: '\0', NULL, N_("Create default symbol version"), TWO_DASHES },
426: { {"default-imported-symver", no_argument, NULL,
427: OPTION_DEFAULT_IMPORTED_SYMVER},
428: '\0', NULL, N_("Create default symbol version for imported symbols"),
429: TWO_DASHES },
430: { {"no-warn-mismatch", no_argument, NULL, OPTION_NO_WARN_MISMATCH},
431: '\0', NULL, N_("Don't warn about mismatched input files"), TWO_DASHES},
432: { {"no-warn-search-mismatch", no_argument, NULL,
433: OPTION_NO_WARN_SEARCH_MISMATCH},
434: '\0', NULL, N_("Don't warn on finding an incompatible library"),
435: TWO_DASHES},
436: { {"no-whole-archive", no_argument, NULL, OPTION_NO_WHOLE_ARCHIVE},
437: '\0', NULL, N_("Turn off --whole-archive"), TWO_DASHES },
438: { {"noinhibit-exec", no_argument, NULL, OPTION_NOINHIBIT_EXEC},
439: '\0', NULL, N_("Create an output file even if errors occur"),
440: TWO_DASHES },
441: { {"noinhibit_exec", no_argument, NULL, OPTION_NOINHIBIT_EXEC},
442: '\0', NULL, NULL, NO_HELP },
443: { {"nostdlib", no_argument, NULL, OPTION_NOSTDLIB},
444: '\0', NULL, N_("Only use library directories specified on\n"
445: "\t\t\t\tthe command line"), ONE_DASH },
446: { {"oformat", required_argument, NULL, OPTION_OFORMAT},
447: '\0', N_("TARGET"), N_("Specify target of output file"),
448: EXACTLY_TWO_DASHES },
449: { {"qmagic", no_argument, NULL, OPTION_IGNORE},
450: '\0', NULL, N_("Ignored for Linux compatibility"), ONE_DASH },
451: { {"reduce-memory-overheads", no_argument, NULL,
452: OPTION_REDUCE_MEMORY_OVERHEADS},
453: '\0', NULL, N_("Reduce memory overheads, possibly taking much longer"),
454: TWO_DASHES },
455: { {"relax", no_argument, NULL, OPTION_RELAX},
456: '\0', NULL, N_("Relax branches on certain targets"), TWO_DASHES },
457: { {"retain-symbols-file", required_argument, NULL,
458: OPTION_RETAIN_SYMBOLS_FILE},
459: '\0', N_("FILE"), N_("Keep only symbols listed in FILE"), TWO_DASHES },
460: { {"rpath", required_argument, NULL, OPTION_RPATH},
461: '\0', N_("PATH"), N_("Set runtime shared library search path"), ONE_DASH },
462: { {"rpath-link", required_argument, NULL, OPTION_RPATH_LINK},
463: '\0', N_("PATH"), N_("Set link time shared library search path"),
464: ONE_DASH },
465: { {"shared", no_argument, NULL, OPTION_SHARED},
466: '\0', NULL, N_("Create a shared library"), ONE_DASH },
467: { {"Bshareable", no_argument, NULL, OPTION_SHARED },
468: '\0', NULL, NULL, ONE_DASH },
469: { {"pie", no_argument, NULL, OPTION_PIE},
470: '\0', NULL, N_("Create a position independent executable"), ONE_DASH },
471: { {"pic-executable", no_argument, NULL, OPTION_PIE},
472: '\0', NULL, NULL, TWO_DASHES },
473: { {"sort-common", no_argument, NULL, OPTION_SORT_COMMON},
474: '\0', NULL, N_("Sort common symbols by size"), TWO_DASHES },
475: { {"sort_common", no_argument, NULL, OPTION_SORT_COMMON},
476: '\0', NULL, NULL, NO_HELP },
477: { {"sort-section", required_argument, NULL, OPTION_SORT_SECTION},
478: '\0', N_("name|alignment"),
479: N_("Sort sections by name or maximum alignment"), TWO_DASHES },
480: { {"spare-dynamic-tags", required_argument, NULL, OPTION_SPARE_DYNAMIC_TAGS},
481: '\0', N_("COUNT"), N_("How many tags to reserve in .dynamic section"),
482: TWO_DASHES },
483: { {"split-by-file", optional_argument, NULL, OPTION_SPLIT_BY_FILE},
484: '\0', N_("[=SIZE]"), N_("Split output sections every SIZE octets"),
485: TWO_DASHES },
486: { {"split-by-reloc", optional_argument, NULL, OPTION_SPLIT_BY_RELOC},
487: '\0', N_("[=COUNT]"), N_("Split output sections every COUNT relocs"),
488: TWO_DASHES },
489: { {"stats", no_argument, NULL, OPTION_STATS},
490: '\0', NULL, N_("Print memory usage statistics"), TWO_DASHES },
491: { {"target-help", no_argument, NULL, OPTION_TARGET_HELP},
492: '\0', NULL, N_("Display target specific options"), TWO_DASHES },
493: { {"task-link", required_argument, NULL, OPTION_TASK_LINK},
494: '\0', N_("SYMBOL"), N_("Do task level linking"), TWO_DASHES },
495: { {"traditional-format", no_argument, NULL, OPTION_TRADITIONAL_FORMAT},
496: '\0', NULL, N_("Use same format as native linker"), TWO_DASHES },
497: { {"section-start", required_argument, NULL, OPTION_SECTION_START},
498: '\0', N_("SECTION=ADDRESS"), N_("Set address of named section"),
499: TWO_DASHES },
500: { {"Tbss", required_argument, NULL, OPTION_TBSS},
501: '\0', N_("ADDRESS"), N_("Set address of .bss section"), ONE_DASH },
502: { {"Tdata", required_argument, NULL, OPTION_TDATA},
503: '\0', N_("ADDRESS"), N_("Set address of .data section"), ONE_DASH },
504: { {"Ttext", required_argument, NULL, OPTION_TTEXT},