[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