aboutsummaryrefslogtreecommitdiffstats
path: root/emulator/qtools/stack_dump.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'emulator/qtools/stack_dump.cpp')
-rw-r--r--emulator/qtools/stack_dump.cpp156
1 files changed, 0 insertions, 156 deletions
diff --git a/emulator/qtools/stack_dump.cpp b/emulator/qtools/stack_dump.cpp
deleted file mode 100644
index f685cd0..0000000
--- a/emulator/qtools/stack_dump.cpp
+++ /dev/null
@@ -1,156 +0,0 @@
-// Copyright 2006 The Android Open Source Project
-
-#include <stdio.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <inttypes.h>
-#include <assert.h>
-#include "trace_reader.h"
-#include "bitvector.h"
-#include "parse_options.h"
-#include "armdis.h"
-
-typedef TraceReader<> TraceReaderType;
-
-#include "parse_options-inl.h"
-#include "callstack.h"
-
-static uint64_t debugTime;
-static uint64_t dumpTime = 0;
-
-class MyFrame : public StackFrame<symbol_type> {
- public:
- void push(int stackLevel, uint64_t time, CallStackBase *base);
- void pop(int stackLevel, uint64_t time, CallStackBase *base);
- void getFrameType(char *type);
-};
-
-typedef CallStack<MyFrame> CallStackType;
-
-void MyFrame::getFrameType(char *type)
-{
- strcpy(type, "----");
- if (flags & kCausedException)
- type[0] = 'e';
- if (flags & kInterpreted)
- type[1] = 'm';
- if (function->region->flags & region_type::kIsKernelRegion)
- type[2] = 'k';
- if (function->flags & symbol_type::kIsVectorTable)
- type[3] = 'v';
-}
-
-void MyFrame::push(int stackLevel, uint64_t time, CallStackBase *base)
-{
- char type[5];
-
- if (dumpTime > 0)
- return;
-
- getFrameType(type);
- printf("%llu en thr %d %s %3d", time, base->getId(), type, stackLevel);
- for (int ii = 0; ii < stackLevel; ++ii)
- printf(".");
- printf(" 0x%08x %s\n", addr, function->name);
-}
-
-void MyFrame::pop(int stackLevel, uint64_t time, CallStackBase *base)
-{
- char type[5];
-
- if (dumpTime > 0)
- return;
-
- getFrameType(type);
- printf("%llu x thr %d %s %3d", time, base->getId(), type, stackLevel);
- for (int ii = 0; ii < stackLevel; ++ii)
- printf(".");
- printf(" 0x%08x %s\n", addr, function->name);
-}
-
-static const int kNumStackFrames = 500;
-static const int kMaxThreads = (32 * 1024);
-CallStackType *stacks[kMaxThreads];
-
-void Usage(const char *program)
-{
- fprintf(stderr, "Usage: %s [options] [-- -d dumpTime] trace_name elf_file\n",
- program);
- OptionsUsage();
-}
-
-bool localParseOptions(int argc, char **argv)
-{
- bool err = false;
- while (!err) {
- int opt = getopt(argc, argv, "+d:");
- if (opt == -1)
- break;
- switch (opt) {
- case 'd':
- dumpTime = strtoull(optarg, NULL, 0);
- break;
- default:
- err = true;
- break;
- }
- }
- return err;
-}
-
-int main(int argc, char **argv)
-{
- ParseOptions(argc, argv);
- localParseOptions(argc, argv);
- if (argc - optind != 2) {
- Usage(argv[0]);
- exit(1);
- }
-
- char *qemu_trace_file = argv[optind++];
- char *elf_file = argv[optind++];
- TraceReaderType *trace = new TraceReaderType;
- trace->Open(qemu_trace_file);
- trace->ReadKernelSymbols(elf_file);
- trace->SetRoot(root);
-
- BBEvent event;
- while (1) {
- BBEvent ignored;
- symbol_type *function;
-
- if (GetNextValidEvent(trace, &event, &ignored, &function))
- break;
- if (event.bb_num == 0)
- break;
-
- // Get the stack for the current thread
- CallStackType *pStack = stacks[event.pid];
-
- // If the stack does not exist, then allocate a new one.
- if (pStack == NULL) {
- pStack = new CallStackType(event.pid, kNumStackFrames, trace);
- stacks[event.pid] = pStack;
- }
- if (debugTime != 0 && event.time >= debugTime)
- printf("debug time: %lld\n", debugTime);
-
- // Update the stack
- pStack->updateStack(&event, function);
-
- // If the user requested a stack dump at a certain time,
- // and we are at that time, then dump the stack and exit.
- if (dumpTime > 0 && event.time >= dumpTime) {
- pStack->showStack(stdout);
- break;
- }
- }
-
- for (int ii = 0; ii < kMaxThreads; ++ii) {
- if (stacks[ii])
- stacks[ii]->popAll(event.time);
- }
-
- delete trace;
- return 0;
-}