blob: 4bbf795009176f8f5307d2fc34e4d54161f0dae2 [file] [log] [blame]
// Copyright 2020 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
#ifndef ZIRCON_KERNEL_PHYS_TEST_CODE_PATCHING_TEST_H_
#define ZIRCON_KERNEL_PHYS_TEST_CODE_PATCHING_TEST_H_
// This file will be included into test.cc, add-one.S, and the generated
// `mutiply_by_factor` assembly stub.
// Concocted patch case IDs.
#define CASE_ID_ADD_ONE 17
#define CASE_ID_MULTIPLY_BY_FACTOR 35
#if defined(__aarch64__)
#define PATCH_SIZE_ADD_ONE 4
#define PATCH_SIZE_MULTIPLY_BY_FACTOR 12
#elif defined(__x86_64__)
#define PATCH_SIZE_ADD_ONE 4
#define PATCH_SIZE_MULTIPLY_BY_FACTOR 8
#else
#error "unknown architecture"
#endif
#ifndef __ASSEMBLER__
#include <cstddef>
#include <cstdint>
#include <ktl/byte.h>
#include <ktl/span.h>
#include <ktl/string_view.h>
constexpr uint32_t kAddOneCaseId = CASE_ID_ADD_ONE;
constexpr size_t kAddOnePatchSize = PATCH_SIZE_ADD_ONE;
constexpr uint32_t kMultiplyByFactorCaseId = CASE_ID_MULTIPLY_BY_FACTOR;
constexpr size_t kMultiplyByFactorPatchSize = PATCH_SIZE_MULTIPLY_BY_FACTOR;
// Defined by //zircon/kernel/phys/test/code-patching:embedding.
ktl::span<const ktl::byte> GetPatchAlternative(ktl::string_view name);
#endif // #ifndef __ASSEMBLER__
#endif // ZIRCON_KERNEL_PHYS_TEST_CODE_PATCHING_TEST_H_