xref: /aosp_15_r20/system/extras/simpleperf/branch_list.proto (revision 288bf5226967eb3dac5cce6c939ccc2a7f2b4fe5)
1*288bf522SAndroid Build Coastguard Worker/*
2*288bf522SAndroid Build Coastguard Worker * Copyright (C) 2020 The Android Open Source Project
3*288bf522SAndroid Build Coastguard Worker *
4*288bf522SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
5*288bf522SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
6*288bf522SAndroid Build Coastguard Worker * You may obtain a copy of the License at
7*288bf522SAndroid Build Coastguard Worker *
8*288bf522SAndroid Build Coastguard Worker *      http://www.apache.org/licenses/LICENSE-2.0
9*288bf522SAndroid Build Coastguard Worker *
10*288bf522SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
11*288bf522SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
12*288bf522SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*288bf522SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
14*288bf522SAndroid Build Coastguard Worker * limitations under the License.
15*288bf522SAndroid Build Coastguard Worker */
16*288bf522SAndroid Build Coastguard Worker
17*288bf522SAndroid Build Coastguard Worker// The branch list file format is generated by the inject command. The new format is:
18*288bf522SAndroid Build Coastguard Worker// struct BranchListFile {
19*288bf522SAndroid Build Coastguard Worker//   char magic[24] = "simpleperf:EtmBranchList";
20*288bf522SAndroid Build Coastguard Worker//   uint32 version = 1;
21*288bf522SAndroid Build Coastguard Worker//   uint8 compressed;  // 1 if compressed, otherwise 0
22*288bf522SAndroid Build Coastguard Worker//   struct {
23*288bf522SAndroid Build Coastguard Worker//      uint32 msg_size;
24*288bf522SAndroid Build Coastguard Worker//      message BranchList msg;
25*288bf522SAndroid Build Coastguard Worker//   } msgs[];
26*288bf522SAndroid Build Coastguard Worker// };
27*288bf522SAndroid Build Coastguard Worker// The old format is a single BranchList message.
28*288bf522SAndroid Build Coastguard Worker//
29*288bf522SAndroid Build Coastguard Worker
30*288bf522SAndroid Build Coastguard Workersyntax = "proto3";
31*288bf522SAndroid Build Coastguard Worker
32*288bf522SAndroid Build Coastguard Workerpackage simpleperf.proto;
33*288bf522SAndroid Build Coastguard Worker
34*288bf522SAndroid Build Coastguard Workermessage BranchList {
35*288bf522SAndroid Build Coastguard Worker  // Used to identify format in generated proto files.
36*288bf522SAndroid Build Coastguard Worker  // Should always be "simpleperf:EtmBranchList".
37*288bf522SAndroid Build Coastguard Worker  string magic = 1;
38*288bf522SAndroid Build Coastguard Worker  repeated ETMBinary etm_data = 2;
39*288bf522SAndroid Build Coastguard Worker  LBRData lbr_data = 3;
40*288bf522SAndroid Build Coastguard Worker}
41*288bf522SAndroid Build Coastguard Worker
42*288bf522SAndroid Build Coastguard Workermessage ETMBinary {
43*288bf522SAndroid Build Coastguard Worker  string path = 1;
44*288bf522SAndroid Build Coastguard Worker  string build_id = 2;
45*288bf522SAndroid Build Coastguard Worker
46*288bf522SAndroid Build Coastguard Worker  message Address {
47*288bf522SAndroid Build Coastguard Worker    // vaddr in binary, instr addr before the first branch
48*288bf522SAndroid Build Coastguard Worker    uint64 addr = 1;
49*288bf522SAndroid Build Coastguard Worker
50*288bf522SAndroid Build Coastguard Worker    message Branch {
51*288bf522SAndroid Build Coastguard Worker      // Each bit represents a branch: 0 for not branch, 1 for branch.
52*288bf522SAndroid Build Coastguard Worker      // Bit 0 comes first, bit 7 comes last.
53*288bf522SAndroid Build Coastguard Worker      bytes branch = 1;
54*288bf522SAndroid Build Coastguard Worker      uint32 branch_size = 2;
55*288bf522SAndroid Build Coastguard Worker      uint64 count = 3;
56*288bf522SAndroid Build Coastguard Worker    }
57*288bf522SAndroid Build Coastguard Worker
58*288bf522SAndroid Build Coastguard Worker    repeated Branch branches = 2;
59*288bf522SAndroid Build Coastguard Worker  }
60*288bf522SAndroid Build Coastguard Worker
61*288bf522SAndroid Build Coastguard Worker  repeated Address addrs = 3;
62*288bf522SAndroid Build Coastguard Worker
63*288bf522SAndroid Build Coastguard Worker  enum BinaryType {
64*288bf522SAndroid Build Coastguard Worker    ELF_FILE = 0;
65*288bf522SAndroid Build Coastguard Worker    KERNEL = 1;
66*288bf522SAndroid Build Coastguard Worker    KERNEL_MODULE = 2;
67*288bf522SAndroid Build Coastguard Worker  }
68*288bf522SAndroid Build Coastguard Worker  BinaryType type = 4;
69*288bf522SAndroid Build Coastguard Worker
70*288bf522SAndroid Build Coastguard Worker  message KernelBinaryInfo {
71*288bf522SAndroid Build Coastguard Worker    // kernel_start_addr is used to convert kernel ip address to vaddr in vmlinux.
72*288bf522SAndroid Build Coastguard Worker    // If it is zero, the Address in KERNEL binary has been converted to vaddr. Otherwise,
73*288bf522SAndroid Build Coastguard Worker    // the Address in KERNEL binary is still ip address, and need to be converted later.
74*288bf522SAndroid Build Coastguard Worker    uint64 kernel_start_addr = 1;
75*288bf522SAndroid Build Coastguard Worker  }
76*288bf522SAndroid Build Coastguard Worker
77*288bf522SAndroid Build Coastguard Worker  KernelBinaryInfo kernel_info = 5;
78*288bf522SAndroid Build Coastguard Worker}
79*288bf522SAndroid Build Coastguard Worker
80*288bf522SAndroid Build Coastguard Workermessage LBRData {
81*288bf522SAndroid Build Coastguard Worker  repeated Sample samples = 1;
82*288bf522SAndroid Build Coastguard Worker  repeated Binary binaries = 2;
83*288bf522SAndroid Build Coastguard Worker
84*288bf522SAndroid Build Coastguard Worker  message Sample {
85*288bf522SAndroid Build Coastguard Worker    // If binary_id >= 1, it refers to LBRData.binaries[binary_id - 1]. Otherwise, it's invalid.
86*288bf522SAndroid Build Coastguard Worker    uint32 binary_id = 1;
87*288bf522SAndroid Build Coastguard Worker    uint64 vaddr_in_file = 2;
88*288bf522SAndroid Build Coastguard Worker    repeated Branch branches = 3;
89*288bf522SAndroid Build Coastguard Worker
90*288bf522SAndroid Build Coastguard Worker    message Branch {
91*288bf522SAndroid Build Coastguard Worker      // If from_binary_id >= 1, it refers to LBRData.binaries[from_binary_id - 1]. Otherwise, it's
92*288bf522SAndroid Build Coastguard Worker      // invalid.
93*288bf522SAndroid Build Coastguard Worker      uint32 from_binary_id = 1;
94*288bf522SAndroid Build Coastguard Worker      // If to_binary_id >= 1, it refers to LBRData.binaries[to_binary_id - 1]. Otherwise, it's
95*288bf522SAndroid Build Coastguard Worker      // invalid.
96*288bf522SAndroid Build Coastguard Worker      uint32 to_binary_id = 2;
97*288bf522SAndroid Build Coastguard Worker      uint64 from_vaddr_in_file = 3;
98*288bf522SAndroid Build Coastguard Worker      uint64 to_vaddr_in_file = 4;
99*288bf522SAndroid Build Coastguard Worker    }
100*288bf522SAndroid Build Coastguard Worker  }
101*288bf522SAndroid Build Coastguard Worker
102*288bf522SAndroid Build Coastguard Worker  message Binary {
103*288bf522SAndroid Build Coastguard Worker    string path = 1;
104*288bf522SAndroid Build Coastguard Worker    string build_id = 2;
105*288bf522SAndroid Build Coastguard Worker  }
106*288bf522SAndroid Build Coastguard Worker}
107