[LLVMdev] [LLVMDEV]How could I get function name in this situation?
John Criswell
criswell at illinois.edu
Wed Jan 26 12:55:35 PST 2011
On 1/26/11 2:40 PM, songlh at cs.wisc.edu wrote:
> 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??
Yes, the code is loading a pointer to a function from memory and calling it.
I don't understand your question, though.
-- John T.
> 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
>>
>
More information about the llvm-dev
mailing list