Peeking into StgInfoTable in cmm

Andrew Martin andrew.thaddeus at gmail.com
Wed Feb 6 20:57:12 UTC 2019


Or even better, it looks like cmmGetClosureType already combines the two
for me.

On Wed, Feb 6, 2019 at 3:49 PM Andrew Martin <andrew.thaddeus at gmail.com>
wrote:

> Thanks. The source code of ghc-heap has led me to what I was looking for.
> That whole library hinges upon unpackClosure# (stg_unpackClosurezh), whose
> implementation opens with the telling:
>
>     info  = %GET_STD_INFO(UNTAG(closure));
>
> In CmmParse.y, we find the implementation of GET_STD_INFO, and just a few
> lines below is the INFO_TYPE macro. The combination of these (along with a
> cmm implementation of UNTAG, which I am still unsure of exactly how to
> accomplish) should do the trick.
>
> On Wed, Feb 6, 2019 at 2:53 PM Matthew Pickering <
> matthewtpickering at gmail.com> wrote:
>
>> Unless I am misunderstanding you want something which works like ghc-heap.
>>
>> If so, perhaps these three files will be instructive?
>>
>>
>> https://gitlab.haskell.org/ghc/ghc/blob/master/libraries/ghc-heap/GHC/Exts/Heap/InfoTable.hsc
>>
>> https://gitlab.haskell.org/ghc/ghc/blob/master/libraries/ghc-heap/GHC/Exts/Heap/InfoTableProf.hsc
>>
>> https://gitlab.haskell.org/ghc/ghc/blob/master/libraries/ghc-heap/GHC/Exts/Heap/Closures.hs#L25
>>
>> Cheers,
>>
>> Matt
>>
>> On Wed, Feb 6, 2019 at 7:29 PM Andrew Martin <andrew.thaddeus at gmail.com>
>> wrote:
>> >
>> > For an optimization I’m implementing, I’m trying to write an inline
>> primop that gives me lets me inspect the closure type of an arbitrary
>> heap-allocated value. I’m close to figuring this out, and the FCode
>> machinery is starting to make sense, but one thing eludes me. Starting from
>> a StgHeader, I get the info table pointer. This is easy since it’s the
>> first field in the struct. But next I have to deference the info table
>> pointer and get the closure type. There are two fields at the beginning of
>> an info table that may or may not be present. I don’t know how to figure
>> out if they are present or not. I suspect that there is something I can get
>> out of DynFlags that tells me this, but I can’t find anything else in the
>> stg-to-cmm pass that reads from an info table.
>> >
>> > Sent from my iPhone
>> > _______________________________________________
>> > Libraries mailing list
>> > Libraries at haskell.org
>> > http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
>>
>
>
> --
> -Andrew Thaddeus Martin
>


-- 
-Andrew Thaddeus Martin
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/libraries/attachments/20190206/47dff5fb/attachment.html>


More information about the Libraries mailing list