-
Notifications
You must be signed in to change notification settings - Fork 0
Limitations
-
Support for IR
aliasandifunc. -
Support for targets beyond x86-64 Linux.
-
Exception handling
-
Debugging information.
There is an implementation of DWARF
.debug_linesupport but the remaining debugging information categories remain unsupported. -
Linker support!
The linker is a critical component of the program repository. Much of the compiler work has been aimed at reducing the work that must be performed at link time. Until we have a working repository-based static linker, most of the gains that I’m hoping for from the repo won’t be realised.
A linker is currently under development: you can find the source code for it here.
However, as a stop-gap measure to enable running programs to be linked, we’ve got the repo2obj tool which creates an ELF object file from a program repository database and a ticket-file created by a compilation.
-
Static archive symbol table
The static archive utility doesn’t understand repository ticket files. We need to extend it so that it can construct the archive symbol table.
-
Object file import
We’ve got repo2obj for exporting repository ticket files as traditional object files. However, we also need a tool which can do the opposite and bring legacy objects into the program repository world.
-
Investigate alternative hash functions.
The repository hash-generation pass currently uses MD5. It does this “because it’s there” in the LLVM codebase already. There are stronger, and potentially faster, hashes now available such as BLAKE2. We should investigate switching. See the associated bug.
The program repository design deliberately doesn’t attempt to reproduce all of the exotic extensions that are available in object file formats such as ELF. These restrictions are chosen to simplify the implementation and, more importantly, to improve performance. Part of the motivation comes from a wish to focus on targeting application developers rather than kernel-level development.
- No custom-named sections, e.g.
__attribute__((section("name"))) - No custom static constructor/destructor ordering, e.g.
__attribute__(init_priority(x));