From edfe776ac29d9fd48ae8967f6742400aad65e39c Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Thu, 28 Jan 2010 01:58:58 +0000 Subject: [PATCH] add target hooks for emitting random gunk before and after the function body. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@94732 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/CodeGen/AsmPrinter.h | 8 ++++++++ lib/CodeGen/AsmPrinter/AsmPrinter.cpp | 6 ++++++ 2 files changed, 14 insertions(+) diff --git a/include/llvm/CodeGen/AsmPrinter.h b/include/llvm/CodeGen/AsmPrinter.h index 487c5422c3b..ba7d1385ff9 100644 --- a/include/llvm/CodeGen/AsmPrinter.h +++ b/include/llvm/CodeGen/AsmPrinter.h @@ -233,6 +233,14 @@ namespace llvm { assert(0 && "EmitInstruction not implemented"); } + /// EmitFunctionBodyStart - Targets can override this to emit stuff before + /// the first basic block in the function. + virtual void EmitFunctionBodyStart() {} + + /// EmitFunctionBodyEnd - Targets can override this to emit stuff after + /// the last basic block in the function. + virtual void EmitFunctionBodyEnd() {} + /// EmitConstantPool - Print to the current output stream assembly /// representations of the constants in the constant pool MCP. This is /// used to print out constants which have been "spilled to memory" by diff --git a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp index e97e9bd251b..36aa748426e 100644 --- a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp +++ b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp @@ -344,6 +344,9 @@ void AsmPrinter::EmitFunctionEntryLabel() { /// EmitFunctionBody - This method emits the body and trailer for a /// function. void AsmPrinter::EmitFunctionBody() { + // Emit target-specific gunk before the function body. + EmitFunctionBodyStart(); + // Print out code for the function. bool HasAnyRealCode = false; for (MachineFunction::const_iterator I = MF->begin(), E = MF->end(); @@ -378,6 +381,9 @@ void AsmPrinter::EmitFunctionBody() { if (MAI->hasSubsectionsViaSymbols() && !HasAnyRealCode) OutStreamer.EmitIntValue(0, 1, 0/*addrspace*/); + // Emit target-specific gunk after the function body. + EmitFunctionBodyEnd(); + if (MAI->hasDotTypeDotSizeDirective()) O << "\t.size\t" << *CurrentFnSym << ", .-" << *CurrentFnSym << '\n';