From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 12920 invoked by alias); 26 Jun 2012 20:21:11 -0000 Received: (qmail 12909 invoked by uid 22791); 26 Jun 2012 20:21:07 -0000 X-SWARE-Spam-Status: No, hits=-2.6 required=5.0 tests=AWL,BAYES_00,KHOP_THREADED,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from oarmail.oarcorp.com (HELO OARmail.OARCORP.com) (67.63.146.244) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 26 Jun 2012 20:20:52 +0000 Received: from iceland.oarcorp.com (192.168.1.171) by OARmail.OARCORP.com (192.168.2.2) with Microsoft SMTP Server (TLS) id 8.1.436.0; Tue, 26 Jun 2012 15:20:50 -0500 Message-ID: <4FEA19A2.10303@oarcorp.com> Date: Tue, 26 Jun 2012 20:21:00 -0000 From: Joel Sherrill User-Agent: Mozilla/5.0 (X11; Linux i686; rv:10.0.5) Gecko/20120607 Thunderbird/10.0.5 MIME-Version: 1.0 To: "Yann E. MORIN" CC: "crossgcc@sourceware.org" , Mirko Banchi , Zvi Vered Subject: Re: How can I modify the source of new,malloc References: <8347C635-3CB0-4967-8BCB-5AA28FC204B1@gmail.com> <201206262214.37680.yann.morin.1998@free.fr> In-Reply-To: <201206262214.37680.yann.morin.1998@free.fr> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit Mailing-List: contact crossgcc-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: crossgcc-owner@sourceware.org X-SW-Source: 2012-06/txt/msg00051.txt.bz2 On 06/26/2012 03:14 PM, Yann E. MORIN wrote: > Zvi, Mirko, All, > > [Please, do not top-post...] > > On Tuesday 26 June 2012 00:28:09 Mirko Banchi wrote: >> Il giorno 25/giu/2012, alle ore 23.55, Zvi Vered >> ha scritto: >>> I have a huge application (not written by me). >>> I want to track all places where a dynamic allocation is done. >>> Is there an alternative to my way ? >> You could write your own shared object with your malloc implementation >> and use LD_PRELOAD var. > As Mirko suggested, I'd use a loader trick to pre-load a shared lib that > overrides the malloc() and free() functions. Something like (untested!): > > void* malloc( size_t size ) > { > static void* real_malloc; > > if( ! real_malloc ) { > real_malloc = dlsym( RTLD_NEXT, "malloc" ); > if( ! real_malloc ) { > panic_and_exit(); > } > } > fprintf( stderr, "Allocating %d bytes\n", size ); > return real_malloc( size ); > } > > Then, replacing printf with calls to backtrace(3) and backtrace_symbols_fd(3), > you can know the caller (function, offset), if you have the debug symbols in > the binaries (libs and executable), in which case you can post-process that > to find the actual file, function and line at which the call to malloc is > made. > > (Note: do not use backtrace_symbols(3), as it calls malloc! So you have > to use backtrace_symbols_fd(3)). > > Then, you can write such wrappers to free(3) and so on... > > Note however, that if you can recompile your application, you may want to > link with a library like DUMA or dmalloc instead of using the above trick. > http://duma.sourceforge.net/ > http://dmalloc.com/ > > Which can be installed in the toolshain's sysroot by crosstool-NG ( I leave > it up to you to find in which sub-menu these libs' options live! ;-) ) You may also be able to use the "--wrap=symbol" option on ld. I have used this to provide malloc and free wrappers. > > Cheers, > Yann E. MORIN. > -- Joel Sherrill, Ph.D. Director of Research& Development joel.sherrill@OARcorp.com On-Line Applications Research Ask me about RTEMS: a free RTOS Huntsville AL 35805 Support Available (256) 722-9985 -- For unsubscribe information see http://sourceware.org/lists.html#faq