summaryrefslogtreecommitdiff
path: root/tools/lto/LTOModule.h
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2011-03-02 04:14:42 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2011-03-02 04:14:42 +0000
commit38c4e535493363b96eac47af9e7c056530137bea (patch)
tree02b99cf243d4f23b72a93f2f8d3fa49ff82cba67 /tools/lto/LTOModule.h
parentf7af396c9571e4efe944c5bf739bce667f99556a (diff)
downloadllvm-38c4e535493363b96eac47af9e7c056530137bea.tar.gz
llvm-38c4e535493363b96eac47af9e7c056530137bea.tar.bz2
llvm-38c4e535493363b96eac47af9e7c056530137bea.tar.xz
Add a special streamer to libLTO that just records symbols definitions and
uses. The result produced by the streamer is used to give the linker more accurate information and to add to llvm.compiler.used. The second improvement removes the need for the user to add __attribute__((used)) to functions only used in inline asm. The first one lets us build firefox with LTO on Darwin :-) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@126830 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools/lto/LTOModule.h')
-rw-r--r--tools/lto/LTOModule.h12
1 files changed, 9 insertions, 3 deletions
diff --git a/tools/lto/LTOModule.h b/tools/lto/LTOModule.h
index 1794d81c0a..21e8475177 100644
--- a/tools/lto/LTOModule.h
+++ b/tools/lto/LTOModule.h
@@ -64,11 +64,14 @@ struct LTOModule {
const char* getSymbolName(uint32_t index);
llvm::Module * getLLVVMModule() { return _module.get(); }
+ const std::vector<const char*> &getAsmUndefinedRefs() {
+ return _asm_undefines;
+ }
private:
LTOModule(llvm::Module* m, llvm::TargetMachine* t);
- void lazyParseSymbols();
+ bool ParseSymbols();
void addDefinedSymbol(llvm::GlobalValue* def,
llvm::Mangler& mangler,
bool isFunction);
@@ -80,7 +83,10 @@ private:
llvm::Mangler &mangler);
void addDefinedDataSymbol(llvm::GlobalValue* v,
llvm::Mangler &mangler);
- void addAsmGlobalSymbol(const char *);
+ bool addAsmGlobalSymbols(llvm::MCContext &Context);
+ void addAsmGlobalSymbol(const char *,
+ lto_symbol_attributes scope);
+ void addAsmGlobalSymbolUndef(const char *);
void addObjCClass(llvm::GlobalVariable* clgv);
void addObjCCategory(llvm::GlobalVariable* clgv);
void addObjCClassRef(llvm::GlobalVariable* clgv);
@@ -103,11 +109,11 @@ private:
llvm::OwningPtr<llvm::Module> _module;
llvm::OwningPtr<llvm::TargetMachine> _target;
- bool _symbolsParsed;
std::vector<NameAndAttributes> _symbols;
// _defines and _undefines only needed to disambiguate tentative definitions
StringSet _defines;
llvm::StringMap<NameAndAttributes> _undefines;
+ std::vector<const char*> _asm_undefines;
};
#endif // LTO_MODULE_H