On Wed, Dec 12, 2012 at 4:02 PM, Manavendra Nath Manav <mnm.kernel@xxxxxxxxx> wrote: > On Wed, Dec 12, 2012 at 3:56 PM, Fabio Pozzi <pozzi.fabio@xxxxxxxxx> wrote: >>> Why function arguments are stored from offset 12 of SP? Also notice >>> values at offset 0 to 10 are always same, and value at offset 11 >>> increases by 20 on each invocation of function foo(). >> >> You have to consider that local variables are allocated on the stack, >> thus both i, stackptr and sp are allocated on >> the stack, so if you print all the stack records you will find this >> variables, then the return pointer, the saved frame pointer (if saved) >> and then the function parameters. >> See http://en.wikipedia.org/wiki/Call_stack for a better explanation. >> If you want to access immediately to the function call parameters you >> should start from the frame pointer address (if there's one). >> To play with backtraces you may find useful the backtrace function[1] >> and libraries like libunwind[2] which take care of this details for >> you. >> >> [1] http://tdistler.com/2008/11/15/how-to-print-a-stack-backtrace-programatically-in-linux >> [2] http://www.nongnu.org/libunwind/ >> >> -- >> Saluti, >> Fabio Pozzi > > Thanks Fabio, > You solved a lot of doubts for me. How to get the frame pointer address? I found that gcc has in-build function to retrieve frame pointer address void * __builtin_frame_address (unsigned int level) When i call print values at offsets starting from __builtin_frame_address (0) the function arguments start from offset 2. How can I confirm that this behavior is always consistent. -- Manavendra Nath Manav _______________________________________________ Kernelnewbies mailing list Kernelnewbies@xxxxxxxxxxxxxxxxx http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies