diff options
author | Dan Liew <daniel.liew@imperial.ac.uk> | 2014-01-23 19:39:12 +0000 |
---|---|---|
committer | Martin Nowack <martin@se.inf.tu-dresden.de> | 2014-02-06 23:55:29 +0100 |
commit | 2bddb27b38b4aebee7977afb8de4f5c849384750 (patch) | |
tree | 3bdd2724729e96da8dd77bfeb025aef0feeab9cd /lib/README.txt | |
parent | 9e16c443aea9104609c5d5f4016ff41190c7dd24 (diff) | |
download | klee-2bddb27b38b4aebee7977afb8de4f5c849384750.tar.gz |
Improved archive (of bitcode modules) linking performance for
LLVM >= 3.3 by effectively reimplementing the linking algorithm used in LLVM <= 3.2. The LLVM specific bitcode archive format has been removed from LLVM >= 3.3 . Now archives are normal system archives that can contain LLVM bitcode modules as well as regular binary object files. The previous commit implemented an approach where ALL the bitcode modules get linked in which can be terribly slow when klee-uclibc gets linked (~600 LLVM modules). Here are the options that I considered to address this: * Use LD with LLVM gold plug-in and call as an external program. I Don't really want to add another dependency to KLEE. It already has enough! * Use the upcomming LLVM linker (lld). Not really an option because at the time of writing there is no support for linking archives of bitcode modules. * Don't use archives at all and just work with modules (i.e. replace uses of llvm-ar with llvm-link and tinker with the flags a little). This isn't so great because the resulting LLVM bitcode module we execute is bigger than it should be. * Reimpelent bitcode archive linking ourselves in a slightly better way. I've gone for the last option This implementation unfortunately loads all bitcode modules into memory first so we can query the module symbols tables. I would prefer to read the archive's index and link in modules on demand but unfortunately although the new Object::Archive interface in LLVM allows iteration over symbols it doesn't provide a way of knowing if that symbol is defined/undefined. This implementation is far from perfect!
Diffstat (limited to 'lib/README.txt')
0 files changed, 0 insertions, 0 deletions