2016-11-04 4 views
0

ein Programm wie dieses gegeben drucken:die dynamischen Funktionsnamen in LLVM

int gcd(para) {...} 
int main() { 
    ... 
    int a = gcd(para1); 
    int b = gcd(para2); 
    return 1; 
} 

ich den Code zum Instrument wollen und die Funktionsnamen drucken, die in der Reihenfolge ausgeführt werden: das heißt main(), gcd() , gcd().

Das Problem ist, ich weiß nicht, wie Sie den Funktionsnamen als Argument an die Hilfsfunktion übergeben.

ich folgendes geschrieben: Für Hilfsfunktion: Ich benutze: void printDynamicFuncName(char* FName) {}

Für Pass: Ich benutze:

Type* Int8 = Type::getInt8PtrTy(context); 
Function *CalleeF = cast<Function>(F.getParent()->getOrInsertFunction("_Z20printDynamicFuncNamePc", Void, Int8, NULL)); 
Constant* arg = ConstantDataArray::getString(context, F.getName()); 
Builder.CreateCall(CalleeF, arg); 

Antwort

0

ich es selbst bekam!

konnte ich verwenden:

Type* Int8 = Type::getInt8PtrTy(context); 
static IRBuilder<> Builder(context); 
Instruction *I = &*inst_begin(F); 
Function *CalleeF = cast<Function>(F.getParent() ->getOrInsertFunction("_Z20printDynamicFuncNamePc", Void, Int8, NULL)); 
Builder.SetInsertPoint(I); 
Builder.CreateCall(CalleeF, Builder.CreateGlobalStringPtr(F.getName()), ""); 

Während in der Hilfsfunktion:

void printDynamicFuncName(char* FName) { 
     errs() << "Function Name is " << FName << "\n"; 
    }