summaryrefslogtreecommitdiffstats
path: root/arch/x86/lib/thunk_64.S
diff options
context:
space:
mode:
authorDenys Vlasenko2015-02-26 23:40:25 +0100
committerIngo Molnar2015-03-04 22:50:49 +0100
commit49db46a67bec9ca9e29ece4729a876195877af50 (patch)
tree9c20f9fa210d1befe2ea2346b8cd9452bcef0517 /arch/x86/lib/thunk_64.S
parentx86/asm/64: Open-code register save/restore in trace_hardirqs*() thunks (diff)
downloadkernel-qcow2-linux-49db46a67bec9ca9e29ece4729a876195877af50.tar.gz
kernel-qcow2-linux-49db46a67bec9ca9e29ece4729a876195877af50.tar.xz
kernel-qcow2-linux-49db46a67bec9ca9e29ece4729a876195877af50.zip
x86/asm: Introduce push/pop macros which generate CFI_REL_OFFSET and CFI_RESTORE
Sequences: pushl_cfi %reg CFI_REL_OFFSET reg, 0 and: popl_cfi %reg CFI_RESTORE reg happen quite often. This patch adds macros which generate them. No assembly changes (verified with objdump -dr vmlinux.o). Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com> Signed-off-by: Andy Lutomirski <luto@amacapital.net> Cc: Alexei Starovoitov <ast@plumgrid.com> Cc: Borislav Petkov <bp@alien8.de> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: H. Peter Anvin <hpa@zytor.com> Cc: Kees Cook <keescook@chromium.org> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Oleg Nesterov <oleg@redhat.com> Cc: Will Drewry <wad@chromium.org> Link: http://lkml.kernel.org/r/1421017655-25561-1-git-send-email-dvlasenk@redhat.com Link: http://lkml.kernel.org/r/2202eb90f175cf45d1b2d1c64dbb5676a8ad07ad.1424989793.git.luto@amacapital.net Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'arch/x86/lib/thunk_64.S')
-rw-r--r--arch/x86/lib/thunk_64.S54
1 files changed, 18 insertions, 36 deletions
diff --git a/arch/x86/lib/thunk_64.S b/arch/x86/lib/thunk_64.S
index 8ec443a0777b..f89ba4e93025 100644
--- a/arch/x86/lib/thunk_64.S
+++ b/arch/x86/lib/thunk_64.S
@@ -17,24 +17,15 @@
CFI_STARTPROC
/* this one pushes 9 elems, the next one would be %rIP */
- pushq_cfi %rdi
- CFI_REL_OFFSET rdi, 0
- pushq_cfi %rsi
- CFI_REL_OFFSET rsi, 0
- pushq_cfi %rdx
- CFI_REL_OFFSET rdx, 0
- pushq_cfi %rcx
- CFI_REL_OFFSET rcx, 0
- pushq_cfi %rax
- CFI_REL_OFFSET rax, 0
- pushq_cfi %r8
- CFI_REL_OFFSET r8, 0
- pushq_cfi %r9
- CFI_REL_OFFSET r9, 0
- pushq_cfi %r10
- CFI_REL_OFFSET r10, 0
- pushq_cfi %r11
- CFI_REL_OFFSET r11, 0
+ pushq_cfi_reg rdi
+ pushq_cfi_reg rsi
+ pushq_cfi_reg rdx
+ pushq_cfi_reg rcx
+ pushq_cfi_reg rax
+ pushq_cfi_reg r8
+ pushq_cfi_reg r9
+ pushq_cfi_reg r10
+ pushq_cfi_reg r11
.if \put_ret_addr_in_rdi
/* 9*8(%rsp) is return addr on stack */
@@ -69,24 +60,15 @@
CFI_STARTPROC
CFI_ADJUST_CFA_OFFSET 9*8
restore:
- popq_cfi %r11
- CFI_RESTORE r11
- popq_cfi %r10
- CFI_RESTORE r10
- popq_cfi %r9
- CFI_RESTORE r9
- popq_cfi %r8
- CFI_RESTORE r8
- popq_cfi %rax
- CFI_RESTORE rax
- popq_cfi %rcx
- CFI_RESTORE rcx
- popq_cfi %rdx
- CFI_RESTORE rdx
- popq_cfi %rsi
- CFI_RESTORE rsi
- popq_cfi %rdi
- CFI_RESTORE rdi
+ popq_cfi_reg r11
+ popq_cfi_reg r10
+ popq_cfi_reg r9
+ popq_cfi_reg r8
+ popq_cfi_reg rax
+ popq_cfi_reg rcx
+ popq_cfi_reg rdx
+ popq_cfi_reg rsi
+ popq_cfi_reg rdi
ret
CFI_ENDPROC
_ASM_NOKPROBE(restore)