1288208c386810fef725aa448a9f46bd2772bec8cDavid 'Digit' Turner#include <stdio.h>
2288208c386810fef725aa448a9f46bd2772bec8cDavid 'Digit' Turner#include <stdlib.h>
3288208c386810fef725aa448a9f46bd2772bec8cDavid 'Digit' Turner#include <string.h>
4288208c386810fef725aa448a9f46bd2772bec8cDavid 'Digit' Turner
5288208c386810fef725aa448a9f46bd2772bec8cDavid 'Digit' Turner#include "cpu.h"
6288208c386810fef725aa448a9f46bd2772bec8cDavid 'Digit' Turner#include "exec-all.h"
7288208c386810fef725aa448a9f46bd2772bec8cDavid 'Digit' Turner#include "gdbstub.h"
8288208c386810fef725aa448a9f46bd2772bec8cDavid 'Digit' Turner#include "def-helper.h"
9288208c386810fef725aa448a9f46bd2772bec8cDavid 'Digit' Turner#include "helper-android.h"
10288208c386810fef725aa448a9f46bd2772bec8cDavid 'Digit' Turner#include "qemu-common.h"
11288208c386810fef725aa448a9f46bd2772bec8cDavid 'Digit' Turner
123011b40fe40c7261c2c838d0037157dee556faceDavid 'Digit' Turner/* copy a string from the simulated virtual space to a buffer in QEMU */
133011b40fe40c7261c2c838d0037157dee556faceDavid 'Digit' Turnervoid vstrcpy(target_ulong ptr, char *buf, int max)
143011b40fe40c7261c2c838d0037157dee556faceDavid 'Digit' Turner{
153011b40fe40c7261c2c838d0037157dee556faceDavid 'Digit' Turner    int  index;
163011b40fe40c7261c2c838d0037157dee556faceDavid 'Digit' Turner
173011b40fe40c7261c2c838d0037157dee556faceDavid 'Digit' Turner    if (buf == NULL) return;
183011b40fe40c7261c2c838d0037157dee556faceDavid 'Digit' Turner
193011b40fe40c7261c2c838d0037157dee556faceDavid 'Digit' Turner    for (index = 0; index < max; index += 1) {
203011b40fe40c7261c2c838d0037157dee556faceDavid 'Digit' Turner        cpu_physical_memory_read(ptr + index, (uint8_t*)buf + index, 1);
213011b40fe40c7261c2c838d0037157dee556faceDavid 'Digit' Turner        if (buf[index] == 0)
223011b40fe40c7261c2c838d0037157dee556faceDavid 'Digit' Turner            break;
233011b40fe40c7261c2c838d0037157dee556faceDavid 'Digit' Turner    }
243011b40fe40c7261c2c838d0037157dee556faceDavid 'Digit' Turner}
253011b40fe40c7261c2c838d0037157dee556faceDavid 'Digit' Turner
26288208c386810fef725aa448a9f46bd2772bec8cDavid 'Digit' Turner#ifdef CONFIG_TRACE
27406a59bd0a2e7a38cd840a5c08602e3a36bd2df8David 'Digit' Turner#include "android-trace.h"
28288208c386810fef725aa448a9f46bd2772bec8cDavid 'Digit' Turner
29288208c386810fef725aa448a9f46bd2772bec8cDavid 'Digit' Turnervoid  HELPER(traceTicks)(uint32_t  ticks)
30288208c386810fef725aa448a9f46bd2772bec8cDavid 'Digit' Turner{
31288208c386810fef725aa448a9f46bd2772bec8cDavid 'Digit' Turner    sim_time += ticks;
32288208c386810fef725aa448a9f46bd2772bec8cDavid 'Digit' Turner}
33288208c386810fef725aa448a9f46bd2772bec8cDavid 'Digit' Turner
34288208c386810fef725aa448a9f46bd2772bec8cDavid 'Digit' Turnervoid  HELPER(traceInsn)(void)
35288208c386810fef725aa448a9f46bd2772bec8cDavid 'Digit' Turner{
36288208c386810fef725aa448a9f46bd2772bec8cDavid 'Digit' Turner    trace_insn_helper();
37288208c386810fef725aa448a9f46bd2772bec8cDavid 'Digit' Turner}
38288208c386810fef725aa448a9f46bd2772bec8cDavid 'Digit' Turner
39288208c386810fef725aa448a9f46bd2772bec8cDavid 'Digit' Turner#if HOST_LONG_BITS == 32
40288208c386810fef725aa448a9f46bd2772bec8cDavid 'Digit' Turnervoid HELPER(traceBB32)(uint64_t  bb_num, uint32_t  tb)
41288208c386810fef725aa448a9f46bd2772bec8cDavid 'Digit' Turner{
42288208c386810fef725aa448a9f46bd2772bec8cDavid 'Digit' Turner    trace_bb_helper(bb_num, (void*)tb);
43288208c386810fef725aa448a9f46bd2772bec8cDavid 'Digit' Turner}
44288208c386810fef725aa448a9f46bd2772bec8cDavid 'Digit' Turner#endif
45288208c386810fef725aa448a9f46bd2772bec8cDavid 'Digit' Turner
46288208c386810fef725aa448a9f46bd2772bec8cDavid 'Digit' Turner#if HOST_LONG_BITS == 64
47288208c386810fef725aa448a9f46bd2772bec8cDavid 'Digit' Turnervoid HELPER(traceBB64)(uint64_t  bb_num, uint64_t  tb)
48288208c386810fef725aa448a9f46bd2772bec8cDavid 'Digit' Turner{
49288208c386810fef725aa448a9f46bd2772bec8cDavid 'Digit' Turner    trace_bb_helper(bb_num, (void*)tb);
50288208c386810fef725aa448a9f46bd2772bec8cDavid 'Digit' Turner}
51288208c386810fef725aa448a9f46bd2772bec8cDavid 'Digit' Turner#endif
52288208c386810fef725aa448a9f46bd2772bec8cDavid 'Digit' Turner
53288208c386810fef725aa448a9f46bd2772bec8cDavid 'Digit' Turner#endif /* CONFIG_TRACE */
54288208c386810fef725aa448a9f46bd2772bec8cDavid 'Digit' Turner
55288208c386810fef725aa448a9f46bd2772bec8cDavid 'Digit' Turner#ifdef CONFIG_MEMCHECK
56288208c386810fef725aa448a9f46bd2772bec8cDavid 'Digit' Turner#include "memcheck/memcheck_api.h"
57288208c386810fef725aa448a9f46bd2772bec8cDavid 'Digit' Turner
58288208c386810fef725aa448a9f46bd2772bec8cDavid 'Digit' Turnervoid HELPER(on_call)(target_ulong pc, target_ulong ret) {
59288208c386810fef725aa448a9f46bd2772bec8cDavid 'Digit' Turner    memcheck_on_call(pc, ret);
60288208c386810fef725aa448a9f46bd2772bec8cDavid 'Digit' Turner}
61288208c386810fef725aa448a9f46bd2772bec8cDavid 'Digit' Turner
62288208c386810fef725aa448a9f46bd2772bec8cDavid 'Digit' Turnervoid HELPER(on_ret)(target_ulong ret) {
63288208c386810fef725aa448a9f46bd2772bec8cDavid 'Digit' Turner    memcheck_on_ret(ret);
64288208c386810fef725aa448a9f46bd2772bec8cDavid 'Digit' Turner}
65288208c386810fef725aa448a9f46bd2772bec8cDavid 'Digit' Turner#endif  // CONFIG_MEMCHECK
66