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

James Molloy James.Molloy at arm.com
Fri Oct 15 05:17:05 PDT 2010


Hi,

_Znwj and friends are the C++-name-mangled versions of operator new. Because operator new is so common, the IA64 C++ ABI provided a shorthand for it.

It can be parsed as follows:

_Z: Prefix to all c++ mangled names.
nw: operator new(). The other version is "na": operator new[](). ("na"->new array).
j: unsigned int.

All of these can be found in the C++ ABI: http://www.codesourcery.com/public/cxx-abi/abi.html#mangling

You can run an identifier through the g++ tool "c++filt" to get a human-readable representation:

$ c++filt _Znwj
operator new(unsigned int)

Cheers,

James

> -----Original Message-----
> From: llvmdev-bounces at cs.uiuc.edu [mailto:llvmdev-bounces at cs.uiuc.edu]
> On Behalf Of Theresia Hansson
> Sent: 15 October 2010 12:38
> To: llvmdev at cs.uiuc.edu
> Subject: [LLVMdev] How do I find all memory allocations in an llvm ir
> codefile?
> 
> 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
-- 
IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium.  Thank you.




More information about the llvm-dev mailing list