diff options
Diffstat (limited to 'loader/wrapper.S')
-rw-r--r-- | loader/wrapper.S | 88 |
1 files changed, 0 insertions, 88 deletions
diff --git a/loader/wrapper.S b/loader/wrapper.S deleted file mode 100644 index fbf3ce2392..0000000000 --- a/loader/wrapper.S +++ /dev/null @@ -1,88 +0,0 @@ -#include "config.h" - -#define GLUE(a, b) a ## b -#define JOIN(a, b) GLUE(a, b) -#define MANGLE(s) JOIN(EXTERN_ASM, s) - -.data -.globl MANGLE(caller_return) -MANGLE(caller_return): - .long 0 -.globl MANGLE(report_entry) -MANGLE(report_entry): - .long MANGLE(null_call) -.globl MANGLE(report_ret) -MANGLE(report_ret): - .long MANGLE(null_call) -.global MANGLE(wrapper_target) -MANGLE(wrapper_target): - .long MANGLE(null_call) - -.text -.globl MANGLE(null_call) - .type MANGLE(null_call), @function - .balign 16,0x90 -MANGLE(null_call): - ret -.globl MANGLE(wrapper) - .type MANGLE(wrapper), @function - .balign 16,0x90 -MANGLE(wrapper): - pusha # store registers (EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI) - pushf # store flags - - 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 - movl (%ebp), %eax - subl %edx, %eax - push %eax - push %edx - - call *MANGLE(report_entry) # report entry - - test %eax, %eax - jnz .Ldone - - leave # restore %esp, %ebp - popf # restore flags - popa # restore registers - - popl MANGLE(caller_return) # switch return addresses - pushl $.Lwrapper_return - - jmp *MANGLE(wrapper_target) # wrapper_target should return at .Lwrapper_return - - .balign 16, 0x90 -.Lwrapper_return: - pushl MANGLE(caller_return) # restore the original return address - pusha # more for reference sake here - pushf - - 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 # push stack top address (relative to our entry) - movl (%ebp), %eax - subl %edx, %eax # calculate difference between entry and previous frame - push %eax - push %edx - - call *MANGLE(report_ret) # report the return information (same args) -.Ldone: - - leave - popf - popa - ret |