[LLVMdev] How do I find all memory allocations in an llvm ir code file?

Olivier Meurant meurant.olivier at gmail.com
Fri Oct 15 05:19:09 PDT 2010


echo "_Znwj" | c++filt
=> operator new(unsigned int)

echo "_Znaj" | c++filt
=> operator new[](unsigned int)

So yes, they are memory allocators. Names are just mangled.

Olivier.


On Fri, Oct 15, 2010 at 1:37 PM, Theresia Hansson <
theresia.hansson at gmail.com> wrote:

> I tried to compile this snippet of C++ code:
>
> void FuncTest() {
>     int* a = new int;
>     int* b = new int[2];
> }
>
> using:
>
> clang test.cpp -S -emit-llvm -o - > test.llvm
>
> and obtained this:
>
> define void @_Z8FuncTestv() {
> entry:
>   %a = alloca i32*, align 4
>   %b = alloca i32*, align 4
>   %call = call noalias i8* @_Znwj(i32 4)
>   %0 = bitcast i8* %call to i32*
>   store i32* %0, i32** %a, align 4
>   %call1 = call noalias i8* @_Znaj(i32 8)
>   %1 = bitcast i8* %call1 to i32*
>   store i32* %1, i32** %b, align 4
>   ret void
> }
>
> declare noalias i8* @_Znwj(i32)
> declare noalias i8* @_Znaj(i32)
>
> What I am wondering now is: where do the _Znwj and _Znaj symbols come
> from? Are they just randomly assigned or is there a system to it? I
> would like to be able to tell that the lines
>
> %call = call noalias i8* @_Znwj(i32 4)
>
> and
>
> %call1 = call noalias i8* @_Znaj(i32 8)
>
> perform memory allocations. But it does not look that promising...
> Some llvm expert here who has an idea?
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20101015/10744053/attachment.html>


More information about the llvm-dev mailing list