<div><br></div><div>This is a brain-dump of my thoughts on the MCStreamer interface after several</div><div>days of digging around trying to get a COFF writer working.</div><div><br></div><div>All fragments should be associated with a symbol. For assembler components, a</div>
<div>unnammed "virtual" symbol can be used when there is no explicit label defined.</div><div><br></div><div>Section assignment should be the responsiblity of the object imlementing the</div><div>MCStreamer interface, with the caller givin the ability to give hints as to</div>
<div>what section to place the symbol into.</div><div><br></div><div>instead of SwitchSection, there would be BeginSymbol, and SymbolSymbol, it would</div><div>be illegal to call any EmitXXX function outside of these two calls</div>
<div><br></div><div>BeginSymbol(Symbol, SectionHint)</div><div>  EmitAttribute(...)</div><div>  EmitAttribute(...)</div><div>  ...</div><div>StartFragmentEmission()</div><div>  EmitFragment(...)</div><div>  EmitFragment(...)</div>
<div>  ...</div><div>EndSymbol()</div><div><br></div><div>Object file writers would typically start recording fragments and attributes for</div><div>a symbol on the BeginSymbol, then at EndSymbol they would evaluate what was</div>
<div>streamed, and decide what section the symbol should be placed in.</div><div><br></div><div>Assembly writers could with some state data emit assemble as emission calls are</div><div>made. Assembler parsers could use 'section symbols' to provide section level</div>
<div>attributes.</div><div><br></div>