How do I find out which info table a continuation belongs to?

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

How do I find out which info table a continuation belongs to?

Ömer Sinan Ağacan
I'm currently working on a bug and one of the things I often want to know is
what's on the stack. The problem is I can't see labels of continuations so the
information is really useless. Example:

    >>> call printStack(((StgTSO*)0x42000e0198)->stackobj)
    0x42000c8788: RET_SMALL (0x512d70)
    0x42000c8790: RET_SMALL (0x40edf0)
       stk[5] (0x42000c8798) = 0x7b3938
    0x42000c87a0: CATCH_FRAME(0x735a98,0x7d3ff2)
    0x42000c87b8: STOP_FRAME(0x7311b8)

(I modified the printer to print stack locations when printing stacks)

Here I need to know which info table the RET_SMALLs return to. Normally I do
this for other kinds of closures:

    >>> print ((StgClosure*)...)->header.info
    $15 = (const StgInfoTable *) 0x404dc0 <Main_nats_info>

But for continuations that doesn't work:

    >>> print ((StgClosure*)0x42000c8788)->header.info
    $11 = (const StgInfoTable *) 0x512d80
    >>> info symbol 0x512d80
    No symbol matches 0x512d80.

Anyone know how to make this work? Can I maybe mark the continuations label in
the generated assembly somehow to make those labels available in gdb?

Thanks

Ömer
_______________________________________________
ghc-devs mailing list
[hidden email]
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
Reply | Threaded
Open this post in threaded view
|

Re: How do I find out which info table a continuation belongs to?

Simon Marlow-7
I believe this is due to https://phabricator.haskell.org/D4722

(cc Sergei Azovskov)

I'm a bit surprised that gdb isn't showing anything though, it should know that the address corresponds to a temporary symbol like `.L1234`. Perhaps you need to compile with -g to make this work, I'm not sure.

On Sun, 10 Feb 2019 at 07:50, Ömer Sinan Ağacan <[hidden email]> wrote:
I'm currently working on a bug and one of the things I often want to know is
what's on the stack. The problem is I can't see labels of continuations so the
information is really useless. Example:

    >>> call printStack(((StgTSO*)0x42000e0198)->stackobj)
    0x42000c8788: RET_SMALL (0x512d70)
    0x42000c8790: RET_SMALL (0x40edf0)
       stk[5] (0x42000c8798) = 0x7b3938
    0x42000c87a0: CATCH_FRAME(0x735a98,0x7d3ff2)
    0x42000c87b8: STOP_FRAME(0x7311b8)

(I modified the printer to print stack locations when printing stacks)

Here I need to know which info table the RET_SMALLs return to. Normally I do
this for other kinds of closures:

    >>> print ((StgClosure*)...)->header.info
    $15 = (const StgInfoTable *) 0x404dc0 <Main_nats_info>

But for continuations that doesn't work:

    >>> print ((StgClosure*)0x42000c8788)->header.info
    $11 = (const StgInfoTable *) 0x512d80
    >>> info symbol 0x512d80
    No symbol matches 0x512d80.

Anyone know how to make this work? Can I maybe mark the continuations label in
the generated assembly somehow to make those labels available in gdb?

Thanks

Ömer
_______________________________________________
ghc-devs mailing list
[hidden email]
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs

_______________________________________________
ghc-devs mailing list
[hidden email]
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
Reply | Threaded
Open this post in threaded view
|

Re: How do I find out which info table a continuation belongs to?

Ömer Sinan Ağacan
I'm already using -g3. Here's my build.mk:

    BuildFlavour = quick

    ifneq "$(BuildFlavour)" ""
    include mk/flavours/$(BuildFlavour).mk
    endif

    GhcRtsHcOpts += -O0 -g3
    SRC_HC_OPTS += -g3
    GhcStage1HcOpts += -g3
    GhcStage2HcOpts += -g3
    GhcLibHcOpts += -g3

    STRIP_CMD = :

Ömer

Simon Marlow <[hidden email]>, 10 Şub 2019 Paz, 19:00 tarihinde şunu yazdı:

>
> I believe this is due to https://phabricator.haskell.org/D4722
>
> (cc Sergei Azovskov)
>
> I'm a bit surprised that gdb isn't showing anything though, it should know that the address corresponds to a temporary symbol like `.L1234`. Perhaps you need to compile with -g to make this work, I'm not sure.
>
> On Sun, 10 Feb 2019 at 07:50, Ömer Sinan Ağacan <[hidden email]> wrote:
>>
>> I'm currently working on a bug and one of the things I often want to know is
>> what's on the stack. The problem is I can't see labels of continuations so the
>> information is really useless. Example:
>>
>>     >>> call printStack(((StgTSO*)0x42000e0198)->stackobj)
>>     0x42000c8788: RET_SMALL (0x512d70)
>>     0x42000c8790: RET_SMALL (0x40edf0)
>>        stk[5] (0x42000c8798) = 0x7b3938
>>     0x42000c87a0: CATCH_FRAME(0x735a98,0x7d3ff2)
>>     0x42000c87b8: STOP_FRAME(0x7311b8)
>>
>> (I modified the printer to print stack locations when printing stacks)
>>
>> Here I need to know which info table the RET_SMALLs return to. Normally I do
>> this for other kinds of closures:
>>
>>     >>> print ((StgClosure*)...)->header.info
>>     $15 = (const StgInfoTable *) 0x404dc0 <Main_nats_info>
>>
>> But for continuations that doesn't work:
>>
>>     >>> print ((StgClosure*)0x42000c8788)->header.info
>>     $11 = (const StgInfoTable *) 0x512d80
>>     >>> info symbol 0x512d80
>>     No symbol matches 0x512d80.
>>
>> Anyone know how to make this work? Can I maybe mark the continuations label in
>> the generated assembly somehow to make those labels available in gdb?
>>
>> Thanks
>>
>> Ömer
>> _______________________________________________
>> ghc-devs mailing list
>> [hidden email]
>> http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
_______________________________________________
ghc-devs mailing list
[hidden email]
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs