Skip to content

Commit

Permalink
target-arm/arm-semi.c: Implement A64 specific SyncCacheRange call
Browse files Browse the repository at this point in the history
The A64 semihosting ABI defines a new call SyncCacheRange
for doing a 'clean D-cache and invalidate I-cache' sequence.
Since QEMU doesn't implement caches, we can implement this as a nop.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Christopher Covington <christopher.covington@linaro.org>
Tested-by: Christopher Covington <cov@codeaurora.org>
Message-id: 1439483745-28752-8-git-send-email-peter.maydell@linaro.org
  • Loading branch information
pm215 committed Sep 7, 2015
1 parent faacc04 commit e9ebfbf
Showing 1 changed file with 10 additions and 0 deletions.
10 changes: 10 additions & 0 deletions target-arm/arm-semi.c
Expand Up @@ -58,6 +58,7 @@
#define TARGET_SYS_GET_CMDLINE 0x15
#define TARGET_SYS_HEAPINFO 0x16
#define TARGET_SYS_EXIT 0x18
#define TARGET_SYS_SYNCCACHE 0x19

/* ADP_Stopped_ApplicationExit is used for exit(0),
* anything else is implemented as exit(1) */
Expand Down Expand Up @@ -623,6 +624,15 @@ target_ulong do_arm_semihosting(CPUARMState *env)
ret = (args == ADP_Stopped_ApplicationExit) ? 0 : 1;
gdb_exit(env, ret);
exit(ret);
case TARGET_SYS_SYNCCACHE:
/* Clean the D-cache and invalidate the I-cache for the specified
* virtual address range. This is a nop for us since we don't
* implement caches. This is only present on A64.
*/
if (is_a64(env)) {
return 0;
}
/* fall through -- invalid for A32/T32 */
default:
fprintf(stderr, "qemu: Unsupported SemiHosting SWI 0x%02x\n", nr);
cpu_dump_state(cs, stderr, fprintf, 0);
Expand Down

0 comments on commit e9ebfbf

Please sign in to comment.