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