2016-11-04 3 views
0

에 동적 함수 이름을 인쇄 :이 같은 프로그램을 감안할 때 LLVM

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

내가 코드를 기기에 원하는 순서대로 실행 될 함수 이름을 인쇄 : 즉, 주(), GCD() , gcd().

문제는 도우미 함수의 인수로 함수 이름을 전달하는 방법을 모르겠다는 것입니다.

나는 다음과 같은 쓴

: 도우미 함수를 들면 : 내가 사용 void printDynamicFuncName(char* FName) {} 패스를 들어

: 내가 사용

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); 

답변

0

내가 나 자신있어!

내가 사용할 수 있습니다

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()), ""); 

동안 도우미 함수 :

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