freenode/#clasp - IRC Chatlog
Search
16:23:21
drmeister
The T's aren't all crossed and the i's aren't all dotted - but the Department of Defense is basically providing an A-round of funding to start up ThirdLaw to create "Artificial Antibodies".
16:25:40
drmeister
The cando/clasp/software side of things is going to be folded in - because there are interesting things that we can do by combining the capabilities.
20:00:59
drmeister
The warnings are all coming up during llvm-dsymutil. The linking command doesn't complain.
20:07:51
drmeister
https://github.com/clasp-developers/clasp/blob/dev/src/lisp/kernel/cmp/cmpbundle.lsp#L177
20:09:38
drmeister
Did you find out if there was a way to combine dwarf with code on macOS? Was that a productive idea?
20:12:13
Bike
https://en.wikipedia.org/wiki/Bundle_(macOS) i think? i mean it's just a directory in a file i guess.
20:14:25
drmeister
If you "man ld" on macOS and search for 'bundle' you will see the other meaning of 'bundle' in macOS.
20:15:02
drmeister
It's like a dynamic library but its a bit different. I still don't have a good definition of it.
20:16:15
drmeister
The lldd command combines several object files and libraries, resolves references, and produces an ouput file. lldd can produce a final linked image (executable, dylib, or bundle), or with the -r option, produce another object file. If the -o option is not used, the output file produced is named "a.out".
23:39:12
drmeister
I'm well on the way to getting the atomic/fasl-as-directory thing to work - but it turns out it's not the problem for the fasl debug-info problem.
23:40:46
drmeister
Each defun is a top-level form and the ASTs are compiled serially and then the HIR and llvm parts are done in separate threads.
23:41:48
drmeister
Then compile-file-parallel generates two object files. foo_12.o and foo_13.o (the numbers are arbitrary).
23:42:10
drmeister
When I link these two object files into a fasl file the fasl file contains a thing called a 'debug-map'.
23:42:35
drmeister
The debug-map lists the object files that it contains and for each object file there is a list of symbols that it provides.
23:43:06
drmeister
When dsymutil is run it reads the .fasl file and the debug-map and then goes back to the object files to get the debug info.
23:45:32
drmeister
Then only foo_12.o shows up in the foo.fasl debug-map - even though the foo.fasl link looks like it went fine.
23:48:34
drmeister
Now, in the link command I'm using some switches that I don't quite understand...
23:49:17
drmeister
-bundle <<<< This one makes the fasl file a macOS "bundle" library - I think that means you can load it into a running executable and it will link in properly.
1:51:41
drmeister
I think we may need to add a bogus exported function with a linkage that allows collisions.
1:52:52
drmeister
I set up a test case in C++ where I have two files containing private symbols and I think I can reproduce what we need but don't currently generate.
1:54:19
drmeister
When I construct C++ files that have static functions that have their function pointers exported the struct that is static initialized at startup to register the functions has a symbol name that should collide but doesn't.
1:58:43
drmeister
It's a bit difficult to describe. When you link a bunch of .o files into a fasl file inside the fasl file there is a 'debug-map'.
1:59:22
drmeister
Right - I'm guessing that something about our object file symbol tables is confusing the linker.
1:59:38
drmeister
One weird thing about them is they have NO exported symbols - they are all internal.
2:00:59
drmeister
The problem I've had with external symbols is that we get symbol collisions when we reload things.
2:02:19
drmeister
In Clasp we set things up a bit different. We have all internal symbols and there is one static constructor function that is also an internal symbol.
2:03:29
Bike
i'm not really clear on how we can be doing anything if there are no external symbols at all, but it works somehow, i guess
2:04:13
Bike
well so yeah, when you link this into something the linker has to know how to construct static_foo
2:05:32
drmeister
Note that __ZN6ExposeC1Ev and __ZN6ExposeC2Ev are external symbols. They are both defined by foo.o and bar.o - but they don't collide.
2:06:07
drmeister
But if I remove the 'static' prefix to 'int zzz()...' then I get complaints about 'zzz' being a collision.
2:08:49
Bike
well, let's think here... in the case everything's static, the symbol has to be known to the loader, but not to the linker in the same way. when the linker sees two files with the same symbol marked internal it can do some renaming for the final product, i guess.