[vmkit-commits] [vmkit] r200653 - A function to emit function names (char*)

Gael Thomas gael.thomas at lip6.fr
Sun Feb 2 13:04:23 PST 2014


Author: gthomas
Date: Sun Feb  2 15:04:23 2014
New Revision: 200653

URL: http://llvm.org/viewvc/llvm-project?rev=200653&view=rev
Log:
A function to emit function names (char*)

Modified:
    vmkit/branches/mcjit/include/vmkit/safepoint.h
    vmkit/branches/mcjit/lib/vmkit/compiler.cc
    vmkit/branches/mcjit/lib/vmkit/safepoint.cc

Modified: vmkit/branches/mcjit/include/vmkit/safepoint.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/vmkit/safepoint.h?rev=200653&r1=200652&r2=200653&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/vmkit/safepoint.h (original)
+++ vmkit/branches/mcjit/include/vmkit/safepoint.h Sun Feb  2 15:04:23 2014
@@ -10,7 +10,7 @@ namespace llvm {
 namespace vmkit {
 	class CompilationUnit;
 
-	class Safepoint { /* directly in the data sections */
+	class Safepoint { /* Warning: directly generated by safepoint.cc in the data sections */
 		void*            _addr;
 		const char*      _functionName;
 		CompilationUnit* _unit;

Modified: vmkit/branches/mcjit/lib/vmkit/compiler.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/vmkit/compiler.cc?rev=200653&r1=200652&r2=200653&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/vmkit/compiler.cc (original)
+++ vmkit/branches/mcjit/lib/vmkit/compiler.cc Sun Feb  2 15:04:23 2014
@@ -187,7 +187,7 @@ void CompilationUnit::compileModule(llvm
 		sf->setUnit(this);
 		vm->addSafepoint(sf);
 
-		//vm()->getSafepoint(sf->addr())->dump();
+		Thread::get()->vm()->getSafepoint(sf->addr())->dump();
 		sf = sf->getNext();
 	}
 }

Modified: vmkit/branches/mcjit/lib/vmkit/safepoint.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/vmkit/safepoint.cc?rev=200653&r1=200652&r2=200653&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/vmkit/safepoint.cc (original)
+++ vmkit/branches/mcjit/lib/vmkit/safepoint.cc Sun Feb  2 15:04:23 2014
@@ -44,6 +44,7 @@ namespace vmkit {
   };
 
   class VmkitGCMetadataPrinter : public llvm::GCMetadataPrinter {
+		const llvm::MCExpr* emitName(llvm::AsmPrinter &AP, llvm::StringRef str, unsigned int* num);
   public:
     void beginAssembly(llvm::AsmPrinter &AP) {}
     void finishAssembly(llvm::AsmPrinter &AP);
@@ -92,33 +93,31 @@ bool VmkitGCPass::findCustomSafePoints(l
 	return false;
 }
 
+const llvm::MCExpr* VmkitGCMetadataPrinter::emitName(llvm::AsmPrinter &AP, llvm::StringRef str, unsigned int* num) {
+	AP.OutStreamer.SwitchSection(AP.getObjFileLowering().getSectionForConstant(llvm::SectionKind::getMergeable1ByteCString()));
+	llvm::SmallString<256> id("gcFunc");
+	id += (*num)++;
+
+	llvm::MCSymbol *sym = AP.OutContext.GetOrCreateSymbol(id);
+	AP.OutStreamer.EmitLabel(sym);
+			
+	uint32_t len = str.size();
+	for(uint32_t n=0; n<len; n++)
+		AP.EmitInt8(str.data()[n]);
+	AP.EmitInt8(0);
+
+	AP.OutStreamer.SwitchSection(AP.getObjFileLowering().getDataSection());
+
+	return llvm::MCSymbolRefExpr::Create(sym, AP.OutStreamer.getContext());
+}
+
 /*
  *    VmkitGCMetadataPrinter
  */
 void VmkitGCMetadataPrinter::finishAssembly(llvm::AsmPrinter &AP) {
 	unsigned IntPtrSize = AP.TM.getDataLayout()->getPointerSize(0);
-	uint32_t i = 0;
+	uint32_t funcNumber = 0;
 		
-	AP.OutStreamer.AddComment("--- function names for the frame tables ---");
-	AP.OutStreamer.AddBlankLine();
-	AP.OutStreamer.SwitchSection(AP.getObjFileLowering().getSectionForConstant(llvm::SectionKind::getMergeable1ByteCString()));
-	for (iterator I = begin(), IE = end(); I != IE; ++I, i++) {
-		llvm::GCFunctionInfo* gcInfo = *I;
-		if(gcInfo->getFunction().hasGC()) {
-			llvm::SmallString<256> id("gcFunc");
-			id += i;
-
-			llvm::MCSymbol *sym = AP.OutContext.GetOrCreateSymbol(id);
-			AP.OutStreamer.EmitLabel(sym);
-			
-			llvm::StringRef ref = gcInfo->getFunction().getName();
-			uint32_t len = ref.size();
-			for(uint32_t n=0; n<len; n++)
-				AP.EmitInt8(ref.data()[n]);
-			AP.EmitInt8(0);
-		}
-	}
-
 	AP.OutStreamer.SwitchSection(AP.getObjFileLowering().getDataSection());
 
 	llvm::SmallString<256> symName("_");
@@ -134,18 +133,11 @@ void VmkitGCMetadataPrinter::finishAssem
 	AP.OutStreamer.AddBlankLine();
 	AP.OutStreamer.EmitLabel(sym);		
 
-	i = 0;
-	for (iterator I = begin(), IE = end(); I != IE; ++I, i++) {
+	for (iterator I = begin(), IE = end(); I != IE; ++I) {
 		llvm::GCFunctionInfo* gcInfo = *I;
 			
 		if(gcInfo->getFunction().hasGC()) {
-			AP.OutStreamer.AddComment("live roots for " + llvm::Twine(gcInfo->getFunction().getName()));
-			AP.OutStreamer.AddBlankLine();
-
-			llvm::SmallString<256> id("gcFunc");
-			id += i;
-
-			const llvm::MCExpr* funcName = llvm::MCSymbolRefExpr::Create(AP.OutContext.GetOrCreateSymbol(id), AP.OutStreamer.getContext());
+			const llvm::MCExpr* funcName = emitName(AP, gcInfo->getFunction().getName(), &funcNumber);
 
 			for(llvm::GCFunctionInfo::iterator safepoint=gcInfo->begin(); safepoint!=gcInfo->end(); safepoint++) {
 				llvm::DebugLoc* debug = &safepoint->Loc;
@@ -164,7 +156,6 @@ void VmkitGCMetadataPrinter::finishAssem
 
 					llvm::DILocation   loc(inlinedAt);
 					llvm::DISubprogram il(loc.getScope());
-					
 
 					if(strcmp(gcInfo->getFunction().getName().data(), il.getName().data()))
 						abort();





More information about the vmkit-commits mailing list