From e8d170beae28f99bd7075a6dde4dcb20d6126b68 Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Thu, 11 Aug 2011 21:14:08 -0700 Subject: [PATCH] rt: Stub Rust GC metadata printer and Rust GC strategy modules --- mk/rustllvm.mk | 3 +- src/rustllvm/RustGCMetadataPrinter.cpp | 45 ++++++++++++++++++++++++++ src/rustllvm/RustGCStrategy.cpp | 34 +++++++++++++++++++ 3 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 src/rustllvm/RustGCMetadataPrinter.cpp create mode 100644 src/rustllvm/RustGCStrategy.cpp diff --git a/mk/rustllvm.mk b/mk/rustllvm.mk index 35f52230bd9..af1f7bfbd0f 100644 --- a/mk/rustllvm.mk +++ b/mk/rustllvm.mk @@ -2,7 +2,8 @@ # rustc LLVM-extensions (C++) library variables and rules ###################################################################### -RUSTLLVM_OBJS_CS := $(addprefix rustllvm/, RustWrapper.cpp) +RUSTLLVM_OBJS_CS := $(addprefix rustllvm/, RustGCMetadataPrinter.cpp \ + RustGCStrategy.cpp RustWrapper.cpp) RUSTLLVM_DEF := rustllvm/rustllvm$(CFG_DEF_SUFFIX) diff --git a/src/rustllvm/RustGCMetadataPrinter.cpp b/src/rustllvm/RustGCMetadataPrinter.cpp new file mode 100644 index 00000000000..d17d7da1703 --- /dev/null +++ b/src/rustllvm/RustGCMetadataPrinter.cpp @@ -0,0 +1,45 @@ +//===-- RustGCPrinter.cpp - Rust garbage collection map printer -----------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file defines the emitter for the Rust garbage collection stack maps. +// +//===----------------------------------------------------------------------===// + +#include "llvm/CodeGen/GCs.h" +#include "llvm/CodeGen/AsmPrinter.h" +#include "llvm/CodeGen/GCMetadataPrinter.h" +#include "llvm/Module.h" +#include "llvm/MC/MCAsmInfo.h" +#include "llvm/MC/MCContext.h" +#include "llvm/MC/MCSymbol.h" +#include "llvm/MC/MCStreamer.h" +#include "llvm/Target/Mangler.h" +#include "llvm/Target/TargetData.h" +#include "llvm/Target/TargetLoweringObjectFile.h" +#include "llvm/Target/TargetMachine.h" +#include "llvm/ADT/SmallString.h" +#include "llvm/Support/ErrorHandling.h" +#include "llvm/Support/FormattedStream.h" +#include + +using namespace llvm; + +namespace { + + class RustGCMetadataPrinter : public GCMetadataPrinter { + public: + void beginAssembly(AsmPrinter &AP) {}; + void finishAssembly(AsmPrinter &AP) {}; + }; + +} + +static GCMetadataPrinterRegistry::Add +Y("rust", "Rust GC metadata printer"); + diff --git a/src/rustllvm/RustGCStrategy.cpp b/src/rustllvm/RustGCStrategy.cpp new file mode 100644 index 00000000000..0c86856939c --- /dev/null +++ b/src/rustllvm/RustGCStrategy.cpp @@ -0,0 +1,34 @@ +//===- RustGCStrategy.cpp - Rust garbage collection strategy ----*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file defines the garbage collection strategy for Rust. +// +//===----------------------------------------------------------------------===// + +#include "llvm/CodeGen/GCs.h" +#include "llvm/CodeGen/GCStrategy.h" + +using namespace llvm; + +namespace { + class RustGCStrategy : public GCStrategy { + public: + RustGCStrategy(); + }; +} + +static GCRegistry::Add +X("rust", "Rust GC"); + +RustGCStrategy::RustGCStrategy() { + NeededSafePoints = 1 << GC::PostCall; + UsesMetadata = true; +} + +