Introduce Target::createNullTargetStreamer and use it from IRObjectFile.

A null MCTargetStreamer allows IRObjectFile to ignore target-specific
directives. Previously we were crashing.

Differential Revision: http://reviews.llvm.org/D7711

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@229797 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Peter Collingbourne
2015-02-19 00:45:02 +00:00
parent 8915e014e0
commit 99a5e24d34
6 changed files with 44 additions and 0 deletions

View File

@@ -47,6 +47,7 @@ namespace llvm {
class MCRelocationInfo;
class MCTargetAsmParser;
class MCTargetOptions;
class MCTargetStreamer;
class TargetMachine;
class TargetOptions;
class raw_ostream;
@@ -139,6 +140,7 @@ namespace llvm {
MCAsmBackend *TAB,
bool ShowInst);
typedef MCStreamer *(*NullStreamerCtorTy)(MCContext &Ctx);
typedef MCTargetStreamer *(*NullTargetStreamerCtorTy)(MCStreamer &S);
typedef MCRelocationInfo *(*MCRelocationInfoCtorTy)(StringRef TT,
MCContext &Ctx);
typedef MCSymbolizer *(*MCSymbolizerCtorTy)(
@@ -227,6 +229,10 @@ namespace llvm {
/// (default = llvm::createNullStreamer).
NullStreamerCtorTy NullStreamerCtorFn;
/// Construction function for this target's null TargetStreamer, if
/// registered (default = nullptr).
NullTargetStreamerCtorTy NullTargetStreamerCtorFn;
/// MCRelocationInfoCtorFn - Construction function for this target's
/// MCRelocationInfo, if registered (default = llvm::createMCRelocationInfo)
MCRelocationInfoCtorTy MCRelocationInfoCtorFn;
@@ -453,6 +459,12 @@ namespace llvm {
return llvm::createNullStreamer(Ctx);
}
MCTargetStreamer *createNullTargetStreamer(MCStreamer &S) const {
if (NullTargetStreamerCtorFn)
return NullTargetStreamerCtorFn(S);
return nullptr;
}
/// createMCRelocationInfo - Create a target specific MCRelocationInfo.
///
/// \param TT The target triple.
@@ -783,6 +795,11 @@ namespace llvm {
T.NullStreamerCtorFn = Fn;
}
static void
RegisterNullTargetStreamer(Target &T, Target::NullTargetStreamerCtorTy Fn) {
T.NullTargetStreamerCtorFn = Fn;
}
/// RegisterMCRelocationInfo - Register an MCRelocationInfo
/// implementation for the given target.
///