summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--loader/wrapper.S50
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