Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 257225
b: refs/heads/master
c: 838feb4
h: refs/heads/master
i:
  257223: af794a7
v: v3
  • Loading branch information
Borislav Petkov authored and H. Peter Anvin committed Jun 3, 2011
1 parent 58e3f72 commit c46fd33
Show file tree
Hide file tree
Showing 4 changed files with 13 additions and 18 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: cac0e0a78f722abd85b7f8d614ee0820f7672f58
refs/heads/master: 838feb47549a9b73534c6c1d7da4a9639a0750f4
4 changes: 2 additions & 2 deletions trunk/arch/x86/ia32/ia32entry.S
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,7 @@ sysexit_from_sys_call:
andl $~0x200,EFLAGS-R11(%rsp)
movl RIP-R11(%rsp),%edx /* User %eip */
CFI_REGISTER rip,rdx
RESTORE_ARGS 1,24,1,1,1,1
RESTORE_ARGS 0,24,0,0,0,0
xorq %r8,%r8
xorq %r9,%r9
xorq %r10,%r10
Expand Down Expand Up @@ -328,7 +328,7 @@ cstar_dispatch:
jnz sysretl_audit
sysretl_from_sys_call:
andl $~TS_COMPAT,TI_status(%r10)
RESTORE_ARGS 1,-ARG_SKIP,1,1,1
RESTORE_ARGS 0,-ARG_SKIP,0,0,0
movl RIP-ARGOFFSET(%rsp),%ecx
CFI_REGISTER rip,rcx
movl EFLAGS-ARGOFFSET(%rsp),%r11d
Expand Down
21 changes: 8 additions & 13 deletions trunk/arch/x86/include/asm/calling.h
Original file line number Diff line number Diff line change
Expand Up @@ -109,32 +109,27 @@ For 32-bit we have the following conventions - kernel is built with

#define ARG_SKIP (9*8)

.macro RESTORE_ARGS skiprax=0, addskip=0, skiprcx=0, skipr11=0, \
skipr8910=0, skiprdx=0
.if \skipr11
.else
.macro RESTORE_ARGS rstor_rax=1, addskip=0, rstor_rcx=1, rstor_r11=1, \
rstor_r8910=1, rstor_rdx=1
.if \rstor_r11
movq_cfi_restore 0*8, r11
.endif

.if \skipr8910
.else
.if \rstor_r8910
movq_cfi_restore 1*8, r10
movq_cfi_restore 2*8, r9
movq_cfi_restore 3*8, r8
.endif

.if \skiprax
.else
.if \rstor_rax
movq_cfi_restore 4*8, rax
.endif

.if \skiprcx
.else
.if \rstor_rcx
movq_cfi_restore 5*8, rcx
.endif

.if \skiprdx
.else
.if \rstor_rdx
movq_cfi_restore 6*8, rdx
.endif

Expand Down Expand Up @@ -193,7 +188,7 @@ For 32-bit we have the following conventions - kernel is built with

.macro RESTORE_ALL addskip=0
RESTORE_REST
RESTORE_ARGS 0, \addskip
RESTORE_ARGS 1, \addskip
.endm

.macro icebp
Expand Down
4 changes: 2 additions & 2 deletions trunk/arch/x86/kernel/entry_64.S
Original file line number Diff line number Diff line change
Expand Up @@ -508,7 +508,7 @@ sysret_check:
TRACE_IRQS_ON
movq RIP-ARGOFFSET(%rsp),%rcx
CFI_REGISTER rip,rcx
RESTORE_ARGS 0,-ARG_SKIP,1
RESTORE_ARGS 1,-ARG_SKIP,0
/*CFI_REGISTER rflags,r11*/
movq PER_CPU_VAR(old_rsp), %rsp
USERGS_SYSRET64
Expand Down Expand Up @@ -858,7 +858,7 @@ retint_restore_args: /* return to kernel space */
*/
TRACE_IRQS_IRETQ
restore_args:
RESTORE_ARGS 0,8,0
RESTORE_ARGS 1,8,1

irq_return:
INTERRUPT_RETURN
Expand Down

0 comments on commit c46fd33

Please sign in to comment.