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"
|
#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,
|
* 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
|
* 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.
|
* Do a semihosting call.
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue