On 08/10/2011 12:24 AM, Holger Hans Peter Freyther wrote:
I wanted to use perf to profile my userspace application on MIPS but I saw
that there is no solution for that. I have written some code to scan the
prologue of the function to identify the stack size and where in the stack the
return address is stored.
0: 27bdffd8 addiu sp,sp,-40<-- used to find prev. stack
4: afbf0024 sw ra,36(sp)<-- stored return addr.
8: afbe0020 sw s8,32(sp)
c: 03a0f021 move s8,sp
10: 3c1c0000 lui gp,0x0
14: 279c0000 addiu gp,gp,0
The code appears to work in qemu-system-mipsel (not where I am going to do my
profiling) with my simple test application.
The code is missing a S-o-b because I would like to get feedback if something
like this would ever be accepted upstream. The other question is also about
security, other ABIs, 32/64 bit...
comments more than welcome
You need to reconcile your patches with these:
We probably could use some sort of backtrace code in the kernel, but
three seperate implementations are too many.
Also separating most of the unwinder into a separate file would be
preferable to mixing it into the perf counter driver.