+ DEFINE_special(just_symbols, options::TWO_DASHES, '\0',
+ N_("Read only symbol values from FILE"), N_("FILE"));
+
+ DEFINE_special(library, options::TWO_DASHES, 'l',
+ N_("Search for library LIBNAME"), N_("LIBNAME"));
+
+ DEFINE_dirlist(library_path, options::TWO_DASHES, 'L',
+ N_("Add directory to search path"), N_("DIR"));
+
+ DEFINE_string(m, options::EXACTLY_ONE_DASH, 'm', "",
+ N_("Ignored for compatibility"), N_("EMULATION"));
+
+ DEFINE_bool(print_map, options::TWO_DASHES, 'M', false,
+ N_("Write map file on standard output"), NULL);
+ DEFINE_string(Map, options::ONE_DASH, '\0', NULL, N_("Write map file"),
+ N_("MAPFILENAME"));
+
+ DEFINE_bool(nmagic, options::TWO_DASHES, 'n', false,
+ N_("Do not page align data"), NULL);
+ DEFINE_bool(omagic, options::EXACTLY_TWO_DASHES, 'N', false,
+ N_("Do not page align data, do not make text readonly"),
+ N_("Page align data, make text readonly"));
+
+ DEFINE_enable(new_dtags, options::EXACTLY_TWO_DASHES, '\0', false,
+ N_("Enable use of DT_RUNPATH and DT_FLAGS"),
+ N_("Disable use of DT_RUNPATH and DT_FLAGS"));
+
+ DEFINE_bool(noinhibit_exec, options::TWO_DASHES, '\0', false,
+ N_("Create an output file even if errors occur"), NULL);
+
+ DEFINE_bool_alias(no_undefined, defs, options::TWO_DASHES, '\0',
+ N_("Report undefined symbols (even with --shared)"),
+ NULL, false);
+
+ DEFINE_string(output, options::TWO_DASHES, 'o', "a.out",
+ N_("Set output file name"), N_("FILE"));
+
+ DEFINE_uint(optimize, options::EXACTLY_ONE_DASH, 'O', 0,
+ N_("Optimize output file size"), N_("LEVEL"));
+
+ DEFINE_string(oformat, options::EXACTLY_TWO_DASHES, '\0', "elf",
+ N_("Set output format"), N_("[binary]"));
+
+#ifdef ENABLE_PLUGINS
+ DEFINE_special(plugin, options::TWO_DASHES, '\0',
+ N_("Load a plugin library"), N_("PLUGIN"));
+ DEFINE_special(plugin_opt, options::TWO_DASHES, '\0',
+ N_("Pass an option to the plugin"), N_("OPTION"));
+#endif
+
+ DEFINE_bool(preread_archive_symbols, options::TWO_DASHES, '\0', false,
+ N_("Preread archive symbols when multi-threaded"), NULL);
+
+ DEFINE_string(print_symbol_counts, options::TWO_DASHES, '\0', NULL,
+ N_("Print symbols defined and used for each input"),
+ N_("FILENAME"));
+
+ DEFINE_bool(Qy, options::EXACTLY_ONE_DASH, '\0', false,
+ N_("Ignored for SVR4 compatibility"), NULL);
+
+ DEFINE_bool(emit_relocs, options::TWO_DASHES, 'q', false,
+ N_("Generate relocations in output"), NULL);
+
+ DEFINE_bool(relocatable, options::EXACTLY_ONE_DASH, 'r', false,
+ N_("Generate relocatable output"), NULL);
+
+ DEFINE_bool(relax, options::TWO_DASHES, '\0', false,
+ N_("Relax branches on certain targets"), NULL);
+
+ // -R really means -rpath, but can mean --just-symbols for
+ // compatibility with GNU ld. -rpath is always -rpath, so we list
+ // it separately.
+ DEFINE_special(R, options::EXACTLY_ONE_DASH, 'R',
+ N_("Add DIR to runtime search path"), N_("DIR"));
+
+ DEFINE_dirlist(rpath, options::ONE_DASH, '\0',
+ N_("Add DIR to runtime search path"), N_("DIR"));
+
+ DEFINE_dirlist(rpath_link, options::TWO_DASHES, '\0',
+ N_("Add DIR to link time shared library search path"),
+ N_("DIR"));
+
+ DEFINE_bool(strip_all, options::TWO_DASHES, 's', false,
+ N_("Strip all symbols"), NULL);
+ DEFINE_bool(strip_debug, options::TWO_DASHES, 'S', false,
+ N_("Strip debugging information"), NULL);
+ DEFINE_bool(strip_debug_non_line, options::TWO_DASHES, '\0', false,
+ N_("Emit only debug line number information"), NULL);
+ DEFINE_bool(strip_debug_gdb, options::TWO_DASHES, '\0', false,
+ N_("Strip debug symbols that are unused by gdb "
+ "(at least versions <= 6.7)"), NULL);
+ DEFINE_bool(strip_lto_sections, options::TWO_DASHES, '\0', true,
+ N_("Strip LTO intermediate code sections"), NULL);
+
+ DEFINE_bool(no_keep_memory, options::TWO_DASHES, 's', false,
+ N_("Use less memory and more disk I/O (included only for compatibility with GNU ld)"), NULL);
+
+ DEFINE_bool(shared, options::ONE_DASH, '\0', false,
+ N_("Generate shared library"), NULL);
+
+ DEFINE_bool(Bshareable, options::ONE_DASH, '\0', false,
+ N_("Generate shared library"), NULL);
+
+ // This is not actually special in any way, but I need to give it
+ // a non-standard accessor-function name because 'static' is a keyword.
+ DEFINE_special(static, options::ONE_DASH, '\0',
+ N_("Do not link against shared libraries"), NULL);
+
+ DEFINE_bool(icf, options::TWO_DASHES, '\0', false,
+ N_("Fold identical functions"),
+ N_("Don't fold identical functions (default)"));
+
+ DEFINE_uint(icf_iterations, options::TWO_DASHES , '\0', 0,
+ N_("Number of iterations of ICF (default 2)"), N_("COUNT"));
+
+ DEFINE_bool(print_icf_sections, options::TWO_DASHES, '\0', false,
+ N_("List folded identical sections on stderr"),
+ N_("Do not list folded identical sections"));
+
+ DEFINE_bool(gc_sections, options::TWO_DASHES, '\0', false,
+ N_("Remove unused sections"),
+ N_("Don't remove unused sections (default)"));
+
+ DEFINE_bool(print_gc_sections, options::TWO_DASHES, '\0', false,
+ N_("List removed unused sections on stderr"),
+ N_("Do not list removed unused sections"));
+
+ DEFINE_bool(stats, options::TWO_DASHES, '\0', false,
+ N_("Print resource usage statistics"), NULL);
+
+ DEFINE_string(sysroot, options::TWO_DASHES, '\0', "",
+ N_("Set target system root directory"), N_("DIR"));
+
+ DEFINE_bool(trace, options::TWO_DASHES, 't', false,
+ N_("Print the name of each input file"), NULL);
+
+ DEFINE_special(script, options::TWO_DASHES, 'T',
+ N_("Read linker script"), N_("FILE"));
+
+ DEFINE_bool(threads, options::TWO_DASHES, '\0', false,
+ N_("Run the linker multi-threaded"),
+ N_("Do not run the linker multi-threaded"));
+ DEFINE_uint(thread_count, options::TWO_DASHES, '\0', 0,
+ N_("Number of threads to use"), N_("COUNT"));
+ DEFINE_uint(thread_count_initial, options::TWO_DASHES, '\0', 0,
+ N_("Number of threads to use in initial pass"), N_("COUNT"));
+ DEFINE_uint(thread_count_middle, options::TWO_DASHES, '\0', 0,
+ N_("Number of threads to use in middle pass"), N_("COUNT"));
+ DEFINE_uint(thread_count_final, options::TWO_DASHES, '\0', 0,
+ N_("Number of threads to use in final pass"), N_("COUNT"));
+
+ DEFINE_uint64(Tbss, options::ONE_DASH, '\0', -1U,
+ N_("Set the address of the bss segment"), N_("ADDRESS"));
+ DEFINE_uint64(Tdata, options::ONE_DASH, '\0', -1U,
+ N_("Set the address of the data segment"), N_("ADDRESS"));
+ DEFINE_uint64(Ttext, options::ONE_DASH, '\0', -1U,
+ N_("Set the address of the text segment"), N_("ADDRESS"));
+
+ DEFINE_set(undefined, options::TWO_DASHES, 'u',
+ N_("Create undefined reference to SYMBOL"), N_("SYMBOL"));
+
+ DEFINE_bool(verbose, options::TWO_DASHES, '\0', false,
+ N_("Synonym for --debug=files"), NULL);
+
+ DEFINE_special(version_script, options::TWO_DASHES, '\0',
+ N_("Read version script"), N_("FILE"));
+
+ DEFINE_bool(warn_search_mismatch, options::TWO_DASHES, '\0', true,
+ N_("Warn when skipping an incompatible library"),
+ N_("Don't warn when skipping an incompatible library"));
+
+ DEFINE_bool(whole_archive, options::TWO_DASHES, '\0', false,
+ N_("Include all archive contents"),
+ N_("Include only needed archive contents"));
+
+ DEFINE_set(wrap, options::TWO_DASHES, '\0',
+ N_("Use wrapper functions for SYMBOL"), N_("SYMBOL"));
+
+ DEFINE_set(trace_symbol, options::TWO_DASHES, 'y',
+ N_("Trace references to symbol"), N_("SYMBOL"));
+
+ DEFINE_string(Y, options::EXACTLY_ONE_DASH, 'Y', "",
+ N_("Default search path for Solaris compatibility"),
+ N_("PATH"));
+
+ DEFINE_special(start_group, options::TWO_DASHES, '(',
+ N_("Start a library search group"), NULL);
+ DEFINE_special(end_group, options::TWO_DASHES, ')',
+ N_("End a library search group"), NULL);
+
+ // The -z options.
+
+ DEFINE_bool(combreloc, options::DASH_Z, '\0', true,
+ N_("Sort dynamic relocs"),
+ N_("Do not sort dynamic relocs"));
+ DEFINE_uint64(common_page_size, options::DASH_Z, '\0', 0,
+ N_("Set common page size to SIZE"), N_("SIZE"));
+ DEFINE_bool(defs, options::DASH_Z, '\0', false,
+ N_("Report undefined symbols (even with --shared)"),
+ NULL);
+ DEFINE_bool(execstack, options::DASH_Z, '\0', false,
+ N_("Mark output as requiring executable stack"), NULL);
+ DEFINE_bool(initfirst, options::DASH_Z, '\0', false,
+ N_("Mark DSO to be initialized first at runtime"),
+ NULL);
+ DEFINE_bool(interpose, options::DASH_Z, '\0', false,
+ N_("Mark object to interpose all DSOs but executable"),
+ NULL);
+ DEFINE_bool(lazy, options::DASH_Z, '\0', false,
+ N_("Mark object for lazy runtime binding (default)"),
+ NULL);
+ DEFINE_bool(loadfltr, options::DASH_Z, '\0', false,
+ N_("Mark object requiring immediate process"),
+ NULL);
+ DEFINE_uint64(max_page_size, options::DASH_Z, '\0', 0,
+ N_("Set maximum page size to SIZE"), N_("SIZE"));
+ DEFINE_bool(nodefaultlib, options::DASH_Z, '\0', false,
+ N_("Mark object not to use default search paths"),
+ NULL);
+ DEFINE_bool(nodelete, options::DASH_Z, '\0', false,
+ N_("Mark DSO non-deletable at runtime"),
+ NULL);
+ DEFINE_bool(nodlopen, options::DASH_Z, '\0', false,
+ N_("Mark DSO not available to dlopen"),
+ NULL);
+ DEFINE_bool(nodump, options::DASH_Z, '\0', false,
+ N_("Mark DSO not available to dldump"),
+ NULL);
+ DEFINE_bool(noexecstack, options::DASH_Z, '\0', false,
+ N_("Mark output as not requiring executable stack"), NULL);
+ DEFINE_bool(now, options::DASH_Z, '\0', false,
+ N_("Mark object for immediate function binding"),
+ NULL);
+ DEFINE_bool(origin, options::DASH_Z, '\0', false,
+ N_("Mark DSO to indicate that needs immediate $ORIGIN "
+ "processing at runtime"), NULL);
+ DEFINE_bool(relro, options::DASH_Z, '\0', false,
+ N_("Where possible mark variables read-only after relocation"),
+ N_("Don't mark variables read-only after relocation"));