diff options
Diffstat (limited to 'loader/wrapper.S')
-rw-r--r-- | loader/wrapper.S | 31 |
1 files changed, 15 insertions, 16 deletions
diff --git a/loader/wrapper.S b/loader/wrapper.S index fe2d85619b..f21001f392 100644 --- a/loader/wrapper.S +++ b/loader/wrapper.S @@ -6,10 +6,10 @@ caller_return: report_entry: .long null_call .globl report_ret -report_ret: +report_ret: .long null_call .global wrapper_target -wrapper_target: +wrapper_target: .long null_call .section .text @@ -22,43 +22,43 @@ null_call: .type wrapper, @function .balign 16,0x90 wrapper: - pusha # store registers (EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI) + pusha # store registers (EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI) pushf # store flags - - push %ebp # set up a stack frame + + push %ebp # set up a stack frame movl %esp, %ebp leal 4(%ebp), %eax # push flags addr push %eax leal 8(%ebp), %eax # push registers addr push %eax - - leal 40(%ebp), %edx + + leal 40(%ebp), %edx movl (%ebp), %eax subl %edx, %eax push %eax push %edx - + call *report_entry # report entry - + test %eax, %eax jnz .Ldone leave # restore %esp, %ebp popf # restore flags popa # restore registers - + popl caller_return # switch return addresses - pushl $.Lwrapper_return - + pushl $.Lwrapper_return + jmp *wrapper_target # wrapper_target should return at .Lwrapper_return .balign 16, 0x90 -.Lwrapper_return: +.Lwrapper_return: pushl caller_return # restore the original return address pusha # more for reference sake here pushf - + push %ebp # set up a stack frame movl %esp, %ebp @@ -74,10 +74,9 @@ wrapper: push %edx call *report_ret # report the return information (same args) -.Ldone: +.Ldone: leave popf popa ret - |