//
// 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 CrashDetail {
  bytes name = 1;
  bytes data = 2;
}

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 CrashDetail crash_details = 21;
  repeated Cause causes = 15;

  map<uint32, Thread> threads = 16;
  repeated MemoryMapping memory_mappings = 17;
  repeated LogBuffer log_buffers = 18;
  repeated FD open_fds = 19;

  uint32 page_size = 22;
  bool has_been_16kb_mode = 23;

  reserved 24 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;
}
