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