freenode/#clasp - IRC Chatlog
Search
13:35:51
drmeister
I'm making more progress on the GCing of code and multiple entry points and image save/load.
13:42:17
drmeister
After loading the image I'll walk memory, and for each ObjectFile_O I'll add it to the LLJIT and it will again allocate memory in the AMS pool.
13:43:06
drmeister
Image save just needs to write out the literals that are in the AMS pool and replace them after the code is recreated in the AMS pool.
13:43:34
drmeister
I can choose to have a simple vector of literals or I could get fancy and put the literals directly into the code and have a table of offsets for fixup.
13:43:57
drmeister
So, here is a question, how much better would it be to put the literals directly into the code?
13:44:47
drmeister
I think putting them directly into the code would give the ultimate in performance. It's what sbcl does.
13:48:56
SAL9000
drmeister: when you say "literals directly in the code", do you mean assembler immediates, or jump-over-data?
13:51:14
drmeister
To be very precise I need to generate some examples and show you what I mean in terms of the machine instructions. But rather than read a word out of a vector into a register using RIP-relative addressing we would simply load an 8-byte value into the register. The 8-byte value would be part of the instruction and would be a fixable pointer, directly in the code.
13:52:08
drmeister
It would look like a MOV of an 8-byte constant into a register. The constant part of the instruction IS the fixable pointer.
13:53:06
drmeister
Then I would have a vector of offsets into the code where these fixable pointers live and obj_scan would read, fix and write them back as the MPS moves things around.
13:59:44
SAL9000
drmeister: looks like we're using a name->object map to track "sidecar" data through LLVM, then iterate through the relocation section and match the names
14:07:32
drmeister
With the image save I'll look through the rest of the words in every object for things that look like pointers but point into C++ malloc memory.
14:08:17
drmeister
Then we can track down any remaining C++ objects that need to be handled - there may still be a few.
14:09:38
drmeister
Through a combination of closing and cleaning up things like streams and moving things into GC memory we can totally implement image/save load.
14:10:02
drmeister
Then we really clean things up and get rid of optimizations to speed up startup for instance.