blob: f0559d7101d8546089a59ddbd94c74048b4b318d [file] [log] [blame]
// Copyright 2021 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef SRC_VIRTUALIZATION_TESTS_HYPERVISOR_ASM_H_
#define SRC_VIRTUALIZATION_TESTS_HYPERVISOR_ASM_H_
// Architecture-independent macros for assembly code.
#ifndef __ASSEMBLER__
#error File should be included only by assembly.
#endif
// clang-format off
// Define new function 'name'.
//
// The function should be terminated by a call to the END_FUNCTION macro:
//
// FUNCTION foo
// ...
// END_FUNCTION
//
// Two symbols '<name>_start' and '<name>_end' are defined surrounding the
// function.
//
// The macro calls the architecture-specific macros 'arch_function_start name
// start end' and 'arch_function_end name start end' just after the start
// symbol and just prior to the end symbol respectively.
.macro FUNCTION name
.balign 32
// Define the symbol "${name}_start".
.global \name\()_start
.type \name\()_start, STT_FUNC
\name\()_start:
// Perform any architecture-specific set up.
arch_function_start \name\()_start \name\()_end
// Define the end of the current function.
.macro END_FUNCTION
.purgem END_FUNCTION
// Perform any architecture-specific tear down.
arch_function_end \name\()_start \name\()_end
// Define the symbol "${name}_end".
.global \name\()_end
\name\()_end:
.endm
.endm
#endif // SRC_VIRTUALIZATION_TESTS_HYPERVISOR_ASM_H_