mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-09-09 08:17:53 -06:00
semihosting: Move softmmu-uaccess.h functions out of line
Rather that static (and not even inline) functions within a header, move the functions to semihosting/uaccess.c. Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
259739ce74
commit
0a9221810c
3 changed files with 57 additions and 37 deletions
|
@ -42,47 +42,15 @@
|
||||||
|
|
||||||
#define put_user_ual(arg, p) put_user_u32(arg, p)
|
#define put_user_ual(arg, p) put_user_u32(arg, p)
|
||||||
|
|
||||||
static void *softmmu_lock_user(CPUArchState *env, target_ulong addr,
|
void *softmmu_lock_user(CPUArchState *env, target_ulong addr,
|
||||||
target_ulong len, bool copy)
|
target_ulong len, bool copy);
|
||||||
{
|
|
||||||
void *p = malloc(len);
|
|
||||||
if (p && copy) {
|
|
||||||
if (cpu_memory_rw_debug(env_cpu(env), addr, p, len, 0)) {
|
|
||||||
free(p);
|
|
||||||
p = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return p;
|
|
||||||
}
|
|
||||||
#define lock_user(type, p, len, copy) softmmu_lock_user(env, p, len, copy)
|
#define lock_user(type, p, len, copy) softmmu_lock_user(env, p, len, copy)
|
||||||
|
|
||||||
static char *softmmu_lock_user_string(CPUArchState *env, target_ulong addr)
|
char *softmmu_lock_user_string(CPUArchState *env, target_ulong addr);
|
||||||
{
|
|
||||||
/* TODO: Make this something that isn't fixed size. */
|
|
||||||
char *s = malloc(1024);
|
|
||||||
size_t len = 0;
|
|
||||||
|
|
||||||
if (!s) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
do {
|
|
||||||
if (cpu_memory_rw_debug(env_cpu(env), addr++, s + len, 1, 0)) {
|
|
||||||
free(s);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
} while (s[len++]);
|
|
||||||
return s;
|
|
||||||
}
|
|
||||||
#define lock_user_string(p) softmmu_lock_user_string(env, p)
|
#define lock_user_string(p) softmmu_lock_user_string(env, p)
|
||||||
|
|
||||||
static void softmmu_unlock_user(CPUArchState *env, void *p, target_ulong addr,
|
void softmmu_unlock_user(CPUArchState *env, void *p,
|
||||||
target_ulong len)
|
target_ulong addr, target_ulong len);
|
||||||
{
|
|
||||||
if (len) {
|
|
||||||
cpu_memory_rw_debug(env_cpu(env), addr, p, len, 1);
|
|
||||||
}
|
|
||||||
free(p);
|
|
||||||
}
|
|
||||||
#define unlock_user(s, args, len) softmmu_unlock_user(env, s, args, len)
|
#define unlock_user(s, args, len) softmmu_unlock_user(env, s, args, len)
|
||||||
|
|
||||||
#endif /* SEMIHOSTING_SOFTMMU_UACCESS_H */
|
#endif /* SEMIHOSTING_SOFTMMU_UACCESS_H */
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
specific_ss.add(when: ['CONFIG_SEMIHOSTING', 'CONFIG_SOFTMMU'], if_true: files(
|
specific_ss.add(when: ['CONFIG_SEMIHOSTING', 'CONFIG_SOFTMMU'], if_true: files(
|
||||||
'config.c',
|
'config.c',
|
||||||
'console.c',
|
'console.c',
|
||||||
|
'uaccess.c',
|
||||||
))
|
))
|
||||||
|
|
||||||
specific_ss.add(when: ['CONFIG_ARM_COMPATIBLE_SEMIHOSTING'],
|
specific_ss.add(when: ['CONFIG_ARM_COMPATIBLE_SEMIHOSTING'],
|
||||||
|
|
51
semihosting/uaccess.c
Normal file
51
semihosting/uaccess.c
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
/*
|
||||||
|
* Helper routines to provide target memory access for semihosting
|
||||||
|
* syscalls in system emulation mode.
|
||||||
|
*
|
||||||
|
* Copyright (c) 2007 CodeSourcery.
|
||||||
|
*
|
||||||
|
* This code is licensed under the GPL
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "qemu/osdep.h"
|
||||||
|
#include "semihosting/softmmu-uaccess.h"
|
||||||
|
|
||||||
|
void *softmmu_lock_user(CPUArchState *env, target_ulong addr,
|
||||||
|
target_ulong len, bool copy)
|
||||||
|
{
|
||||||
|
void *p = malloc(len);
|
||||||
|
if (p && copy) {
|
||||||
|
if (cpu_memory_rw_debug(env_cpu(env), addr, p, len, 0)) {
|
||||||
|
free(p);
|
||||||
|
p = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *softmmu_lock_user_string(CPUArchState *env, target_ulong addr)
|
||||||
|
{
|
||||||
|
/* TODO: Make this something that isn't fixed size. */
|
||||||
|
char *s = malloc(1024);
|
||||||
|
size_t len = 0;
|
||||||
|
|
||||||
|
if (!s) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
do {
|
||||||
|
if (cpu_memory_rw_debug(env_cpu(env), addr++, s + len, 1, 0)) {
|
||||||
|
free(s);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
} while (s[len++]);
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
void softmmu_unlock_user(CPUArchState *env, void *p,
|
||||||
|
target_ulong addr, target_ulong len)
|
||||||
|
{
|
||||||
|
if (len) {
|
||||||
|
cpu_memory_rw_debug(env_cpu(env), addr, p, len, 1);
|
||||||
|
}
|
||||||
|
free(p);
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue