Skip to content

Commit 3dd5bc7

Browse files
make it look not insane
1 parent dceeff1 commit 3dd5bc7

File tree

2 files changed

+10
-38
lines changed

2 files changed

+10
-38
lines changed

src/glibc/lind_syscall/addr_translation.h

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,9 @@ extern "C"
4545
static inline uint64_t
4646
__lind_translate_uaddr_to_host (const uint64_t uaddr, const uint64_t cageid)
4747
{
48-
if (cageid == __lind_cageid)
48+
uint64_t __cageid = cageid & LIND_ARG_CAGEID_MASK;
49+
50+
if (__cageid == __lind_cageid && ((cageid & LIND_ARG_TRANSLATE_FLAG) != 0))
4951
return __lind_base + uaddr;
5052

5153
return uaddr;
@@ -63,11 +65,6 @@ extern "C"
6365
// Per-argument translation signaling for threei calls.
6466
#define LIND_ARG_TRANSLATE_FLAG (1ULL << 63)
6567
#define LIND_ARG_CAGEID_MASK (~LIND_ARG_TRANSLATE_FLAG)
66-
#define LIND_ARG_SHOULD_TRANSLATE(arg_cageid) \
67-
(((arg_cageid) & LIND_ARG_TRANSLATE_FLAG) != 0)
68-
#define LIND_ARG_CAGEID_STRIP(arg_cageid) ((arg_cageid) & LIND_ARG_CAGEID_MASK)
69-
#define LIND_ARG_CAGEID_TRANSLATE(cageid) \
70-
((uint64_t)(cageid) | LIND_ARG_TRANSLATE_FLAG)
7168

7269
/* Translate an array of guest iovec structures to host layout.
7370
Each iov_base is a wasm32 guest pointer; we split the translated

src/glibc/lind_syscall/lind_syscall.c

Lines changed: 7 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -77,41 +77,16 @@ int make_threei_call (unsigned int callnumber,
7777
uint64_t arg6, uint64_t arg6cageid,
7878
int translate_errno)
7979
{
80-
if (LIND_ARG_SHOULD_TRANSLATE(arg1cageid)) {
81-
arg1 = TRANSLATE_GUEST_POINTER_TO_HOST((const void *)(uintptr_t)arg1);
82-
}
83-
if (LIND_ARG_SHOULD_TRANSLATE(arg2cageid)) {
84-
arg2 = TRANSLATE_GUEST_POINTER_TO_HOST((const void *)(uintptr_t)arg2);
85-
}
86-
if (LIND_ARG_SHOULD_TRANSLATE(arg3cageid)) {
87-
arg3 = TRANSLATE_GUEST_POINTER_TO_HOST((const void *)(uintptr_t)arg3);
88-
}
89-
if (LIND_ARG_SHOULD_TRANSLATE(arg4cageid)) {
90-
arg4 = TRANSLATE_GUEST_POINTER_TO_HOST((const void *)(uintptr_t)arg4);
91-
}
92-
if (LIND_ARG_SHOULD_TRANSLATE(arg5cageid)) {
93-
arg5 = TRANSLATE_GUEST_POINTER_TO_HOST((const void *)(uintptr_t)arg5);
94-
}
95-
if (LIND_ARG_SHOULD_TRANSLATE(arg6cageid)) {
96-
arg6 = TRANSLATE_GUEST_POINTER_TO_HOST((const void *)(uintptr_t)arg6);
97-
}
98-
99-
arg1cageid = LIND_ARG_CAGEID_STRIP(arg1cageid);
100-
arg2cageid = LIND_ARG_CAGEID_STRIP(arg2cageid);
101-
arg3cageid = LIND_ARG_CAGEID_STRIP(arg3cageid);
102-
arg4cageid = LIND_ARG_CAGEID_STRIP(arg4cageid);
103-
arg5cageid = LIND_ARG_CAGEID_STRIP(arg5cageid);
104-
arg6cageid = LIND_ARG_CAGEID_STRIP(arg6cageid);
105-
10680
int ret = __lind_make_syscall_trampoline(callnumber,
10781
callname,
10882
self_cageid, target_cageid,
109-
arg1, arg1cageid,
110-
arg2, arg2cageid,
111-
arg3, arg3cageid,
112-
arg4, arg4cageid,
113-
arg5, arg5cageid,
114-
arg6, arg6cageid);
83+
TRANSLATE_UADDR_TO_HOST(arg1, arg1cageid), arg1cageid,
84+
TRANSLATE_UADDR_TO_HOST(arg1, arg1cageid), arg1cageid,
85+
TRANSLATE_UADDR_TO_HOST(arg1, arg1cageid), arg1cageid,
86+
TRANSLATE_UADDR_TO_HOST(arg1, arg1cageid), arg1cageid,
87+
TRANSLATE_UADDR_TO_HOST(arg1, arg1cageid), arg1cageid,
88+
TRANSLATE_UADDR_TO_HOST(arg1, arg1cageid), arg1cageid);
89+
11590
// if translate_errno is not enabled, we do not do any further process to errno handling and directly return the result
11691
if(translate_errno == 0) return ret;
11792
// handle the errno

0 commit comments

Comments
 (0)