IPE information is much larger than necessary
The representation of the info table provenance map emitted in object code is far more costly in space and linking time than necessary in a few ways:
- strings are encoded as full-width pointers. This comes both at the cost of code size (since 32-bits is certainly sufficient) and link time (since pointers must be relocated)
- no attempt is made to deduplicate strings; this is particularly bad since every IPE entry has strings of the source module name and file name.
- all IPE entries are exposed as global symbols since they must be referenced by the registration stub, greatly increasing the size of the symbol table
Moreover, the current registration logic relies on mutexes and
malloc from within a global initializer, which is undefined behavior.