Peeking into StgInfoTable in cmm

Simon Peyton Jones simonpj at microsoft.com
Wed Feb 6 22:29:28 UTC 2019


You might also find compiler/ghci/RtClosureInspect.hs useful.

It’s the main module of the GHCi debugger, and allows Haskell code to inspect the Haskell heap.    So it has mechanisms for unpacking arbitrary closures, all in Haskell.

It’s tough going though.   It was written a long time ago by Pepe Iborra (in a GSoC project), and has not received much love since.  Maybe you could be a source of love?!

Simon

From: Libraries <libraries-bounces at haskell.org> On Behalf Of Andrew Martin
Sent: 06 February 2019 20:57
To: Matthew Pickering <matthewtpickering at gmail.com>
Cc: Haskell Libraries <libraries at haskell.org>
Subject: Re: Peeking into StgInfoTable in cmm

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<mailto: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<mailto: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://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgitlab.haskell.org%2Fghc%2Fghc%2Fblob%2Fmaster%2Flibraries%2Fghc-heap%2FGHC%2FExts%2FHeap%2FInfoTable.hsc&data=02%7C01%7Csimonpj%40microsoft.com%7C06915c8ff0cf44831aa208d68c75bb48%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C636850834616930861&sdata=7AOF4PAMQw7jFWNo0t6Hq4tWiT%2FOscQ40xm25gag6Ys%3D&reserved=0>
https://gitlab.haskell.org/ghc/ghc/blob/master/libraries/ghc-heap/GHC/Exts/Heap/InfoTableProf.hsc<https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgitlab.haskell.org%2Fghc%2Fghc%2Fblob%2Fmaster%2Flibraries%2Fghc-heap%2FGHC%2FExts%2FHeap%2FInfoTableProf.hsc&data=02%7C01%7Csimonpj%40microsoft.com%7C06915c8ff0cf44831aa208d68c75bb48%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C636850834616930861&sdata=YzGRBEBOVYFNdAQdfEk2wZqJ7t3vJW7VFs0B%2FfNY7ik%3D&reserved=0>
https://gitlab.haskell.org/ghc/ghc/blob/master/libraries/ghc-heap/GHC/Exts/Heap/Closures.hs#L25<https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgitlab.haskell.org%2Fghc%2Fghc%2Fblob%2Fmaster%2Flibraries%2Fghc-heap%2FGHC%2FExts%2FHeap%2FClosures.hs%23L25&data=02%7C01%7Csimonpj%40microsoft.com%7C06915c8ff0cf44831aa208d68c75bb48%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C636850834616940859&sdata=%2FrzmmYNnEBkPeFPMiwaerspjuOxJKI4B519Ev041zN4%3D&reserved=0>

Cheers,

Matt

On Wed, Feb 6, 2019 at 7:29 PM Andrew Martin <andrew.thaddeus at gmail.com<mailto: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<mailto:Libraries at haskell.org>
> http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries<https://nam06.safelinks.protection.outlook.com/?url=http%3A%2F%2Fmail.haskell.org%2Fcgi-bin%2Fmailman%2Flistinfo%2Flibraries&data=02%7C01%7Csimonpj%40microsoft.com%7C06915c8ff0cf44831aa208d68c75bb48%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C636850834616940859&sdata=7%2Fc3qcuTEGeUjd9lG%2FXYVnb3bZ8%2B61jEf4XidnEgfUw%3D&reserved=0>


--
-Andrew Thaddeus Martin


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


More information about the Libraries mailing list