blob: 7bf4b821a2cc0ba81d4c07e9195aca2a133ba9c6 [file] [log] [blame]
The Android Open Source Project8b23a6c2009-03-03 19:30:32 -08001/* Copyright (C) 2006-2007 The Android Open Source Project
2**
3** This software is licensed under the terms of the GNU General Public
4** License version 2, as published by the Free Software Foundation, and
5** may be copied, distributed, and modified under those terms.
6**
7** This program is distributed in the hope that it will be useful,
8** but WITHOUT ANY WARRANTY; without even the implied warranty of
9** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10** GNU General Public License for more details.
11*/
12
13#ifndef TRACE_H
14#define TRACE_H
15
16#include <inttypes.h>
17#include "trace_common.h"
18
19extern uint64_t start_time, end_time;
20extern uint64_t elapsed_usecs;
21extern uint64 Now();
22
The Android Open Source Project8b23a6c2009-03-03 19:30:32 -080023struct TranslationBlock;
24
25// For tracing dynamic execution of basic blocks
26typedef struct TraceBB {
27 char *filename;
28 FILE *fstream;
29 BBRec buffer[kMaxNumBasicBlocks];
30 BBRec *next; // points to next record in buffer
31 uint64_t flush_time; // time of last buffer flush
32 char compressed[kCompressedSize];
33 char *compressed_ptr;
34 char *high_water_ptr;
35 int64_t prev_bb_num;
36 uint64_t prev_bb_time;
37 uint64_t current_bb_num;
38 uint64_t current_bb_start_time;
39 uint64_t recnum; // counts number of trace records
40 uint32_t current_bb_addr;
41 int num_insns;
42} TraceBB;
43
44// For tracing simuation start times of instructions
45typedef struct TraceInsn {
46 char *filename;
47 FILE *fstream;
48 InsnRec dummy; // this is here so we can use buffer[-1]
49 InsnRec buffer[kInsnBufferSize];
50 InsnRec *current;
51 uint64_t prev_time; // time of last instruction start
52 char compressed[kCompressedSize];
53 char *compressed_ptr;
54 char *high_water_ptr;
55} TraceInsn;
56
57// For tracing the static information about a basic block
58typedef struct TraceStatic {
59 char *filename;
60 FILE *fstream;
61 uint32_t insns[kMaxInsnPerBB];
62 int next_insn;
63 uint64_t bb_num;
64 uint32_t bb_addr;
65 int is_thumb;
66} TraceStatic;
67
68// For tracing load and store addresses
69typedef struct TraceAddr {
70 char *filename;
71 FILE *fstream;
72 AddrRec buffer[kMaxNumAddrs];
73 AddrRec *next;
74 char compressed[kCompressedSize];
75 char *compressed_ptr;
76 char *high_water_ptr;
77 uint32_t prev_addr;
78 uint64_t prev_time;
79} TraceAddr;
80
81// For tracing exceptions
82typedef struct TraceExc {
83 char *filename;
84 FILE *fstream;
85 char compressed[kCompressedSize];
86 char *compressed_ptr;
87 char *high_water_ptr;
88 uint64_t prev_time;
89 uint64_t prev_bb_recnum;
90} TraceExc;
91
92// For tracing process id changes
93typedef struct TracePid {
94 char *filename;
95 FILE *fstream;
96 char compressed[kCompressedSize];
97 char *compressed_ptr;
98 uint64_t prev_time;
99} TracePid;
100
101// For tracing Dalvik VM method enter and exit
102typedef struct TraceMethod {
103 char *filename;
104 FILE *fstream;
105 char compressed[kCompressedSize];
106 char *compressed_ptr;
107 uint64_t prev_time;
108 uint32_t prev_addr;
109 int32_t prev_pid;
110} TraceMethod;
111
112extern TraceBB trace_bb;
113extern TraceInsn trace_insn;
114extern TraceStatic trace_static;
115extern TraceAddr trace_load;
116extern TraceAddr trace_store;
117extern TraceExc trace_exc;
118extern TracePid trace_pid;
119extern TraceMethod trace_method;
120
121// The simulated time, in clock ticks, starting with one.
122extern uint64_t sim_time;
123
124// This variable == 1 if we are currently tracing, otherwise == 0.
125extern int tracing;
126extern int trace_all_addr;
127extern int trace_cache_miss;
128
129extern void start_tracing();
130extern void stop_tracing();
131extern void trace_init(const char *filename);
132extern void trace_bb_start(uint32_t bb_addr);
Jack Veenstra01397862009-05-18 16:02:07 -0700133extern void trace_add_insn(uint32_t insn, int is_thumb);
The Android Open Source Project8b23a6c2009-03-03 19:30:32 -0800134extern void trace_bb_end();
135
136extern int get_insn_ticks_arm(uint32_t insn);
137extern int get_insn_ticks_thumb(uint32_t insn);
138
139extern void trace_exception(uint32 pc);
140extern void trace_bb_helper(uint64_t bb_num, TranslationBlock *tb);
141extern void trace_insn_helper();
142extern void sim_dcache_load(uint32_t addr);
143extern void sim_dcache_store(uint32_t addr, uint32_t val);
144extern void sim_dcache_swp(uint32_t addr);
145extern void trace_interpreted_method(uint32_t addr, int call_type);
146
147extern const char *trace_filename;
148extern int tracing;
149extern int trace_cache_miss;
150extern int trace_all_addr;
151
David 'Digit' Turner4e024bb2010-09-22 14:19:28 +0200152// Trace process/thread operations
153extern void trace_switch(int pid);
154extern void trace_fork(int tgid, int pid);
155extern void trace_clone(int tgid, int pid);
156extern void trace_exit(int exitcode);
157extern void trace_name(char *name);
158
The Android Open Source Project8b23a6c2009-03-03 19:30:32 -0800159#endif /* TRACE_H */