From: Rafael Espindola Date: Fri, 28 Feb 2014 02:17:23 +0000 (+0000) Subject: Now that it is possible, use the mangler in IRObjectFile. X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=0ff25b31d895c82d3fea67b76531c9580ce00d0a;p=oota-llvm.git Now that it is possible, use the mangler in IRObjectFile. A really simple patch marks the end of a lot of yak shaving :-) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@202463 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/docs/ReleaseNotes.rst b/docs/ReleaseNotes.rst index 42127c81f70..07d4d07069b 100644 --- a/docs/ReleaseNotes.rst +++ b/docs/ReleaseNotes.rst @@ -52,6 +52,9 @@ Non-comprehensive list of changes in this release for assembly output as well. The integrated assembler can be disabled with the ``-no-integrated-as`` option, +* llvm-ar now handles IR files like regular object files. In particular, a + regular symbol table is created for symbols defined in IR files. + .. NOTE For small 1-3 sentence descriptions, just add an entry at the end of this list. If your description won't fit comfortably in one bullet diff --git a/include/llvm/Object/IRObjectFile.h b/include/llvm/Object/IRObjectFile.h index e1effa6745a..e85dd671032 100644 --- a/include/llvm/Object/IRObjectFile.h +++ b/include/llvm/Object/IRObjectFile.h @@ -17,12 +17,14 @@ #include "llvm/Object/SymbolicFile.h" namespace llvm { +class Mangler; class Module; class GlobalValue; namespace object { class IRObjectFile : public SymbolicFile { OwningPtr M; + OwningPtr Mang; public: IRObjectFile(MemoryBuffer *Object, error_code &EC, LLVMContext &Context, bool BufferOwned); diff --git a/lib/Object/IRObjectFile.cpp b/lib/Object/IRObjectFile.cpp index 37e7eb80ca5..b3a5668fc20 100644 --- a/lib/Object/IRObjectFile.cpp +++ b/lib/Object/IRObjectFile.cpp @@ -13,6 +13,7 @@ #include "llvm/Bitcode/ReaderWriter.h" #include "llvm/IR/LLVMContext.h" +#include "llvm/IR/Mangler.h" #include "llvm/IR/Module.h" #include "llvm/Object/IRObjectFile.h" #include "llvm/Support/raw_ostream.h" @@ -27,6 +28,13 @@ IRObjectFile::IRObjectFile(MemoryBuffer *Object, error_code &EC, return; M.reset(MOrErr.get()); + + // If we have a DataLayout, setup a mangler. + const DataLayout *DL = M->getDataLayout(); + if (!DL) + return; + + Mang.reset(new Mangler(DL)); } static const GlobalValue &getGV(DataRefImpl &Symb) { @@ -86,9 +94,13 @@ void IRObjectFile::moveSymbolNext(DataRefImpl &Symb) const { error_code IRObjectFile::printSymbolName(raw_ostream &OS, DataRefImpl Symb) const { - // FIXME: This should use the Mangler. const GlobalValue &GV = getGV(Symb); - OS << GV.getName(); + + if (Mang) + Mang->getNameWithPrefix(OS, &GV, false); + else + OS << GV.getName(); + return object_error::success; } diff --git a/test/Object/mangle-ir.ll b/test/Object/mangle-ir.ll new file mode 100644 index 00000000000..725d788a19a --- /dev/null +++ b/test/Object/mangle-ir.ll @@ -0,0 +1,8 @@ +; RUN: llvm-as %s -o - | llvm-nm - | FileCheck %s + +target datalayout = "m:o" + +; CHECK: T _f +define void @f() { + ret void +}