blob: 0b62c130f60c0eec1c2f90d09adc94646b82fa83 [file] [log] [blame]
// Copyright 2017 The Fuchsia Authors
//
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file or at
// https://opensource.org/licenses/MIT
#pragma once
// Use these when pushing a register from the calling frame.
// Here we can easily describe where to find the value of the register.
.macro push_reg reg
pushq \reg
.cfi_adjust_cfa_offset 8
.cfi_rel_offset \reg, 0
.endm
.macro pop_reg reg
popq \reg
.cfi_adjust_cfa_offset -8
.cfi_same_value \reg
.endm
// Use these when pushing a value other than the above, or when pushing
// a register that is not from the calling frame.
// Here we just punt on trying to describe the value pushed, the caller
// can do so if desired.
.macro push_value value
pushq \value
.cfi_adjust_cfa_offset 8
.endm
.macro pop_value value
popq \value
.cfi_adjust_cfa_offset -8
.endm
// Use these when adding/subtracting values from the stack pointer.
// The value must be positive.
.macro sub_from_sp value
sub $\value, %rsp
.cfi_adjust_cfa_offset \value
.endm
.macro add_to_sp value
add $\value, %rsp
.cfi_adjust_cfa_offset -\value
.endm
// For "functions" that are not normal functions in the ABI sense.
// Treat all previous frame registers as having the same value.
#define ALL_CFI_SAME_VALUE \
.cfi_same_value %rax ; \
.cfi_same_value %rbx ; \
.cfi_same_value %rcx ; \
.cfi_same_value %rdx ; \
.cfi_same_value %rsi ; \
.cfi_same_value %rdi ; \
.cfi_same_value %rbp ; \
.cfi_same_value %r8 ; \
.cfi_same_value %r9 ; \
.cfi_same_value %r10 ; \
.cfi_same_value %r11 ; \
.cfi_same_value %r12 ; \
.cfi_same_value %r13 ; \
.cfi_same_value %r14 ; \
.cfi_same_value %r15
// Treat all previous frame registers as not being restorable.
#define ALL_CFI_UNDEFINED \
.cfi_undefined %rax ; \
.cfi_undefined %rbx ; \
.cfi_undefined %rcx ; \
.cfi_undefined %rdx ; \
.cfi_undefined %rsi ; \
.cfi_undefined %rdi ; \
.cfi_undefined %rbp ; \
.cfi_undefined %r8 ; \
.cfi_undefined %r9 ; \
.cfi_undefined %r10 ; \
.cfi_undefined %r11 ; \
.cfi_undefined %r12 ; \
.cfi_undefined %r13 ; \
.cfi_undefined %r14 ; \
.cfi_undefined %r15