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