1// 2// Protobuf definition for Android tombstones. 3// 4// An app can get hold of these for any `REASON_CRASH_NATIVE` instance of 5// `android.app.ApplicationExitInfo`. 6// 7// https://developer.android.com/reference/android/app/ApplicationExitInfo#getTraceInputStream() 8// 9 10syntax = "proto3"; 11 12option java_package = "com.android.server.os"; 13option java_outer_classname = "TombstoneProtos"; 14 15// NOTE TO OEMS: 16// If you add custom fields to this proto, do not use numbers in the reserved range. 17 18message CrashDetail { 19 bytes name = 1; 20 bytes data = 2; 21 22 reserved 3 to 999; 23} 24 25message StackHistoryBufferEntry { 26 BacktraceFrame addr = 1; 27 uint64 fp = 2; 28 uint64 tag = 3; 29 30 reserved 4 to 999; 31} 32 33message StackHistoryBuffer { 34 uint64 tid = 1; 35 repeated StackHistoryBufferEntry entries = 2; 36 37 reserved 3 to 999; 38} 39 40message Tombstone { 41 Architecture arch = 1; 42 Architecture guest_arch = 24; 43 string build_fingerprint = 2; 44 string revision = 3; 45 string timestamp = 4; 46 47 uint32 pid = 5; 48 uint32 tid = 6; 49 uint32 uid = 7; 50 string selinux_label = 8; 51 52 repeated string command_line = 9; 53 54 // Process uptime in seconds. 55 uint32 process_uptime = 20; 56 57 Signal signal_info = 10; 58 string abort_message = 14; 59 repeated CrashDetail crash_details = 21; 60 repeated Cause causes = 15; 61 62 map<uint32, Thread> threads = 16; 63 map<uint32, Thread> guest_threads = 25; 64 repeated MemoryMapping memory_mappings = 17; 65 repeated LogBuffer log_buffers = 18; 66 repeated FD open_fds = 19; 67 68 uint32 page_size = 22; 69 bool has_been_16kb_mode = 23; 70 71 StackHistoryBuffer stack_history_buffer = 26; 72 73 reserved 27 to 999; 74} 75 76enum Architecture { 77 ARM32 = 0; 78 ARM64 = 1; 79 X86 = 2; 80 X86_64 = 3; 81 RISCV64 = 4; 82 NONE = 5; 83 84 reserved 6 to 999; 85} 86 87message Signal { 88 int32 number = 1; 89 string name = 2; 90 91 int32 code = 3; 92 string code_name = 4; 93 94 bool has_sender = 5; 95 int32 sender_uid = 6; 96 int32 sender_pid = 7; 97 98 bool has_fault_address = 8; 99 uint64 fault_address = 9; 100 // Note, may or may not contain the dump of the actual memory contents. Currently, on arm64, we 101 // only include metadata, and not the contents. 102 MemoryDump fault_adjacent_metadata = 10; 103 104 reserved 11 to 999; 105} 106 107message HeapObject { 108 uint64 address = 1; 109 uint64 size = 2; 110 111 uint64 allocation_tid = 3; 112 repeated BacktraceFrame allocation_backtrace = 4; 113 114 uint64 deallocation_tid = 5; 115 repeated BacktraceFrame deallocation_backtrace = 6; 116} 117 118message MemoryError { 119 enum Tool { 120 GWP_ASAN = 0; 121 SCUDO = 1; 122 123 reserved 2 to 999; 124 } 125 Tool tool = 1; 126 127 enum Type { 128 UNKNOWN = 0; 129 USE_AFTER_FREE = 1; 130 DOUBLE_FREE = 2; 131 INVALID_FREE = 3; 132 BUFFER_OVERFLOW = 4; 133 BUFFER_UNDERFLOW = 5; 134 135 reserved 6 to 999; 136 } 137 Type type = 2; 138 139 oneof location { 140 HeapObject heap = 3; 141 } 142 143 reserved 4 to 999; 144} 145 146message Cause { 147 string human_readable = 1; 148 oneof details { 149 MemoryError memory_error = 2; 150 } 151 152 reserved 3 to 999; 153} 154 155message Register { 156 string name = 1; 157 uint64 u64 = 2; 158 159 reserved 3 to 999; 160} 161 162message Thread { 163 int32 id = 1; 164 string name = 2; 165 repeated Register registers = 3; 166 repeated string backtrace_note = 7; 167 repeated string unreadable_elf_files = 9; 168 repeated BacktraceFrame current_backtrace = 4; 169 repeated MemoryDump memory_dump = 5; 170 int64 tagged_addr_ctrl = 6; 171 int64 pac_enabled_keys = 8; 172 173 reserved 10 to 999; 174} 175 176message BacktraceFrame { 177 uint64 rel_pc = 1; 178 uint64 pc = 2; 179 uint64 sp = 3; 180 181 string function_name = 4; 182 uint64 function_offset = 5; 183 184 string file_name = 6; 185 uint64 file_map_offset = 7; 186 string build_id = 8; 187 188 reserved 9 to 999; 189} 190 191message ArmMTEMetadata { 192 // One memory tag per granule (e.g. every 16 bytes) of regular memory. 193 bytes memory_tags = 1; 194 reserved 2 to 999; 195} 196 197message MemoryDump { 198 string register_name = 1; 199 string mapping_name = 2; 200 uint64 begin_address = 3; 201 bytes memory = 4; 202 oneof metadata { 203 ArmMTEMetadata arm_mte_metadata = 6; 204 } 205 206 reserved 5, 7 to 999; 207} 208 209message MemoryMapping { 210 uint64 begin_address = 1; 211 uint64 end_address = 2; 212 uint64 offset = 3; 213 214 bool read = 4; 215 bool write = 5; 216 bool execute = 6; 217 218 string mapping_name = 7; 219 string build_id = 8; 220 uint64 load_bias = 9; 221 222 reserved 10 to 999; 223} 224 225message FD { 226 int32 fd = 1; 227 string path = 2; 228 string owner = 3; 229 uint64 tag = 4; 230 231 reserved 5 to 999; 232} 233 234message LogBuffer { 235 string name = 1; 236 repeated LogMessage logs = 2; 237 238 reserved 3 to 999; 239} 240 241message LogMessage { 242 string timestamp = 1; 243 uint32 pid = 2; 244 uint32 tid = 3; 245 uint32 priority = 4; 246 string tag = 5; 247 string message = 6; 248 249 reserved 7 to 999; 250} 251