diff options
author | The Android Open Source Project <initial-contribution@android.com> | 2009-03-03 19:32:14 -0800 |
---|---|---|
committer | The Android Open Source Project <initial-contribution@android.com> | 2009-03-03 19:32:14 -0800 |
commit | cc490161f6af9e4a6842ee827e4bfc43bc4509d5 (patch) | |
tree | a60e0ed36ef1d3a43530c46562c86c9cd431744c /qemu_tracing | |
parent | 3bbe5328cd738976443822502e23fb3971c5f87b (diff) | |
download | hardware_libhardware_legacy-cc490161f6af9e4a6842ee827e4bfc43bc4509d5.zip hardware_libhardware_legacy-cc490161f6af9e4a6842ee827e4bfc43bc4509d5.tar.gz hardware_libhardware_legacy-cc490161f6af9e4a6842ee827e4bfc43bc4509d5.tar.bz2 |
auto import from //depot/cupcake/@135843
Diffstat (limited to 'qemu_tracing')
-rw-r--r-- | qemu_tracing/Android.mk | 4 | ||||
-rw-r--r-- | qemu_tracing/qemu_tracing.c | 86 |
2 files changed, 90 insertions, 0 deletions
diff --git a/qemu_tracing/Android.mk b/qemu_tracing/Android.mk new file mode 100644 index 0000000..8c5bab0 --- /dev/null +++ b/qemu_tracing/Android.mk @@ -0,0 +1,4 @@ +# Copyright 2007 The Android Open Source Project + +LOCAL_SRC_FILES += qemu_tracing/qemu_tracing.c + diff --git a/qemu_tracing/qemu_tracing.c b/qemu_tracing/qemu_tracing.c new file mode 100644 index 0000000..847102c --- /dev/null +++ b/qemu_tracing/qemu_tracing.c @@ -0,0 +1,86 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include <stdio.h> +#include <string.h> +#include <errno.h> +#include <sys/stat.h> +#include <sys/types.h> +#include <fcntl.h> +#include <unistd.h> + +// This is the pathname to the sysfs file that enables and disables +// tracing on the qemu emulator. +#define SYS_QEMU_TRACE_STATE "/sys/qemu_trace/state" + + +// This is the pathname to the sysfs file that adds new (address, symbol) +// pairs to the trace. +#define SYS_QEMU_TRACE_SYMBOL "/sys/qemu_trace/symbol" + +// The maximum length of a symbol name +#define MAX_SYMBOL_NAME_LENGTH (4 * 1024) + +// Allow space in the buffer for the address plus whitespace. +#define MAX_BUF_SIZE (MAX_SYMBOL_NAME_LENGTH + 20) + +// return 0 on success, or an error if the qemu driver cannot be opened +int qemu_start_tracing() +{ + int fd = open(SYS_QEMU_TRACE_STATE, O_WRONLY); + if (fd < 0) + return fd; + write(fd, "1\n", 2); + close(fd); + return 0; +} + +int qemu_stop_tracing() +{ + int fd = open(SYS_QEMU_TRACE_STATE, O_WRONLY); + if (fd < 0) + return fd; + write(fd, "0\n", 2); + close(fd); + return 0; +} + +int qemu_add_mapping(unsigned int addr, const char *name) +{ + char buf[MAX_BUF_SIZE]; + + if (strlen(name) > MAX_SYMBOL_NAME_LENGTH) + return EINVAL; + int fd = open(SYS_QEMU_TRACE_SYMBOL, O_WRONLY); + if (fd < 0) + return fd; + sprintf(buf, "%x %s\n", addr, name); + write(fd, buf, strlen(buf)); + close(fd); + return 0; +} + +int qemu_remove_mapping(unsigned int addr) +{ + char buf[MAX_BUF_SIZE]; + + int fd = open(SYS_QEMU_TRACE_SYMBOL, O_WRONLY); + if (fd < 0) + return fd; + sprintf(buf, "%x\n", addr); + write(fd, buf, strlen(buf)); + close(fd); + return 0; +} |