[PATCH] D11822: Resurrect RegisterAsmStreamer
Rafael EspĂndola via llvm-commits
llvm-commits at lists.llvm.org
Fri Aug 7 12:09:47 PDT 2015
To be clear, the idea is to avoid *creating* the sections, no avoiding
printing them, correct?
Ins't all that you need to do is overload (or add an if to) InitSections?
On 6 August 2015 at 18:50, Matt Arsenault <Matthew.Arsenault at amd.com> wrote:
> arsenm updated this revision to Diff 31486.
> arsenm added a comment.
>
> Rebase to remove unrelated context from diff
>
>
> http://reviews.llvm.org/D11822
>
> Files:
> include/llvm/Support/TargetRegistry.h
>
> Index: include/llvm/Support/TargetRegistry.h
> ===================================================================
> --- include/llvm/Support/TargetRegistry.h
> +++ include/llvm/Support/TargetRegistry.h
> @@ -142,6 +142,15 @@
> raw_pwrite_stream &OS,
> MCCodeEmitter *Emitter,
> bool RelaxAll);
> + typedef MCStreamer *(*AsmStreamerCtorTy)(MCContext &Ctx,
> + std::unique_ptr<formatted_raw_ostream> OS,
> + bool IsVerboseAsm,
> + bool UseDwarfDirectory,
> + MCInstPrinter *InstPrint,
> + MCCodeEmitter *CE,
> + MCAsmBackend *TAB,
> + bool ShowInst);
> +
> typedef MCTargetStreamer *(*NullTargetStreamerCtorTy)(MCStreamer &S);
> typedef MCTargetStreamer *(*AsmTargetStreamerCtorTy)(
> MCStreamer &S, formatted_raw_ostream &OS, MCInstPrinter *InstPrint,
> @@ -229,6 +238,10 @@
> MachOStreamerCtorTy MachOStreamerCtorFn;
> ELFStreamerCtorTy ELFStreamerCtorFn;
>
> + /// AsmStreamerCtorFn - Construction function for this target's
> + /// AsmStreamer, if registered (default = llvm::createAsmStreamer).
> + AsmStreamerCtorTy AsmStreamerCtorFn;
> +
> /// Construction function for this target's null TargetStreamer, if
> /// registered (default = nullptr).
> NullTargetStreamerCtorTy NullTargetStreamerCtorFn;
> @@ -252,7 +265,8 @@
> public:
> Target()
> : COFFStreamerCtorFn(nullptr), MachOStreamerCtorFn(nullptr),
> - ELFStreamerCtorFn(nullptr), NullTargetStreamerCtorFn(nullptr),
> + ELFStreamerCtorFn(nullptr), AsmStreamerCtorFn(nullptr),
> + NullTargetStreamerCtorFn(nullptr),
> AsmTargetStreamerCtorFn(nullptr), ObjectTargetStreamerCtorFn(nullptr),
> MCRelocationInfoCtorFn(nullptr), MCSymbolizerCtorFn(nullptr) {}
>
> @@ -472,9 +486,18 @@
> MCInstPrinter *InstPrint, MCCodeEmitter *CE,
> MCAsmBackend *TAB, bool ShowInst) const {
> formatted_raw_ostream &OSRef = *OS;
> - MCStreamer *S = llvm::createAsmStreamer(Ctx, std::move(OS), IsVerboseAsm,
> - UseDwarfDirectory, InstPrint, CE,
> - TAB, ShowInst);
> +
> + MCStreamer *S;
> + if (AsmStreamerCtorFn) {
> + S = AsmStreamerCtorFn(Ctx, std::move(OS), IsVerboseAsm,
> + UseDwarfDirectory, InstPrint, CE,
> + TAB, ShowInst);
> + } else {
> + S = llvm::createAsmStreamer(Ctx, std::move(OS), IsVerboseAsm,
> + UseDwarfDirectory, InstPrint, CE,
> + TAB, ShowInst);
> + }
> +
> createAsmTargetStreamer(*S, OSRef, InstPrint, IsVerboseAsm);
> return S;
> }
> @@ -808,6 +831,19 @@
> T.ELFStreamerCtorFn = Fn;
> }
>
> + /// RegisterAsmStreamer - Register an assembly MCStreamer implementation
> + /// for the given target.
> + ///
> + /// Clients are responsible for ensuring that registration doesn't occur
> + /// while another thread is attempting to access the registry. Typically
> + /// this is done by initializing all targets at program startup.
> + ///
> + /// @param T - The target being registered.
> + /// @param Fn - A function to construct an MCStreamer for the target.
> + static void RegisterAsmStreamer(Target &T, Target::AsmStreamerCtorTy Fn) {
> + T.AsmStreamerCtorFn = Fn;
> + }
> +
> static void RegisterNullTargetStreamer(Target &T,
> Target::NullTargetStreamerCtorTy Fn) {
> T.NullTargetStreamerCtorFn = Fn;
>
>
More information about the llvm-commits
mailing list