[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[RFC v4 07/11] target/i386: Add support for native library calls
From: |
Yeqi Fu |
Subject: |
[RFC v4 07/11] target/i386: Add support for native library calls |
Date: |
Tue, 8 Aug 2023 22:17:35 +0800 |
This commit introduces support for native library calls on the
i386 target. When special instructions reserved for native calls
are encountered, the code now performs address translation and
generates the corresponding native call.
Signed-off-by: Yeqi Fu <fufuyqqqqqq@gmail.com>
---
configs/targets/i386-linux-user.mak | 1 +
configs/targets/x86_64-linux-user.mak | 1 +
target/i386/tcg/translate.c | 27 +++++++++++++++++++++++++++
3 files changed, 29 insertions(+)
diff --git a/configs/targets/i386-linux-user.mak
b/configs/targets/i386-linux-user.mak
index 5b2546a430..2d8bca8f93 100644
--- a/configs/targets/i386-linux-user.mak
+++ b/configs/targets/i386-linux-user.mak
@@ -2,3 +2,4 @@ TARGET_ARCH=i386
TARGET_SYSTBL_ABI=i386
TARGET_SYSTBL=syscall_32.tbl
TARGET_XML_FILES= gdb-xml/i386-32bit.xml
+CONFIG_NATIVE_CALL=y
diff --git a/configs/targets/x86_64-linux-user.mak
b/configs/targets/x86_64-linux-user.mak
index 9ceefbb615..a53b017454 100644
--- a/configs/targets/x86_64-linux-user.mak
+++ b/configs/targets/x86_64-linux-user.mak
@@ -3,3 +3,4 @@ TARGET_BASE_ARCH=i386
TARGET_SYSTBL_ABI=common,64
TARGET_SYSTBL=syscall_64.tbl
TARGET_XML_FILES= gdb-xml/i386-64bit.xml
+CONFIG_NATIVE_CALL=y
diff --git a/target/i386/tcg/translate.c b/target/i386/tcg/translate.c
index 90c7b32f36..28bf4477fb 100644
--- a/target/i386/tcg/translate.c
+++ b/target/i386/tcg/translate.c
@@ -33,6 +33,7 @@
#include "helper-tcg.h"
#include "exec/log.h"
+#include "native/native.h"
#define HELPER_H "helper.h"
#include "exec/helper-info.c.inc"
@@ -6810,6 +6811,32 @@ static bool disas_insn(DisasContext *s, CPUState *cpu)
case 0x1d0 ... 0x1fe:
disas_insn_new(s, cpu, b);
break;
+ case 0x1ff:
+ if (native_bypass_enabled()) {
+ TCGv ret = tcg_temp_new();
+ TCGv arg1 = tcg_temp_new();
+ TCGv arg2 = tcg_temp_new();
+ TCGv arg3 = tcg_temp_new();
+ const char *fun_name = lookup_symbol((s->base.pc_next) & 0xfff);
+#ifdef TARGET_X86_64
+ tcg_gen_mov_tl(arg1, cpu_regs[R_EDI]);
+ tcg_gen_mov_tl(arg2, cpu_regs[R_ESI]);
+ tcg_gen_mov_tl(arg3, cpu_regs[R_EDX]);
+ gen_native_call_i64(fun_name, ret, arg1, arg2, arg3);
+#else
+ uintptr_t ra = GETPC();
+ uint32_t a1 = cpu_ldl_data_ra(env, env->regs[R_ESP] + 4, ra);
+ uint32_t a2 = cpu_ldl_data_ra(env, env->regs[R_ESP] + 8, ra);
+ uint32_t a3 = cpu_ldl_data_ra(env, env->regs[R_ESP] + 12, ra);
+ tcg_gen_movi_tl(arg1, a1);
+ tcg_gen_movi_tl(arg2, a2);
+ tcg_gen_movi_tl(arg3, a3);
+ gen_native_call_i32(fun_name, ret, arg1, arg2, arg3);
+#endif
+ tcg_gen_mov_tl(cpu_regs[R_EAX], ret);
+ break;
+ }
+ break;
default:
goto unknown_op;
}
--
2.34.1
- Re: [RFC v4 03/11] linux-user: Implement envlist_appendenv and add tests for envlist, (continued)
- [RFC v4 05/11] linux-user/elfload: Add support for parsing symbols of native libraries., Yeqi Fu, 2023/08/08
- [RFC v4 04/11] linux-user: Implement native-bypass option support, Yeqi Fu, 2023/08/08
- [RFC v4 06/11] tcg: Add tcg opcodes and helpers for native library calls, Yeqi Fu, 2023/08/08
- [RFC v4 07/11] target/i386: Add support for native library calls,
Yeqi Fu <=
- [RFC v4 08/11] target/mips: Add support for native library calls, Yeqi Fu, 2023/08/08
- [RFC v4 09/11] target/arm: Add support for native library calls, Yeqi Fu, 2023/08/08
- [RFC v4 10/11] tests/tcg/multiarch: Add nativecall.c test, Yeqi Fu, 2023/08/08
- [RFC v4 11/11] docs/user: Add doc for native library calls, Yeqi Fu, 2023/08/08