Skip to content

Commit

Permalink
x86: Use {push,pop}_cfi in more places
Browse files Browse the repository at this point in the history
Cleaning up and shortening code...

Signed-off-by: Jan Beulich <jbeulich@novell.com>
Cc: Alexander van Heukelum <heukelum@fastmail.fm>
LKML-Reference: <4D6BD35002000078000341DA@vpn.id2.novell.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
  • Loading branch information
Jan Beulich authored and Ingo Molnar committed Feb 28, 2011
1 parent 39f2205 commit 60cf637
Show file tree
Hide file tree
Showing 7 changed files with 49 additions and 98 deletions.
27 changes: 9 additions & 18 deletions arch/x86/ia32/ia32entry.S
Original file line number Diff line number Diff line change
Expand Up @@ -126,26 +126,20 @@ ENTRY(ia32_sysenter_target)
*/
ENABLE_INTERRUPTS(CLBR_NONE)
movl %ebp,%ebp /* zero extension */
pushq $__USER32_DS
CFI_ADJUST_CFA_OFFSET 8
pushq_cfi $__USER32_DS
/*CFI_REL_OFFSET ss,0*/
pushq %rbp
CFI_ADJUST_CFA_OFFSET 8
pushq_cfi %rbp
CFI_REL_OFFSET rsp,0
pushfq
CFI_ADJUST_CFA_OFFSET 8
pushfq_cfi
/*CFI_REL_OFFSET rflags,0*/
movl 8*3-THREAD_SIZE+TI_sysenter_return(%rsp), %r10d
CFI_REGISTER rip,r10
pushq $__USER32_CS
CFI_ADJUST_CFA_OFFSET 8
pushq_cfi $__USER32_CS
/*CFI_REL_OFFSET cs,0*/
movl %eax, %eax
pushq %r10
CFI_ADJUST_CFA_OFFSET 8
pushq_cfi %r10
CFI_REL_OFFSET rip,0
pushq %rax
CFI_ADJUST_CFA_OFFSET 8
pushq_cfi %rax
cld
SAVE_ARGS 0,0,1
/* no need to do an access_ok check here because rbp has been
Expand Down Expand Up @@ -182,11 +176,9 @@ sysexit_from_sys_call:
xorq %r9,%r9
xorq %r10,%r10
xorq %r11,%r11
popfq
CFI_ADJUST_CFA_OFFSET -8
popfq_cfi
/*CFI_RESTORE rflags*/
popq %rcx /* User %esp */
CFI_ADJUST_CFA_OFFSET -8
popq_cfi %rcx /* User %esp */
CFI_REGISTER rsp,rcx
TRACE_IRQS_ON
ENABLE_INTERRUPTS_SYSEXIT32
Expand Down Expand Up @@ -421,8 +413,7 @@ ENTRY(ia32_syscall)
*/
ENABLE_INTERRUPTS(CLBR_NONE)
movl %eax,%eax
pushq %rax
CFI_ADJUST_CFA_OFFSET 8
pushq_cfi %rax
cld
/* note the registers are not zero extended to the sf.
this could be a problem. */
Expand Down
6 changes: 2 additions & 4 deletions arch/x86/include/asm/frame.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,12 @@
frame pointer later */
#ifdef CONFIG_FRAME_POINTER
.macro FRAME
pushl %ebp
CFI_ADJUST_CFA_OFFSET 4
pushl_cfi %ebp
CFI_REL_OFFSET ebp,0
movl %esp,%ebp
.endm
.macro ENDFRAME
popl %ebp
CFI_ADJUST_CFA_OFFSET -4
popl_cfi %ebp
CFI_RESTORE ebp
.endm
#else
Expand Down
3 changes: 1 addition & 2 deletions arch/x86/kernel/entry_32.S
Original file line number Diff line number Diff line change
Expand Up @@ -1409,8 +1409,7 @@ END(general_protection)
#ifdef CONFIG_KVM_GUEST
ENTRY(async_page_fault)
RING0_EC_FRAME
pushl $do_async_page_fault
CFI_ADJUST_CFA_OFFSET 4
pushl_cfi $do_async_page_fault
jmp error_code
CFI_ENDPROC
END(apf_page_fault)
Expand Down
6 changes: 2 additions & 4 deletions arch/x86/lib/atomic64_386_32.S
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,12 @@

/* if you want SMP support, implement these with real spinlocks */
.macro LOCK reg
pushfl
CFI_ADJUST_CFA_OFFSET 4
pushfl_cfi
cli
.endm

.macro UNLOCK reg
popfl
CFI_ADJUST_CFA_OFFSET -4
popfl_cfi
.endm

#define BEGIN(op) \
Expand Down
6 changes: 2 additions & 4 deletions arch/x86/lib/atomic64_cx8_32.S
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,12 @@
#include <asm/dwarf2.h>

.macro SAVE reg
pushl %\reg
CFI_ADJUST_CFA_OFFSET 4
pushl_cfi %\reg
CFI_REL_OFFSET \reg, 0
.endm

.macro RESTORE reg
popl %\reg
CFI_ADJUST_CFA_OFFSET -4
popl_cfi %\reg
CFI_RESTORE \reg
.endm

Expand Down
63 changes: 21 additions & 42 deletions arch/x86/lib/checksum_32.S
Original file line number Diff line number Diff line change
Expand Up @@ -50,11 +50,9 @@ unsigned int csum_partial(const unsigned char * buff, int len, unsigned int sum)
*/
ENTRY(csum_partial)
CFI_STARTPROC
pushl %esi
CFI_ADJUST_CFA_OFFSET 4
pushl_cfi %esi
CFI_REL_OFFSET esi, 0
pushl %ebx
CFI_ADJUST_CFA_OFFSET 4
pushl_cfi %ebx
CFI_REL_OFFSET ebx, 0
movl 20(%esp),%eax # Function arg: unsigned int sum
movl 16(%esp),%ecx # Function arg: int len
Expand Down Expand Up @@ -132,11 +130,9 @@ ENTRY(csum_partial)
jz 8f
roll $8, %eax
8:
popl %ebx
CFI_ADJUST_CFA_OFFSET -4
popl_cfi %ebx
CFI_RESTORE ebx
popl %esi
CFI_ADJUST_CFA_OFFSET -4
popl_cfi %esi
CFI_RESTORE esi
ret
CFI_ENDPROC
Expand All @@ -148,11 +144,9 @@ ENDPROC(csum_partial)

ENTRY(csum_partial)
CFI_STARTPROC
pushl %esi
CFI_ADJUST_CFA_OFFSET 4
pushl_cfi %esi
CFI_REL_OFFSET esi, 0
pushl %ebx
CFI_ADJUST_CFA_OFFSET 4
pushl_cfi %ebx
CFI_REL_OFFSET ebx, 0
movl 20(%esp),%eax # Function arg: unsigned int sum
movl 16(%esp),%ecx # Function arg: int len
Expand Down Expand Up @@ -260,11 +254,9 @@ ENTRY(csum_partial)
jz 90f
roll $8, %eax
90:
popl %ebx
CFI_ADJUST_CFA_OFFSET -4
popl_cfi %ebx
CFI_RESTORE ebx
popl %esi
CFI_ADJUST_CFA_OFFSET -4
popl_cfi %esi
CFI_RESTORE esi
ret
CFI_ENDPROC
Expand Down Expand Up @@ -309,14 +301,11 @@ ENTRY(csum_partial_copy_generic)
CFI_STARTPROC
subl $4,%esp
CFI_ADJUST_CFA_OFFSET 4
pushl %edi
CFI_ADJUST_CFA_OFFSET 4
pushl_cfi %edi
CFI_REL_OFFSET edi, 0
pushl %esi
CFI_ADJUST_CFA_OFFSET 4
pushl_cfi %esi
CFI_REL_OFFSET esi, 0
pushl %ebx
CFI_ADJUST_CFA_OFFSET 4
pushl_cfi %ebx
CFI_REL_OFFSET ebx, 0
movl ARGBASE+16(%esp),%eax # sum
movl ARGBASE+12(%esp),%ecx # len
Expand Down Expand Up @@ -426,17 +415,13 @@ DST( movb %cl, (%edi) )

.previous

popl %ebx
CFI_ADJUST_CFA_OFFSET -4
popl_cfi %ebx
CFI_RESTORE ebx
popl %esi
CFI_ADJUST_CFA_OFFSET -4
popl_cfi %esi
CFI_RESTORE esi
popl %edi
CFI_ADJUST_CFA_OFFSET -4
popl_cfi %edi
CFI_RESTORE edi
popl %ecx # equivalent to addl $4,%esp
CFI_ADJUST_CFA_OFFSET -4
popl_cfi %ecx # equivalent to addl $4,%esp
ret
CFI_ENDPROC
ENDPROC(csum_partial_copy_generic)
Expand All @@ -459,14 +444,11 @@ ENDPROC(csum_partial_copy_generic)

ENTRY(csum_partial_copy_generic)
CFI_STARTPROC
pushl %ebx
CFI_ADJUST_CFA_OFFSET 4
pushl_cfi %ebx
CFI_REL_OFFSET ebx, 0
pushl %edi
CFI_ADJUST_CFA_OFFSET 4
pushl_cfi %edi
CFI_REL_OFFSET edi, 0
pushl %esi
CFI_ADJUST_CFA_OFFSET 4
pushl_cfi %esi
CFI_REL_OFFSET esi, 0
movl ARGBASE+4(%esp),%esi #src
movl ARGBASE+8(%esp),%edi #dst
Expand Down Expand Up @@ -527,14 +509,11 @@ DST( movb %dl, (%edi) )
jmp 7b
.previous

popl %esi
CFI_ADJUST_CFA_OFFSET -4
popl_cfi %esi
CFI_RESTORE esi
popl %edi
CFI_ADJUST_CFA_OFFSET -4
popl_cfi %edi
CFI_RESTORE edi
popl %ebx
CFI_ADJUST_CFA_OFFSET -4
popl_cfi %ebx
CFI_RESTORE ebx
ret
CFI_ENDPROC
Expand Down
36 changes: 12 additions & 24 deletions arch/x86/lib/semaphore_32.S
Original file line number Diff line number Diff line change
Expand Up @@ -74,29 +74,23 @@ ENTRY(__read_lock_failed)
/* Fix up special calling conventions */
ENTRY(call_rwsem_down_read_failed)
CFI_STARTPROC
push %ecx
CFI_ADJUST_CFA_OFFSET 4
pushl_cfi %ecx
CFI_REL_OFFSET ecx,0
push %edx
CFI_ADJUST_CFA_OFFSET 4
pushl_cfi %edx
CFI_REL_OFFSET edx,0
call rwsem_down_read_failed
pop %edx
CFI_ADJUST_CFA_OFFSET -4
pop %ecx
CFI_ADJUST_CFA_OFFSET -4
popl_cfi %edx
popl_cfi %ecx
ret
CFI_ENDPROC
ENDPROC(call_rwsem_down_read_failed)

ENTRY(call_rwsem_down_write_failed)
CFI_STARTPROC
push %ecx
CFI_ADJUST_CFA_OFFSET 4
pushl_cfi %ecx
CFI_REL_OFFSET ecx,0
calll rwsem_down_write_failed
pop %ecx
CFI_ADJUST_CFA_OFFSET -4
popl_cfi %ecx
ret
CFI_ENDPROC
ENDPROC(call_rwsem_down_write_failed)
Expand All @@ -105,30 +99,24 @@ ENTRY(call_rwsem_wake)
CFI_STARTPROC
decw %dx /* do nothing if still outstanding active readers */
jnz 1f
push %ecx
CFI_ADJUST_CFA_OFFSET 4
pushl_cfi %ecx
CFI_REL_OFFSET ecx,0
call rwsem_wake
pop %ecx
CFI_ADJUST_CFA_OFFSET -4
popl_cfi %ecx
1: ret
CFI_ENDPROC
ENDPROC(call_rwsem_wake)

/* Fix up special calling conventions */
ENTRY(call_rwsem_downgrade_wake)
CFI_STARTPROC
push %ecx
CFI_ADJUST_CFA_OFFSET 4
pushl_cfi %ecx
CFI_REL_OFFSET ecx,0
push %edx
CFI_ADJUST_CFA_OFFSET 4
pushl_cfi %edx
CFI_REL_OFFSET edx,0
call rwsem_downgrade_wake
pop %edx
CFI_ADJUST_CFA_OFFSET -4
pop %ecx
CFI_ADJUST_CFA_OFFSET -4
popl_cfi %edx
popl_cfi %ecx
ret
CFI_ENDPROC
ENDPROC(call_rwsem_downgrade_wake)
Expand Down

0 comments on commit 60cf637

Please sign in to comment.