freenode/#sbcl - IRC Chatlog
Search
22:00:55
stassats
ok, it clearly zero fills the wrong thing, but zero filling the right (or more right) thing is still breaking it (differently, though)
23:16:11
dougk_
stassats: i'll answer you that if you answer me something - do we or don't we use type information of a function that is declaimed notinline?
23:16:28
dougk_
google has nasty code that defuns a function that can't return, then changes its definition at runtime to one that can return
23:16:56
dougk_
http://www.lispworks.com/documentation/HyperSpec/Body/03_bbc.htm says that declaiming it notinline should remove the assumption that it's the same function
23:17:48
dougk_
me either. So I get that "A call within a file to a named function that is defined in the same file refers to that function," but we're using the loophole "unless that function has been declared notinline." which stopped working
23:18:51
dougk_
i want to rearrange struct thread so that interrupt contexts don't come in between the TLS slots and the start of dynamically assigned TLS indices. that's horrible
23:19:24
stassats
but i can't figure out how scavenge((lispobj *) (th+1), (SymbolValue(FREE_TLS_INDEX,0) >> WORD_SHIFT) - (sizeof (struct thread))/(sizeof (lispobj))); works
23:19:31
dougk_
and it's scary how many places in the code use "(char*)thread + dynamic_values_bytes".
23:19:46
dougk_
yes, indeed, i have to look at it every time and think about it, but I can explain how it's right
23:20:19
dougk_
"th + 1" is the word after the thread structure, plus-or-minus an accidental scavenging of 1 interrupt context.
23:20:59
dougk_
The end pointer is free_tls_index, in bytes. Shift right to get words. But subtract the number of words that the thread took up.
23:21:18
dougk_
again plus or minus 1 word which might get borked and i have to fix this because of how scary it is
23:21:49
dougk_
like is there an off-by-1 that almost never matters because if TLS is exhausted, we're dead anyway. The process died before we ever go to GC
23:23:59
dougk_
but what's worse is that we're using "(char*)thread + dynamic_values_bytes" in 25 different places
23:24:39
dougk_
that's why i don't like the contexts appearing as part of TLS. Did that break RISC ? I guess I forgot to check
23:25:47
dougk_
i think it's that it broke precise GC, which all happen to be risc. I'll look at, this is obviously my doing
23:27:12
stassats
i would've just preprocessed out zeroing on riscs, but if i knew the actual reason it segfaults
23:29:30
dougk_
anyway, the weird thing for me is that our QPX image has 10KB of tenured garbage immediately on restarting an image produced by S-L-A-D (and not letting it even get to main)
23:40:57
stassats
huh, (multiple-value-call 'bar (mm)) gets derived, (multiple-value-call #'bar (mm)) doesn't
23:50:57
scymtym
SLIME uses SB-SPROF::CALL-GRAPH-FLAT-NODES which i removed. fix SLIME or put it back in?
23:58:29
scymtym
stassats: ok, i'm making it an alias for GRAPH-VERTICES (which is unsorted). i can make SLIME sort the vertices properly as a separate change