| The Android Open Source Project | 8b23a6c | 2009-03-03 19:30:32 -0800 | [diff] [blame] | 1 | /* 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 |  | 
 | 19 | extern uint64_t start_time, end_time; | 
 | 20 | extern uint64_t elapsed_usecs; | 
 | 21 | extern uint64 Now(); | 
 | 22 |  | 
| The Android Open Source Project | 8b23a6c | 2009-03-03 19:30:32 -0800 | [diff] [blame] | 23 | struct TranslationBlock; | 
 | 24 |  | 
 | 25 | // For tracing dynamic execution of basic blocks | 
 | 26 | typedef 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 | 
 | 45 | typedef 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 | 
 | 58 | typedef 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 | 
 | 69 | typedef 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 | 
 | 82 | typedef 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 | 
 | 93 | typedef 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 | 
 | 102 | typedef 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 |  | 
 | 112 | extern TraceBB trace_bb; | 
 | 113 | extern TraceInsn trace_insn; | 
 | 114 | extern TraceStatic trace_static; | 
 | 115 | extern TraceAddr trace_load; | 
 | 116 | extern TraceAddr trace_store; | 
 | 117 | extern TraceExc trace_exc; | 
 | 118 | extern TracePid trace_pid; | 
 | 119 | extern TraceMethod trace_method; | 
 | 120 |  | 
 | 121 | // The simulated time, in clock ticks, starting with one. | 
 | 122 | extern uint64_t sim_time; | 
 | 123 |  | 
 | 124 | // This variable == 1 if we are currently tracing, otherwise == 0. | 
 | 125 | extern int tracing; | 
 | 126 | extern int trace_all_addr; | 
 | 127 | extern int trace_cache_miss; | 
 | 128 |  | 
 | 129 | extern void start_tracing(); | 
 | 130 | extern void stop_tracing(); | 
 | 131 | extern void trace_init(const char *filename); | 
 | 132 | extern void trace_bb_start(uint32_t bb_addr); | 
| Jack Veenstra | 0139786 | 2009-05-18 16:02:07 -0700 | [diff] [blame] | 133 | extern void trace_add_insn(uint32_t insn, int is_thumb); | 
| The Android Open Source Project | 8b23a6c | 2009-03-03 19:30:32 -0800 | [diff] [blame] | 134 | extern void trace_bb_end(); | 
 | 135 |  | 
 | 136 | extern int get_insn_ticks_arm(uint32_t insn); | 
 | 137 | extern int get_insn_ticks_thumb(uint32_t  insn); | 
 | 138 |  | 
 | 139 | extern void trace_exception(uint32 pc); | 
 | 140 | extern void trace_bb_helper(uint64_t bb_num, TranslationBlock *tb); | 
 | 141 | extern void trace_insn_helper(); | 
 | 142 | extern void sim_dcache_load(uint32_t addr); | 
 | 143 | extern void sim_dcache_store(uint32_t addr, uint32_t val); | 
 | 144 | extern void sim_dcache_swp(uint32_t addr); | 
 | 145 | extern void trace_interpreted_method(uint32_t addr, int call_type); | 
 | 146 |  | 
 | 147 | extern const char *trace_filename; | 
 | 148 | extern int tracing; | 
 | 149 | extern int trace_cache_miss; | 
 | 150 | extern int trace_all_addr; | 
 | 151 |  | 
| David 'Digit' Turner | 4e024bb | 2010-09-22 14:19:28 +0200 | [diff] [blame] | 152 | // Trace process/thread operations | 
 | 153 | extern void trace_switch(int pid); | 
 | 154 | extern void trace_fork(int tgid, int pid); | 
 | 155 | extern void trace_clone(int tgid, int pid); | 
 | 156 | extern void trace_exit(int exitcode); | 
 | 157 | extern void trace_name(char *name); | 
 | 158 |  | 
| The Android Open Source Project | 8b23a6c | 2009-03-03 19:30:32 -0800 | [diff] [blame] | 159 | #endif /* TRACE_H */ |