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

View File

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

View File

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

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
}