freenode/#clasp - IRC Chatlog
Search
2:17:05
Bike
i have thought about it but not super deeply. the basic issue is i don't have a sense of how much we depend on vtables
2:17:19
Bike
for actual lisp functions i don't think removing vtables would be very hard, but i don't know what the C++ is doing as well
2:27:21
Bike
i think it's probably a good idea overall, we can save a word in all objects, and we already have to do dispatch through generic functions anyway, might as well use that
2:36:37
drmeister
Uh - or the compiler - actually - never mind that. The problem is that vtable pointer symbols are hidden in the final executable - so dlsym doesn't work with them - but dladdr does work with their addresses.
2:37:17
drmeister
In snapshot save/load during save I take function/method/vtable pointers and lookup their symbols with dladdr - and build symbol tables - that's not a problem.
2:37:42
drmeister
During snapshot load I use dlsym to lookup the address of the symbols - that's where the problem shows up for some vtable pointer symbols.
2:38:06
drmeister
If the vtables are "anchored" - then the vtable symbol is exported and there is no problem.
2:38:36
drmeister
To "anchor" a vtable you need the class to have at least one out-of-line virtual method.
2:39:06
drmeister
I can do that for our classes - most have this - but I'll have to anchor a few of them like Lisp_O.
2:40:06
drmeister
However, the template classes for builtin function wrappers - those I can't anchor because they are template classes - they are created at compile time based on function pointer types - I can't anchor them. There are about 3,000 of them in cando.
2:41:33
drmeister
Now - there is a facility where I can force symbols to be exported (ld option -exported_symbols_list <filename>) - but this is a PITA - it means we have to maintain a list of about 9,000 C++ mangled symbols Bleh Bleh Bleh.
2:42:46
drmeister
The problem is that we do depend on vtables for function objects. 'templatedSizeof' is one of the reasons we need vtables.
2:46:10
drmeister
This is for function objects in general - if the function object wraps a function pointer - that adds 8 bytes. If it wraps a method pointer - that adds 16 bytes.
2:48:02
drmeister
It's not clear to me that we absolutely need vtables though - we might be able to get around the need.
2:48:37
drmeister
It would take some work and some thinking though - the simpler thing would be if we could get these vtable symbols exported.
2:50:50
drmeister
I'm going to change the names of the template classes that derive from Function_O so I can grep them out of nm output.
2:53:56
drmeister
Hmm, I'm talking with Lang again - we've been chatting about this for a couple of hours - that's how I learned all this.