// 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. .file "gcc_386.S" /* * Windows still insists on underscore prefixes for C function names. */ #if defined(_WIN32) #define EXT(s) _##s #else #define EXT(s) s #endif /* * void crosscall1(void (*fn)(void), void (*setg_gcc)(void*), void *g) * * Calling into the gc 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(crosscall1) EXT(crosscall1): pushl %ebp movl %esp, %ebp pushl %ebx pushl %esi pushl %edi movl 16(%ebp), %eax /* g */ pushl %eax movl 12(%ebp), %eax /* setg_gcc */ call *%eax popl %eax movl 8(%ebp), %eax /* fn */ call *%eax popl %edi popl %esi popl %ebx popl %ebp ret #ifdef __ELF__ .section .note.GNU-stack,"",@progbits #endif