aboutsummaryrefslogtreecommitdiff
path: root/ld/lexsup.c
diff options
context:
space:
mode:
authorAndrew Burgess <andrew.burgess@embecosm.com>2015-07-28 19:20:37 +0100
committerAndrew Burgess <andrew.burgess@embecosm.com>2015-09-04 22:30:55 +0100
commitc005eb9e34ac08be0cd40e19a741d345bd43eab9 (patch)
treee161b0bf51e8b02bfc7e1c6e1cc5beb92fa86e4b /ld/lexsup.c
parente65b52456bc3f60a176fece5e34e420c5a75bd16 (diff)
downloadgdb-c005eb9e34ac08be0cd40e19a741d345bd43eab9.zip
gdb-c005eb9e34ac08be0cd40e19a741d345bd43eab9.tar.gz
gdb-c005eb9e34ac08be0cd40e19a741d345bd43eab9.tar.bz2
ld: Extend options for altering orphan handling behaviour.
Replace the options --warn-orphan and --no-warn-orphan with a single option --orphan-handling=MODE, where mode can be place, warn, error, and discard. Mode 'place' is the default, and is the current behaviour, placing the orphan section into a suitable output section. Mode 'warn' is the same as '--warn-orphan'. The orphan is also placed using the same algorithm as for 'place'. Mode 'error' is the same as '--warn-orphan' and '--fatal-warnings'. Mode 'discard' assigns all output sections to the /DISCARD/ section. ld/ChangeLog: * ld.h (enum orphan_handling_enum): New. (ld_config_type): Remove warn_orphan, add orphan_handling. * ldemul.c (ldemul_place_orphan): Remove warning about orphan sections. * ldlang.c (ldlang_place_orphan): New function. (lang_place_orphans): Call ldlang_place_orphan. * ldlex.h (enum option_values): Remove OPTION_WARN_ORPHAN and OPTION_NO_WARN_ORPHAN, add OPTION_ORPHAN_HANDLING. * lexsup.c (ld_options): Remove 'warn-orphan' and 'no-warn-orphan', add 'orphan-handling'. (parse_args): Remove handling for OPTION_WARN_ORPHAN and OPTION_NO_WARN_ORPHAN, add handling for OPTION_ORPHAN_HANDLING. * NEWS: Replace text about --warn-orphan with --orphan-handling. * ld.texinfo (Options): Remove --warn-orphan entry and add entry on --orphan-handling. (Orphan Sections): Add reference to relevant command line options. ld/testsuite/ChangeLog: * ld-elf/elf.exp: Switch to rely on run_dump_test. * ld-elf/orphan-5.l: Update expected output. * ld-elf/orphan-5.d: New file. * ld-elf/orphan-6.d: New file. * ld-elf/orphan-6.l: New file. * ld-elf/orphan-7.d: New file. * ld-elf/orphan-7.map: New file. * ld-elf/orphan-8.d: New file. * ld-elf/orphan-8.map: New file.
Diffstat (limited to 'ld/lexsup.c')
-rw-r--r--ld/lexsup.c27
1 files changed, 17 insertions, 10 deletions
diff --git a/ld/lexsup.c b/ld/lexsup.c
index ace1803..5dc56dc 100644
--- a/ld/lexsup.c
+++ b/ld/lexsup.c
@@ -492,10 +492,6 @@ static const struct ld_option ld_options[] =
'\0', NULL, N_("Warn if the multiple GP values are used"), TWO_DASHES },
{ {"warn-once", no_argument, NULL, OPTION_WARN_ONCE},
'\0', NULL, N_("Warn only once per undefined symbol"), TWO_DASHES },
- { {"warn-orphan", no_argument, NULL, OPTION_WARN_ORPHAN},
- '\0', NULL, N_("Warn if any orphan sections are encountered"), TWO_DASHES },
- { {"no-warn-orphan", no_argument, NULL, OPTION_NO_WARN_ORPHAN},
- '\0', NULL, N_("Do not warn if orphan sections are encountered (default)"), TWO_DASHES },
{ {"warn-section-align", no_argument, NULL, OPTION_WARN_SECTION_ALIGN},
'\0', NULL, N_("Warn if start of section changes due to alignment"),
TWO_DASHES },
@@ -528,6 +524,9 @@ static const struct ld_option ld_options[] =
TWO_DASHES },
{ {"print-memory-usage", no_argument, NULL, OPTION_PRINT_MEMORY_USAGE},
'\0', NULL, N_("Report target memory usage"), TWO_DASHES },
+ { {"orphan-handling", required_argument, NULL, OPTION_ORPHAN_HANDLING},
+ '\0', N_("=MODE"), N_("Control how orphan sections are handled."),
+ TWO_DASHES },
};
#define OPTION_COUNT ARRAY_SIZE (ld_options)
@@ -1375,12 +1374,6 @@ parse_args (unsigned argc, char **argv)
case OPTION_WARN_ONCE:
config.warn_once = TRUE;
break;
- case OPTION_WARN_ORPHAN:
- config.warn_orphan = TRUE;
- break;
- case OPTION_NO_WARN_ORPHAN:
- config.warn_orphan = FALSE;
- break;
case OPTION_WARN_SECTION_ALIGN:
config.warn_section_align = TRUE;
break;
@@ -1515,6 +1508,20 @@ parse_args (unsigned argc, char **argv)
case OPTION_PRINT_MEMORY_USAGE:
command_line.print_memory_usage = TRUE;
break;
+
+ case OPTION_ORPHAN_HANDLING:
+ if (strcasecmp (optarg, "place") == 0)
+ config.orphan_handling = orphan_handling_place;
+ else if (strcasecmp (optarg, "warn") == 0)
+ config.orphan_handling = orphan_handling_warn;
+ else if (strcasecmp (optarg, "error") == 0)
+ config.orphan_handling = orphan_handling_error;
+ else if (strcasecmp (optarg, "discard") == 0)
+ config.orphan_handling = orphan_handling_discard;
+ else
+ einfo (_("%P%F: invalid argument to option"
+ " \"--orphan-handling\"\n"));
+ break;
}
}