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 Tombstone { 19 Architecture arch = 1; 20 string build_fingerprint = 2; 21 string revision = 3; 22 string timestamp = 4; 23 24 uint32 pid = 5; 25 uint32 tid = 6; 26 uint32 uid = 7; 27 string selinux_label = 8; 28 29 repeated string command_line = 9; 30 31 // Process uptime in seconds. 32 uint32 process_uptime = 20; 33 34 Signal signal_info = 10; 35 string abort_message = 14; 36 repeated Cause causes = 15; 37 38 map<uint32, Thread> threads = 16; 39 repeated MemoryMapping memory_mappings = 17; 40 repeated LogBuffer log_buffers = 18; 41 repeated FD open_fds = 19; 42 43 reserved 21 to 999; 44} 45 46enum Architecture { 47 ARM32 = 0; 48 ARM64 = 1; 49 X86 = 2; 50 X86_64 = 3; 51 RISCV64 = 4; 52 53 reserved 5 to 999; 54} 55 56message Signal { 57 int32 number = 1; 58 string name = 2; 59 60 int32 code = 3; 61 string code_name = 4; 62 63 bool has_sender = 5; 64 int32 sender_uid = 6; 65 int32 sender_pid = 7; 66 67 bool has_fault_address = 8; 68 uint64 fault_address = 9; 69 // Note, may or may not contain the dump of the actual memory contents. Currently, on arm64, we 70 // only include metadata, and not the contents. 71 MemoryDump fault_adjacent_metadata = 10; 72 73 reserved 11 to 999; 74} 75 76message HeapObject { 77 uint64 address = 1; 78 uint64 size = 2; 79 80 uint64 allocation_tid = 3; 81 repeated BacktraceFrame allocation_backtrace = 4; 82 83 uint64 deallocation_tid = 5; 84 repeated BacktraceFrame deallocation_backtrace = 6; 85} 86 87message MemoryError { 88 enum Tool { 89 GWP_ASAN = 0; 90 SCUDO = 1; 91 92 reserved 2 to 999; 93 } 94 Tool tool = 1; 95 96 enum Type { 97 UNKNOWN = 0; 98 USE_AFTER_FREE = 1; 99 DOUBLE_FREE = 2; 100 INVALID_FREE = 3; 101 BUFFER_OVERFLOW = 4; 102 BUFFER_UNDERFLOW = 5; 103 104 reserved 6 to 999; 105 } 106 Type type = 2; 107 108 oneof location { 109 HeapObject heap = 3; 110 } 111 112 reserved 4 to 999; 113} 114 115message Cause { 116 string human_readable = 1; 117 oneof details { 118 MemoryError memory_error = 2; 119 } 120 121 reserved 3 to 999; 122} 123 124message Register { 125 string name = 1; 126 uint64 u64 = 2; 127 128 reserved 3 to 999; 129} 130 131message Thread { 132 int32 id = 1; 133 string name = 2; 134 repeated Register registers = 3; 135 repeated string backtrace_note = 7; 136 repeated string unreadable_elf_files = 9; 137 repeated BacktraceFrame current_backtrace = 4; 138 repeated MemoryDump memory_dump = 5; 139 int64 tagged_addr_ctrl = 6; 140 int64 pac_enabled_keys = 8; 141 142 reserved 10 to 999; 143} 144 145message BacktraceFrame { 146 uint64 rel_pc = 1; 147 uint64 pc = 2; 148 uint64 sp = 3; 149 150 string function_name = 4; 151 uint64 function_offset = 5; 152 153 string file_name = 6; 154 uint64 file_map_offset = 7; 155 string build_id = 8; 156 157 reserved 9 to 999; 158} 159 160message ArmMTEMetadata { 161 // One memory tag per granule (e.g. every 16 bytes) of regular memory. 162 bytes memory_tags = 1; 163 reserved 2 to 999; 164} 165 166message MemoryDump { 167 string register_name = 1; 168 string mapping_name = 2; 169 uint64 begin_address = 3; 170 bytes memory = 4; 171 oneof metadata { 172 ArmMTEMetadata arm_mte_metadata = 6; 173 } 174 175 reserved 5, 7 to 999; 176} 177 178message MemoryMapping { 179 uint64 begin_address = 1; 180 uint64 end_address = 2; 181 uint64 offset = 3; 182 183 bool read = 4; 184 bool write = 5; 185 bool execute = 6; 186 187 string mapping_name = 7; 188 string build_id = 8; 189 uint64 load_bias = 9; 190 191 reserved 10 to 999; 192} 193 194message FD { 195 int32 fd = 1; 196 string path = 2; 197 string owner = 3; 198 uint64 tag = 4; 199 200 reserved 5 to 999; 201} 202 203message LogBuffer { 204 string name = 1; 205 repeated LogMessage logs = 2; 206 207 reserved 3 to 999; 208} 209 210message LogMessage { 211 string timestamp = 1; 212 uint32 pid = 2; 213 uint32 tid = 3; 214 uint32 priority = 4; 215 string tag = 5; 216 string message = 6; 217 218 reserved 7 to 999; 219} 220