This is the mail archive of the cygwin-patches mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: tracing malloc/free call


On 1/16/2015 5:22 PM, Corinna Vinschen wrote:
On Jan 16 16:44, Corinna Vinschen wrote:
On Jan 16 15:23, Marco Atzeri wrote:
Attached patch that allows tracking of original caller,
for the 4 memory allocation calls.

Thanks for the patch, but it won't work nicely either this way.  The
problem is that, in theory, the code has to differ between internal and
external callers.  Internal callers (that is, Cygwin functions itself)
don't hop into the function via _sigfe/_sigbe.  Thus the output for
internal callers of malloc/free is now wrong with your patch.

I missed that point. ;-)
First time I look at these inside details of cygwin

The solution for this problem would be a test which checks if the return
address is the _sigbe function and if so, returns *(_my_tls.stackptr-1),
otherwise __builtin_return_address(0).  However, the symbol _sigbe is
not exported since, so far, it was only used inside _sigfe.  This needs
a bit of tweaking.  I'll have a look.

I applied a patch to print the right caller address.  I created a new
macro caller_return_address() for reuse, should we have a desire to
print the caller address in other parts of the code.

I'm going to create a snapshot with this change.  Please give it
a try.

It works like charm.
Much more easy to find misalignment between
malloc/calloc/realloc and free calls

Thanks,
Corinna



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]