...

Text file src/runtime/cgo/gcc_386.S

Documentation: runtime/cgo

     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.file "gcc_386.S"
     6
     7/*
     8 * Windows still insists on underscore prefixes for C function names.
     9 */
    10#if defined(_WIN32)
    11#define EXT(s) _##s
    12#else
    13#define EXT(s) s
    14#endif
    15
    16/*
    17 * void crosscall1(void (*fn)(void), void (*setg_gcc)(void*), void *g)
    18 *
    19 * Calling into the gc tool chain, where all registers are caller save.
    20 * Called from standard x86 ABI, where %ebp, %ebx, %esi,
    21 * and %edi are callee-save, so they must be saved explicitly.
    22 */
    23.globl EXT(crosscall1)
    24EXT(crosscall1):
    25	pushl %ebp
    26	movl %esp, %ebp
    27	pushl %ebx
    28	pushl %esi
    29	pushl %edi
    30
    31	movl 16(%ebp), %eax	/* g */
    32	pushl %eax
    33	movl 12(%ebp), %eax	/* setg_gcc */
    34	call *%eax
    35	popl %eax
    36
    37	movl 8(%ebp), %eax	/* fn */
    38	call *%eax
    39
    40	popl %edi
    41	popl %esi
    42	popl %ebx
    43	popl %ebp
    44	ret
    45
    46#ifdef __ELF__
    47.section .note.GNU-stack,"",@progbits
    48#endif

View as plain text