libera/#clasp - IRC Chatlog
Search
14:00:40
drmeister
Let's take another look at libunwind later today. Linking a library shouldn't be this difficult.
14:01:24
drmeister
I've figured out non-consing transfer of info from a C++ library to CL. Using adjustable strings with fill-pointers
14:08:25
drmeister
I've been experimenting with multithreaded programming and yesterday I tried batching jobs for the threads but that didn't improve the scaling - so now I'm looking at strategies to reduce consing. I want to write efficient multithreaded code going forward and this is an test case for how to do that.
14:27:46
drmeister
By reducing the consing using the approach above I dropped the time to analyze the 48GB of data from 30 min to 23 min.
14:41:43
drmeister
Bike: If I wanted to compile every dtree interpreter all at once - what would I do?
14:42:02
drmeister
Do we have a way of getting all the dtree interpreters? I can walk memory and find them if not.
14:44:32
Bike
i think what you'd want to do is call clos:compile-discriminating-function on whichever generic functions are concerning
14:46:17
drmeister
The difference between core::clos__interpret_dtree_program and [perf-215208.map] is what I figure is interpretation time?
14:46:36
Bike
well, i'd try compile-discriminating-function on whatever that in particular is and see how it goes
14:46:56
drmeister
When I build a snapshot - that's a good time to compile all the extant interpreters.
14:48:31
drmeister
I would add a facility to walk memory and gather up objects that match a pattern. At the very least a stamp.
14:56:04
Bike
it seems unlikely to me that there are very many generic functions not named by interned symbols
15:03:11
drmeister
Bike: If you give me a function that I could call that would compile everything I would call it at the beginning of image_save and then I'd collect everything (including interpreters) and then package everything up.
15:22:38
drmeister
I probably have the same backtrace. I started up a little different from you probably.
17:18:34
drmeister
Bike: If I were to put those functions somewhere in the lisp code -where would you like them?
17:35:02
Bike
so i mean the thing is with this latest error, we're not doing any libunwind calls at all, and it still crashes
17:35:24
drmeister
Yeah - I don't trust that we are linking properly and I don't want to read too much into that yet.
17:35:28
Bike
that does look like the linking problem, but i fixed the linking problem (or at least it builds iclasp now)
17:38:14
Bike
changed the wscript to do cfg.env.append_value('LIB', cfg.env.LIB_UNWIND) unconditionally instead of just on mac
19:01:19
drmeister
Sorry - mine was using gcc - I just noticed it in my paste above. I've been sloppy.
19:09:44
drmeister
So as a sanity check I generated the CPP generated output. We are using this header file...
19:11:09
drmeister
All is right with the world. The basic contract between computer and programmer still holds.
19:24:31
drmeister
But I need to turn on libunwind the way we have been turning it on. So - do you have any recommendations?
19:25:17
Bike
do cfg.env.append_value('LIB', cfg.env.LIB_UNWIND) unconditionally, ditto LIB_UNWIND_X86_64, and uncomment the cfg.check_cxx calls
19:46:21
drmeister
With USE_LIBUNWIND defined and check_cxx's in place and "cfg.env.append_value('LIB', cfg.env.LIB_UNWIND) unconditionally, ditto LIB_UNWIND_X86_64," --> # 1 "/usr/include/x86_64-linux-gnu/libunwind.h" 1 3 4
19:47:27
drmeister
But I get this link error: ../../src/core/debugger.cc:274: error: undefined reference to '_Ux86_64_getcontext'
19:57:20
drmeister
/usr/bin/ld.gold: Opened new descriptor 9 for "/usr/lib/x86_64-linux-gnu/libunwind-x86_64.so"
19:59:21
Bike
wait, where is it even getting /opt/llvm-tot from? in my wscript.config i don't refer to it
20:01:50
drmeister
Maybe with gnu libunwind we need libunwind-x86_64 but with llvm libunwind we don't?
20:09:09
drmeister
I copy the link command out of the waf output, put it in a file and add --verbose to it.
20:09:24
drmeister
It's slow but I get a bunch of scripts that I can play with to mess with the compile and link options.
20:38:57
drmeister
Bike: It's failing during build_aboehm - is that what you were seeing? The compile/link look fine this might be a bug in our unwinding?
21:32:12
drmeister
If you have some time - let's dig into this together. It's a return-from that is not finding its block. I have it trapped in udb. I can forward and reverse through the code to the crash.
21:40:29
drmeister
This means the next return-from will throw and should match one of these blocks - right? But it's blowing through one of them.
21:46:25
Bike
so there's going to be several throws before it runs out of blocks and terminates, probably
21:47:23
drmeister
Yeah - and it writes a unique handle into the activation frame element 0 and the catch checks if the returnFrom handle matches it.
22:56:38
drmeister
When it crashes - I have the ReturnFrom that contains that handle that isn't matching anything on the call stack.
22:57:42
drmeister
I'm putting a watchpoint on that address - then I'll reverse to where whatever code writes into that address.
23:10:10
drmeister
https://github.com/clasp-developers/clasp/blob/main/src/lisp/kernel/cmp/codegen.lsp#L308
23:11:30
Bike
doesn't look like it should... i mean, it calls error, and error can call functions that throw, but not this function itself
23:11:33
drmeister
I reverse-continued to the point where the ReturnFrom value that was thrown was initialized.
23:12:22
Bike
was this the actual original throw, or just the one that resulted directly in the terminate
23:15:19
drmeister
Thinking... this is what is being evaluated when this initializes the ReturnFrom::_Handle slot that fails to find a matching block when it unwinds.
23:19:10
Bike
"In a catch clause, when the argument is of the same type (ignoring cv-qualification) as the exception object thrown, the copy of the exception object is omitted and the body of the catch clause accesses the exception object directly, as if caught by reference (there cannot be a move from the exception object because it is always an lvalue). This is disabled if such copy elision would change the observable
23:19:16
Bike
behavior of the program for any reason other than skipping the copy constructor and the destructor of the catch clause argument (for example, if the catch clause argument is modified, and the exception object is rethrown with throw). "
23:21:44
drmeister
I think it is creating a new ReturnFrom object. I'm in the ReturnFrom constructor - I don't know if it's a copy constructor or what.
23:22:46
Bike
what's the build command to get the interpreter with aclasp loaded but not compiled into it? rboehm?
0:01:15
drmeister
Bike: There's also an clang compiler command line option --unwindlib=libunwind and -rtlib=compiler-rt