mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-09-27 16:17:17 +00:00
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:
@@ -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
|
||||||
|
@@ -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);
|
||||||
|
@@ -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
8
test/Object/mangle-ir.ll
Normal 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
|
||||||
|
}
|
Reference in New Issue
Block a user