[Lldb-commits] Question about IRMemoryMap Malloc

Kopec, Matt matt.kopec at intel.com
Wed Apr 24 14:02:24 PDT 2013


Hi Sean,

Can you explain what is being achieved with this line in IRMemoryMap::Malloc?

239    size_t          allocation_size = (size ? size : 1) + alignment - 1;  

If this is attempting size alignment, it's incorrect. It looks like additional bytes are being set for the allocation size for some reason? This is causing problems on Linux and some expressions are exhibiting strange behaviour, for instance:

Current executable set to 'a.out' (x86_64).
(lldb) b main
Breakpoint 1: where = a.out`main + 30 at main.cpp:14, address = 0x000000000040065e
(lldb) r
Process 21544 launched: '/home/mkopec1/dev/llvm/tools/lldb/test/expression_command/test/a.out' (x86_64)
Process 21544 stopped
* thread #1: tid = 0x5428, 0x000000000040065e a.out`main(argc=1, argv=0x00007fff914a0fe8) + 30 at main.cpp:14, stop reason = breakpoint 1.1
    frame #0: 0x000000000040065e a.out`main(argc=1, argv=0x00007fff914a0fe8) + 30 at main.cpp:14
   11  	
   12  	int main (int argc, char const *argv[])
   13  	{
-> 14  	    printf ("Hello world!\n");
   15  	    puts ("hello");
   16  	    // Please test many expressions while stopped at this line:
   17  	#if 0
(lldb) expression (int*)argv                                                                                                                                                                                         
(int *) $0 = 0x00007fff914a0fe8
(lldb) expression ((char**)environ)[0]                                                                                                                                                                               
(char *) $1 = 0x00007fff914a13b9 "SSH_AGENT_PID=1921"
(lldb) expression int i = 5; i                                                                                                                                                                                       
(int) $2 = 5
(lldb) expression $2 + 1                                                                                                                                                                                             
(int) $3 = 32531
(lldb)

The value of $3 is wrong. I did a little debugging and it looks like some allocated data is getting overwritten incorrectly during execution.  However, if I align the size requested in Malloc, it works fine on Linux. It just so happens this case I've tested, the sizes were already aligned.

Any thoughts?

Thanks,
Matt



More information about the lldb-commits mailing list