From ccb268666f8d44aa4c0d305c40e76b881cae563d Mon Sep 17 00:00:00 2001
From: Wunkolo <Wunkolo@gmail.com>
Date: Fri, 1 Dec 2023 22:00:58 -0800
Subject: [PATCH] common/aarch64: Add `VectorCodeGenerator` to
 `CallFarFunction`

`VectorCodeGenerator` will always do far-calls since we cannot resolve any absolute addresses here.
---
 src/common/aarch64/oaknut_util.h | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/src/common/aarch64/oaknut_util.h b/src/common/aarch64/oaknut_util.h
index 16cf7dfe3..12c91dd21 100644
--- a/src/common/aarch64/oaknut_util.h
+++ b/src/common/aarch64/oaknut_util.h
@@ -23,8 +23,15 @@ inline bool IsWithin128M(const oaknut::CodeGenerator& code, uintptr_t target) {
     return IsWithin128M(code.xptr<uintptr_t>(), target);
 }
 
-template <typename T>
-inline void CallFarFunction(oaknut::CodeGenerator& code, const T f) {
+inline bool IsWithin128M(const oaknut::VectorCodeGenerator& code, uintptr_t target) {
+    // VectorCodeGenerator is not the final executable memory, so no assumption can be
+    // made about how far pointers are from each other.
+    // Always assume far-calls
+    return false;
+}
+
+template <typename T, typename Policy>
+inline void CallFarFunction(oaknut::BasicCodeGenerator<Policy>& code, const T f) {
     static_assert(std::is_pointer_v<T>, "Argument must be a (function) pointer.");
     const std::uintptr_t addr = reinterpret_cast<std::uintptr_t>(f);
     if (IsWithin128M(code, addr)) {