[LLVMdev] [LLVMDEV]How could I get function name in this situation?

songlh at cs.wisc.edu songlh at cs.wisc.edu
Wed Jan 26 13:00:48 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.
>

I mean how do I realize this in a c++ pass code?

thanks a lot!

           Linhai

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