035801cebe
Add a new option to disable the listing of discarded sections in map file output. The use case stems from a large application built with -ffunction-sections --gc-sections where the list of discarded sections blows up the map file output. The default behaviour remains to print discarded sections, but the new option allows us to disable it. ld/ * NEWS: Mention new option --no-print-map-discarded. * ld.h (ld_config_type) <print_map_discarded>: New field. * ldlang.c (lang_map): Conditionally output discarded sections in map files based on configuration option. * ldlex.h (option_values) <OPTION_PRINT_MAP_DISCARDED, OPTION_NO_PRINT_MAP_DISCARDED>: New. * ldmain.c (main): Enabled print_map_discarded by default. * lexsup.c (ld_options): Add new command-line options. (parse_args) <OPTION_NO_PRINT_MAP_DISCARDED, OPTION_PRINT_MAP_DISCARDED>: New cases. * ld.texi: Document new options. * testsuite/ld-gc/gc.exp: Add new test. * testsuite/ld-gc/skip-map-discarded.s: New file. * testsuite/ld-gc/skip-map-discarded.d: New file. * testsuite/ld-gc/skip-map-discarded.map: New file.
191 lines
5.0 KiB
C
191 lines
5.0 KiB
C
/* ldlex.h -
|
|
Copyright (C) 1991-2019 Free Software Foundation, Inc.
|
|
|
|
This file is part of the GNU Binutils.
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
|
MA 02110-1301, USA. */
|
|
|
|
#ifndef LDLEX_H
|
|
#define LDLEX_H
|
|
|
|
#include <stdio.h>
|
|
|
|
/* Codes used for the long options with no short synonyms. 150 isn't
|
|
special; it's just an arbitrary non-ASCII char value. */
|
|
enum option_values
|
|
{
|
|
OPTION_ASSERT = 150,
|
|
OPTION_CALL_SHARED,
|
|
OPTION_CREF,
|
|
OPTION_DEFSYM,
|
|
OPTION_DEMANGLE,
|
|
OPTION_DYNAMIC_LINKER,
|
|
OPTION_NO_DYNAMIC_LINKER,
|
|
OPTION_SYSROOT,
|
|
OPTION_OUT_IMPLIB,
|
|
OPTION_EB,
|
|
OPTION_EL,
|
|
OPTION_EMBEDDED_RELOCS,
|
|
OPTION_EXPORT_DYNAMIC,
|
|
OPTION_NO_EXPORT_DYNAMIC,
|
|
OPTION_HELP,
|
|
OPTION_IGNORE,
|
|
OPTION_MAP,
|
|
OPTION_NO_DEMANGLE,
|
|
OPTION_NO_KEEP_MEMORY,
|
|
OPTION_NO_WARN_MISMATCH,
|
|
OPTION_NO_WARN_SEARCH_MISMATCH,
|
|
OPTION_NOINHIBIT_EXEC,
|
|
OPTION_NON_SHARED,
|
|
OPTION_NO_WHOLE_ARCHIVE,
|
|
OPTION_OFORMAT,
|
|
OPTION_RELAX,
|
|
OPTION_NO_RELAX,
|
|
OPTION_RETAIN_SYMBOLS_FILE,
|
|
OPTION_RPATH,
|
|
OPTION_RPATH_LINK,
|
|
OPTION_SHARED,
|
|
OPTION_SONAME,
|
|
OPTION_SORT_COMMON,
|
|
OPTION_SORT_SECTION,
|
|
OPTION_STATS,
|
|
OPTION_SYMBOLIC,
|
|
OPTION_SYMBOLIC_FUNCTIONS,
|
|
OPTION_TASK_LINK,
|
|
OPTION_TBSS,
|
|
OPTION_TDATA,
|
|
OPTION_TTEXT,
|
|
OPTION_TTEXT_SEGMENT,
|
|
OPTION_TRODATA_SEGMENT,
|
|
OPTION_TLDATA_SEGMENT,
|
|
OPTION_TRADITIONAL_FORMAT,
|
|
OPTION_UR,
|
|
OPTION_VERBOSE,
|
|
OPTION_VERSION,
|
|
OPTION_VERSION_SCRIPT,
|
|
OPTION_VERSION_EXPORTS_SECTION,
|
|
OPTION_DYNAMIC_LIST,
|
|
OPTION_DYNAMIC_LIST_CPP_NEW,
|
|
OPTION_DYNAMIC_LIST_CPP_TYPEINFO,
|
|
OPTION_DYNAMIC_LIST_DATA,
|
|
OPTION_WARN_COMMON,
|
|
OPTION_WARN_CONSTRUCTORS,
|
|
OPTION_WARN_FATAL,
|
|
OPTION_NO_WARN_FATAL,
|
|
OPTION_WARN_MULTIPLE_GP,
|
|
OPTION_WARN_ONCE,
|
|
OPTION_WARN_SECTION_ALIGN,
|
|
OPTION_SPLIT_BY_RELOC,
|
|
OPTION_SPLIT_BY_FILE ,
|
|
OPTION_WHOLE_ARCHIVE,
|
|
OPTION_ADD_DT_NEEDED_FOR_DYNAMIC,
|
|
OPTION_NO_ADD_DT_NEEDED_FOR_DYNAMIC,
|
|
OPTION_ADD_DT_NEEDED_FOR_REGULAR,
|
|
OPTION_NO_ADD_DT_NEEDED_FOR_REGULAR,
|
|
OPTION_WRAP,
|
|
OPTION_FORCE_EXE_SUFFIX,
|
|
OPTION_GC_SECTIONS,
|
|
OPTION_NO_GC_SECTIONS,
|
|
OPTION_PRINT_GC_SECTIONS,
|
|
OPTION_NO_PRINT_GC_SECTIONS,
|
|
OPTION_GC_KEEP_EXPORTED,
|
|
OPTION_HASH_SIZE,
|
|
OPTION_CHECK_SECTIONS,
|
|
OPTION_NO_CHECK_SECTIONS,
|
|
OPTION_NO_UNDEFINED,
|
|
OPTION_INIT,
|
|
OPTION_FINI,
|
|
OPTION_SECTION_START,
|
|
OPTION_UNIQUE,
|
|
OPTION_TARGET_HELP,
|
|
OPTION_ALLOW_SHLIB_UNDEFINED,
|
|
OPTION_NO_ALLOW_SHLIB_UNDEFINED,
|
|
OPTION_ALLOW_MULTIPLE_DEFINITION,
|
|
OPTION_NO_UNDEFINED_VERSION,
|
|
OPTION_DEFAULT_SYMVER,
|
|
OPTION_DEFAULT_IMPORTED_SYMVER,
|
|
OPTION_DISCARD_NONE,
|
|
OPTION_SPARE_DYNAMIC_TAGS,
|
|
OPTION_NO_DEFINE_COMMON,
|
|
OPTION_NOSTDLIB,
|
|
OPTION_NO_OMAGIC,
|
|
OPTION_STRIP_DISCARDED,
|
|
OPTION_NO_STRIP_DISCARDED,
|
|
OPTION_ACCEPT_UNKNOWN_INPUT_ARCH,
|
|
OPTION_NO_ACCEPT_UNKNOWN_INPUT_ARCH,
|
|
OPTION_PIE,
|
|
OPTION_UNRESOLVED_SYMBOLS,
|
|
OPTION_WARN_UNRESOLVED_SYMBOLS,
|
|
OPTION_ERROR_UNRESOLVED_SYMBOLS,
|
|
OPTION_WARN_SHARED_TEXTREL,
|
|
OPTION_WARN_ALTERNATE_EM,
|
|
OPTION_REDUCE_MEMORY_OVERHEADS,
|
|
#ifdef ENABLE_PLUGINS
|
|
OPTION_PLUGIN,
|
|
OPTION_PLUGIN_OPT,
|
|
#endif /* ENABLE_PLUGINS */
|
|
OPTION_DEFAULT_SCRIPT,
|
|
OPTION_PRINT_OUTPUT_FORMAT,
|
|
OPTION_PRINT_SYSROOT,
|
|
OPTION_IGNORE_UNRESOLVED_SYMBOL,
|
|
OPTION_PUSH_STATE,
|
|
OPTION_POP_STATE,
|
|
OPTION_DISABLE_MULTIPLE_DEFS_ABS,
|
|
OPTION_PRINT_MEMORY_USAGE,
|
|
OPTION_REQUIRE_DEFINED_SYMBOL,
|
|
OPTION_ORPHAN_HANDLING,
|
|
OPTION_FORCE_GROUP_ALLOCATION,
|
|
OPTION_PRINT_MAP_DISCARDED,
|
|
OPTION_NO_PRINT_MAP_DISCARDED,
|
|
};
|
|
|
|
/* The initial parser states. */
|
|
typedef enum input_enum {
|
|
input_selected, /* We've set the initial state. */
|
|
input_script,
|
|
input_mri_script,
|
|
input_version_script,
|
|
input_dynamic_list,
|
|
input_defsym
|
|
} input_type;
|
|
|
|
extern input_type parser_input;
|
|
|
|
extern unsigned int lineno;
|
|
extern const char *lex_string;
|
|
|
|
/* In ldlex.l. */
|
|
extern int yylex (void);
|
|
extern void lex_push_file (FILE *, const char *, unsigned int);
|
|
extern void lex_redirect (const char *, const char *, unsigned int);
|
|
extern void ldlex_script (void);
|
|
extern void ldlex_inputlist (void);
|
|
extern void ldlex_mri_script (void);
|
|
extern void ldlex_version_script (void);
|
|
extern void ldlex_version_file (void);
|
|
extern void ldlex_defsym (void);
|
|
extern void ldlex_expression (void);
|
|
extern void ldlex_both (void);
|
|
extern void ldlex_popstate (void);
|
|
extern const char* ldlex_filename (void);
|
|
|
|
/* In lexsup.c. */
|
|
extern int lex_input (void);
|
|
extern void lex_unput (int);
|
|
extern void parse_args (unsigned, char **);
|
|
|
|
#endif
|