Min closure payload size?
Ömer Sinan Ağacan
omeragacan at gmail.com
Tue Feb 5 13:37:48 UTC 2019
I just came across a closure that is according to this code is not valid:
>>> print *get_itbl(0x7b2870)
$8 = {
layout = {
payload = {
ptrs = 0,
nptrs = 0
},
bitmap = 0,
large_bitmap_offset = 0,
__pad_large_bitmap_offset = 0,
selector_offset = 0
},
type = 21,
srt = 3856568,
code = 0x404ef0 <r1Al_info>
"H\215E\360L9\370rDH\203\354\bL\211\350H\211\336H\211\307\061\300\350|\034\062"
}
This is a THUNK_STATIC with 0 ptrs and nptrs in the payload.
Ömer
Ömer Sinan Ağacan <omeragacan at gmail.com>, 4 Şub 2019 Pzt, 16:23
tarihinde şunu yazdı:
>
> Hi,
>
> I was trying to understand why some info tables that have no ptrs and nptrs like
> GCD_CAF end up with 1 nptrs in the generated info table and found this code in
> Constants.h:
>
> /* -----------------------------------------------------------------------------
> Minimum closure sizes
>
> This is the minimum number of words in the payload of a
> heap-allocated closure, so that the closure has enough room to be
> overwritten with a forwarding pointer during garbage collection.
> --------------------------------------------------------------------------
> */
>
> #define MIN_PAYLOAD_SIZE 1
>
> We use this in a few places in the compiler and add at least one word space in
> the payload. However the comment is actually wrong, forwarding pointers are made
> by tagging the info ptr field so we don't need a word in the payload for
> forwarding pointers. I tried updating this as 0 but that caused a lot of test
> failures (mostly in GHCi). I'm wondering if I'm missing anything or is it just
> some code assuming min payload size 1 without using this macro.
>
> Any ideas?
>
> Ömer
More information about the ghc-devs
mailing list