diff options
-rw-r--r-- | loader/wrapper.S | 50 |
1 files changed, 28 insertions, 22 deletions
diff --git a/loader/wrapper.S b/loader/wrapper.S index 14d1296bf7..219ed736b0 100644 --- a/loader/wrapper.S +++ b/loader/wrapper.S @@ -1,27 +1,33 @@ +#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 caller_return -caller_return: +.globl MANGLE(caller_return) +MANGLE(caller_return): .long 0 -.globl report_entry -report_entry: - .long null_call -.globl report_ret -report_ret: - .long null_call -.global wrapper_target -wrapper_target: - .long null_call +.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 null_call - .type null_call, @function +.globl MANGLE(null_call) + .type MANGLE(null_call), @function .balign 16,0x90 -null_call: +MANGLE(null_call): ret -.globl wrapper - .type wrapper, @function +.globl MANGLE(wrapper) + .type MANGLE(wrapper), @function .balign 16,0x90 -wrapper: +MANGLE(wrapper): pusha # store registers (EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI) pushf # store flags @@ -39,7 +45,7 @@ wrapper: push %eax push %edx - call *report_entry # report entry + call *MANGLE(report_entry) # report entry test %eax, %eax jnz .Ldone @@ -48,14 +54,14 @@ wrapper: popf # restore flags popa # restore registers - popl caller_return # switch return addresses + popl MANGLE(caller_return) # switch return addresses pushl $.Lwrapper_return - jmp *wrapper_target # wrapper_target should return at .Lwrapper_return + jmp *MANGLE(wrapper_target) # wrapper_target should return at .Lwrapper_return .balign 16, 0x90 .Lwrapper_return: - pushl caller_return # restore the original return address + pushl MANGLE(caller_return) # restore the original return address pusha # more for reference sake here pushf @@ -73,7 +79,7 @@ wrapper: push %eax push %edx - call *report_ret # report the return information (same args) + call *MANGLE(report_ret) # report the return information (same args) .Ldone: leave |