semihosting: Move GET_ARG/SET_ARG earlier in the file
Moving this to be useful for another function besides do_common_semihosting. Reviewed-by: Alex Bennée <alex.bennee@linaro.org> Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
189878ae23
commit
3753b00e57
@ -181,6 +181,30 @@ static LayoutInfo common_semi_find_bases(CPUState *cs)
|
||||
|
||||
#include "common-semi-target.h"
|
||||
|
||||
/*
|
||||
* Read the input value from the argument block; fail the semihosting
|
||||
* call if the memory read fails. Eventually we could use a generic
|
||||
* CPUState helper function here.
|
||||
*/
|
||||
|
||||
#define GET_ARG(n) do { \
|
||||
if (is_64bit_semihosting(env)) { \
|
||||
if (get_user_u64(arg ## n, args + (n) * 8)) { \
|
||||
goto do_fault; \
|
||||
} \
|
||||
} else { \
|
||||
if (get_user_u32(arg ## n, args + (n) * 4)) { \
|
||||
goto do_fault; \
|
||||
} \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define SET_ARG(n, val) \
|
||||
(is_64bit_semihosting(env) ? \
|
||||
put_user_u64(val, args + (n) * 8) : \
|
||||
put_user_u32(val, args + (n) * 4))
|
||||
|
||||
|
||||
/*
|
||||
* The semihosting API has no concept of its errno being thread-safe,
|
||||
* as the API design predates SMP CPUs and was intended as a simple
|
||||
@ -507,30 +531,6 @@ static const GuestFDFunctions guestfd_fns[] = {
|
||||
},
|
||||
};
|
||||
|
||||
/*
|
||||
* Read the input value from the argument block; fail the semihosting
|
||||
* call if the memory read fails. Eventually we could use a generic
|
||||
* CPUState helper function here.
|
||||
*/
|
||||
|
||||
#define GET_ARG(n) do { \
|
||||
if (is_64bit_semihosting(env)) { \
|
||||
if (get_user_u64(arg ## n, args + (n) * 8)) { \
|
||||
goto do_fault; \
|
||||
} \
|
||||
} else { \
|
||||
if (get_user_u32(arg ## n, args + (n) * 4)) { \
|
||||
goto do_fault; \
|
||||
} \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define SET_ARG(n, val) \
|
||||
(is_64bit_semihosting(env) ? \
|
||||
put_user_u64(val, args + (n) * 8) : \
|
||||
put_user_u32(val, args + (n) * 4))
|
||||
|
||||
|
||||
/*
|
||||
* Do a semihosting call.
|
||||
*
|
||||
|
Loading…
Reference in New Issue
Block a user