diff options
author | The Android Open Source Project <initial-contribution@android.com> | 2008-10-21 07:00:00 -0700 |
---|---|---|
committer | The Android Open Source Project <initial-contribution@android.com> | 2008-10-21 07:00:00 -0700 |
commit | 55f4e4a5ec657a017e3bf75299ad71fd1c968dd3 (patch) | |
tree | 550ce922ea0e125ac6a9738210ce2939bf2fe901 /hw/goldfish_memlog.c | |
parent | 413f05aaf54fa08c0ae7e997327a4f4a473c0a8d (diff) | |
download | external_qemu-55f4e4a5ec657a017e3bf75299ad71fd1c968dd3.zip external_qemu-55f4e4a5ec657a017e3bf75299ad71fd1c968dd3.tar.gz external_qemu-55f4e4a5ec657a017e3bf75299ad71fd1c968dd3.tar.bz2 |
Initial Contribution
Diffstat (limited to 'hw/goldfish_memlog.c')
-rw-r--r-- | hw/goldfish_memlog.c | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/hw/goldfish_memlog.c b/hw/goldfish_memlog.c new file mode 100644 index 0000000..e2a89a6 --- /dev/null +++ b/hw/goldfish_memlog.c @@ -0,0 +1,78 @@ +/* Copyright (C) 2007-2008 The Android Open Source Project +** +** This software is licensed under the terms of the GNU General Public +** License version 2, as published by the Free Software Foundation, and +** may be copied, distributed, and modified under those terms. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +*/ +#include <unistd.h> +#include <fcntl.h> +#include <string.h> + +#include "vl.h" +#include "goldfish_device.h" +#include "audio/audio.h" + +extern void dprint(const char* fmt, ...); + +int fd = -1; + +static uint32_t memlog_read(void *opaque, target_phys_addr_t offset) +{ + struct goldfish_device *dev = opaque; + offset -= dev->base; + + return 0; +} + +unsigned info[8]; + +static void memlog_write(void *opaque, target_phys_addr_t offset, uint32_t val) +{ + char buf[128]; + struct goldfish_device *dev = opaque; + offset -= dev->base; + + info[offset / 4] = val; + + if (offset == 0) { + /* write PID and VADDR to logfile */ + sprintf(buf,"%08x %08x\n", info[0], info[1]); + write(fd, buf, strlen(buf)); + } +} + + +static CPUReadMemoryFunc *memlog_readfn[] = { + memlog_read, + memlog_read, + memlog_read +}; + +static CPUWriteMemoryFunc *memlog_writefn[] = { + memlog_write, + memlog_write, + memlog_write +}; + +struct goldfish_device memlog_dev; + +void goldfish_memlog_init(uint32_t base) +{ + struct goldfish_device *dev = &memlog_dev; + + dev->name = "goldfish_memlog"; + dev->id = 0; + dev->base = base; + dev->size = 0x1000; + dev->irq_count = 0; + + fd = open("mem.log", /* O_CREAT | */ O_TRUNC | O_WRONLY, 0644); + + goldfish_device_add(dev, memlog_readfn, memlog_writefn, dev); +} + |