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)
447 /* Test STRING for containing a string of digits that form a number
448 between MIN and MAX. The return value is the number or ERR. */
451 is_num (const char *string
, int min
, int max
, int err
)
455 for (; *string
; ++string
)
457 if (! ISDIGIT (*string
))
462 result
= result
* 10 + (*string
- '0');
464 if (result
< min
|| result
> max
)
471 parse_args (unsigned argc
, char **argv
)
476 char *default_dirlist
= NULL
;
478 struct option
*longopts
;
479 struct option
*really_longopts
;
481 enum report_method how_to_report_unresolved_symbols
= RM_GENERATE_ERROR
;
483 shortopts
= xmalloc (OPTION_COUNT
* 3 + 2);
484 longopts
= xmalloc (sizeof (*longopts
) * (OPTION_COUNT
+ 1));
485 really_longopts
= xmalloc (sizeof (*really_longopts
) * (OPTION_COUNT
+ 1));
487 /* Starting the short option string with '-' is for programs that
488 expect options and other ARGV-elements in any order and that care about
489 the ordering of the two. We describe each non-option ARGV-element
490 as if it were the argument of an option with character code 1. */
495 for (i
= 0; i
< OPTION_COUNT
; i
++)
497 if (ld_options
[i
].shortopt
!= '\0')
499 shortopts
[is
] = ld_options
[i
].shortopt
;
501 if (ld_options
[i
].opt
.has_arg
== required_argument
502 || ld_options
[i
].opt
.has_arg
== optional_argument
)
506 if (ld_options
[i
].opt
.has_arg
== optional_argument
)
513 if (ld_options
[i
].opt
.name
!= NULL
)
515 if (ld_options
[i
].control
== EXACTLY_TWO_DASHES
)
517 really_longopts
[irl
] = ld_options
[i
].opt
;
522 longopts
[il
] = ld_options
[i
].opt
;
527 shortopts
[is
] = '\0';
528 longopts
[il
].name
= NULL
;
529 really_longopts
[irl
].name
= NULL
;
531 ldemul_add_options (is
, &shortopts
, il
, &longopts
, irl
, &really_longopts
);
533 /* The -G option is ambiguous on different platforms. Sometimes it
534 specifies the largest data size to put into the small data
535 section. Sometimes it is equivalent to --shared. Unfortunately,
536 the first form takes an argument, while the second does not.
538 We need to permit the --shared form because on some platforms,
539 such as Solaris, gcc -shared will pass -G to the linker.
541 To permit either usage, we look through the argument list. If we
542 find -G not followed by a number, we change it into --shared.
543 This will work for most normal cases. */
544 for (i
= 1; i
< argc
; i
++)
545 if (strcmp (argv
[i
], "-G") == 0
547 || ! ISDIGIT (argv
[i
+ 1][0])))
548 argv
[i
] = (char *) "--shared";
550 /* Because we permit long options to start with a single dash, and
551 we have a --library option, and the -l option is conventionally
552 used with an immediately following argument, we can have bad
553 results if somebody tries to use -l with a library whose name
554 happens to start with "ibrary", as in -li. We avoid problems by
555 simply turning -l into --library. This means that users will
556 have to use two dashes in order to use --library, which is OK
557 since that's how it is documented.
559 FIXME: It's possible that this problem can arise for other short
560 options as well, although the user does always have the recourse
561 of adding a space between the option and the argument. */
562 for (i
= 1; i
< argc
; i
++)
564 if (argv
[i
][0] == '-'
566 && argv
[i
][2] != '\0')
570 n
= xmalloc (strlen (argv
[i
]) + 20);
571 sprintf (n
, "--library=%s", argv
[i
] + 2);
582 /* Using last_optind lets us avoid calling ldemul_parse_args
583 multiple times on a single option, which would lead to
584 confusion in the internal static variables maintained by
585 getopt. This could otherwise happen for an argument like
586 -nx, in which the -n is parsed as a single option, and we
587 loop around to pick up the -x. */
588 if (optind
!= last_optind
)
589 if (ldemul_parse_args (argc
, argv
))
592 /* getopt_long_only is like getopt_long, but '-' as well as '--'
593 can indicate a long option. */
595 last_optind
= optind
;
596 optc
= getopt_long_only (argc
, argv
, shortopts
, longopts
, &longind
);
599 optind
= last_optind
;
600 optc
= getopt_long (argc
, argv
, "-", really_longopts
, &longind
);
603 if (ldemul_handle_option (optc
))
612 einfo (_("%P: unrecognized option '%s'\n"), argv
[last_optind
]);
614 einfo (_("%P%F: use the --help option for usage information\n"));
616 case 1: /* File name. */
617 lang_add_input_file (optarg
, lang_input_file_is_file_enum
, NULL
);
623 /* For HP/UX compatibility. Actually -a shared should mean
624 ``use only shared libraries'' but, then, we don't
625 currently support shared libraries on HP/UX anyhow. */
626 if (strcmp (optarg
, "archive") == 0)
627 config
.dynamic_link
= FALSE
;
628 else if (strcmp (optarg
, "shared") == 0
629 || strcmp (optarg
, "default") == 0)
630 config
.dynamic_link
= TRUE
;
632 einfo (_("%P%F: unrecognized -a option `%s'\n"), optarg
);
635 /* FIXME: We just ignore these, but we should handle them. */
636 if (strcmp (optarg
, "definitions") == 0)
638 else if (strcmp (optarg
, "nodefinitions") == 0)
640 else if (strcmp (optarg
, "nosymbolic") == 0)
642 else if (strcmp (optarg
, "pure-text") == 0)
645 einfo (_("%P%F: unrecognized -assert option `%s'\n"), optarg
);
648 ldfile_add_arch (optarg
);
651 lang_add_target (optarg
);
654 ldfile_open_command_file (optarg
);
655 parser_input
= input_mri_script
;
658 case OPTION_CALL_SHARED
:
659 config
.dynamic_link
= TRUE
;
660 /* When linking against shared libraries, the default behaviour is
661 to report any unresolved references. Although strictly speaking
662 it is not a failure to encounter unresolved symbols at link time
663 - the symbol *might* be available at load time - it is a strong
664 indication that the resulting executable will not work. Plus it
665 is necessary for the correct execution of the autoconf package,
666 which needs to be able to detect functions that are not provided
668 if (link_info
.unresolved_syms_in_objects
== RM_NOT_YET_SET
)
669 link_info
.unresolved_syms_in_objects
= how_to_report_unresolved_symbols
;
670 if (link_info
.unresolved_syms_in_shared_libs
== RM_NOT_YET_SET
)
671 link_info
.unresolved_syms_in_shared_libs
= how_to_report_unresolved_symbols
;
673 case OPTION_NON_SHARED
:
674 config
.dynamic_link
= FALSE
;
675 /* When linking against static libraries, the default
676 behaviour is to report any unresolved references. */
677 if (link_info
.unresolved_syms_in_objects
== RM_NOT_YET_SET
)
678 link_info
.unresolved_syms_in_objects
= how_to_report_unresolved_symbols
;
679 if (link_info
.unresolved_syms_in_shared_libs
== RM_NOT_YET_SET
)
680 link_info
.unresolved_syms_in_shared_libs
= how_to_report_unresolved_symbols
;
683 command_line
.cref
= TRUE
;
684 link_info
.notice_all
= TRUE
;
687 command_line
.force_common_definition
= TRUE
;
691 lex_redirect (optarg
);
692 parser_input
= input_defsym
;
698 case OPTION_DEMANGLE
:
702 enum demangling_styles style
;
704 style
= cplus_demangle_name_to_style (optarg
);
705 if (style
== unknown_demangling
)
706 einfo (_("%F%P: unknown demangling style `%s'"),
709 cplus_demangle_set_style (style
);
712 case 'I': /* Used on Solaris. */
713 case OPTION_DYNAMIC_LINKER
:
714 command_line
.interpreter
= optarg
;
717 command_line
.endian
= ENDIAN_BIG
;
720 command_line
.endian
= ENDIAN_LITTLE
;
722 case OPTION_EMBEDDED_RELOCS
:
723 command_line
.embedded_relocs
= TRUE
;
725 case OPTION_EXPORT_DYNAMIC
:
726 case 'E': /* HP/UX compatibility. */
727 link_info
.export_dynamic
= TRUE
;
730 lang_add_entry (optarg
, TRUE
);
733 if (command_line
.auxiliary_filters
== NULL
)
735 command_line
.auxiliary_filters
= xmalloc (2 * sizeof (char *));
736 command_line
.auxiliary_filters
[0] = optarg
;
737 command_line
.auxiliary_filters
[1] = NULL
;
745 for (p
= command_line
.auxiliary_filters
; *p
!= NULL
; p
++)
747 command_line
.auxiliary_filters
748 = xrealloc (command_line
.auxiliary_filters
,
749 (c
+ 2) * sizeof (char *));
750 command_line
.auxiliary_filters
[c
] = optarg
;
751 command_line
.auxiliary_filters
[c
+ 1] = NULL
;
755 command_line
.filter_shlib
= optarg
;
757 case OPTION_FORCE_EXE_SUFFIX
:
758 command_line
.force_exe_suffix
= TRUE
;
763 g_switch_value
= strtoul (optarg
, &end
, 0);
765 einfo (_("%P%F: invalid number `%s'\n"), optarg
);
771 case OPTION_GC_SECTIONS
:
772 command_line
.gc_sections
= TRUE
;
779 ldfile_add_library_path (optarg
, TRUE
);
782 lang_add_input_file (optarg
, lang_input_file_is_l_enum
, NULL
);
785 config
.map_filename
= "-";
788 /* Ignore. Was handled in a pre-parse. */
791 config
.map_filename
= optarg
;
794 config
.text_read_only
= FALSE
;
795 config
.magic_demand_paged
= FALSE
;
796 config
.dynamic_link
= FALSE
;
798 case OPTION_NO_OMAGIC
:
799 config
.text_read_only
= TRUE
;
800 config
.magic_demand_paged
= TRUE
;
801 /* NB/ Does not set dynamic_link to TRUE.
802 Use --call-shared or -Bdynamic for this. */
805 config
.magic_demand_paged
= FALSE
;
806 config
.dynamic_link
= FALSE
;
808 case OPTION_NO_DEFINE_COMMON
:
809 command_line
.inhibit_common_definition
= TRUE
;
811 case OPTION_NO_DEMANGLE
:
814 case OPTION_NO_GC_SECTIONS
:
815 command_line
.gc_sections
= FALSE
;
817 case OPTION_NO_KEEP_MEMORY
:
818 link_info
.keep_memory
= FALSE
;
820 case OPTION_NO_UNDEFINED
:
821 link_info
.unresolved_syms_in_objects
= how_to_report_unresolved_symbols
;
823 case OPTION_ALLOW_SHLIB_UNDEFINED
:
824 link_info
.unresolved_syms_in_shared_libs
= RM_IGNORE
;
826 case OPTION_NO_ALLOW_SHLIB_UNDEFINED
:
827 link_info
.unresolved_syms_in_shared_libs
= how_to_report_unresolved_symbols
;
829 case OPTION_UNRESOLVED_SYMBOLS
:
830 if (strcmp (optarg
, "ignore-all") == 0)
832 link_info
.unresolved_syms_in_objects
= RM_IGNORE
;
833 link_info
.unresolved_syms_in_shared_libs
= RM_IGNORE
;
835 else if (strcmp (optarg
, "report-all") == 0)
837 link_info
.unresolved_syms_in_objects
= how_to_report_unresolved_symbols
;
838 link_info
.unresolved_syms_in_shared_libs
= how_to_report_unresolved_symbols
;
840 else if (strcmp (optarg
, "ignore-in-object-files") == 0)
842 link_info
.unresolved_syms_in_objects
= RM_IGNORE
;
843 link_info
.unresolved_syms_in_shared_libs
= how_to_report_unresolved_symbols
;
845 else if (strcmp (optarg
, "ignore-in-shared-libs") == 0)
847 link_info
.unresolved_syms_in_objects
= how_to_report_unresolved_symbols
;
848 link_info
.unresolved_syms_in_shared_libs
= RM_IGNORE
;
851 einfo (_("%P%F: bad --unresolved-symbols option: %s\n"), optarg
);
853 case OPTION_WARN_UNRESOLVED_SYMBOLS
:
854 how_to_report_unresolved_symbols
= RM_GENERATE_WARNING
;
855 if (link_info
.unresolved_syms_in_objects
== RM_GENERATE_ERROR
)
856 link_info
.unresolved_syms_in_objects
= RM_GENERATE_WARNING
;
857 if (link_info
.unresolved_syms_in_shared_libs
== RM_GENERATE_ERROR
)
858 link_info
.unresolved_syms_in_shared_libs
= RM_GENERATE_WARNING
;
861 case OPTION_ERROR_UNRESOLVED_SYMBOLS
:
862 how_to_report_unresolved_symbols
= RM_GENERATE_ERROR
;
863 if (link_info
.unresolved_syms_in_objects
== RM_GENERATE_WARNING
)
864 link_info
.unresolved_syms_in_objects
= RM_GENERATE_ERROR
;
865 if (link_info
.unresolved_syms_in_shared_libs
== RM_GENERATE_WARNING
)
866 link_info
.unresolved_syms_in_shared_libs
= RM_GENERATE_ERROR
;
868 case OPTION_ALLOW_MULTIPLE_DEFINITION
:
869 link_info
.allow_multiple_definition
= TRUE
;
871 case OPTION_NO_UNDEFINED_VERSION
:
872 link_info
.allow_undefined_version
= FALSE
;
874 case OPTION_NO_WARN_MISMATCH
:
875 command_line
.warn_mismatch
= FALSE
;
877 case OPTION_NOINHIBIT_EXEC
:
878 force_make_executable
= TRUE
;
880 case OPTION_NOSTDLIB
:
881 config
.only_cmd_line_lib_dirs
= TRUE
;
883 case OPTION_NO_WHOLE_ARCHIVE
:
884 whole_archive
= FALSE
;
887 /* FIXME "-O<non-digits> <value>" used to set the address of
888 section <non-digits>. Was this for compatibility with
889 something, or can we create a new option to do that
890 (with a syntax similar to -defsym)?
891 getopt can't handle two args to an option without kludges. */
893 /* Enable optimizations of output files. */
894 link_info
.optimize
= strtoul (optarg
, NULL
, 0) ? TRUE
: FALSE
;
897 lang_add_output (optarg
, 0);
900 lang_add_output_format (optarg
, NULL
, NULL
, 0);
903 link_info
.emitrelocations
= TRUE
;
907 if (optind
== last_optind
)
908 /* This can happen if the user put "-rpath,a" on the command
909 line. (Or something similar. The comma is important).
910 Getopt becomes confused and thinks that this is a -r option
911 but it cannot parse the text after the -r so it refuses to
912 increment the optind counter. Detect this case and issue
913 an error message here. We cannot just make this a warning,
914 increment optind, and continue because getopt is too confused
915 and will seg-fault the next time around. */
916 einfo(_("%P%F: bad -rpath option\n"));
918 link_info
.relocatable
= TRUE
;
919 config
.build_constructors
= FALSE
;
920 config
.magic_demand_paged
= FALSE
;
921 config
.text_read_only
= FALSE
;
922 config
.dynamic_link
= FALSE
;
925 /* The GNU linker traditionally uses -R to mean to include
926 only the symbols from a file. The Solaris linker uses -R
927 to set the path used by the runtime linker to find
928 libraries. This is the GNU linker -rpath argument. We
929 try to support both simultaneously by checking the file
930 named. If it is a directory, rather than a regular file,
931 we assume -rpath was meant. */
935 if (stat (optarg
, &s
) >= 0
936 && ! S_ISDIR (s
.st_mode
))
938 lang_add_input_file (optarg
,
939 lang_input_file_is_symbols_only_enum
,
946 if (command_line
.rpath
== NULL
)
947 command_line
.rpath
= xstrdup (optarg
);
950 size_t rpath_len
= strlen (command_line
.rpath
);
951 size_t optarg_len
= strlen (optarg
);
953 char *cp
= command_line
.rpath
;
955 /* First see whether OPTARG is already in the path. */
960 while (optarg
[idx
] != '\0' && optarg
[idx
] == cp
[idx
])
962 if (optarg
[idx
] == '\0'
963 && (cp
[idx
] == '\0' || cp
[idx
] == ':'))
968 cp
= strchr (cp
, ':');
976 buf
= xmalloc (rpath_len
+ optarg_len
+ 2);
977 sprintf (buf
, "%s:%s", command_line
.rpath
, optarg
);
978 free (command_line
.rpath
);
979 command_line
.rpath
= buf
;
983 case OPTION_RPATH_LINK
:
984 if (command_line
.rpath_link
== NULL
)
985 command_line
.rpath_link
= xstrdup (optarg
);
990 buf
= xmalloc (strlen (command_line
.rpath_link
)
993 sprintf (buf
, "%s:%s", command_line
.rpath_link
, optarg
);
994 free (command_line
.rpath_link
);
995 command_line
.rpath_link
= buf
;
999 command_line
.relax
= TRUE
;
1001 case OPTION_RETAIN_SYMBOLS_FILE
:
1002 add_keepsyms_file (optarg
);
1005 link_info
.strip
= strip_debugger
;
1008 link_info
.strip
= strip_all
;
1010 case OPTION_STRIP_DISCARDED
:
1011 link_info
.strip_discarded
= TRUE
;
1013 case OPTION_NO_STRIP_DISCARDED
:
1014 link_info
.strip_discarded
= FALSE
;
1017 if (config
.has_shared
)
1019 link_info
.shared
= TRUE
;
1020 /* When creating a shared library, the default
1021 behaviour is to ignore any unresolved references. */
1022 if (link_info
.unresolved_syms_in_objects
== RM_NOT_YET_SET
)
1023 link_info
.unresolved_syms_in_objects
= RM_IGNORE
;
1024 if (link_info
.unresolved_syms_in_shared_libs
== RM_NOT_YET_SET
)
1025 link_info
.unresolved_syms_in_shared_libs
= RM_IGNORE
;
1028 einfo (_("%P%F: -shared not supported\n"));
1031 if (config
.has_shared
)
1033 link_info
.shared
= TRUE
;
1034 link_info
.pie
= TRUE
;
1037 einfo (_("%P%F: -pie not supported\n"));
1039 case 'h': /* Used on Solaris. */
1041 command_line
.soname
= optarg
;
1043 case OPTION_SORT_COMMON
:
1044 config
.sort_common
= TRUE
;
1047 config
.stats
= TRUE
;
1049 case OPTION_SYMBOLIC
:
1050 link_info
.symbolic
= TRUE
;
1056 ldfile_open_command_file (optarg
);
1057 parser_input
= input_script
;
1060 case OPTION_SECTION_START
:
1066 /* Check for <something>=<somthing>... */
1067 optarg2
= strchr (optarg
, '=');
1068 if (optarg2
== NULL
)
1069 einfo (_("%P%F: invalid argument to option \"--section-start\"\n"));
1073 /* So far so good. Are all the args present? */
1074 if ((*optarg
== '\0') || (*optarg2
== '\0'))
1075 einfo (_("%P%F: missing argument(s) to option \"--section-start\"\n"));
1077 /* We must copy the section name as set_section_start
1078 doesn't do it for us. */
1079 len
= optarg2
- optarg
;
1080 sec_name
= xmalloc (len
);
1081 memcpy (sec_name
, optarg
, len
- 1);
1082 sec_name
[len
- 1] = 0;
1084 /* Then set it... */
1085 set_section_start (sec_name
, optarg2
);
1088 case OPTION_TARGET_HELP
:
1089 /* Mention any target specific options. */
1090 ldemul_list_emulation_options (stdout
);
1093 set_section_start (".bss", optarg
);
1096 set_section_start (".data", optarg
);
1099 set_section_start (".text", optarg
);
1101 case OPTION_TRADITIONAL_FORMAT
:
1102 link_info
.traditional_format
= TRUE
;
1104 case OPTION_TASK_LINK
:
1105 link_info
.task_link
= TRUE
;
1106 /* Fall through - do an implied -r option. */
1108 link_info
.relocatable
= TRUE
;
1109 config
.build_constructors
= TRUE
;
1110 config
.magic_demand_paged
= FALSE
;
1111 config
.text_read_only
= FALSE
;
1112 config
.dynamic_link
= FALSE
;
1115 ldlang_add_undef (optarg
);
1119 lang_add_unique (optarg
);
1121 config
.unique_orphan_sections
= TRUE
;
1123 case OPTION_VERBOSE
:
1125 version_printed
= TRUE
;
1126 trace_file_tries
= TRUE
;
1127 overflow_cutoff_limit
= -2;
1131 version_printed
= TRUE
;
1135 version_printed
= TRUE
;
1137 case OPTION_VERSION
:
1141 case OPTION_VERSION_SCRIPT
:
1142 /* This option indicates a small script that only specifies
1143 version information. Read it, but don't assume that
1144 we've seen a linker script. */
1146 FILE *hold_script_handle
;
1148 hold_script_handle
= saved_script_handle
;
1149 ldfile_open_command_file (optarg
);
1150 saved_script_handle
= hold_script_handle
;
1151 parser_input
= input_version_script
;
1155 case OPTION_VERSION_EXPORTS_SECTION
:
1156 /* This option records a version symbol to be applied to the
1157 symbols listed for export to be found in the object files
1158 .exports sections. */
1159 command_line
.version_exports_section
= optarg
;
1161 case OPTION_WARN_COMMON
:
1162 config
.warn_common
= TRUE
;
1164 case OPTION_WARN_CONSTRUCTORS
:
1165 config
.warn_constructors
= TRUE
;
1167 case OPTION_WARN_FATAL
:
1168 config
.fatal_warnings
= TRUE
;
1170 case OPTION_WARN_MULTIPLE_GP
:
1171 config
.warn_multiple_gp
= TRUE
;
1173 case OPTION_WARN_ONCE
:
1174 config
.warn_once
= TRUE
;
1176 case OPTION_WARN_SECTION_ALIGN
:
1177 config
.warn_section_align
= TRUE
;
1179 case OPTION_WHOLE_ARCHIVE
:
1180 whole_archive
= TRUE
;
1185 case OPTION_DISCARD_NONE
:
1186 link_info
.discard
= discard_none
;
1189 link_info
.discard
= discard_l
;
1192 link_info
.discard
= discard_all
;
1195 if (strncmp (optarg
, "P,", 2) == 0)
1197 if (default_dirlist
!= NULL
)
1198 free (default_dirlist
);
1199 default_dirlist
= xstrdup (optarg
);
1204 case OPTION_SPARE_DYNAMIC_TAGS
:
1205 link_info
.spare_dynamic_tags
= strtoul (optarg
, NULL
, 0);
1207 case OPTION_SPLIT_BY_RELOC
:
1209 config
.split_by_reloc
= strtoul (optarg
, NULL
, 0);
1211 config
.split_by_reloc
= 32768;
1213 case OPTION_SPLIT_BY_FILE
:
1215 config
.split_by_file
= bfd_scan_vma (optarg
, NULL
, 0);
1217 config
.split_by_file
= 1;
1219 case OPTION_CHECK_SECTIONS
:
1220 command_line
.check_section_addresses
= TRUE
;
1222 case OPTION_NO_CHECK_SECTIONS
:
1223 command_line
.check_section_addresses
= FALSE
;
1225 case OPTION_ACCEPT_UNKNOWN_INPUT_ARCH
:
1226 command_line
.accept_unknown_input_arch
= TRUE
;
1228 case OPTION_NO_ACCEPT_UNKNOWN_INPUT_ARCH
:
1229 command_line
.accept_unknown_input_arch
= FALSE
;
1233 einfo (_("%P%F: may not nest groups (--help for usage)\n"));
1235 lang_enter_group ();
1240 einfo (_("%P%F: group ended before it began (--help for usage)\n"));
1242 lang_leave_group ();
1247 link_info
.init_function
= optarg
;
1251 link_info
.fini_function
= optarg
;
1257 lang_leave_group ();
1259 if (default_dirlist
!= NULL
)
1261 set_default_dirlist (default_dirlist
);
1262 free (default_dirlist
);
1265 if (link_info
.unresolved_syms_in_objects
== RM_NOT_YET_SET
)
1266 /* FIXME: Should we allow emulations a chance to set this ? */
1267 link_info
.unresolved_syms_in_objects
= how_to_report_unresolved_symbols
;
1269 if (link_info
.unresolved_syms_in_shared_libs
== RM_NOT_YET_SET
)
1270 /* FIXME: Should we allow emulations a chance to set this ? */
1271 link_info
.unresolved_syms_in_shared_libs
= how_to_report_unresolved_symbols
;
1274 /* Add the (colon-separated) elements of DIRLIST_PTR to the
1275 library search path. */
1278 set_default_dirlist (char *dirlist_ptr
)
1284 p
= strchr (dirlist_ptr
, PATH_SEPARATOR
);
1287 if (*dirlist_ptr
!= '\0')
1288 ldfile_add_library_path (dirlist_ptr
, TRUE
);
1291 dirlist_ptr
= p
+ 1;
1296 set_section_start (char *sect
, char *valstr
)
1299 bfd_vma val
= bfd_scan_vma (valstr
, &end
, 16);
1301 einfo (_("%P%F: invalid hex number `%s'\n"), valstr
);
1302 lang_section_start (sect
, exp_intop (val
));
1305 /* Print help messages for the options. */
1311 const char **targets
, **pp
;
1313 printf (_("Usage: %s [options] file...\n"), program_name
);
1315 printf (_("Options:\n"));
1316 for (i
= 0; i
< OPTION_COUNT
; i
++)
1318 if (ld_options
[i
].doc
!= NULL
)
1332 if (ld_options
[j
].shortopt
!= '\0'
1333 && ld_options
[j
].control
!= NO_HELP
)
1335 printf ("%s-%c", comma
? ", " : "", ld_options
[j
].shortopt
);
1336 len
+= (comma
? 2 : 0) + 2;
1337 if (ld_options
[j
].arg
!= NULL
)
1339 if (ld_options
[j
].opt
.has_arg
!= optional_argument
)
1344 printf ("%s", _(ld_options
[j
].arg
));
1345 len
+= strlen (_(ld_options
[j
].arg
));
1351 while (j
< OPTION_COUNT
&& ld_options
[j
].doc
== NULL
);
1356 if (ld_options
[j
].opt
.name
!= NULL
1357 && ld_options
[j
].control
!= NO_HELP
)
1360 (ld_options
[j
].control
== TWO_DASHES
1361 || ld_options
[j
].control
== EXACTLY_TWO_DASHES
);
1365 two_dashes
? "-" : "",
1366 ld_options
[j
].opt
.name
);
1367 len
+= ((comma
? 2 : 0)
1369 + (two_dashes
? 1 : 0)
1370 + strlen (ld_options
[j
].opt
.name
));
1371 if (ld_options
[j
].arg
!= NULL
)
1373 printf (" %s", _(ld_options
[j
].arg
));
1374 len
+= 1 + strlen (_(ld_options
[j
].arg
));
1380 while (j
< OPTION_COUNT
&& ld_options
[j
].doc
== NULL
);
1388 for (; len
< 30; len
++)
1391 printf ("%s\n", _(ld_options
[i
].doc
));
1395 /* Note: Various tools (such as libtool) depend upon the
1396 format of the listings below - do not change them. */
1397 /* xgettext:c-format */
1398 printf (_("%s: supported targets:"), program_name
);
1399 targets
= bfd_target_list ();
1400 for (pp
= targets
; *pp
!= NULL
; pp
++)
1401 printf (" %s", *pp
);
1405 /* xgettext:c-format */
1406 printf (_("%s: supported emulations: "), program_name
);
1407 ldemul_list_emulations (stdout
);
1410 /* xgettext:c-format */
1411 printf (_("%s: emulation specific options:\n"), program_name
);
1412 ldemul_list_emulation_options (stdout
);
1415 printf (_("Report bugs to %s\n"), REPORT_BUGS_TO
);