libunwind-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Libunwind-devel] Remote unwinding support for perf on MIPS


From: Sergey Korolev
Subject: Re: [Libunwind-devel] Remote unwinding support for perf on MIPS
Date: Sun, 29 Jul 2018 20:24:48 +0300

In my opinion a mentioned patch [1] does not work properly
since it defines _UPT_reg_offset elements as

+    [UNW_MIPS_R0]  =  0,
+    [UNW_MIPS_R1]  =  1,
+    [UNW_MIPS_R2]  =  2,
+    [UNW_MIPS_R3]  =  3,
+    [UNW_MIPS_R4]  =  4,
+    [UNW_MIPS_R5]  =  5,
+    [UNW_MIPS_R6]  =  6,
+    [UNW_MIPS_R7]  =  7,
+    [UNW_MIPS_R8]  =  8,
+    [UNW_MIPS_R9]  =  9,
+    [UNW_MIPS_R10] = 10,
+    [UNW_MIPS_R11] = 11,
+    [UNW_MIPS_R12] = 12,
+    [UNW_MIPS_R13] = 13,
+    [UNW_MIPS_R14] = 14,
+    [UNW_MIPS_R15] = 15,
+    [UNW_MIPS_R16] = 16,
+    [UNW_MIPS_R17] = 17,
+    [UNW_MIPS_R18] = 18,
+    [UNW_MIPS_R19] = 19,
+    [UNW_MIPS_R20] = 20,
+    [UNW_MIPS_R21] = 21,
+    [UNW_MIPS_R22] = 22,
+    [UNW_MIPS_R23] = 23,
+    [UNW_MIPS_R24] = 24,
+    [UNW_MIPS_R25] = 25,
+    [UNW_MIPS_R26] = 26,
+    [UNW_MIPS_R27] = 27,
+    [UNW_MIPS_R28] = 28,
+    [UNW_MIPS_R29] = 29,
+    [UNW_MIPS_R30] = 30,
+    [UNW_MIPS_R31] = 31,
+    [UNW_MIPS_PC]  = 64,

but a code in _UPT_access_mem.c expects that _UPT_reg_offset
is a byte offset, and not a word offset or a register index.

[1] http://git.savannah.gnu.org/gitweb/?p=libunwind.git;a=commit;h=2a5d1a629634b3225fccb1ed8a0a765bccc77f2e

On Sun, Jul 29, 2018 at 6:18 PM, Sapir Natan <address@hidden> wrote:

Hi,

 

We are trying to obtain a callgraph using ‘perf’ utility, while running on MIPS architecture with linux 3.10 (64Bit processes)

We wish to obtain callgraph on:

·         Terminated processes

·         Running processes (using –p <pid>)

 

Following the resolution that perf is unable to create callgraph on MIPS using frame pointer, we tried using libunwind

Since ‘dwarf’ option for perf isn’t part of linux 3.10 (or any other version), we added a patch (composed of the following 3 patches):

·         https://www.linux-mips.org/archives/linux-mips/2013-05/msg00123.html

·         https://www.linux-mips.org/archives/linux-mips/2013-05/msg00115.html

·         https://www.linux-mips.org/archives/linux-mips/2016-04/msg00003.html

·         As part of the patch we also linked ‘perf’ with ‘libunwind’ (open source version 1.2.1).

 

This patch added the ‘dwarf’ capability to ‘perf’ on MIPS, however we still couldn’t obtain a usable callgraph (most functions had no trace)

The problem we encountered was that when reaching ‘maps__find´ function (linux/tools/perf/util/map.c), the binary search for the required entry failed (could not be located)

From our investigation, we can support local unwinding but not remote (which is the type of unwinding required by ‘perf’)

 

Checking online we saw on ‘libunwind’ NEWS: ‘** Mips remote unwind support’ for version 1.3.

We replaced our ‘1.2.1’ version with ‘1.3-rc1’ and re-checked, however the results remained the same (no callgraph).

 

Could you please assist?

·         What was the issue you encountered that the fix in 1.3 version resolved?

·         Can the new addition enable ‘perf’ to support callgraph on MIPS?

·         Did we miss anything in our steps (as described above)?

·         Can you advice on the next steps?

 

Thanks,

Sapir

 


_______________________________________________
Libunwind-devel mailing list
address@hidden
https://lists.nongnu.org/mailman/listinfo/libunwind-devel



reply via email to

[Prev in Thread] Current Thread [Next in Thread]