1 /* Parse options for the GNU linker.
2 Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
4 Free Software Foundation, Inc.
6 This file is part of GLD, the Gnu Linker.
8 GLD is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2, or (at your option)
13 GLD is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with GLD; see the file COPYING. If not, write to the Free
20 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
25 #include "libiberty.h"
28 #include "safe-ctype.h"
43 #ifndef PATH_SEPARATOR
44 #if defined (__MSDOS__) || (defined (_WIN32) && ! defined (__CYGWIN32__))
45 #define PATH_SEPARATOR ';'
47 #define PATH_SEPARATOR ':'
51 /* Somewhere above, sys/stat.h got included . . . . */
52 #if !defined(S_ISDIR) && defined(S_IFDIR)
53 #define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
56 static void set_default_dirlist (char *);
57 static void set_section_start (char *, char *);
58 static void help (void);
60 /* Non-zero if we are processing a --defsym from the command line. */
61 int parsing_defsym = 0;
63 /* Codes used for the long options with no short synonyms. 150 isn't
64 special; it's just an arbitrary non-ASCII char value. */
72 OPTION_DYNAMIC_LINKER,
75 OPTION_EMBEDDED_RELOCS,
76 OPTION_EXPORT_DYNAMIC,
81 OPTION_NO_KEEP_MEMORY,
82 OPTION_NO_WARN_MISMATCH,
83 OPTION_NOINHIBIT_EXEC,
85 OPTION_NO_WHOLE_ARCHIVE,
88 OPTION_RETAIN_SYMBOLS_FILE,
100 OPTION_TRADITIONAL_FORMAT,
104 OPTION_VERSION_SCRIPT,
105 OPTION_VERSION_EXPORTS_SECTION,
107 OPTION_WARN_CONSTRUCTORS,
109 OPTION_WARN_MULTIPLE_GP,
111 OPTION_WARN_SECTION_ALIGN,
112 OPTION_SPLIT_BY_RELOC,
113 OPTION_SPLIT_BY_FILE ,
114 OPTION_WHOLE_ARCHIVE,
116 OPTION_FORCE_EXE_SUFFIX,
118 OPTION_NO_GC_SECTIONS,
119 OPTION_CHECK_SECTIONS,
120 OPTION_NO_CHECK_SECTIONS,
124 OPTION_SECTION_START,
127 OPTION_ALLOW_SHLIB_UNDEFINED,
128 OPTION_NO_ALLOW_SHLIB_UNDEFINED,
129 OPTION_ALLOW_MULTIPLE_DEFINITION,
130 OPTION_NO_UNDEFINED_VERSION,
132 OPTION_SPARE_DYNAMIC_TAGS,
133 OPTION_NO_DEFINE_COMMON,
136 OPTION_STRIP_DISCARDED,
137 OPTION_NO_STRIP_DISCARDED,
138 OPTION_ACCEPT_UNKNOWN_INPUT_ARCH,
139 OPTION_NO_ACCEPT_UNKNOWN_INPUT_ARCH,
141 OPTION_UNRESOLVED_SYMBOLS,
142 OPTION_WARN_UNRESOLVED_SYMBOLS,
143 OPTION_ERROR_UNRESOLVED_SYMBOLS
146 /* The long options. This structure is used for both the option
147 parsing and the help text. */
151 /* The long option information. */
153 /* The short option with the same meaning ('\0' if none). */
155 /* The name of the argument (NULL if none). */
157 /* The documentation string. If this is NULL, this is a synonym for
158 the previous option. */
161 /* Use one dash before long option name. */
163 /* Use two dashes before long option name. */
165 /* Only accept two dashes before the long option name.
166 This is an overloading of the use of this enum, since originally it
167 was only intended to tell the --help display function how to display
168 the long option name. This feature was added in order to resolve
169 the confusion about the -omagic command line switch. Is it setting
170 the output file name to "magic" or is it setting the NMAGIC flag on
171 the output ? It has been decided that it is setting the output file
172 name, and that if you want to set the NMAGIC flag you should use -N
175 /* Don't mention this option in --help output. */
180 static const struct ld_option ld_options[] =
182 { {NULL, required_argument, NULL, '\0'},
183 'a', N_("KEYWORD"), N_("Shared library control for HP/UX compatibility"),
185 { {"architecture", required_argument, NULL, 'A'},
186 'A', N_("ARCH"), N_("Set architecture") , TWO_DASHES },
187 { {"format", required_argument, NULL, 'b'},
188 'b', N_("TARGET"), N_("Specify target for following input files"), TWO_DASHES },
189 { {"mri-script", required_argument, NULL, 'c'},
190 'c', N_("FILE"), N_("Read MRI format linker script"), TWO_DASHES },
191 { {"dc", no_argument, NULL, 'd'},
192 'd', NULL, N_("Force common symbols to be defined"), ONE_DASH },
193 { {"dp", no_argument, NULL, 'd'},
194 '\0', NULL, NULL, ONE_DASH },
195 { {"entry", required_argument, NULL, 'e'},
196 'e', N_("ADDRESS"), N_("Set start address"), TWO_DASHES },
197 { {"export-dynamic", no_argument, NULL, OPTION_EXPORT_DYNAMIC},
198 'E', NULL, N_("Export all dynamic symbols"), TWO_DASHES },
199 { {"EB", no_argument, NULL, OPTION_EB},
200 '\0', NULL, N_("Link big-endian objects"), ONE_DASH },
201 { {"EL", no_argument, NULL, OPTION_EL},
202 '\0', NULL, N_("Link little-endian objects"), ONE_DASH },
203 { {"auxiliary", required_argument, NULL, 'f'},
204 'f', N_("SHLIB"), N_("Auxiliary filter for shared object symbol table"),
206 { {"filter", required_argument, NULL, 'F'},
207 'F', N_("SHLIB"), N_("Filter for shared object symbol table"), TWO_DASHES },
208 { {NULL, no_argument, NULL, '\0'},
209 'g', NULL, N_("Ignored"), ONE_DASH },
210 { {"gpsize", required_argument, NULL, 'G'},
211 'G', N_("SIZE"), N_("Small data size (if no size, same as --shared)"),
213 { {"soname", required_argument, NULL, OPTION_SONAME},
214 'h', N_("FILENAME"), N_("Set internal name of shared library"), ONE_DASH },
215 { {"dynamic-linker", required_argument, NULL, OPTION_DYNAMIC_LINKER},
216 'I', N_("PROGRAM"), N_("Set PROGRAM as the dynamic linker to use"), TWO_DASHES },
217 { {"library", required_argument, NULL, 'l'},
218 'l', N_("LIBNAME"), N_("Search for library LIBNAME"), TWO_DASHES },
219 { {"library-path", required_argument, NULL, 'L'},
220 'L', N_("DIRECTORY"), N_("Add DIRECTORY to library search path"), TWO_DASHES },
221 { {NULL, required_argument, NULL, '\0'},
222 'm', N_("EMULATION"), N_("Set emulation"), ONE_DASH },
223 { {"print-map", no_argument, NULL, 'M'},
224 'M', NULL, N_("Print map file on standard output"), TWO_DASHES },
225 { {"nmagic", no_argument, NULL, 'n'},
226 'n', NULL, N_("Do not page align data"), TWO_DASHES },
227 { {"omagic", no_argument, NULL, 'N'},
228 'N', NULL, N_("Do not page align data, do not make text readonly"),
229 EXACTLY_TWO_DASHES },
230 { {"no-omagic", no_argument, NULL, OPTION_NO_OMAGIC},
231 '\0', NULL, N_("Page align data, make text readonly"), EXACTLY_TWO_DASHES },
232 { {"output", required_argument, NULL, 'o'},
233 'o', N_("FILE"), N_("Set output file name"), EXACTLY_TWO_DASHES },
234 { {NULL, required_argument, NULL, '\0'},
235 'O', NULL, N_("Optimize output file"), ONE_DASH },
236 { {"Qy", no_argument, NULL, OPTION_IGNORE},
237 '\0', NULL, N_("Ignored for SVR4 compatibility"), ONE_DASH },
238 { {"emit-relocs", no_argument, NULL, 'q'},
239 'q', NULL, "Generate relocations in final output", TWO_DASHES },
240 { {"relocatable", no_argument, NULL, 'r'},
241 'r', NULL, N_("Generate relocatable output"), TWO_DASHES },
242 { {NULL, no_argument, NULL, '\0'},
243 'i', NULL, NULL, ONE_DASH },
244 { {"just-symbols", required_argument, NULL, 'R'},
245 'R', N_("FILE"), N_("Just link symbols (if directory, same as --rpath)"),
247 { {"strip-all", no_argument, NULL, 's'},
248 's', NULL, N_("Strip all symbols"), TWO_DASHES },
249 { {"strip-debug", no_argument, NULL, 'S'},
250 'S', NULL, N_("Strip debugging symbols"), TWO_DASHES },
251 { {"strip-discarded", no_argument, NULL, OPTION_STRIP_DISCARDED},
252 '\0', NULL, N_("Strip symbols in discarded sections"), TWO_DASHES },
253 { {"no-strip-discarded", no_argument, NULL, OPTION_NO_STRIP_DISCARDED},
254 '\0', NULL, N_("Do not strip symbols in discarded sections"), TWO_DASHES },
255 { {"trace", no_argument, NULL, 't'},
256 't', NULL, N_("Trace file opens"), TWO_DASHES },
257 { {"script", required_argument, NULL, 'T'},
258 'T', N_("FILE"), N_("Read linker script"), TWO_DASHES },
259 { {"undefined", required_argument, NULL, 'u'},
260 'u', N_("SYMBOL"), N_("Start with undefined reference to SYMBOL"), TWO_DASHES },
261 { {"unique", optional_argument, NULL, OPTION_UNIQUE},
262 '\0', N_("[=SECTION]"), N_("Don't merge input [SECTION | orphan] sections"), TWO_DASHES },
263 { {"Ur", no_argument, NULL, OPTION_UR},
264 '\0', NULL, N_("Build global constructor/destructor tables"), ONE_DASH },
265 { {"version", no_argument, NULL, OPTION_VERSION},
266 'v', NULL, N_("Print version information"), TWO_DASHES },
267 { {NULL, no_argument, NULL, '\0'},
268 'V', NULL, N_("Print version and emulation information"), ONE_DASH },
269 { {"discard-all", no_argument, NULL, 'x'},
270 'x', NULL, N_("Discard all local symbols"), TWO_DASHES },
271 { {"discard-locals", no_argument, NULL, 'X'},
272 'X', NULL, N_("Discard temporary local symbols (default)"), TWO_DASHES },
273 { {"discard-none", no_argument, NULL, OPTION_DISCARD_NONE},
274 '\0', NULL, N_("Don't discard any local symbols"), TWO_DASHES },
275 { {"trace-symbol", required_argument, NULL, 'y'},
276 'y', N_("SYMBOL"), N_("Trace mentions of SYMBOL"), TWO_DASHES },
277 { {NULL, required_argument, NULL, '\0'},
278 'Y', N_("PATH"), N_("Default search path for Solaris compatibility"), ONE_DASH },
279 { {"start-group", no_argument, NULL, '('},
280 '(', NULL, N_("Start a group"), TWO_DASHES },
281 { {"end-group", no_argument, NULL, ')'},
282 ')', NULL, N_("End a group"), TWO_DASHES },
283 { {"accept-unknown-input-arch", no_argument, NULL, OPTION_ACCEPT_UNKNOWN_INPUT_ARCH},
284 '\0', NULL, N_("Accept input files whose architecture cannot be determined"), TWO_DASHES },
285 { {"no-accept-unknown-input-arch", no_argument, NULL, OPTION_NO_ACCEPT_UNKNOWN_INPUT_ARCH},
286 '\0', NULL, N_("Reject input files whose architecture is unknown"), TWO_DASHES },
287 { {"assert", required_argument, NULL, OPTION_ASSERT},
288 '\0', N_("KEYWORD"), N_("Ignored for SunOS compatibility"), ONE_DASH },
289 { {"Bdynamic", no_argument, NULL, OPTION_CALL_SHARED},
290 '\0', NULL, N_("Link against shared libraries"), ONE_DASH },
291 { {"dy", no_argument, NULL, OPTION_CALL_SHARED},
292 '\0', NULL, NULL, ONE_DASH },
293 { {"call_shared", no_argument, NULL, OPTION_CALL_SHARED},
294 '\0', NULL, NULL, ONE_DASH },
295 { {"Bstatic", no_argument, NULL, OPTION_NON_SHARED},
296 '\0', NULL, N_("Do not link against shared libraries"), ONE_DASH },
297 { {"dn", no_argument, NULL, OPTION_NON_SHARED},
298 '\0', NULL, NULL, ONE_DASH },
299 { {"non_shared", no_argument, NULL, OPTION_NON_SHARED},
300 '\0', NULL, NULL, ONE_DASH },
301 { {"static", no_argument, NULL, OPTION_NON_SHARED},
302 '\0', NULL, NULL, ONE_DASH },
303 { {"Bsymbolic", no_argument, NULL, OPTION_SYMBOLIC},
304 '\0', NULL, N_("Bind global references locally"), ONE_DASH },
305 { {"check-sections", no_argument, NULL, OPTION_CHECK_SECTIONS},
306 '\0', NULL, N_("Check section addresses for overlaps (default)"), TWO_DASHES },
307 { {"no-check-sections", no_argument, NULL, OPTION_NO_CHECK_SECTIONS},
308 '\0', NULL, N_("Do not check section addresses for overlaps"),
310 { {"cref", no_argument, NULL, OPTION_CREF},
311 '\0', NULL, N_("Output cross reference table"), TWO_DASHES },
312 { {"defsym", required_argument, NULL, OPTION_DEFSYM},
313 '\0', N_("SYMBOL=EXPRESSION"), N_("Define a symbol"), TWO_DASHES },
314 { {"demangle", optional_argument, NULL, OPTION_DEMANGLE},
315 '\0', N_("[=STYLE]"), N_("Demangle symbol names [using STYLE]"), TWO_DASHES },
316 { {"embedded-relocs", no_argument, NULL, OPTION_EMBEDDED_RELOCS},
317 '\0', NULL, N_("Generate embedded relocs"), TWO_DASHES},
318 { {"fini", required_argument, NULL, OPTION_FINI},
319 '\0', N_("SYMBOL"), N_("Call SYMBOL at unload-time"), ONE_DASH },
320 { {"force-exe-suffix", no_argument, NULL, OPTION_FORCE_EXE_SUFFIX},
321 '\0', NULL, N_("Force generation of file with .exe suffix"), TWO_DASHES},
322 { {"gc-sections", no_argument, NULL, OPTION_GC_SECTIONS},
323 '\0', NULL, N_("Remove unused sections (on some targets)"),
325 { {"no-gc-sections", no_argument, NULL, OPTION_NO_GC_SECTIONS},
326 '\0', NULL, N_("Don't remove unused sections (default)"),
328 { {"help", no_argument, NULL, OPTION_HELP},
329 '\0', NULL, N_("Print option help"), TWO_DASHES },
330 { {"init", required_argument, NULL, OPTION_INIT},
331 '\0', N_("SYMBOL"), N_("Call SYMBOL at load-time"), ONE_DASH },
332 { {"Map", required_argument, NULL, OPTION_MAP},
333 '\0', N_("FILE"), N_("Write a map file"), ONE_DASH },
334 { {"no-define-common", no_argument, NULL, OPTION_NO_DEFINE_COMMON},
335 '\0', NULL, N_("Do not define Common storage"), TWO_DASHES },
336 { {"no-demangle", no_argument, NULL, OPTION_NO_DEMANGLE },
337 '\0', NULL, N_("Do not demangle symbol names"), TWO_DASHES },
338 { {"no-keep-memory", no_argument, NULL, OPTION_NO_KEEP_MEMORY},
339 '\0', NULL, N_("Use less memory and more disk I/O"), TWO_DASHES },
340 { {"no-undefined", no_argument, NULL, OPTION_NO_UNDEFINED},
341 '\0', NULL, N_("Do not allow unresolved references in object files"), TWO_DASHES },
342 { {"allow-shlib-undefined", no_argument, NULL, OPTION_ALLOW_SHLIB_UNDEFINED},
343 '\0', NULL, N_("Allow unresolved references in shared libaries"), TWO_DASHES },
344 { {"no-allow-shlib-undefined", no_argument, NULL, OPTION_NO_ALLOW_SHLIB_UNDEFINED},
345 '\0', NULL, N_("Do not allow unresolved references in shared libs"), TWO_DASHES },
346 { {"allow-multiple-definition", no_argument, NULL, OPTION_ALLOW_MULTIPLE_DEFINITION},
347 '\0', NULL, N_("Allow multiple definitions"), TWO_DASHES },
348 { {"no-undefined-version", no_argument, NULL, OPTION_NO_UNDEFINED_VERSION},
349 '\0', NULL, N_("Disallow undefined version"), TWO_DASHES },
350 { {"no-warn-mismatch", no_argument, NULL, OPTION_NO_WARN_MISMATCH},
351 '\0', NULL, N_("Don't warn about mismatched input files"), TWO_DASHES},
352 { {"no-whole-archive", no_argument, NULL, OPTION_NO_WHOLE_ARCHIVE},
353 '\0', NULL, N_("Turn off --whole-archive"), TWO_DASHES },
354 { {"noinhibit-exec", no_argument, NULL, OPTION_NOINHIBIT_EXEC},
355 '\0', NULL, N_("Create an output file even if errors occur"), TWO_DASHES },
356 { {"noinhibit_exec", no_argument, NULL, OPTION_NOINHIBIT_EXEC},
357 '\0', NULL, NULL, NO_HELP },
358 { {"nostdlib", no_argument, NULL, OPTION_NOSTDLIB},
359 '\0', NULL, N_("Only use library directories specified on\n\t\t\t\tthe command line"), ONE_DASH },
360 { {"oformat", required_argument, NULL, OPTION_OFORMAT},
361 '\0', N_("TARGET"), N_("Specify target of output file"), EXACTLY_TWO_DASHES },
362 { {"qmagic", no_argument, NULL, OPTION_IGNORE},
363 '\0', NULL, N_("Ignored for Linux compatibility"), ONE_DASH },
364 { {"relax", no_argument, NULL, OPTION_RELAX},
365 '\0', NULL, N_("Relax branches on certain targets"), TWO_DASHES },
366 { {"retain-symbols-file", required_argument, NULL,
367 OPTION_RETAIN_SYMBOLS_FILE},
368 '\0', N_("FILE"), N_("Keep only symbols listed in FILE"), TWO_DASHES },
369 { {"rpath", required_argument, NULL, OPTION_RPATH},
370 '\0', N_("PATH"), N_("Set runtime shared library search path"), ONE_DASH },
371 { {"rpath-link", required_argument, NULL, OPTION_RPATH_LINK},
372 '\0', N_("PATH"), N_("Set link time shared library search path"), ONE_DASH },
373 { {"shared", no_argument, NULL, OPTION_SHARED},
374 '\0', NULL, N_("Create a shared library"), ONE_DASH },
375 { {"Bshareable", no_argument, NULL, OPTION_SHARED }, /* FreeBSD. */
376 '\0', NULL, NULL, ONE_DASH },
377 { {"pie", no_argument, NULL, OPTION_PIE},
378 '\0', NULL, N_("Create a position independent executable"), ONE_DASH },
379 { {"pic-executable", no_argument, NULL, OPTION_PIE},
380 '\0', NULL, NULL, TWO_DASHES },
381 { {"sort-common", no_argument, NULL, OPTION_SORT_COMMON},
382 '\0', NULL, N_("Sort common symbols by size"), TWO_DASHES },
383 { {"sort_common", no_argument, NULL, OPTION_SORT_COMMON},
384 '\0', NULL, NULL, NO_HELP },
385 { {"spare-dynamic-tags", required_argument, NULL, OPTION_SPARE_DYNAMIC_TAGS},
386 '\0', N_("COUNT"), N_("How many tags to reserve in .dynamic section"), TWO_DASHES },
387 { {"split-by-file", optional_argument, NULL, OPTION_SPLIT_BY_FILE},
388 '\0', N_("[=SIZE]"), N_("Split output sections every SIZE octets"), TWO_DASHES },
389 { {"split-by-reloc", optional_argument, NULL, OPTION_SPLIT_BY_RELOC},
390 '\0', N_("[=COUNT]"), N_("Split output sections every COUNT relocs"), TWO_DASHES },
391 { {"stats", no_argument, NULL, OPTION_STATS},
392 '\0', NULL, N_("Print memory usage statistics"), TWO_DASHES },
393 { {"target-help", no_argument, NULL, OPTION_TARGET_HELP},
394 '\0', NULL, N_("Display target specific options"), TWO_DASHES },
395 { {"task-link", required_argument, NULL, OPTION_TASK_LINK},
396 '\0', N_("SYMBOL"), N_("Do task level linking"), TWO_DASHES },
397 { {"traditional-format", no_argument, NULL, OPTION_TRADITIONAL_FORMAT},
398 '\0', NULL, N_("Use same format as native linker"), TWO_DASHES },
399 { {"section-start", required_argument, NULL, OPTION_SECTION_START},
400 '\0', N_("SECTION=ADDRESS"), N_("Set address of named section"), TWO_DASHES },
401 { {"Tbss", required_argument, NULL, OPTION_TBSS},
402 '\0', N_("ADDRESS"), N_("Set address of .bss section"), ONE_DASH },
403 { {"Tdata", required_argument, NULL, OPTION_TDATA},
404 '\0', N_("ADDRESS"), N_("Set address of .data section"), ONE_DASH },
405 { {"Ttext", required_argument, NULL, OPTION_TTEXT},
406 '\0', N_("ADDRESS"), N_("Set address of .text section"), ONE_DASH },
407 { {"unresolved-symbols=<method>", required_argument, NULL, OPTION_UNRESOLVED_SYMBOLS},
408 '\0', NULL, N_("How to handle unresolved symbols. <method> is:\n\t\t\t\tignore-all, report-all, ignore-in-object-files,\n\t\t\t\tignore-in-shared-libs"),
410 { {"verbose", no_argument, NULL, OPTION_VERBOSE},
411 '\0', NULL, N_("Output lots of information during link"), TWO_DASHES },
412 { {"dll-verbose", no_argument, NULL, OPTION_VERBOSE}, /* Linux. */
413 '\0', NULL, NULL, NO_HELP },
414 { {"version-script", required_argument, NULL, OPTION_VERSION_SCRIPT },
415 '\0', N_("FILE"), N_("Read version information script"), TWO_DASHES },
416 { {"version-exports-section", required_argument, NULL,
417 OPTION_VERSION_EXPORTS_SECTION },
418 '\0', N_("SYMBOL"), N_("Take export symbols list from .exports, using\n\t\t\t\tSYMBOL as the version."),
420 { {"warn-common", no_argument, NULL, OPTION_WARN_COMMON},
421 '\0', NULL, N_("Warn about duplicate common symbols"), TWO_DASHES },
422 { {"warn-constructors", no_argument, NULL, OPTION_WARN_CONSTRUCTORS},
423 '\0', NULL, N_("Warn if global constructors/destructors are seen"),
425 { {"warn-multiple-gp", no_argument, NULL, OPTION_WARN_MULTIPLE_GP},
426 '\0', NULL, N_("Warn if the multiple GP values are used"), TWO_DASHES },
427 { {"warn-once", no_argument, NULL, OPTION_WARN_ONCE},
428 '\0', NULL, N_("Warn only once per undefined symbol"), TWO_DASHES },
429 { {"warn-section-align", no_argument, NULL, OPTION_WARN_SECTION_ALIGN},
430 '\0', NULL, N_("Warn if start of section changes due to alignment"),
432 { {"warn-unresolved-symbols", no_argument, NULL, OPTION_WARN_UNRESOLVED_SYMBOLS},
433 '\0', NULL, N_("Report unresolved symbols as warnings"), TWO_DASHES },
434 { {"error-unresolved-symbols", no_argument, NULL, OPTION_ERROR_UNRESOLVED_SYMBOLS},
435 '\0', NULL, N_("Report unresolved symbols as errors"), TWO_DASHES },
436 { {"fatal-warnings", no_argument, NULL, OPTION_WARN_FATAL},
437 '\0', NULL, N_("Treat warnings as errors"),
439 { {"whole-archive", no_argument, NULL, OPTION_WHOLE_ARCHIVE},
440 '\0', NULL, N_("Include all objects from following archives"), TWO_DASHES },
441 { {"wrap", required_argument, NULL, OPTION_WRAP},
442 '\0', N_("SYMBOL"), N_("Use wrapper functions for SYMBOL"), TWO_DASHES }
445 #define OPTION_COUNT ARRAY_SIZE (ld_options)
448 parse_args (unsigned argc, char **argv)
453 char *default_dirlist = NULL;
455 struct option *longopts;
456 struct option *really_longopts;
458 enum report_method how_to_report_unresolved_symbols = RM_GENERATE_ERROR;
460 shortopts = xmalloc (OPTION_COUNT * 3 + 2);
461 longopts = xmalloc (sizeof (*longopts) * (OPTION_COUNT + 1));
462 really_longopts = xmalloc (sizeof (*really_longopts) * (OPTION_COUNT + 1));
464 /* Starting the short option string with '-' is for programs that
465 expect options and other ARGV-elements in any order and that care about
466 the ordering of the two. We describe each non-option ARGV-element
467 as if it were the argument of an option with character code 1. */
472 for (i = 0; i < OPTION_COUNT; i++)
474 if (ld_options[i].shortopt != '\0')
476 shortopts[is] = ld_options[i].shortopt;
478 if (ld_options[i].opt.has_arg == required_argument
479 || ld_options[i].opt.has_arg == optional_argument)
483 if (ld_options[i].opt.has_arg == optional_argument)
490 if (ld_options[i].opt.name != NULL)
492 if (ld_options[i].control == EXACTLY_TWO_DASHES)
494 really_longopts[irl] = ld_options[i].opt;
499 longopts[il] = ld_options[i].opt;
504 shortopts[is] = '\0';
505 longopts[il].name = NULL;
506 really_longopts[irl].name = NULL;
508 ldemul_add_options (is, &shortopts, il, &longopts, irl, &really_longopts);
510 /* The -G option is ambiguous on different platforms. Sometimes it
511 specifies the largest data size to put into the small data
512 section. Sometimes it is equivalent to --shared. Unfortunately,
513 the first form takes an argument, while the second does not.
515 We need to permit the --shared form because on some platforms,
516 such as Solaris, gcc -shared will pass -G to the linker.
518 To permit either usage, we look through the argument list. If we
519 find -G not followed by a number, we change it into --shared.
520 This will work for most normal cases. */
521 for (i = 1; i < argc; i++)
522 if (strcmp (argv[i], "-G") == 0
524 || ! ISDIGIT (argv[i + 1][0])))
525 argv[i] = (char *) "--shared";
527 /* Because we permit long options to start with a single dash, and
528 we have a --library option, and the -l option is conventionally
529 used with an immediately following argument, we can have bad
530 results if somebody tries to use -l with a library whose name
531 happens to start with "ibrary", as in -li. We avoid problems by
532 simply turning -l into --library. This means that users will
533 have to use two dashes in order to use --library, which is OK
534 since that's how it is documented.
536 FIXME: It's possible that this problem can arise for other short
537 options as well, although the user does always have the recourse
538 of adding a space between the option and the argument. */
539 for (i = 1; i < argc; i++)
541 if (argv[i][0] == '-'
543 && argv[i][2] != '\0')
547 n = xmalloc (strlen (argv[i]) + 20);
548 sprintf (n, "--library=%s", argv[i] + 2);
559 /* Using last_optind lets us avoid calling ldemul_parse_args
560 multiple times on a single option, which would lead to
561 confusion in the internal static variables maintained by
562 getopt. This could otherwise happen for an argument like
563 -nx, in which the -n is parsed as a single option, and we
564 loop around to pick up the -x. */
565 if (optind != last_optind)
566 if (ldemul_parse_args (argc, argv))
569 /* getopt_long_only is like getopt_long, but '-' as well as '--'
570 can indicate a long option. */
572 last_optind = optind;
573 optc = getopt_long_only (argc, argv, shortopts, longopts, &longind);
576 optind = last_optind;
577 optc = getopt_long (argc, argv, "-", really_longopts, &longind);
580 if (ldemul_handle_option (optc))
589 einfo (_("%P: unrecognized option '%s'\n"), argv[last_optind]);
591 einfo (_("%P%F: use the --help option for usage information\n"));
593 case 1: /* File name. */
594 lang_add_input_file (optarg, lang_input_file_is_file_enum, NULL);
600 /* For HP/UX compatibility. Actually -a shared should mean
601 ``use only shared libraries'' but, then, we don't
602 currently support shared libraries on HP/UX anyhow. */
603 if (strcmp (optarg, "archive") == 0)
604 config.dynamic_link = FALSE;
605 else if (strcmp (optarg, "shared") == 0
606 || strcmp (optarg, "default") == 0)
607 config.dynamic_link = TRUE;
609 einfo (_("%P%F: unrecognized -a option `%s'\n"), optarg);
612 /* FIXME: We just ignore these, but we should handle them. */
613 if (strcmp (optarg, "definitions") == 0)
615 else if (strcmp (optarg, "nodefinitions") == 0)
617 else if (strcmp (optarg, "nosymbolic") == 0)
619 else if (strcmp (optarg, "pure-text") == 0)
622 einfo (_("%P%F: unrecognized -assert option `%s'\n"), optarg);
625 ldfile_add_arch (optarg);
628 lang_add_target (optarg);
631 ldfile_open_command_file (optarg);
632 parser_input = input_mri_script;
635 case OPTION_CALL_SHARED:
636 config.dynamic_link = TRUE;
637 /* When linking against shared libraries, the default behaviour is
638 to report any unresolved references. Although strictly speaking
639 it is not a failure to encounter unresolved symbols at link time
640 - the symbol *might* be available at load time - it is a strong
641 indication that the resulting executable will not work. Plus it
642 is necessary for the correct execution of the autoconf package,
643 which needs to be able to detect functions that are not provided
645 if (link_info.unresolved_syms_in_objects == RM_NOT_YET_SET)
646 link_info.unresolved_syms_in_objects = how_to_report_unresolved_symbols;
647 if (link_info.unresolved_syms_in_shared_libs == RM_NOT_YET_SET)
648 link_info.unresolved_syms_in_shared_libs = how_to_report_unresolved_symbols;
650 case OPTION_NON_SHARED:
651 config.dynamic_link = FALSE;
652 /* When linking against static libraries, the default
653 behaviour is to report any unresolved references. */
654 if (link_info.unresolved_syms_in_objects == RM_NOT_YET_SET)
655 link_info.unresolved_syms_in_objects = how_to_report_unresolved_symbols;
656 if (link_info.unresolved_syms_in_shared_libs == RM_NOT_YET_SET)
657 link_info.unresolved_syms_in_shared_libs = how_to_report_unresolved_symbols;
660 command_line.cref = TRUE;
661 link_info.notice_all = TRUE;
664 command_line.force_common_definition = TRUE;
668 lex_redirect (optarg);
669 parser_input = input_defsym;
675 case OPTION_DEMANGLE:
679 enum demangling_styles style;
681 style = cplus_demangle_name_to_style (optarg);
682 if (style == unknown_demangling)
683 einfo (_("%F%P: unknown demangling style `%s'"),
686 cplus_demangle_set_style (style);
689 case 'I': /* Used on Solaris. */
690 case OPTION_DYNAMIC_LINKER:
691 command_line.interpreter = optarg;
694 command_line.endian = ENDIAN_BIG;
697 command_line.endian = ENDIAN_LITTLE;
699 case OPTION_EMBEDDED_RELOCS:
700 command_line.embedded_relocs = TRUE;
702 case OPTION_EXPORT_DYNAMIC:
703 case 'E': /* HP/UX compatibility. */
704 link_info.export_dynamic = TRUE;
707 lang_add_entry (optarg, TRUE);
710 if (command_line.auxiliary_filters == NULL)
712 command_line.auxiliary_filters = xmalloc (2 * sizeof (char *));
713 command_line.auxiliary_filters[0] = optarg;
714 command_line.auxiliary_filters[1] = NULL;
722 for (p = command_line.auxiliary_filters; *p != NULL; p++)
724 command_line.auxiliary_filters
725 = xrealloc (command_line.auxiliary_filters,
726 (c + 2) * sizeof (char *));
727 command_line.auxiliary_filters[c] = optarg;
728 command_line.auxiliary_filters[c + 1] = NULL;
732 command_line.filter_shlib = optarg;
734 case OPTION_FORCE_EXE_SUFFIX:
735 command_line.force_exe_suffix = TRUE;
740 g_switch_value = strtoul (optarg, &end, 0);
742 einfo (_("%P%F: invalid number `%s'\n"), optarg);
748 case OPTION_GC_SECTIONS:
749 command_line.gc_sections = TRUE;
756 ldfile_add_library_path (optarg, TRUE);
759 lang_add_input_file (optarg, lang_input_file_is_l_enum, NULL);
762 config.map_filename = "-";
765 /* Ignore. Was handled in a pre-parse. */
768 config.map_filename = optarg;
771 config.text_read_only = FALSE;
772 config.magic_demand_paged = FALSE;
773 config.dynamic_link = FALSE;
775 case OPTION_NO_OMAGIC:
776 config.text_read_only = TRUE;
777 config.magic_demand_paged = TRUE;
778 /* NB/ Does not set dynamic_link to TRUE.
779 Use --call-shared or -Bdynamic for this. */
782 config.magic_demand_paged = FALSE;
783 config.dynamic_link = FALSE;
785 case OPTION_NO_DEFINE_COMMON:
786 command_line.inhibit_common_definition = TRUE;
788 case OPTION_NO_DEMANGLE:
791 case OPTION_NO_GC_SECTIONS:
792 command_line.gc_sections = FALSE;
794 case OPTION_NO_KEEP_MEMORY:
795 link_info.keep_memory = FALSE;
797 case OPTION_NO_UNDEFINED:
798 link_info.unresolved_syms_in_objects = how_to_report_unresolved_symbols;
800 case OPTION_ALLOW_SHLIB_UNDEFINED:
801 link_info.unresolved_syms_in_shared_libs = RM_IGNORE;
803 case OPTION_NO_ALLOW_SHLIB_UNDEFINED:
804 link_info.unresolved_syms_in_shared_libs = how_to_report_unresolved_symbols;
806 case OPTION_UNRESOLVED_SYMBOLS:
807 if (strcmp (optarg, "ignore-all") == 0)
809 link_info.unresolved_syms_in_objects = RM_IGNORE;
810 link_info.unresolved_syms_in_shared_libs = RM_IGNORE;
812 else if (strcmp (optarg, "report-all") == 0)
814 link_info.unresolved_syms_in_objects = how_to_report_unresolved_symbols;
815 link_info.unresolved_syms_in_shared_libs = how_to_report_unresolved_symbols;
817 else if (strcmp (optarg, "ignore-in-object-files") == 0)
819 link_info.unresolved_syms_in_objects = RM_IGNORE;
820 link_info.unresolved_syms_in_shared_libs = how_to_report_unresolved_symbols;
822 else if (strcmp (optarg, "ignore-in-shared-libs") == 0)
824 link_info.unresolved_syms_in_objects = how_to_report_unresolved_symbols;
825 link_info.unresolved_syms_in_shared_libs = RM_IGNORE;
828 einfo (_("%P%F: bad --unresolved-symbols option: %s\n"), optarg);
830 case OPTION_WARN_UNRESOLVED_SYMBOLS:
831 how_to_report_unresolved_symbols = RM_GENERATE_WARNING;
832 if (link_info.unresolved_syms_in_objects == RM_GENERATE_ERROR)
833 link_info.unresolved_syms_in_objects = RM_GENERATE_WARNING;
834 if (link_info.unresolved_syms_in_shared_libs == RM_GENERATE_ERROR)
835 link_info.unresolved_syms_in_shared_libs = RM_GENERATE_WARNING;
838 case OPTION_ERROR_UNRESOLVED_SYMBOLS:
839 how_to_report_unresolved_symbols = RM_GENERATE_ERROR;
840 if (link_info.unresolved_syms_in_objects == RM_GENERATE_WARNING)
841 link_info.unresolved_syms_in_objects = RM_GENERATE_ERROR;
842 if (link_info.unresolved_syms_in_shared_libs == RM_GENERATE_WARNING)
843 link_info.unresolved_syms_in_shared_libs = RM_GENERATE_ERROR;
845 case OPTION_ALLOW_MULTIPLE_DEFINITION:
846 link_info.allow_multiple_definition = TRUE;
848 case OPTION_NO_UNDEFINED_VERSION:
849 link_info.allow_undefined_version = FALSE;
851 case OPTION_NO_WARN_MISMATCH:
852 command_line.warn_mismatch = FALSE;
854 case OPTION_NOINHIBIT_EXEC:
855 force_make_executable = TRUE;
857 case OPTION_NOSTDLIB:
858 config.only_cmd_line_lib_dirs = TRUE;
860 case OPTION_NO_WHOLE_ARCHIVE:
861 whole_archive = FALSE;
864 /* FIXME "-O<non-digits> <value>" used to set the address of
865 section <non-digits>. Was this for compatibility with
866 something, or can we create a new option to do that
867 (with a syntax similar to -defsym)?
868 getopt can't handle two args to an option without kludges. */
870 /* Enable optimizations of output files. */
871 link_info.optimize = strtoul (optarg, NULL, 0) ? TRUE : FALSE;
874 lang_add_output (optarg, 0);
877 lang_add_output_format (optarg, NULL, NULL, 0);
880 link_info.emitrelocations = TRUE;
884 if (optind == last_optind)
885 /* This can happen if the user put "-rpath,a" on the command
886 line. (Or something similar. The comma is important).
887 Getopt becomes confused and thinks that this is a -r option
888 but it cannot parse the text after the -r so it refuses to
889 increment the optind counter. Detect this case and issue
890 an error message here. We cannot just make this a warning,
891 increment optind, and continue because getopt is too confused
892 and will seg-fault the next time around. */
893 einfo(_("%P%F: bad -rpath option\n"));
895 link_info.relocatable = TRUE;
896 config.build_constructors = FALSE;
897 config.magic_demand_paged = FALSE;
898 config.text_read_only = FALSE;
899 config.dynamic_link = FALSE;
902 /* The GNU linker traditionally uses -R to mean to include
903 only the symbols from a file. The Solaris linker uses -R
904 to set the path used by the runtime linker to find
905 libraries. This is the GNU linker -rpath argument. We
906 try to support both simultaneously by checking the file
907 named. If it is a directory, rather than a regular file,
908 we assume -rpath was meant. */
912 if (stat (optarg, &s) >= 0
913 && ! S_ISDIR (s.st_mode))
915 lang_add_input_file (optarg,
916 lang_input_file_is_symbols_only_enum,
923 if (command_line.rpath == NULL)
924 command_line.rpath = xstrdup (optarg);
927 size_t rpath_len = strlen (command_line.rpath);
928 size_t optarg_len = strlen (optarg);
930 char *cp = command_line.rpath;
932 /* First see whether OPTARG is already in the path. */
937 while (optarg[idx] != '\0' && optarg[idx] == cp[idx])
939 if (optarg[idx] == '\0'
940 && (cp[idx] == '\0' || cp[idx] == ':'))
945 cp = strchr (cp, ':');
953 buf = xmalloc (rpath_len + optarg_len + 2);
954 sprintf (buf, "%s:%s", command_line.rpath, optarg);
955 free (command_line.rpath);
956 command_line.rpath = buf;
960 case OPTION_RPATH_LINK:
961 if (command_line.rpath_link == NULL)
962 command_line.rpath_link = xstrdup (optarg);
967 buf = xmalloc (strlen (command_line.rpath_link)
970 sprintf (buf, "%s:%s", command_line.rpath_link, optarg);
971 free (command_line.rpath_link);
972 command_line.rpath_link = buf;
976 command_line.relax = TRUE;
978 case OPTION_RETAIN_SYMBOLS_FILE:
979 add_keepsyms_file (optarg);
982 link_info.strip = strip_debugger;
985 link_info.strip = strip_all;
987 case OPTION_STRIP_DISCARDED:
988 link_info.strip_discarded = TRUE;
990 case OPTION_NO_STRIP_DISCARDED:
991 link_info.strip_discarded = FALSE;
994 if (config.has_shared)
996 link_info.shared = TRUE;
997 /* When creating a shared library, the default
998 behaviour is to ignore any unresolved references. */
999 if (link_info.unresolved_syms_in_objects == RM_NOT_YET_SET)
1000 link_info.unresolved_syms_in_objects = RM_IGNORE;
1001 if (link_info.unresolved_syms_in_shared_libs == RM_NOT_YET_SET)
1002 link_info.unresolved_syms_in_shared_libs = RM_IGNORE;
1005 einfo (_("%P%F: -shared not supported\n"));
1008 if (config.has_shared)
1010 link_info.shared = TRUE;
1011 link_info.pie = TRUE;
1014 einfo (_("%P%F: -pie not supported\n"));
1016 case 'h': /* Used on Solaris. */
1018 command_line.soname = optarg;
1020 case OPTION_SORT_COMMON:
1021 config.sort_common = TRUE;
1024 config.stats = TRUE;
1026 case OPTION_SYMBOLIC:
1027 link_info.symbolic = TRUE;
1033 ldfile_open_command_file (optarg);
1034 parser_input = input_script;
1037 case OPTION_SECTION_START:
1043 /* Check for <something>=<somthing>... */
1044 optarg2 = strchr (optarg, '=');
1045 if (optarg2 == NULL)
1046 einfo (_("%P%F: invalid argument to option \"--section-start\"\n"));
1050 /* So far so good. Are all the args present? */
1051 if ((*optarg == '\0') || (*optarg2 == '\0'))
1052 einfo (_("%P%F: missing argument(s) to option \"--section-start\"\n"));
1054 /* We must copy the section name as set_section_start
1055 doesn't do it for us. */
1056 len = optarg2 - optarg;
1057 sec_name = xmalloc (len);
1058 memcpy (sec_name, optarg, len - 1);
1059 sec_name[len - 1] = 0;
1061 /* Then set it... */
1062 set_section_start (sec_name, optarg2);
1065 case OPTION_TARGET_HELP:
1066 /* Mention any target specific options. */
1067 ldemul_list_emulation_options (stdout);
1070 set_section_start (".bss", optarg);
1073 set_section_start (".data", optarg);
1076 set_section_start (".text", optarg);
1078 case OPTION_TRADITIONAL_FORMAT:
1079 link_info.traditional_format = TRUE;
1081 case OPTION_TASK_LINK:
1082 link_info.task_link = TRUE;
1083 /* Fall through - do an implied -r option. */
1085 link_info.relocatable = TRUE;
1086 config.build_constructors = TRUE;
1087 config.magic_demand_paged = FALSE;
1088 config.text_read_only = FALSE;
1089 config.dynamic_link = FALSE;
1092 ldlang_add_undef (optarg);
1096 lang_add_unique (optarg);
1098 config.unique_orphan_sections = TRUE;
1100 case OPTION_VERBOSE:
1102 version_printed = TRUE;
1103 trace_file_tries = TRUE;
1104 overflow_cutoff_limit = -2;
1108 version_printed = TRUE;
1112 version_printed = TRUE;
1114 case OPTION_VERSION:
1118 case OPTION_VERSION_SCRIPT:
1119 /* This option indicates a small script that only specifies
1120 version information. Read it, but don't assume that
1121 we've seen a linker script. */
1123 FILE *hold_script_handle;
1125 hold_script_handle = saved_script_handle;
1126 ldfile_open_command_file (optarg);
1127 saved_script_handle = hold_script_handle;
1128 parser_input = input_version_script;
1132 case OPTION_VERSION_EXPORTS_SECTION:
1133 /* This option records a version symbol to be applied to the
1134 symbols listed for export to be found in the object files
1135 .exports sections. */
1136 command_line.version_exports_section = optarg;
1138 case OPTION_WARN_COMMON:
1139 config.warn_common = TRUE;
1141 case OPTION_WARN_CONSTRUCTORS:
1142 config.warn_constructors = TRUE;
1144 case OPTION_WARN_FATAL:
1145 config.fatal_warnings = TRUE;
1147 case OPTION_WARN_MULTIPLE_GP:
1148 config.warn_multiple_gp = TRUE;
1150 case OPTION_WARN_ONCE:
1151 config.warn_once = TRUE;
1153 case OPTION_WARN_SECTION_ALIGN:
1154 config.warn_section_align = TRUE;
1156 case OPTION_WHOLE_ARCHIVE:
1157 whole_archive = TRUE;
1162 case OPTION_DISCARD_NONE:
1163 link_info.discard = discard_none;
1166 link_info.discard = discard_l;
1169 link_info.discard = discard_all;
1172 if (strncmp (optarg, "P,", 2) == 0)
1174 if (default_dirlist != NULL)
1175 free (default_dirlist);
1176 default_dirlist = xstrdup (optarg);
1181 case OPTION_SPARE_DYNAMIC_TAGS:
1182 link_info.spare_dynamic_tags = strtoul (optarg, NULL, 0);
1184 case OPTION_SPLIT_BY_RELOC:
1186 config.split_by_reloc = strtoul (optarg, NULL, 0);
1188 config.split_by_reloc = 32768;
1190 case OPTION_SPLIT_BY_FILE:
1192 config.split_by_file = bfd_scan_vma (optarg, NULL, 0);
1194 config.split_by_file = 1;
1196 case OPTION_CHECK_SECTIONS:
1197 command_line.check_section_addresses = TRUE;
1199 case OPTION_NO_CHECK_SECTIONS:
1200 command_line.check_section_addresses = FALSE;
1202 case OPTION_ACCEPT_UNKNOWN_INPUT_ARCH:
1203 command_line.accept_unknown_input_arch = TRUE;
1205 case OPTION_NO_ACCEPT_UNKNOWN_INPUT_ARCH:
1206 command_line.accept_unknown_input_arch = FALSE;
1210 einfo (_("%P%F: may not nest groups (--help for usage)\n"));
1212 lang_enter_group ();
1217 einfo (_("%P%F: group ended before it began (--help for usage)\n"));
1219 lang_leave_group ();
1224 link_info.init_function = optarg;
1228 link_info.fini_function = optarg;
1234 lang_leave_group ();
1236 if (default_dirlist != NULL)
1238 set_default_dirlist (default_dirlist);
1239 free (default_dirlist);
1242 if (link_info.unresolved_syms_in_objects == RM_NOT_YET_SET)
1243 /* FIXME: Should we allow emulations a chance to set this ? */
1244 link_info.unresolved_syms_in_objects = how_to_report_unresolved_symbols;
1246 if (link_info.unresolved_syms_in_shared_libs == RM_NOT_YET_SET)
1247 /* FIXME: Should we allow emulations a chance to set this ? */
1248 link_info.unresolved_syms_in_shared_libs = how_to_report_unresolved_symbols;
1251 /* Add the (colon-separated) elements of DIRLIST_PTR to the
1252 library search path. */
1255 set_default_dirlist (char *dirlist_ptr)
1261 p = strchr (dirlist_ptr, PATH_SEPARATOR);
1264 if (*dirlist_ptr != '\0')
1265 ldfile_add_library_path (dirlist_ptr, TRUE);
1268 dirlist_ptr = p + 1;
1273 set_section_start (char *sect, char *valstr)
1276 bfd_vma val = bfd_scan_vma (valstr, &end, 16);
1278 einfo (_("%P%F: invalid hex number `%s'\n"), valstr);
1279 lang_section_start (sect, exp_intop (val));
1282 /* Print help messages for the options. */
1288 const char **targets, **pp;
1290 printf (_("Usage: %s [options] file...\n"), program_name);
1292 printf (_("Options:\n"));
1293 for (i = 0; i < OPTION_COUNT; i++)
1295 if (ld_options[i].doc != NULL)
1309 if (ld_options[j].shortopt != '\0'
1310 && ld_options[j].control != NO_HELP)
1312 printf ("%s-%c", comma ? ", " : "", ld_options[j].shortopt);
1313 len += (comma ? 2 : 0) + 2;
1314 if (ld_options[j].arg != NULL)
1316 if (ld_options[j].opt.has_arg != optional_argument)
1321 printf ("%s", _(ld_options[j].arg));
1322 len += strlen (_(ld_options[j].arg));
1328 while (j < OPTION_COUNT && ld_options[j].doc == NULL);
1333 if (ld_options[j].opt.name != NULL
1334 && ld_options[j].control != NO_HELP)
1337 (ld_options[j].control == TWO_DASHES
1338 || ld_options[j].control == EXACTLY_TWO_DASHES);
1342 two_dashes ? "-" : "",
1343 ld_options[j].opt.name);
1344 len += ((comma ? 2 : 0)
1346 + (two_dashes ? 1 : 0)
1347 + strlen (ld_options[j].opt.name));
1348 if (ld_options[j].arg != NULL)
1350 printf (" %s", _(ld_options[j].arg));
1351 len += 1 + strlen (_(ld_options[j].arg));
1357 while (j < OPTION_COUNT && ld_options[j].doc == NULL);
1365 for (; len < 30; len++)
1368 printf ("%s\n", _(ld_options[i].doc));
1372 /* Note: Various tools (such as libtool) depend upon the
1373 format of the listings below - do not change them. */
1374 /* xgettext:c-format */
1375 printf (_("%s: supported targets:"), program_name);
1376 targets = bfd_target_list ();
1377 for (pp = targets; *pp != NULL; pp++)
1378 printf (" %s", *pp);
1382 /* xgettext:c-format */
1383 printf (_("%s: supported emulations: "), program_name);
1384 ldemul_list_emulations (stdout);
1387 /* xgettext:c-format */
1388 printf (_("%s: emulation specific options:\n"), program_name);
1389 ldemul_list_emulation_options (stdout);
1392 printf (_("Report bugs to %s\n"), REPORT_BUGS_TO);