...
▽

Text file src/runtime/asm_ppc64x.h

Documentation: runtime

     1// Copyright 2015 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// FIXED_FRAME defines the size of the fixed part of a stack frame. A stack
     6// frame looks like this:
     7//
     8// +---------------------+
     9// | local variable area |
    10// +---------------------+
    11// | argument area       |
    12// +---------------------+ <- R1+FIXED_FRAME
    13// | fixed area          |
    14// +---------------------+ <- R1
    15//
    16// So a function that sets up a stack frame at all uses as least FIXED_FRAME
    17// bytes of stack. This mostly affects assembly that calls other functions
    18// with arguments (the arguments should be stored at FIXED_FRAME+0(R1),
    19// FIXED_FRAME+8(R1) etc) and some other low-level places.
    20//
    21// The reason for using a constant is to make supporting PIC easier (although
    22// we only support PIC on ppc64le which has a minimum 32 bytes of stack frame,
    23// and currently always use that much, PIC on ppc64 would need to use 48).
    24
    25#define FIXED_FRAME 32
    26
    27// aix/ppc64 uses XCOFF which uses function descriptors.
    28// AIX cannot perform the TOC relocation in a text section.
    29// Therefore, these descriptors must live in a data section.
    30#ifdef GOOS_aix
    31#ifdef GOARCH_ppc64
    32#define GO_PPC64X_HAS_FUNCDESC
    33#define DEFINE_PPC64X_FUNCDESC(funcname, localfuncname)	\
    34	DATA	funcname+0(SB)/8, $localfuncname(SB) 	\
    35	DATA	funcname+8(SB)/8, $TOC(SB)		\
    36	DATA	funcname+16(SB)/8, $0			\
    37	GLOBL	funcname(SB), NOPTR, $24
    38#endif
    39#endif

View as plain text