xref: /aosp_15_r20/system/core/debuggerd/proto/tombstone.proto (revision 00c7fec1bb09f3284aad6a6f96d2f63dfc3650ad)
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