~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/tools/perf/arch/arm/tests/regs_load.S

Version: ~ [ linux-6.11-rc3 ] ~ [ linux-6.10.4 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.45 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.104 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.164 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.223 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.281 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.319 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /* SPDX-License-Identifier: GPL-2.0 */
  2 #include <linux/linkage.h>
  3 
  4 #define R0 0x00
  5 #define R1 0x08
  6 #define R2 0x10
  7 #define R3 0x18
  8 #define R4 0x20
  9 #define R5 0x28
 10 #define R6 0x30
 11 #define R7 0x38
 12 #define R8 0x40
 13 #define R9 0x48
 14 #define SL 0x50
 15 #define FP 0x58
 16 #define IP 0x60
 17 #define SP 0x68
 18 #define LR 0x70
 19 #define PC 0x78
 20 
 21 /*
 22  * Implementation of void perf_regs_load(u64 *regs);
 23  *
 24  * This functions fills in the 'regs' buffer from the actual registers values,
 25  * in the way the perf built-in unwinding test expects them:
 26  * - the PC at the time at the call to this function. Since this function
 27  *   is called using a bl instruction, the PC value is taken from LR.
 28  * The built-in unwinding test then unwinds the call stack from the dwarf
 29  * information in unwind__get_entries.
 30  *
 31  * Notes:
 32  * - the 8 bytes stride in the registers offsets comes from the fact
 33  * that the registers are stored in an u64 array (u64 *regs),
 34  * - the regs buffer needs to be zeroed before the call to this function,
 35  * in this case using a calloc in dwarf-unwind.c.
 36  */
 37 
 38 .text
 39 .type perf_regs_load,%function
 40 SYM_FUNC_START(perf_regs_load)
 41         str r0, [r0, #R0]
 42         str r1, [r0, #R1]
 43         str r2, [r0, #R2]
 44         str r3, [r0, #R3]
 45         str r4, [r0, #R4]
 46         str r5, [r0, #R5]
 47         str r6, [r0, #R6]
 48         str r7, [r0, #R7]
 49         str r8, [r0, #R8]
 50         str r9, [r0, #R9]
 51         str sl, [r0, #SL]
 52         str fp, [r0, #FP]
 53         str ip, [r0, #IP]
 54         str sp, [r0, #SP]
 55         str lr, [r0, #LR]
 56         str lr, [r0, #PC]       // store pc as lr in order to skip the call
 57                                 //  to this function
 58         mov pc, lr
 59 SYM_FUNC_END(perf_regs_load)

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php