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
This commit is contained in:
Rafael Espindola
2014-02-28 02:17:23 +00:00
parent 5de0f3d6da
commit 0ff25b31d8
4 changed files with 27 additions and 2 deletions

View File

@@ -52,6 +52,9 @@ Non-comprehensive list of changes in this release
for assembly output as well. The integrated assembler can be disabled with for assembly output as well. The integrated assembler can be disabled with
the ``-no-integrated-as`` option, 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 .. NOTE
For small 1-3 sentence descriptions, just add an entry at the end of 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 this list. If your description won't fit comfortably in one bullet

View File

@@ -17,12 +17,14 @@
#include "llvm/Object/SymbolicFile.h" #include "llvm/Object/SymbolicFile.h"
namespace llvm { namespace llvm {
class Mangler;
class Module; class Module;
class GlobalValue; class GlobalValue;
namespace object { namespace object {
class IRObjectFile : public SymbolicFile { class IRObjectFile : public SymbolicFile {
OwningPtr<Module> M; OwningPtr<Module> M;
OwningPtr<Mangler> Mang;
public: public:
IRObjectFile(MemoryBuffer *Object, error_code &EC, LLVMContext &Context, IRObjectFile(MemoryBuffer *Object, error_code &EC, LLVMContext &Context,
bool BufferOwned); bool BufferOwned);

View File

@@ -13,6 +13,7 @@
#include "llvm/Bitcode/ReaderWriter.h" #include "llvm/Bitcode/ReaderWriter.h"
#include "llvm/IR/LLVMContext.h" #include "llvm/IR/LLVMContext.h"
#include "llvm/IR/Mangler.h"
#include "llvm/IR/Module.h" #include "llvm/IR/Module.h"
#include "llvm/Object/IRObjectFile.h" #include "llvm/Object/IRObjectFile.h"
#include "llvm/Support/raw_ostream.h" #include "llvm/Support/raw_ostream.h"
@@ -27,6 +28,13 @@ IRObjectFile::IRObjectFile(MemoryBuffer *Object, error_code &EC,
return; return;
M.reset(MOrErr.get()); 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) { static const GlobalValue &getGV(DataRefImpl &Symb) {
@@ -86,9 +94,13 @@ void IRObjectFile::moveSymbolNext(DataRefImpl &Symb) const {
error_code IRObjectFile::printSymbolName(raw_ostream &OS, error_code IRObjectFile::printSymbolName(raw_ostream &OS,
DataRefImpl Symb) const { DataRefImpl Symb) const {
// FIXME: This should use the Mangler.
const GlobalValue &GV = getGV(Symb); const GlobalValue &GV = getGV(Symb);
if (Mang)
Mang->getNameWithPrefix(OS, &GV, false);
else
OS << GV.getName(); OS << GV.getName();
return object_error::success; return object_error::success;
} }

8
test/Object/mangle-ir.ll Normal file
View File

@@ -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
}