summaryrefslogtreecommitdiffstats
path: root/qemu_tracing
diff options
context:
space:
mode:
authorThe Android Open Source Project <initial-contribution@android.com>2009-01-15 16:12:14 -0800
committerThe Android Open Source Project <initial-contribution@android.com>2009-01-15 16:12:14 -0800
commit5ce01674d44addab570009ceddeaa08d64534092 (patch)
tree7efa8951d39fd254c9a0eba20180548670228ae5 /qemu_tracing
downloadhardware_libhardware_legacy-5ce01674d44addab570009ceddeaa08d64534092.zip
hardware_libhardware_legacy-5ce01674d44addab570009ceddeaa08d64534092.tar.gz
hardware_libhardware_legacy-5ce01674d44addab570009ceddeaa08d64534092.tar.bz2
auto import from //branches/cupcake/...@126645
Diffstat (limited to 'qemu_tracing')
-rw-r--r--qemu_tracing/Android.mk4
-rw-r--r--qemu_tracing/qemu_tracing.c86
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;
+}