libera/#clasp - IRC Chatlog
Search
14:52:52
drmeister
I'll get the lldb extension working again and then at least I can print objects again.
14:58:35
Bike
hm, well it's in uiop/whatever:subdirectories, which is supposed to be looking through the filesystem for subdirectories of a given directory
15:01:18
drmeister
I might as well be peering through racks of vacuum tubes looking for a burned out one.
15:03:10
drmeister
I'll get the lldb extension working. It's all the same code as for the udb/gdb extension except for the interface to lldb - that's certainly where the problem is.
15:03:46
drmeister
With lldb on linux we have source level debugging - that's good. But there are very, very few arguments available.
15:04:11
drmeister
It's all: frame #334: 0x00007fffc79896ab JIT(0xfabf000)`QUICKLOAD^QUICKLISP-CLIENT^(closure=<unavailable>, nargs=<unavailable>, farg0=<unavailable>, farg1=<unavailable>, farg2=<unavailable>, farg3=<unavailable>) (T))^METHOD^^
15:04:22
drmeister
<unavailable> <unavailable> <unavailable> <unavailable> <unavailable> <unavailable>
15:05:48
drmeister
Otherwise what I do is dump registers and look for anything that is tagged and inspect that tagged pointer.
15:09:17
SAL9000
drmeister: FYI, this might be a useful tool for some of your debugging scenarios (not necessarily *this* one, though) http://www.jemarch.net/poke
15:11:13
drmeister
SAL9000: That is helpful. My lldb/gdb extension does something like that for binary data within memory.
15:11:42
drmeister
But say I want to interpret my snapshot files - that poke thing would be useful because I could describe my object in 'poke' format.
15:12:12
SAL9000
there was some work on inspecting processes like a debugger does, too -- don't recall whether it's been released yet
15:12:57
drmeister
Bike: Those 999905 line numbers show up a lot. We compile hundreds of thousands of lines of code - but from the debuggers point of view a surprising number of them are line number 999905
15:13:25
SAL9000
it's the first "smart hex editor" tool that I've tried which can handle Göran's crazy custom data structures :-)
15:18:12
drmeister
I'm working on generating a docker container to get this DNA encoded library analysis stuff to a collaborator and here I am debugging low level stuff and looking at bytes in memory.
15:18:19
Bike
hm, well that will cover the main call but maybe it's also used in ensure-origin, which comes up in various places
16:27:28
drmeister
I've got a call with the Undo debugger people at 4:00pm. I'm going to show them my problem with udb.
17:06:54
drmeister
It's failing on truename with this pathname: (Symbol[KEYWORD::PATHNAME] ("/home/meister/Development/cando-main/src/lisp/kernel/contrib/eclector" . a core::Null_O ))
17:18:57
drmeister
I have an idea! I'm going to put a magic number into the nargs slot of the register save area.
17:20:58
drmeister
But back to my idea. I'll put a C0FFEE magic number in the nargs slot - we can mask it out when we read nargs.
17:22:58
Bike
https://github.com/clasp-developers/clasp/blob/master/src/lisp/kernel/cmp/cmpintrinsics.lsp#L692-L697 right there. we put all this dwarf in. llvm.dbg.value
17:25:40
drmeister
You provide dwarf info for these argument variables - good - but then llvm optimizes them away.
17:26:08
drmeister
If I had udb (ARGH!) I could backup to the first instruction of the function and I'm sure they would be there.
17:26:37
drmeister
But the next idea would be very useful... Could you provide DWARF info for the register save area?
17:27:09
drmeister
You are doing the right thing, it's just that llvm is doing what it does - optimizing it all away.
17:30:15
drmeister
https://github.com/clasp-developers/clasp/blob/master/src/lisp/kernel/cmp/cmpintrinsics.lsp#L692-L697
17:36:24
drmeister
Meanwhile - I can spot the register save area by looking for the 0000000002 or 000000003 - it stands out pretty well.
17:37:45
drmeister
So I'm trying to figure out what the bug is. It's something with logical pathnames screwing with me.
17:41:07
drmeister
frame #11: 0x00007ff04940b6b7 JIT(0xe505000)`COLLECT-SUB*DIRECTORIES^UIOP/FILESYSTEM^FN^^(closure=<unavailable>,
17:44:15
drmeister
I can recover and inspect the four arguments (direcotry collectp recursep collector)
17:51:23
drmeister
Which is a logical pathname - one deeper and I'm in Eclector but logical pathname stuff may turn that into "eclector" and that's my problem?
18:12:16
Bike
trying to rewrite the debug stuff results in presumably an llvm crash, illegal instruction 4. running it under lldb... works fine. debugging does suck
19:02:46
cracauer
What was that name of the meta package manager that somebody recommended here? Something that sits on top of Debian, Redhat etc.
19:45:34
drmeister
This lldb extension is very helpful. I recompiled my code with __attribute__((optnone)) for the two functions between which the problem seems to lie.
19:46:10
drmeister
It appears the "Eclector" is being changed to "eclector" and on linux directories are case sensitive. I don't know if this is the problem but it's all I got right now.
19:46:57
Bike
thas good. i hit another problem trying to teach llvm dwarf about the register save area. makes no sense but what else is new
19:49:27
drmeister
cl__truename is a C++ function and now with __attribute__((optnone)) I get all the lexical variables.
19:50:13
drmeister
Bike: That's reminds me - do we get more lexical variables and essentially __attribute__((optnone)) when we (declare (optimize (debug 3))) in Clasp?
19:52:03
Bike
https://github.com/clasp-developers/clasp/blob/main/src/lisp/kernel/cleavir/translate.lisp#L1324-L1327
19:53:56
Bike
but i can't just turn it back on because usually we don't have dbg attachments set up correctly
20:23:07
Bike
no, ahng on, this doesn't make sense, we do call dbg-set-current-source-pos in with-new-function's expansion
20:31:46
drmeister
I'm zeroing in on my downcase of "Eclector" to "eclector" - it's starting to look like a "how the hell did anything work ever" kind of problem.
20:47:56
drmeister
I've been here before. I'm mixing logical and physical pathnames and that is verboten - correct?
20:48:18
drmeister
I should take a logical pathname -> physical pathname before I combine it with any other physical pathname.
20:49:00
drmeister
Because the CLHS says logical pathnames are case insensitive or conversion to physical pathnames makes them downcase - something like that?
20:49:35
drmeister
I've only recently stopped seeing the CLHS when I close my eyes - I forget where it talks about this.
20:51:05
drmeister
What do you think should happen when I convert #P"SYS:KERNEL;CONTRIB;Eclector;" to a physical pathname?
20:53:10
Colleen
Clhs: section 19.3.1.1.7 http://www.lispworks.com/documentation/HyperSpec/Body/19_caag.htm
20:57:28
drmeister
(translate-logical-pathname "SYS:KERNEL;CONTRIB;Eclector;") -> #P"/home/meister/Development/clasp-main/src/lisp/kernel/contrib/eclector/"
20:59:04
drmeister
I see that as a problem. I've always solved it in the past by doing essentially: (merge-pathnames #P"Eclector/" (translate-logical-pathname "SYS:KERNEL;CONTRIB;"))
21:00:29
drmeister
To paraphrase: "Logical and physical pathnames are natural enemies! Like Englishmen and Scots! Or Welshmen and Scots! Or Japanese and Scots! Or Scots and other Scots! Damn Scots! They ruined Scotland!"
23:30:38
drmeister
Bike: If you can get the register save area to be available as debug info - I bet I could get arguments into the lldb backtraces.
23:39:08
Bike
i did kind of a hack in that commit i reverted to make it work, which is probably why it didn't work
23:53:39
drmeister
I got the buildbot building again. I'm trying to get a docker image built with the sequence analysis built into it. I have to do it over and over and over again.