1 // Copyright 2009 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
4
5 /*
6 * Apple still insists on underscore prefixes for C function names.
7 */
8 #if defined(__APPLE__) || defined(_WIN32)
9 #define EXT(s) _##s
10 #else
11 #define EXT(s) s
12 #endif
13
14 /*
15 * void crosscall_386(void (*fn)(void))
16 *
17 * Calling into the 8c tool chain, where all registers are caller save.
18 * Called from standard x86 ABI, where %ebp, %ebx, %esi,
19 * and %edi are callee-save, so they must be saved explicitly.
20 */
21 .globl EXT(crosscall_386)
22 EXT(crosscall_386):
23 pushl %ebp
24 movl %esp, %ebp
25 pushl %ebx
26 pushl %esi
27 pushl %edi
28
29 movl 8(%ebp), %eax /* fn */
30 call *%eax
31
32 popl %edi
33 popl %esi
34 popl %ebx
35 popl %ebp
36 ret
37
38 #ifdef __ELF__
39 .section .note.GNU-stack,"",@progbits
40 #endif
41
View as plain text