freenode/#clasp - IRC Chatlog
Search
22:39:48
balrog
drmeister, Bike, does clasp currently have very much in the way of debugging information infrastructure?
22:41:05
drmeister
We are in the process of adding full blown source tracking and debugging information using DWARF.
22:43:32
drmeister
We produce DWARF information - but we can't yet use it other than through gdb or lldb.
23:59:19
kpoeck
@drmeister: am building now with 8 processes and bde-gc from brew (full build with distclean)
23:59:19
Colleen
kpoeck: drmeister said 5 hours, 2 minutes ago: - does Clasp build in parallel with the bdw-gc from brew?
0:12:00
drmeister
So DWARF is format that C/C++ compilers (gnu, clang) use to represent debugging information.
0:12:37
balrog
how the internal representation works and how it's embedded into executables... not so much
0:12:40
drmeister
It's a highly compressed format that is generated by the compiler that tells it what PC (instruction pointer) values map to what source line numbers and where lexical variables can be found in stack frames.
0:13:07
drmeister
It's so highly compressed that you basically need a virtual machine to evaluate it.
0:13:59
drmeister
I'm not super up on the details but my understanding is that the DWARF format is Turing complete - and can be used to evaluate arbitrary code.
0:14:21
drmeister
But it's used to take an instruction pointer and figure out where in the source code you are.
0:16:10
drmeister
http://wiki.dwarfstd.org/index.php?title=DWARF_FAQ#What_is_a_state_machine_which_is_used_to_decode_the_byte_stream_of_line_and_file_debug_information.3F
0:17:12
balrog
(I'm mostly familiar with the work on executable / object formats; haven't had to deal with DWARF)
0:18:02
drmeister
I'd really like to know what is involved in getting a facility to read DWARF into Clasp.
0:19:05
drmeister
To put point on a backtrace frame in sldb and then hit 'v' and jump to the line that represents that frame.
0:21:27
drmeister
But guile, the GNU Scheme implementation has a DWARF parser as far as I understand.
0:21:27
balrog
and does it have to be in Common Lisp? Because I don't think one exists in Common Lisp
0:22:19
drmeister
There certainly probably parser/interpreters in C++. gdb has one, lldb has another.
0:22:42
drmeister
The one in lldb is supposed to be a C++ library - but I haven't been able to get my head around it.
0:25:54
drmeister
Right - so what is that stuff. Would it be something worth translating to Common Lisp?
0:26:42
balrog
that's fair. I mainly ask because LLVM proper has been working on supporting Windows as a first class operating system -- to the point where Chrome for Windows is compiled using Clang and LLVM.
0:30:11
drmeister
(1) How do we get access to the DWARF data associated with an executable or a fasl file?
0:30:49
drmeister
(2) How do we use the DWARF data to get source information. If I have a PC - can I get the source file, line-number?
0:31:09
balrog
(I'm just now reading through this: https://blog.tartanllama.xyz/writing-a-linux-debugger-elf-dwarf/ )
0:32:09
drmeister
Oh god... file:///Users/meister/Downloads/elf101-64.pdf https://usercontent.irccloud-cdn.com/file/oKK1Ghkt/image.png
0:33:11
balrog
(also: https://raw.githubusercontent.com/corkami/pics/master/binary/macho101/macho101-64.pdf )
0:36:45
balrog
also -- a quick google search found me these parsers (https://github.com/aclements/libelfin -- C++, https://github.com/gimli-rs/gimli -- rust)
0:37:14
Bike
with a special function called run-all or something, that we call when the fasl is loaded
0:38:44
drmeister
On macOS they are actually "bundle" files - they are like dylib but are linked with an extra flag.
0:45:17
balrog
that said I haven't seen a ton done in this regard with DWARF, but now I'm sidetracking myself.
0:47:36
drmeister
You are familiar with the difference between a bundle file and a dylib file on macOS?
0:48:14
Bike
hey produce a file that is both a library and anexecutable, to the great confusion of reverse engineers and their totally legitimate IDA Pro licenses. <-- oh no
0:49:12
drmeister
My understanding is that a bundle file is something that you can dyload into an executable and a dylib is a library to link with object files.
0:51:40
balrog
this is stuff that became unimportant around 10.4 and completely irrelevant since what, 10.5 or so?
0:52:24
drmeister
I haven't made the leap to clean out my hacked boehm and build from brew installed boehm
1:02:03
karlosz
because the code generated under cleavir uses so much stack space that self compiling means that once halfd of the system is replaced it blows up from stack usage
1:02:50
Bike
that's way deep. what does a backtrace like? perhaps it's recursively calling something that does special bindings or the like?
1:03:44
karlosz
i'm not sure. i encapsulated pone of the compile functions and even clisps compiler stack overflowed when compiling cleavir
1:04:26
karlosz
encapsualte as in (defun compile (name def) (if *use-cleavir* .... (clisp-compile ...))
1:06:04
karlosz
and all temporary variables have to be allocated on the stack since its a stack machine, hence why im suspecting the stack usage of cleavir+ clisp to be a problem
1:08:37
karlosz
the special variable binding thing was a problem too, but i fixed that by adding a reader macro telling cleavir not to self compile those things
1:08:48
drmeister
karlosz: Is it a normal C stack - or so kind of shadow stack that clisp maintains?
1:10:42
drmeister
balrog: Yeah and I've been suffering from a bout of "programmers block" - I don't know what the problem is with me and this atom-tree code - I just feel like I'm climbing a sheer cliff face with it.
1:11:25
drmeister
So I've been nibbling around the problem, trying to make my job easier by writing graphviz code to visualize it and take it one function at a time.
1:18:37
drmeister
They even have a "Get your parents to buy it for you by screaming real loud" page: https://conferences.oreilly.com/jupyter/jup-ny/public/content/convince-manager
1:26:21
drmeister
What's wrong with this construct? It's a handler-bind inside of a handler-case - I'm still wrapping my head around conditions and restarts - does it make sense to have a handler-bind inside of a handler-case like this?
1:27:06
drmeister
Clearly I want to generate the backtrace in the handler-bind serious-condition handler - so that it is generated before the stack is unwound.
1:27:35
drmeister
Should I write it into a closed over variable so that the handler-case simple-condition and serious-condition can print it?
1:30:18
drmeister
I added calls to (trivial-backtrace:print-backtrace-to-stream *error-output*) to the handler-case clauses.
1:31:15
Bike
i'd say you can drop the handler-case and just have a handler-bind that muffles warnings, prints conditions, and for errors prints backtrace
3:55:30
drmeister
balrog: We have a version of clasp that does full source tracking and generates lots of debug information.
3:56:16
drmeister
It builds - but it's not quite ready for prime-time because Bike is still working on getting a new type of inlining working.
3:56:46
drmeister
We have disabled the new type of inlining - and because of this it runs about 2x slower than the 'dev' branch.
5:28:41
karlosz
(clisp-cleavir interface meaning not the stuff in the SICL repository, but all the stuff i defined)