diff options
| author | Anshuman Khandual <khandual@linux.vnet.ibm.com> | 2016-09-29 22:32:52 -0400 |
|---|---|---|
| committer | Michael Ellerman <mpe@ellerman.id.au> | 2016-11-17 01:11:48 -0500 |
| commit | f666ad413db6f7fbfaeec6b11ed6f8e4b60dda38 (patch) | |
| tree | 44102ca80b9e9edc89fae71976a7f865bf62acd0 /tools/testing | |
| parent | 15ec3997aa3bffc461f7b47ca9365d4b0323c671 (diff) | |
selftests/powerpc: Add ptrace tests for GPR/FPR registers
This patch adds ptrace interface test for GPR/FPR registers.
This adds ptrace interface based helper functions related to
GPR/FPR access and some assembly helper functions related to
GPR/FPR registers.
Signed-off-by: Anshuman Khandual <khandual@linux.vnet.ibm.com>
Signed-off-by: Simon Guo <wei.guo.simon@gmail.com>
[mpe: Add #defines for the new note types when headers don't define them]
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Diffstat (limited to 'tools/testing')
| -rw-r--r-- | tools/testing/selftests/powerpc/Makefile | 3 | ||||
| -rw-r--r-- | tools/testing/selftests/powerpc/include/reg.h | 61 | ||||
| -rw-r--r-- | tools/testing/selftests/powerpc/lib/reg.S | 132 | ||||
| -rw-r--r-- | tools/testing/selftests/powerpc/ptrace/.gitignore | 1 | ||||
| -rw-r--r-- | tools/testing/selftests/powerpc/ptrace/Makefile | 12 | ||||
| -rw-r--r-- | tools/testing/selftests/powerpc/ptrace/ptrace-gpr.c | 123 | ||||
| -rw-r--r-- | tools/testing/selftests/powerpc/ptrace/ptrace-gpr.h | 74 | ||||
| -rw-r--r-- | tools/testing/selftests/powerpc/ptrace/ptrace.h | 376 |
8 files changed, 781 insertions, 1 deletions
diff --git a/tools/testing/selftests/powerpc/Makefile b/tools/testing/selftests/powerpc/Makefile index 561afa1921b9..c2c4211ba58b 100644 --- a/tools/testing/selftests/powerpc/Makefile +++ b/tools/testing/selftests/powerpc/Makefile | |||
| @@ -26,7 +26,8 @@ SUB_DIRS = alignment \ | |||
| 26 | syscalls \ | 26 | syscalls \ |
| 27 | tm \ | 27 | tm \ |
| 28 | vphn \ | 28 | vphn \ |
| 29 | math | 29 | math \ |
| 30 | ptrace | ||
| 30 | 31 | ||
| 31 | endif | 32 | endif |
| 32 | 33 | ||
diff --git a/tools/testing/selftests/powerpc/include/reg.h b/tools/testing/selftests/powerpc/include/reg.h index bb843b2d9bac..4afdebcce4cd 100644 --- a/tools/testing/selftests/powerpc/include/reg.h +++ b/tools/testing/selftests/powerpc/include/reg.h | |||
| @@ -81,4 +81,65 @@ | |||
| 81 | #define STXVD2X(xs, ra, rb) .long (0x7c000798 | VSX_XX1((xs), (ra), (rb))) | 81 | #define STXVD2X(xs, ra, rb) .long (0x7c000798 | VSX_XX1((xs), (ra), (rb))) |
| 82 | #define LXVD2X(xs, ra, rb) .long (0x7c000698 | VSX_XX1((xs), (ra), (rb))) | 82 | #define LXVD2X(xs, ra, rb) .long (0x7c000698 | VSX_XX1((xs), (ra), (rb))) |
| 83 | 83 | ||
| 84 | #define ASM_LOAD_GPR_IMMED(_asm_symbol_name_immed) \ | ||
| 85 | "li 14, %[" #_asm_symbol_name_immed "];" \ | ||
| 86 | "li 15, %[" #_asm_symbol_name_immed "];" \ | ||
| 87 | "li 16, %[" #_asm_symbol_name_immed "];" \ | ||
| 88 | "li 17, %[" #_asm_symbol_name_immed "];" \ | ||
| 89 | "li 18, %[" #_asm_symbol_name_immed "];" \ | ||
| 90 | "li 19, %[" #_asm_symbol_name_immed "];" \ | ||
| 91 | "li 20, %[" #_asm_symbol_name_immed "];" \ | ||
| 92 | "li 21, %[" #_asm_symbol_name_immed "];" \ | ||
| 93 | "li 22, %[" #_asm_symbol_name_immed "];" \ | ||
| 94 | "li 23, %[" #_asm_symbol_name_immed "];" \ | ||
| 95 | "li 24, %[" #_asm_symbol_name_immed "];" \ | ||
| 96 | "li 25, %[" #_asm_symbol_name_immed "];" \ | ||
| 97 | "li 26, %[" #_asm_symbol_name_immed "];" \ | ||
| 98 | "li 27, %[" #_asm_symbol_name_immed "];" \ | ||
| 99 | "li 28, %[" #_asm_symbol_name_immed "];" \ | ||
| 100 | "li 29, %[" #_asm_symbol_name_immed "];" \ | ||
| 101 | "li 30, %[" #_asm_symbol_name_immed "];" \ | ||
| 102 | "li 31, %[" #_asm_symbol_name_immed "];" | ||
| 103 | |||
| 104 | #define ASM_LOAD_FPR_SINGLE_PRECISION(_asm_symbol_name_addr) \ | ||
| 105 | "lfs 0, 0(%[" #_asm_symbol_name_addr "]);" \ | ||
| 106 | "lfs 1, 0(%[" #_asm_symbol_name_addr "]);" \ | ||
| 107 | "lfs 2, 0(%[" #_asm_symbol_name_addr "]);" \ | ||
| 108 | "lfs 3, 0(%[" #_asm_symbol_name_addr "]);" \ | ||
| 109 | "lfs 4, 0(%[" #_asm_symbol_name_addr "]);" \ | ||
| 110 | "lfs 5, 0(%[" #_asm_symbol_name_addr "]);" \ | ||
| 111 | "lfs 6, 0(%[" #_asm_symbol_name_addr "]);" \ | ||
| 112 | "lfs 7, 0(%[" #_asm_symbol_name_addr "]);" \ | ||
| 113 | "lfs 8, 0(%[" #_asm_symbol_name_addr "]);" \ | ||
| 114 | "lfs 9, 0(%[" #_asm_symbol_name_addr "]);" \ | ||
| 115 | "lfs 10, 0(%[" #_asm_symbol_name_addr "]);" \ | ||
| 116 | "lfs 11, 0(%[" #_asm_symbol_name_addr "]);" \ | ||
| 117 | "lfs 12, 0(%[" #_asm_symbol_name_addr "]);" \ | ||
| 118 | "lfs 13, 0(%[" #_asm_symbol_name_addr "]);" \ | ||
| 119 | "lfs 14, 0(%[" #_asm_symbol_name_addr "]);" \ | ||
| 120 | "lfs 15, 0(%[" #_asm_symbol_name_addr "]);" \ | ||
| 121 | "lfs 16, 0(%[" #_asm_symbol_name_addr "]);" \ | ||
| 122 | "lfs 17, 0(%[" #_asm_symbol_name_addr "]);" \ | ||
| 123 | "lfs 18, 0(%[" #_asm_symbol_name_addr "]);" \ | ||
| 124 | "lfs 19, 0(%[" #_asm_symbol_name_addr "]);" \ | ||
| 125 | "lfs 20, 0(%[" #_asm_symbol_name_addr "]);" \ | ||
| 126 | "lfs 21, 0(%[" #_asm_symbol_name_addr "]);" \ | ||
| 127 | "lfs 22, 0(%[" #_asm_symbol_name_addr "]);" \ | ||
| 128 | "lfs 23, 0(%[" #_asm_symbol_name_addr "]);" \ | ||
| 129 | "lfs 24, 0(%[" #_asm_symbol_name_addr "]);" \ | ||
| 130 | "lfs 25, 0(%[" #_asm_symbol_name_addr "]);" \ | ||
| 131 | "lfs 26, 0(%[" #_asm_symbol_name_addr "]);" \ | ||
| 132 | "lfs 27, 0(%[" #_asm_symbol_name_addr "]);" \ | ||
| 133 | "lfs 28, 0(%[" #_asm_symbol_name_addr "]);" \ | ||
| 134 | "lfs 29, 0(%[" #_asm_symbol_name_addr "]);" \ | ||
| 135 | "lfs 30, 0(%[" #_asm_symbol_name_addr "]);" \ | ||
| 136 | "lfs 31, 0(%[" #_asm_symbol_name_addr "]);" | ||
| 137 | |||
| 138 | #ifndef __ASSEMBLER__ | ||
| 139 | void store_gpr(unsigned long *addr); | ||
| 140 | void load_gpr(unsigned long *addr); | ||
| 141 | void load_fpr_single_precision(float *addr); | ||
| 142 | void store_fpr_single_precision(float *addr); | ||
| 143 | #endif /* end of __ASSEMBLER__ */ | ||
| 144 | |||
| 84 | #endif /* _SELFTESTS_POWERPC_REG_H */ | 145 | #endif /* _SELFTESTS_POWERPC_REG_H */ |
diff --git a/tools/testing/selftests/powerpc/lib/reg.S b/tools/testing/selftests/powerpc/lib/reg.S new file mode 100644 index 000000000000..b6aee2f79454 --- /dev/null +++ b/tools/testing/selftests/powerpc/lib/reg.S | |||
| @@ -0,0 +1,132 @@ | |||
| 1 | /* | ||
| 2 | * test helper assembly functions | ||
| 3 | * | ||
| 4 | * Copyright (C) 2016 Simon Guo, IBM Corporation. | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or | ||
| 7 | * modify it under the terms of the GNU General Public License | ||
| 8 | * as published by the Free Software Foundation; either version | ||
| 9 | * 2 of the License, or (at your option) any later version. | ||
| 10 | */ | ||
| 11 | #include <ppc-asm.h> | ||
| 12 | #include "reg.h" | ||
| 13 | |||
| 14 | |||
| 15 | /* Non volatile GPR - unsigned long buf[18] */ | ||
| 16 | FUNC_START(load_gpr) | ||
| 17 | ld 14, 0*8(3) | ||
| 18 | ld 15, 1*8(3) | ||
| 19 | ld 16, 2*8(3) | ||
| 20 | ld 17, 3*8(3) | ||
| 21 | ld 18, 4*8(3) | ||
| 22 | ld 19, 5*8(3) | ||
| 23 | ld 20, 6*8(3) | ||
| 24 | ld 21, 7*8(3) | ||
| 25 | ld 22, 8*8(3) | ||
| 26 | ld 23, 9*8(3) | ||
| 27 | ld 24, 10*8(3) | ||
| 28 | ld 25, 11*8(3) | ||
| 29 | ld 26, 12*8(3) | ||
| 30 | ld 27, 13*8(3) | ||
| 31 | ld 28, 14*8(3) | ||
| 32 | ld 29, 15*8(3) | ||
| 33 | ld 30, 16*8(3) | ||
| 34 | ld 31, 17*8(3) | ||
| 35 | blr | ||
| 36 | FUNC_END(load_gpr) | ||
| 37 | |||
| 38 | FUNC_START(store_gpr) | ||
| 39 | std 14, 0*8(3) | ||
| 40 | std 15, 1*8(3) | ||
| 41 | std 16, 2*8(3) | ||
| 42 | std 17, 3*8(3) | ||
| 43 | std 18, 4*8(3) | ||
| 44 | std 19, 5*8(3) | ||
| 45 | std 20, 6*8(3) | ||
| 46 | std 21, 7*8(3) | ||
| 47 | std 22, 8*8(3) | ||
| 48 | std 23, 9*8(3) | ||
| 49 | std 24, 10*8(3) | ||
| 50 | std 25, 11*8(3) | ||
| 51 | std 26, 12*8(3) | ||
| 52 | std 27, 13*8(3) | ||
| 53 | std 28, 14*8(3) | ||
| 54 | std 29, 15*8(3) | ||
| 55 | std 30, 16*8(3) | ||
| 56 | std 31, 17*8(3) | ||
| 57 | blr | ||
| 58 | FUNC_END(store_gpr) | ||
| 59 | |||
| 60 | /* Single Precision Float - float buf[32] */ | ||
| 61 | FUNC_START(load_fpr_single_precision) | ||
| 62 | lfs 0, 0*4(3) | ||
| 63 | lfs 1, 1*4(3) | ||
| 64 | lfs 2, 2*4(3) | ||
| 65 | lfs 3, 3*4(3) | ||
| 66 | lfs 4, 4*4(3) | ||
| 67 | lfs 5, 5*4(3) | ||
| 68 | lfs 6, 6*4(3) | ||
| 69 | lfs 7, 7*4(3) | ||
| 70 | lfs 8, 8*4(3) | ||
| 71 | lfs 9, 9*4(3) | ||
| 72 | lfs 10, 10*4(3) | ||
| 73 | lfs 11, 11*4(3) | ||
| 74 | lfs 12, 12*4(3) | ||
| 75 | lfs 13, 13*4(3) | ||
| 76 | lfs 14, 14*4(3) | ||
| 77 | lfs 15, 15*4(3) | ||
| 78 | lfs 16, 16*4(3) | ||
| 79 | lfs 17, 17*4(3) | ||
| 80 | lfs 18, 18*4(3) | ||
| 81 | lfs 19, 19*4(3) | ||
| 82 | lfs 20, 20*4(3) | ||
| 83 | lfs 21, 21*4(3) | ||
| 84 | lfs 22, 22*4(3) | ||
| 85 | lfs 23, 23*4(3) | ||
| 86 | lfs 24, 24*4(3) | ||
| 87 | lfs 25, 25*4(3) | ||
| 88 | lfs 26, 26*4(3) | ||
| 89 | lfs 27, 27*4(3) | ||
| 90 | lfs 28, 28*4(3) | ||
| 91 | lfs 29, 29*4(3) | ||
| 92 | lfs 30, 30*4(3) | ||
| 93 | lfs 31, 31*4(3) | ||
| 94 | blr | ||
| 95 | FUNC_END(load_fpr_single_precision) | ||
| 96 | |||
| 97 | /* Single Precision Float - float buf[32] */ | ||
| 98 | FUNC_START(store_fpr_single_precision) | ||
| 99 | stfs 0, 0*4(3) | ||
