Hi Guys, Attached is a patch to add a --section-ordering-file option to the BFD linker. It is based upon H.J.'s original patch, but extended so that it will work with multiple output sections. There are a couple of points that I feel I should highlight: * The option only works in conjunction with a modified linker script. In particular the script must have: "INCLUDE section-ordering-file" statements in it, wherever it wants section ordering to be allowed. This statement can appear multiple times in a linker script, although it would not make sense to have it appear more than once in any given output section. Here is an example: SECTIONS { .text : { INCLUDE section-ordering-file *(.text) } .data : { INCLUDE section-ordering-file *(.data) } } * H.J's original version allowed for linker script like "filename(section)" syntax to be used to name sections, eg: "*(.text.*)", as well as a simpler "section name regexp", eg ".text.*", to be used. This version only supports the latter format. In addition H.J.'s syntax allowed for abbreviated section names to match. So ".t*t" would match any section starting with ".t" and ending with "t" and would put it into the .text section. In this version however the output section is selected based upon matching the fixed part at the start of the pattern with the output section. So ".t*t" would only work if the output section was called ".t". To help compensate for this, and to allow arbitrary input sections to be mapped to specific output sections, the output section name can be provided as if it were a filename. So .foo(.bar) would map all sections called .bar to the output section .foo, but only if the linker script has an output section called .foo, and only if that output section declaration includes a INCLUDE section-ordering-file statement. Perhaps an example will make things clearer. If the above linker script is used and the section ordering file contains: # A comment - this will be ignored. .text.hot .text.cold .text.warm .data.big .data(.bar) .text.foo* .ignore(.me) This is roughly equivalent to a linker script that looks like this: SECTIONS { .text : { *(.text.hot) *(.text.cold) *(.text.warm) *(.text.foo*) *(.text) } .data : { *(.data.big) *(.bar) *(.data) } } Note - the linker will not warn about entries in the section ordering file that do not match an output section name. So in the above example the ".ignore(.me)" entry will not generate a warning about it not being used. Thoughts, comments, etc ? Cheers Nick