I should probably elaborate on why I feel the interface should be as such.<div><br></div><div>It seems to be the common case is compiler outputting to object files. In this case, all fragments are associated with symbols. What section the fragments go into is generally irrelevant to the compiler, except in special cases like global variable constructor/destructor lists and the like.</div>
<div><br></div><div>At code generation time, the compiler would for all normal symbols, not specify any grouping information, and allow the streamer to make decisions about where to place data based of the content. For special scenarios, like constructor/destructor a set of hints could be defined to produce the expected behavior.</div>
<div><br></div><div>i.e.</div><div>struct SectionHint {};</div><div><br></div><div>// used by assemblers to put symbols into the</div><div>// section specified by a section directive</div><div>struct NamedSectionHint : SectionHint {</div>
<div>  // then name of the section to put the symbol in</div><div>  std::string Name;</div><div>};</div><div><br></div><div><br></div><div><div>struct OrderedNamedHint : NamedSection {</div><div>  // the order to place the symbol into the section when finally linked,</div>
<div>  // each different "ordered section" should produce a separate section</div><div>  // in the object file</div><div>  // positive means put in ascending order before any other sections with the same name</div>
<div>  //  1 if first, 2 is second, and so on</div><div>  // negative means put in descending order after any other sections with the same name</div><div>  // -1 is last, -2 is second to last, and so on</div><div>  int Order;</div>
<div>};</div><div><br></div><div>Any NamedHints would show up in between positive & negative named hints with the same name.</div></div>