[LLVMdev] [llvm-commits] Fwd: Proof of concept patch for unifying the .s/ELF emission of .ARM.attributes

Jim Grosbach grosbach at apple.com
Thu Oct 21 13:11:34 PDT 2010


On Oct 21, 2010, at 11:07 AM, Jason Kim wrote:

> On Thu, Oct 21, 2010 at 7:50 AM, Rafael EspĂ­ndola
> <rafael.espindola at gmail.com> wrote:
>>> Hmm, I wish we had this discussion way earlier..
>>> 
>>> How would I emit things in different subsections? I can do a high
>>> level switch to .ARM.attributes, and if I were emitting one blob from
>>> begin to end, using the higher level interface would be preferable,
>>> but it contains additional subsections - which are naturally
>>> represented by MCDataFragments - Is there an MC equivalent of a
>>> SubSection (which is-a Section so I can switch back and forth?)
>>> Currently we only have stuff that go into the File subsection only,
>>> but.. for futureproofing?
>> 
>> We cross that bridge when we get there. It might be that the best
>> thing to do is organize the code so that  we output the subsections in
>> order. It might be to add some missing feature. For now using the
>> regular streamer API will make this code a lot easier to read.
> 
> Of the roughly 111 or so calls to EmitIntValue(), rouighly half are in
> the Dwarf code, which is cross-architecture.
> (And they have their own MCSection types to deal with back and forth
> type issues)
> 
> Of the 45 remaining, there are 4 interesting uses in MCAsmStreamer.cpp
> - (I suppose for emitting data constants in a cross platform manner)
> The other remaining uses are in AsmPrinter, again to do cross platform things.
> It seems a bit strange to use a high level hammer to do ballpeen
> work..... But when in Rome.... :-)
> 
> Also what is the preferred method for MC way of setting out subsection
> sizes after the fact? I am guessing I need to use an MCFixup?
> How do I get an MCExpr to evaluate a method for the subsection size?
> Is there an equivalent use in the places using MCFixup?
> Do I need to add a new subclass to MCExpr for doing this?
> 
> JimG, can you please comment on the MachO specific parts in the
> ARMAsmPrinter.cpp? Is there an example of a "subsection size" that is
> "Fixed up" after all the blobs that go into that subsection are
> emitted? The closest examples I could find weren't that close :-(
> (Matter of fact, for ELF, it looks like the section sizes are actually
> calculated after everything has been processed by MCAssembler, and the
> headers sizes are not "fixed up" but completely rewritten from the
> beginning)

There's no real equivalent to that for MachO in ARMAsmPrinter that I'm aware of. The Darwin linker can do quite a bit with rearranging things, so those sorts of values at compile/assemble time don't have much meaning. The parts that deal with section/subsection sizes for the object file format are, as far as I can tell, in the object file and section writer classes.



> 
> Thanks!
> 
> -jason
>> 
>>> 
>>> -jason
>> 
>> Cheers,
>> Rafael
>> 





More information about the llvm-dev mailing list