1 /* SPDX-License-Identifier: GPL-2.0 */ 2 #include <linux/linkage.h> 3 4 #define AX 0 5 #define BX 1 * 8 6 #define CX 2 * 8 7 #define DX 3 * 8 8 #define SI 4 * 8 9 #define DI 5 * 8 10 #define BP 6 * 8 11 #define SP 7 * 8 12 #define IP 8 * 8 13 #define FLAGS 9 * 8 14 #define CS 10 * 8 15 #define SS 11 * 8 16 #define DS 12 * 8 17 #define ES 13 * 8 18 #define FS 14 * 8 19 #define GS 15 * 8 20 #define R8 16 * 8 21 #define R9 17 * 8 22 #define R10 18 * 8 23 #define R11 19 * 8 24 #define R12 20 * 8 25 #define R13 21 * 8 26 #define R14 22 * 8 27 #define R15 23 * 8 28 29 .text 30 #ifdef HAVE_ARCH_X86_64_SUPPORT 31 SYM_FUNC_START(perf_regs_load) 32 movq %rax, AX(%rdi) 33 movq %rbx, BX(%rdi) 34 movq %rcx, CX(%rdi) 35 movq %rdx, DX(%rdi) 36 movq %rsi, SI(%rdi) 37 movq %rdi, DI(%rdi) 38 movq %rbp, BP(%rdi) 39 40 leaq 8(%rsp), %rax /* exclude this call. */ 41 movq %rax, SP(%rdi) 42 43 movq 0(%rsp), %rax 44 movq %rax, IP(%rdi) 45 46 movq $0, FLAGS(%rdi) 47 movq $0, CS(%rdi) 48 movq $0, SS(%rdi) 49 movq $0, DS(%rdi) 50 movq $0, ES(%rdi) 51 movq $0, FS(%rdi) 52 movq $0, GS(%rdi) 53 54 movq %r8, R8(%rdi) 55 movq %r9, R9(%rdi) 56 movq %r10, R10(%rdi) 57 movq %r11, R11(%rdi) 58 movq %r12, R12(%rdi) 59 movq %r13, R13(%rdi) 60 movq %r14, R14(%rdi) 61 movq %r15, R15(%rdi) 62 ret 63 SYM_FUNC_END(perf_regs_load) 64 #else 65 SYM_FUNC_START(perf_regs_load) 66 push %edi 67 movl 8(%esp), %edi 68 movl %eax, AX(%edi) 69 movl %ebx, BX(%edi) 70 movl %ecx, CX(%edi) 71 movl %edx, DX(%edi) 72 movl %esi, SI(%edi) 73 pop %eax 74 movl %eax, DI(%edi) 75 movl %ebp, BP(%edi) 76 77 leal 4(%esp), %eax /* exclude this call. */ 78 movl %eax, SP(%edi) 79 80 movl 0(%esp), %eax 81 movl %eax, IP(%edi) 82 83 movl $0, FLAGS(%edi) 84 movl $0, CS(%edi) 85 movl $0, SS(%edi) 86 movl $0, DS(%edi) 87 movl $0, ES(%edi) 88 movl $0, FS(%edi) 89 movl $0, GS(%edi) 90 ret 91 SYM_FUNC_END(perf_regs_load) 92 #endif 93 94 /* 95 * We need to provide note.GNU-stack section, saying that we want 96 * NOT executable stack. Otherwise the final linking will assume that 97 * the ELF stack should not be restricted at all and set it RWX. 98 */ 99 .section .note.GNU-stack,"",@progbits
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.