// Copyright 2009 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. /* * Apple still insists on underscore prefixes for C function names. */ #if defined(__APPLE__) || defined(_WIN32) #define EXT(s) _##s #else #define EXT(s) s #endif /* * void crosscall_386(void (*fn)(void)) * * Calling into the 8c tool chain, where all registers are caller save. * Called from standard x86 ABI, where %ebp, %ebx, %esi, * and %edi are callee-save, so they must be saved explicitly. */ .globl EXT(crosscall_386) EXT(crosscall_386): pushl %ebp movl %esp, %ebp pushl %ebx pushl %esi pushl %edi movl 8(%ebp), %eax /* fn */ call *%eax popl %edi popl %esi popl %ebx popl %ebp ret #ifdef __ELF__ .section .note.GNU-stack,"",@progbits #endif