This implements https://sourceware.org/bugzilla/show_bug.cgi?id=26404#c6
--overwrite-section-script specifies a script which contains several `SECTIONS`
commands. Each `SECTIONS` specifies exactly one output section description. The
initial syntax is intentionally narrow to facilitate backward compatible
extensions with backward. Symbol assignments cannot be used. Not supporting
multiple output section descriptions in one `SECTIONS` makes it clear the
sections don't have order guarantee.
The semantics are similar to `INSERT [BEFORE|AFTER]` in that
LinkerScript::hasSectionsCommand is not set, so default linker script rules
still apply. In the absence of a main linker script, --overwrite-script can be
more convenient than `INSERT` because --overwrite-script does not need a random
anchor section used by `INSERT`.
This feature is versatile. To list a few usage:
* Use `section : { KEEP(...) }` to retain input sections under GC
* Define encapsulation symbols (start/end) for an output section
* Use `section : ALIGN(...) : { ... }` to overalign an output section (similar to ld64 `-sectalign`)
When an output section is specified by both `--overwrite-section-script` and
`INSERT`, `INSERT` is processed after overwrite sections. To make this work,
this patch changes `InsertCommand` to use name based matching instead of pointer
based matching. This causes a difference when `INSERT` moves one output section
more than once. This should not be used in practice (seems that in GNU ld the
output sections may just disappear)