ld: Extend options for altering orphan handling behaviour.
authorAndrew Burgess <andrew.burgess@embecosm.com>
Tue, 28 Jul 2015 18:20:37 +0000 (19:20 +0100)
committerAndrew Burgess <andrew.burgess@embecosm.com>
Fri, 4 Sep 2015 21:30:55 +0000 (22:30 +0100)
commitc005eb9e34ac08be0cd40e19a741d345bd43eab9
treee161b0bf51e8b02bfc7e1c6e1cc5beb92fa86e4b
parente65b52456bc3f60a176fece5e34e420c5a75bd16
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.
18 files changed:
ld/ChangeLog
ld/NEWS
ld/ld.h
ld/ld.texinfo
ld/ldemul.c
ld/ldlang.c
ld/ldlex.h
ld/lexsup.c
ld/testsuite/ChangeLog
ld/testsuite/ld-elf/elf.exp
ld/testsuite/ld-elf/orphan-5.d [new file with mode: 0644]
ld/testsuite/ld-elf/orphan-5.l
ld/testsuite/ld-elf/orphan-6.d [new file with mode: 0644]
ld/testsuite/ld-elf/orphan-6.l [new file with mode: 0644]
ld/testsuite/ld-elf/orphan-7.d [new file with mode: 0644]
ld/testsuite/ld-elf/orphan-7.map [new file with mode: 0644]
ld/testsuite/ld-elf/orphan-8.d [new file with mode: 0644]
ld/testsuite/ld-elf/orphan-8.map [new file with mode: 0644]