[LLVMdev] AsmPrinter behavior

Aaron Gray aaronngray.lists at googlemail.com
Fri May 7 10:48:20 PDT 2010


On 7 May 2010 18:14, Chris Lattner <clattner at apple.com> wrote:

>
> On May 7, 2010, at 10:02 AM, Aaron Gray wrote:
>
> On 7 May 2010 17:53, Chris Lattner <clattner at apple.com> wrote:
>
>>
>> On May 7, 2010, at 9:51 AM, Nathan Jeffords wrote:
>>
>> This seems counter intuitive to me, I can understand that C assigned that
>>> behavior somewhat arbitrarily to uninitialized global variables, but in LLVM
>>> there is explicitly a common linkage attribute to get that behavior. Nothing
>>> in the llvm language reference indicates the behavior of a global with the
>>> 'internal' linkage attribute should change based of the values used to
>>> initialize it.
>>>
>>>
>>> I don't follow.  The object file format provides a means for efficiently
>>> zero filling a local symbol.  The compiler is just using it.  What is the
>>> problem you're trying to solve here?  Since it is not exported out of the .o
>>> file (it is local) there whether it is "common" or not is undetectable, we
>>> just get a storage optimization.
>>>
>>>
>> I don't know, I see common and it makes me think that things are getting
>> merged together, but as you say it is local so the fact that its also common
>> becomes irrelevant. In MachO do you just put these into the .bss section?
>>
>>
>> Macho has a special zerofill directive (targeted at the BSS section) for
>> this.  You can see this by running your example like this:
>>
>> $ llc t.ll -o - -mtriple=i386-apple-darwin10
>>  .section __TEXT,__text,regular,pure_instructions
>> .zerofill __DATA,__bss,_tst1,4,0        ## @tst1
>> .section __DATA,__data
>> _tst2:                                  ## @tst2
>> .ascii "\000\001\002\003"
>>
>
> I think we should have an 'EmitZeroFill()' and 'EmitASCII()' OutStream
> methods, the latter to deal with dllexports in '
> lib/Target/X86/AsmPrinter/AsmPrinter.cpp:569'.
>
> We also need to sort out COFF TLOF, and get rid of the directive stuff.
>
>
> It looks to me that you should have an Emit method for the .scl, .def,
> .type, .endef directives.  One callback each.
>

There is already a MCStreamer::EmitZerofill() is seems to be MachO specific
?

'MCStreamer::EmitCOFFStabs()' ?

'MCStreamer:: EmitASCII()' ?

Shall I do these as two separate patches ?

Aaron
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20100507/bba5420b/attachment.html>


More information about the llvm-dev mailing list