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 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; reserved 4 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 BacktraceFrame current_backtrace = 4; repeated MemoryDump memory_dump = 5; int64 tagged_addr_ctrl = 6; reserved 8 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; }