-
Notifications
You must be signed in to change notification settings - Fork 31
Octave brainstorm
Questions will appear here!
28/04: spent much time this week struggling to get it to run on Ubuntu 22.04, both on my local machine and in a Dockerfile. I'm very close though, so expect a PR with a working Dockerfile soon. I should report all three existing ones aren't functional though...
Well, the Ubuntu one builds nicely, but the allocscc command in the README complains about missing headers unless ran with allocscc -I/usr/local/src/liballocs/include -I/usr/local/src/liballocs/contrib/libsystrap/contrib/librunt/include -I/usr/local/src/liballocs/contrib/liballocstool/include -o test test.c. Also, ELFTIN must be set in the env else allocscc complains, and that one could fallback to a relative path of ../../contrib/elftin/ if the variable isn't in the env.
- all sounds good -- good work!
I've also got a few random potentially useful (but dreadfully boring) notes regarding building like it breaking with more recent versions of OCaml and gcc/g++. More annoyingly, have to remove stream_err and __addrmap_max_stack_size from librunt.c to avoid a conflict with liballocs.c which prevents building otherwise, on Ubuntu 22.04 at least. __attribute__((weak)) would probably work and be cleaner, not sure why it's needed in the first place though. Anyway.
- Hmm, yes. I think
__addrmap_max_stack_sizeshould be just in liballocs, but possibly they should each have their ownstream_err.
pycallocs code looks nice and hacking-prone since it doesn't seem to be mystical and lacking in comments, so that's great! Can build but not test it yet, since I can't build libcrunch at all and it uses very few features from it. What's this heap_index.h header libcrunch imports but that's nowhere to be found?
- Whoops. That header is now removed from liballocs but I haven't forward-ported libcrunch yet -- my bad. I was forgetting that pycallocs uses it. Most of the stuff is in allocmeta.h or generic_malloc_index.h. The rationale is that each 'heap allocator' is really a distinct allocator that in principle needs its own header.
As for actual (basic so far) liballocs questions:
- why is there a need for allocscc? It's quite complex, there's a lot going on with it. AFAIK it exists to leverage CIL/cilly heavily, but I'm not sure you ever explain why that's the case. Instrumentation as described in Documentation/overview-toolchain.txt, I assume?
- Yes, I'm currently removing it in favour of something simpler. Something of this kind is needed because we do instrument some C code at source level (e.g.
alloca) and alter how it is compiled (e.g.-fno-function-sections) and how it is linked (e.g. to includemallocwrappers) and also the dynamic linking set-up (allocsld.sois the dynamic linker). But I have a new approach (see 'toolsub' repository) that is overall simpler, and some of the work is in linker plugins). As well as overview-toolchain.txt, 'malloc-indexing.txt' is worth a look (be prepared for horror).
- Yes, I'm currently removing it in favour of something simpler. Something of this kind is needed because we do instrument some C code at source level (e.g.
- how is this instrumentation done in practice, in detail? I assume that's how
libsystrapcomes into play.- Yes although that is the simplest kind of instrumentation, just for system calls.
- curious about fake-libunwind and why it's needed
- Using 'real' libunwind (which uses DWARF frame information) used to be slower than
-fno-omit-frame-pointerand the fake libunwind (which was just a really simple/fast stack walker using frame pointers). There probably still is some time penalty, but I am worrying about it less for the moment. I want to integrate the 'compiled frame information' work from OOPSLA 2019, which will definitely eliminate the problem, but that is not done yet. Basically it would mean generating a further kind of metadata, 'compiled' from the DWARF frame information. Though a modified libunwind is still needed in that case. Probably this should be vendored locally and linked privately into liballocs.
- Using 'real' libunwind (which uses DWARF frame information) used to be slower than