mirror of
https://github.com/golang/go
synced 2024-11-19 14:44:40 -07:00
b8f8969fbd
Shared libraries on ppc64le will require a larger minimum stack frame (because the ABI mandates that the TOC pointer is available at 24(R1)). Part 3 of that is using a #define in the ppc64 assembly to refer to the size of the fixed part of the stack (finding all these took me about a week!). Change-Id: I50f22fe1c47af1ec59da1bd7ea8f84a4750df9b7 Reviewed-on: https://go-review.googlesource.com/15525 Reviewed-by: Ian Lance Taylor <iant@golang.org>
32 lines
1.0 KiB
C
32 lines
1.0 KiB
C
// Copyright 2015 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.
|
|
|
|
// FIXED_FRAME defines the size of the fixed part of a stack frame. A stack
|
|
// frame looks like this:
|
|
//
|
|
// +---------------------+
|
|
// | local variable area |
|
|
// +---------------------+
|
|
// | argument area |
|
|
// +---------------------+ <- R1+FIXED_FRAME
|
|
// | fixed area |
|
|
// +---------------------+ <- R1
|
|
//
|
|
// So a function that sets up a stack frame at all uses as least FIXED_FRAME
|
|
// bytes of stack. This mostly affects assembly that calls other functions
|
|
// with arguments (the arguments should be stored at FIXED_FRAME+0(R1),
|
|
// FIXED_FRAME+8(R1) etc) and some other low-level places.
|
|
//
|
|
// The reason for using a constant is when code is compiled as PIC on ppc64le
|
|
// the fixed part of the stack is 32 bytes large (although PIC is not actually
|
|
// supported yet).
|
|
|
|
#ifdef GOARCH_ppc64
|
|
#define FIXED_FRAME 8
|
|
#endif
|
|
|
|
#ifdef GOARCH_ppc64le
|
|
#define FIXED_FRAME 8
|
|
#endif
|