]> Git Repo - qemu.git/blob - include/semihosting/softmmu-uaccess.h
works with less than base ISA qemu-system-riscv32 -M virt -bios none -kernel output...
[qemu.git] / include / semihosting / softmmu-uaccess.h
1 /*
2  * Helper routines to provide target memory access for semihosting
3  * syscalls in system emulation mode.
4  *
5  * Copyright (c) 2007 CodeSourcery.
6  *
7  * This code is licensed under the GPL
8  */
9
10 #ifndef SEMIHOSTING_SOFTMMU_UACCESS_H
11 #define SEMIHOSTING_SOFTMMU_UACCESS_H
12
13 #include "cpu.h"
14
15 #define get_user_u64(val, addr)                                         \
16     ({ uint64_t val_ = 0;                                               \
17        int ret_ = cpu_memory_rw_debug(env_cpu(env), (addr),             \
18                                       &val_, sizeof(val_), 0);          \
19        (val) = tswap64(val_); ret_; })
20
21 #define get_user_u32(val, addr)                                         \
22     ({ uint32_t val_ = 0;                                               \
23        int ret_ = cpu_memory_rw_debug(env_cpu(env), (addr),             \
24                                       &val_, sizeof(val_), 0);          \
25        (val) = tswap32(val_); ret_; })
26
27 #define get_user_u8(val, addr)                                          \
28     ({ uint8_t val_ = 0;                                                \
29        int ret_ = cpu_memory_rw_debug(env_cpu(env), (addr),             \
30                                       &val_, sizeof(val_), 0);          \
31        (val) = val_; ret_; })
32
33 #define get_user_ual(arg, p) get_user_u32(arg, p)
34
35 #define put_user_u64(val, addr)                                         \
36     ({ uint64_t val_ = tswap64(val);                                    \
37        cpu_memory_rw_debug(env_cpu(env), (addr), &val_, sizeof(val_), 1); })
38
39 #define put_user_u32(val, addr)                                         \
40     ({ uint32_t val_ = tswap32(val);                                    \
41        cpu_memory_rw_debug(env_cpu(env), (addr), &val_, sizeof(val_), 1); })
42
43 #define put_user_ual(arg, p) put_user_u32(arg, p)
44
45 void *softmmu_lock_user(CPUArchState *env, target_ulong addr,
46                         target_ulong len, bool copy);
47 #define lock_user(type, p, len, copy) softmmu_lock_user(env, p, len, copy)
48
49 char *softmmu_lock_user_string(CPUArchState *env, target_ulong addr);
50 #define lock_user_string(p) softmmu_lock_user_string(env, p)
51
52 void softmmu_unlock_user(CPUArchState *env, void *p,
53                          target_ulong addr, target_ulong len);
54 #define unlock_user(s, args, len) softmmu_unlock_user(env, s, args, len)
55
56 ssize_t softmmu_strlen_user(CPUArchState *env, target_ulong addr);
57 #define target_strlen(p) softmmu_strlen_user(env, p)
58
59 #endif /* SEMIHOSTING_SOFTMMU_UACCESS_H */
This page took 0.028021 seconds and 4 git commands to generate.