|  | // | 
|  | // Protobuf definition for Android tombstones. | 
|  | // | 
|  | // An app can get hold of these for any `REASON_CRASH_NATIVE` instance of | 
|  | // `android.app.ApplicationExitInfo`. | 
|  | // | 
|  | // https://developer.android.com/reference/android/app/ApplicationExitInfo#getTraceInputStream() | 
|  | // | 
|  |  | 
|  | syntax = "proto3"; | 
|  |  | 
|  | option java_package = "com.android.server.os"; | 
|  | option java_outer_classname = "TombstoneProtos"; | 
|  |  | 
|  | // NOTE TO OEMS: | 
|  | // If you add custom fields to this proto, do not use numbers in the reserved range. | 
|  |  | 
|  | message Tombstone { | 
|  | Architecture arch = 1; | 
|  | string build_fingerprint = 2; | 
|  | string revision = 3; | 
|  | string timestamp = 4; | 
|  |  | 
|  | uint32 pid = 5; | 
|  | uint32 tid = 6; | 
|  | uint32 uid = 7; | 
|  | string selinux_label = 8; | 
|  |  | 
|  | repeated string command_line = 9; | 
|  |  | 
|  | // Process uptime in seconds. | 
|  | uint32 process_uptime = 20; | 
|  |  | 
|  | Signal signal_info = 10; | 
|  | string abort_message = 14; | 
|  | repeated Cause causes = 15; | 
|  |  | 
|  | map<uint32, Thread> threads = 16; | 
|  | repeated MemoryMapping memory_mappings = 17; | 
|  | repeated LogBuffer log_buffers = 18; | 
|  | repeated FD open_fds = 19; | 
|  |  | 
|  | reserved 21 to 999; | 
|  | } | 
|  |  | 
|  | enum Architecture { | 
|  | ARM32 = 0; | 
|  | ARM64 = 1; | 
|  | X86 = 2; | 
|  | X86_64 = 3; | 
|  | RISCV64 = 4; | 
|  |  | 
|  | reserved 5 to 999; | 
|  | } | 
|  |  | 
|  | message Signal { | 
|  | int32 number = 1; | 
|  | string name = 2; | 
|  |  | 
|  | int32 code = 3; | 
|  | string code_name = 4; | 
|  |  | 
|  | bool has_sender = 5; | 
|  | int32 sender_uid = 6; | 
|  | int32 sender_pid = 7; | 
|  |  | 
|  | bool has_fault_address = 8; | 
|  | uint64 fault_address = 9; | 
|  | // Note, may or may not contain the dump of the actual memory contents. Currently, on arm64, we | 
|  | // only include metadata, and not the contents. | 
|  | MemoryDump fault_adjacent_metadata = 10; | 
|  |  | 
|  | reserved 11 to 999; | 
|  | } | 
|  |  | 
|  | message HeapObject { | 
|  | uint64 address = 1; | 
|  | uint64 size = 2; | 
|  |  | 
|  | uint64 allocation_tid = 3; | 
|  | repeated BacktraceFrame allocation_backtrace = 4; | 
|  |  | 
|  | uint64 deallocation_tid = 5; | 
|  | repeated BacktraceFrame deallocation_backtrace = 6; | 
|  | } | 
|  |  | 
|  | message MemoryError { | 
|  | enum Tool { | 
|  | GWP_ASAN = 0; | 
|  | SCUDO = 1; | 
|  |  | 
|  | reserved 2 to 999; | 
|  | } | 
|  | Tool tool = 1; | 
|  |  | 
|  | enum Type { | 
|  | UNKNOWN = 0; | 
|  | USE_AFTER_FREE = 1; | 
|  | DOUBLE_FREE = 2; | 
|  | INVALID_FREE = 3; | 
|  | BUFFER_OVERFLOW = 4; | 
|  | BUFFER_UNDERFLOW = 5; | 
|  |  | 
|  | reserved 6 to 999; | 
|  | } | 
|  | Type type = 2; | 
|  |  | 
|  | oneof location { | 
|  | HeapObject heap = 3; | 
|  | } | 
|  |  | 
|  | reserved 4 to 999; | 
|  | } | 
|  |  | 
|  | message Cause { | 
|  | string human_readable = 1; | 
|  | oneof details { | 
|  | MemoryError memory_error = 2; | 
|  | } | 
|  |  | 
|  | reserved 3 to 999; | 
|  | } | 
|  |  | 
|  | message Register { | 
|  | string name = 1; | 
|  | uint64 u64 = 2; | 
|  |  | 
|  | reserved 3 to 999; | 
|  | } | 
|  |  | 
|  | message Thread { | 
|  | int32 id = 1; | 
|  | string name = 2; | 
|  | repeated Register registers = 3; | 
|  | repeated string backtrace_note = 7; | 
|  | repeated string unreadable_elf_files = 9; | 
|  | repeated BacktraceFrame current_backtrace = 4; | 
|  | repeated MemoryDump memory_dump = 5; | 
|  | int64 tagged_addr_ctrl = 6; | 
|  | int64 pac_enabled_keys = 8; | 
|  |  | 
|  | reserved 10 to 999; | 
|  | } | 
|  |  | 
|  | message BacktraceFrame { | 
|  | uint64 rel_pc = 1; | 
|  | uint64 pc = 2; | 
|  | uint64 sp = 3; | 
|  |  | 
|  | string function_name = 4; | 
|  | uint64 function_offset = 5; | 
|  |  | 
|  | string file_name = 6; | 
|  | uint64 file_map_offset = 7; | 
|  | string build_id = 8; | 
|  |  | 
|  | reserved 9 to 999; | 
|  | } | 
|  |  | 
|  | message ArmMTEMetadata { | 
|  | // One memory tag per granule (e.g. every 16 bytes) of regular memory. | 
|  | bytes memory_tags = 1; | 
|  | reserved 2 to 999; | 
|  | } | 
|  |  | 
|  | message MemoryDump { | 
|  | string register_name = 1; | 
|  | string mapping_name = 2; | 
|  | uint64 begin_address = 3; | 
|  | bytes memory = 4; | 
|  | oneof metadata { | 
|  | ArmMTEMetadata arm_mte_metadata = 6; | 
|  | } | 
|  |  | 
|  | reserved 5, 7 to 999; | 
|  | } | 
|  |  | 
|  | message MemoryMapping { | 
|  | uint64 begin_address = 1; | 
|  | uint64 end_address = 2; | 
|  | uint64 offset = 3; | 
|  |  | 
|  | bool read = 4; | 
|  | bool write = 5; | 
|  | bool execute = 6; | 
|  |  | 
|  | string mapping_name = 7; | 
|  | string build_id = 8; | 
|  | uint64 load_bias = 9; | 
|  |  | 
|  | reserved 10 to 999; | 
|  | } | 
|  |  | 
|  | message FD { | 
|  | int32 fd = 1; | 
|  | string path = 2; | 
|  | string owner = 3; | 
|  | uint64 tag = 4; | 
|  |  | 
|  | reserved 5 to 999; | 
|  | } | 
|  |  | 
|  | message LogBuffer { | 
|  | string name = 1; | 
|  | repeated LogMessage logs = 2; | 
|  |  | 
|  | reserved 3 to 999; | 
|  | } | 
|  |  | 
|  | message LogMessage { | 
|  | string timestamp = 1; | 
|  | uint32 pid = 2; | 
|  | uint32 tid = 3; | 
|  | uint32 priority = 4; | 
|  | string tag = 5; | 
|  | string message = 6; | 
|  |  | 
|  | reserved 7 to 999; | 
|  | } |