Skip to content

Commit e824217

Browse files
Audit overridden methods and restore JIT event listener (#739)
1 parent 2c6a86c commit e824217

3 files changed

Lines changed: 45 additions & 48 deletions

File tree

src/tcompiler.cpp

Lines changed: 4 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -114,8 +114,8 @@ struct DisassembleFunctionListener : public JITEventListener {
114114
}
115115
}
116116

117-
virtual void NotifyObjectEmitted(const object::ObjectFile &Obj,
118-
const RuntimeDyld::LoadedObjectInfo &L) {
117+
virtual void notifyObjectLoaded(ObjectKey K, const object::ObjectFile &Obj,
118+
const RuntimeDyld::LoadedObjectInfo &L) override {
119119
auto size_map = llvm::object::computeSymbolSizes(Obj);
120120
for (auto &S : size_map) {
121121
object::SymbolRef sym = S.first;
@@ -126,34 +126,6 @@ struct DisassembleFunctionListener : public JITEventListener {
126126
}
127127
};
128128

129-
class TerraSectionMemoryManager : public SectionMemoryManager {
130-
public:
131-
TerraSectionMemoryManager(TerraCompilationUnit *CU_in, MemoryMapper *MM = nullptr)
132-
: SectionMemoryManager(MM) {
133-
CU = CU_in;
134-
}
135-
136-
TerraSectionMemoryManager(const TerraSectionMemoryManager &) = delete;
137-
void operator=(const TerraSectionMemoryManager &) = delete;
138-
139-
void notifyObjectLoaded(ExecutionEngine *EE, const object::ObjectFile &obj) override {
140-
auto size_map = llvm::object::computeSymbolSizes(obj);
141-
for (auto &S : size_map) {
142-
object::SymbolRef sym = S.first;
143-
auto name = sym.getName();
144-
auto type = sym.getType();
145-
// printf("notify: %s %d %#010llx\n", cantFail(std::move(name)).data(),
146-
// cantFail(std::move(type)), S.second);
147-
if (name && type)
148-
static_cast<DisassembleFunctionListener *>(CU->jiteventlistener)
149-
->InitializeDebugData(name.get(), type.get(), S.second);
150-
}
151-
}
152-
153-
private:
154-
TerraCompilationUnit *CU;
155-
};
156-
157129
static double CurrentTimeInSeconds() {
158130
#ifdef _WIN32
159131
static uint64_t freq = 0;
@@ -479,11 +451,12 @@ static void InitializeJIT(TerraCompilationUnit *CU) {
479451
CodeGenOptLevel::Aggressive
480452
#endif
481453
)
482-
.setMCJITMemoryManager(std::make_unique<TerraSectionMemoryManager>(CU));
454+
.setMCJITMemoryManager(std::make_unique<SectionMemoryManager>());
483455

484456
CU->ee = eb.create();
485457
if (!CU->ee) terra_reporterror(CU->T, "llvm: %s\n", err.c_str());
486458
CU->jiteventlistener = new DisassembleFunctionListener(CU);
459+
CU->ee->RegisterJITEventListener(CU->jiteventlistener);
487460
}
488461

489462
int terra_compilerinit(struct terra_State *T) {

src/tcwrapper.cpp

Lines changed: 40 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -581,49 +581,73 @@ class CodeGenProxy : public ASTConsumer {
581581
: CG(CG_), Visitor(result, TT, livenessfunction) {}
582582
CodeGenerator *CG;
583583
IncludeCVisitor Visitor;
584-
virtual ~CodeGenProxy() {}
585-
virtual void Initialize(ASTContext &Context) {
584+
virtual ~CodeGenProxy() override {}
585+
virtual void Initialize(ASTContext &Context) override {
586586
Visitor.SetContext(&Context);
587587
CG->Initialize(Context);
588588
}
589-
virtual bool HandleTopLevelDecl(DeclGroupRef D) {
589+
virtual bool HandleTopLevelDecl(DeclGroupRef D) override {
590590
for (DeclGroupRef::iterator b = D.begin(), e = D.end(); b != e; ++b)
591591
Visitor.TraverseDecl(*b);
592592
return CG->HandleTopLevelDecl(D);
593593
}
594-
virtual void HandleInterestingDecl(DeclGroupRef D) { CG->HandleInterestingDecl(D); }
595-
virtual void HandleTranslationUnit(ASTContext &Ctx) {
594+
virtual void HandleInlineFunctionDefinition(FunctionDecl *D) override {
595+
CG->HandleInlineFunctionDefinition(D);
596+
}
597+
virtual void HandleInterestingDecl(DeclGroupRef D) override {
598+
CG->HandleInterestingDecl(D);
599+
}
600+
virtual void HandleTranslationUnit(ASTContext &Ctx) override {
596601
Decl *Decl = Visitor.GetLivenessFunction();
597602
DeclGroupRef R = DeclGroupRef::Create(Ctx, &Decl, 1);
598603
CG->HandleTopLevelDecl(R);
599604
CG->HandleTranslationUnit(Ctx);
600605
}
601-
virtual void HandleTagDeclDefinition(TagDecl *D) { CG->HandleTagDeclDefinition(D); }
602-
virtual void HandleCXXImplicitFunctionInstantiation(FunctionDecl *D) {
606+
virtual void HandleTagDeclDefinition(TagDecl *D) override {
607+
CG->HandleTagDeclDefinition(D);
608+
}
609+
virtual void HandleTagDeclRequiredDefinition(const TagDecl *D) override {
610+
CG->HandleTagDeclRequiredDefinition(D);
611+
}
612+
virtual void HandleCXXImplicitFunctionInstantiation(FunctionDecl *D) override {
603613
CG->HandleCXXImplicitFunctionInstantiation(D);
604614
}
605-
virtual void HandleTopLevelDeclInObjCContainer(DeclGroupRef D) {
615+
virtual void HandleTopLevelDeclInObjCContainer(DeclGroupRef D) override {
606616
CG->HandleTopLevelDeclInObjCContainer(D);
607617
}
608-
virtual void CompleteTentativeDefinition(VarDecl *D) {
618+
virtual void CompleteTentativeDefinition(VarDecl *D) override {
609619
CG->CompleteTentativeDefinition(D);
610620
}
611-
virtual void HandleCXXStaticMemberVarInstantiation(VarDecl *D) {
621+
#if LLVM_VERSION < 190
622+
virtual void CompleteExternalDeclaration(VarDecl *D) override {
623+
CG->CompleteExternalDeclaration(D);
624+
}
625+
#else
626+
virtual void CompleteExternalDeclaration(DeclaratorDecl *D) override {
627+
CG->CompleteExternalDeclaration(D);
628+
}
629+
#endif
630+
virtual void AssignInheritanceModel(CXXRecordDecl *RD) override {
631+
CG->AssignInheritanceModel(RD);
632+
}
633+
virtual void HandleCXXStaticMemberVarInstantiation(VarDecl *D) override {
612634
CG->HandleCXXStaticMemberVarInstantiation(D);
613635
}
614-
virtual void HandleVTable(CXXRecordDecl *RD) { CG->HandleVTable(RD); }
615-
virtual ASTMutationListener *GetASTMutationListener() {
636+
virtual void HandleVTable(CXXRecordDecl *RD) override { CG->HandleVTable(RD); }
637+
virtual ASTMutationListener *GetASTMutationListener() override {
616638
return CG->GetASTMutationListener();
617639
}
618-
virtual ASTDeserializationListener *GetASTDeserializationListener() {
640+
virtual ASTDeserializationListener *GetASTDeserializationListener() override {
619641
return CG->GetASTDeserializationListener();
620642
}
621-
virtual void PrintStats() { CG->PrintStats(); }
643+
virtual void PrintStats() override { CG->PrintStats(); }
622644

623-
virtual void HandleImplicitImportDecl(ImportDecl *D) {
645+
virtual void HandleImplicitImportDecl(ImportDecl *D) override {
624646
CG->HandleImplicitImportDecl(D);
625647
}
626-
virtual bool shouldSkipFunctionBody(Decl *D) { return CG->shouldSkipFunctionBody(D); }
648+
virtual bool shouldSkipFunctionBody(Decl *D) override {
649+
return CG->shouldSkipFunctionBody(D);
650+
}
627651
};
628652

629653
class LuaProvidedFile : public llvm::vfs::File {

src/tllvmutil.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ class PassManagerWrapper : public PassManagerBase {
6767
public:
6868
PassManagerBase *PM;
6969
PassManagerWrapper(PassManagerBase *PM_) : PM(PM_) {}
70-
virtual void add(Pass *P) {
70+
virtual void add(Pass *P) override {
7171
if (P->getPotentialPassManagerType() > PMT_CallGraphPassManager ||
7272
P->getAsImmutablePass() != NULL)
7373
PM->add(P);

0 commit comments

Comments
 (0)