songlh at cs.wisc.edu
2011-Jan-26 20:07 UTC
[LLVMdev] [LLVMDEV]How could I get function name in this situation?
Hi: My llvm code is: for( BasicBlock::iterator i = b->begin() , ie = b->end(); b != be ; b ++ ){ if( CallInst * pCall = dyn_cast<CallInst>(i)){ pCall->dump(); // Function * pFunction = pCall->getCalledFunction(); if( !pFunction ){ } std::string fname = pFunction->getName(); } } The dump result of the function call I want to find is : call void %7(%struct.nsAString* %8, i32 0) nounwind, !dbg !1565 it returns null from pCall->getCalledFunction(), and I cannot get the function name. How could I get the function name in this situation? thanks a lot! Linhai
John Criswell
2011-Jan-26 20:11 UTC
[LLVMdev] [LLVMDEV]How could I get function name in this situation?
On 1/26/11 2:07 PM, songlh at cs.wisc.edu wrote:> Hi: > > My llvm code is: > > for( BasicBlock::iterator i = b->begin() , ie = b->end(); > b != be ; b ++ ){ > if( CallInst * pCall = dyn_cast<CallInst>(i)){ > > pCall->dump(); // > Function * pFunction = pCall->getCalledFunction(); > if( !pFunction ){ > > } > std::string fname = pFunction->getName(); > } > } > > The dump result of the function call I want to find is : > > call void %7(%struct.nsAString* %8, i32 0) nounwind, !dbg !1565This is a call using a function pointer. There is no function name to retrieve. You can check the called value (pcall->getCalledValue()) and see if it's something like a cast instruction that casts a constant function value, but that case is probably unlikely. -- John T.> it returns null from pCall->getCalledFunction(), and I cannot get the > function name. > > How could I get the function name in this situation? > > thanks a lot! > > Linhai > > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
songlh at cs.wisc.edu
2011-Jan-26 20:40 UTC
[LLVMdev] [LLVMDEV]How could I get function name in this situation?
thanks! After I check the ll file, I find this: %1 = load %struct.nsAString** %aBuf_addr, align 4, !dbg !2048 %2 = getelementptr inbounds %struct.nsAString* %1, i32 0, i32 0, !dbg !2048 %3 = getelementptr inbounds %struct.nsISupports* %2, i32 0, i32 0, !dbg !2048 %4 = load i32 (...)*** %3, align 4, !dbg !2048 %5 = getelementptr inbounds i32 (...)** %4, i32 10, !dbg !2048 %6 = load i32 (...)** %5, align 1, !dbg !2048 %7 = bitcast i32 (...)* %6 to void (%struct.nsAString*, i32)*, !dbg !2048 %8 = load %struct.nsAString** %aBuf_addr, align 4, !dbg !2048 call void %7(%struct.nsAString* %8, i32 0) nounwind, !dbg !2048 The last line is the CallInst I find. I feel it is using memory address to get the function. Is there someway I can do this in my c++ code?? thanks a lot!> On 1/26/11 2:07 PM, songlh at cs.wisc.edu wrote: >> Hi: >> >> My llvm code is: >> >> for( BasicBlock::iterator i = b->begin() , ie = b->end(); >> b != be ; b ++ ){ >> if( CallInst * pCall = dyn_cast<CallInst>(i)){ >> >> pCall->dump(); // >> Function * pFunction = pCall->getCalledFunction(); >> if( !pFunction ){ >> >> } >> std::string fname = pFunction->getName(); >> } >> } >> >> The dump result of the function call I want to find is : >> >> call void %7(%struct.nsAString* %8, i32 0) nounwind, !dbg !1565 > > This is a call using a function pointer. There is no function name to > retrieve. You can check the called value (pcall->getCalledValue()) and > see if it's something like a cast instruction that casts a constant > function value, but that case is probably unlikely. > > -- John T. > >> it returns null from pCall->getCalledFunction(), and I cannot get the >> function name. >> >> How could I get the function name in this situation? >> >> thanks a lot! >> >> Linhai >> >> _______________________________________________ >> LLVM Developers mailing list >> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu >> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev > >
Possibly Parallel Threads
- [LLVMdev] [LLVMDEV]How could I get function name in this situation?
- [LLVMdev] [LLVMDEV]How could I get function name in this situation?
- [LLVMdev] [LLVMDEV]How could I get function name in this situation?
- [LLVMdev] [LLVMDEV]How could I get function name in this situation?
- [LLVMdev] [LLVMDEV]How could I get function name in this situation?