From e9cffafdf71771af6c5af38f4901e69753c923f8 Mon Sep 17 00:00:00 2001 From: Mehdi Amini Date: Fri, 22 Apr 2016 04:28:05 +0000 Subject: Refactor IRObjectFile, extract a static CollectAsmUndefinedRefs() method to parse inline assembly (NFC) I plan to call this from ThinLTOCodeGenerator. From: Mehdi Amini llvm-svn: 267103 --- llvm/lib/Object/IRObjectFile.cpp | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) (limited to 'llvm/lib/Object/IRObjectFile.cpp') diff --git a/llvm/lib/Object/IRObjectFile.cpp b/llvm/lib/Object/IRObjectFile.cpp index a4b97ef..8184e04 100644 --- a/llvm/lib/Object/IRObjectFile.cpp +++ b/llvm/lib/Object/IRObjectFile.cpp @@ -38,12 +38,24 @@ using namespace object; IRObjectFile::IRObjectFile(MemoryBufferRef Object, std::unique_ptr Mod) : SymbolicFile(Binary::ID_IR, Object), M(std::move(Mod)) { Mang.reset(new Mangler()); + CollectAsmUndefinedRefs(*M, [this](StringRef Name, + BasicSymbolRef::Flags Flags) { + AsmSymbols.push_back(std::make_pair(Name, Flags)); + }); +} + +// Parse inline ASM and collect the list of symbols that are not defined in +// the current module. This is inspired from IRObjectFile. +void IRObjectFile::CollectAsmUndefinedRefs( + Module &TheModule, + const std::function & + AsmUndefinedRefs) { - const std::string &InlineAsm = M->getModuleInlineAsm(); + const std::string &InlineAsm = TheModule.getModuleInlineAsm(); if (InlineAsm.empty()) return; - Triple TT(M->getTargetTriple()); + Triple TT(TheModule.getTargetTriple()); std::string Err; const Target *T = TargetRegistry::lookupTarget(TT.str(), Err); if (!T) @@ -106,8 +118,7 @@ IRObjectFile::IRObjectFile(MemoryBufferRef Object, std::unique_ptr Mod) Res |= BasicSymbolRef::SF_Global; break; } - AsmSymbols.push_back( - std::make_pair(Key, std::move(Res))); + AsmUndefinedRefs(Key, BasicSymbolRef::Flags(Res)); } } -- cgit v1.1