1800b99b8Sopenharmony_ci/* 2800b99b8Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd. 3800b99b8Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4800b99b8Sopenharmony_ci * you may not use this file except in compliance with the License. 5800b99b8Sopenharmony_ci * You may obtain a copy of the License at 6800b99b8Sopenharmony_ci * 7800b99b8Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8800b99b8Sopenharmony_ci * 9800b99b8Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10800b99b8Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11800b99b8Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12800b99b8Sopenharmony_ci * See the License for the specific language governing permissions and 13800b99b8Sopenharmony_ci * limitations under the License. 14800b99b8Sopenharmony_ci */ 15800b99b8Sopenharmony_ci 16800b99b8Sopenharmony_ci#include "dwarf_op.h" 17800b99b8Sopenharmony_ci#include <cstring> 18800b99b8Sopenharmony_ci#include "dfx_log.h" 19800b99b8Sopenharmony_ci 20800b99b8Sopenharmony_cinamespace OHOS { 21800b99b8Sopenharmony_cinamespace HiviewDFX { 22800b99b8Sopenharmony_cinamespace { 23800b99b8Sopenharmony_ci#undef LOG_DOMAIN 24800b99b8Sopenharmony_ci#undef LOG_TAG 25800b99b8Sopenharmony_ci#define LOG_DOMAIN 0xD002D11 26800b99b8Sopenharmony_ci#define LOG_TAG "DfxDwarfOp" 27800b99b8Sopenharmony_ci} 28800b99b8Sopenharmony_ci 29800b99b8Sopenharmony_citemplate <typename AddressType> 30800b99b8Sopenharmony_ciAddressType DwarfOp<AddressType>::Eval(DfxRegs& regs, AddressType initStackValue, AddressType startPtr) 31800b99b8Sopenharmony_ci{ 32800b99b8Sopenharmony_ci DFXLOGU("Eval: initStackValue=%{public}" PRIuPTR ", startPtr=%{public}" PRIuPTR "", initStackValue, startPtr); 33800b99b8Sopenharmony_ci StackReset(initStackValue); 34800b99b8Sopenharmony_ci 35800b99b8Sopenharmony_ci uintptr_t addr = startPtr; 36800b99b8Sopenharmony_ci uintptr_t length = memory_->ReadUleb128(addr); 37800b99b8Sopenharmony_ci uintptr_t end = addr + length; 38800b99b8Sopenharmony_ci while (addr < end) { 39800b99b8Sopenharmony_ci if (!Decode(regs, addr)) { 40800b99b8Sopenharmony_ci break; 41800b99b8Sopenharmony_ci } 42800b99b8Sopenharmony_ci } 43800b99b8Sopenharmony_ci 44800b99b8Sopenharmony_ci if (stack_.empty()) { 45800b99b8Sopenharmony_ci DFXLOGE("Eval: stack empty"); 46800b99b8Sopenharmony_ci return 0; 47800b99b8Sopenharmony_ci } 48800b99b8Sopenharmony_ci return static_cast<AddressType>(StackPop()); 49800b99b8Sopenharmony_ci} 50800b99b8Sopenharmony_ci 51800b99b8Sopenharmony_citemplate <typename AddressType> 52800b99b8Sopenharmony_cibool DwarfOp<AddressType>::Decode(DfxRegs& regs, uintptr_t& addr) 53800b99b8Sopenharmony_ci{ 54800b99b8Sopenharmony_ci uint8_t opcode; 55800b99b8Sopenharmony_ci memory_->ReadU8(addr, &opcode, true); 56800b99b8Sopenharmony_ci switch (opcode) { 57800b99b8Sopenharmony_ci case DW_OP_addr: { 58800b99b8Sopenharmony_ci DFXLOGU("DW_OP_addr"); 59800b99b8Sopenharmony_ci uintptr_t val; 60800b99b8Sopenharmony_ci memory_->ReadUptr(addr, &val, true); 61800b99b8Sopenharmony_ci OpPush(val); 62800b99b8Sopenharmony_ci } 63800b99b8Sopenharmony_ci break; 64800b99b8Sopenharmony_ci case DW_OP_deref: 65800b99b8Sopenharmony_ci DFXLOGU("DW_OP_deref"); 66800b99b8Sopenharmony_ci OpDeref(); 67800b99b8Sopenharmony_ci break; 68800b99b8Sopenharmony_ci case DW_OP_const1u: { 69800b99b8Sopenharmony_ci DFXLOGU("DW_OP_const1u"); 70800b99b8Sopenharmony_ci uint8_t val; 71800b99b8Sopenharmony_ci memory_->ReadU8(addr, &val, true); 72800b99b8Sopenharmony_ci OpPush(val); 73800b99b8Sopenharmony_ci } 74800b99b8Sopenharmony_ci break; 75800b99b8Sopenharmony_ci case DW_OP_const1s: { 76800b99b8Sopenharmony_ci DFXLOGU("DW_OP_const1s"); 77800b99b8Sopenharmony_ci int8_t val; 78800b99b8Sopenharmony_ci memory_->ReadS8(addr, &val, true); 79800b99b8Sopenharmony_ci OpPush(val); 80800b99b8Sopenharmony_ci } 81800b99b8Sopenharmony_ci break; 82800b99b8Sopenharmony_ci case DW_OP_const2u: { 83800b99b8Sopenharmony_ci DFXLOGU("DW_OP_const2u"); 84800b99b8Sopenharmony_ci uint16_t val; 85800b99b8Sopenharmony_ci memory_->ReadU16(addr, &val, true); 86800b99b8Sopenharmony_ci OpPush(val); 87800b99b8Sopenharmony_ci } 88800b99b8Sopenharmony_ci break; 89800b99b8Sopenharmony_ci case DW_OP_const2s: { 90800b99b8Sopenharmony_ci DFXLOGU("DW_OP_const2s"); 91800b99b8Sopenharmony_ci int16_t val; 92800b99b8Sopenharmony_ci memory_->ReadS16(addr, &val, true); 93800b99b8Sopenharmony_ci OpPush(val); 94800b99b8Sopenharmony_ci } 95800b99b8Sopenharmony_ci break; 96800b99b8Sopenharmony_ci case DW_OP_const4u: { 97800b99b8Sopenharmony_ci DFXLOGU("DW_OP_const4u"); 98800b99b8Sopenharmony_ci uint32_t val; 99800b99b8Sopenharmony_ci memory_->ReadU32(addr, &val, true); 100800b99b8Sopenharmony_ci OpPush(val); 101800b99b8Sopenharmony_ci } 102800b99b8Sopenharmony_ci break; 103800b99b8Sopenharmony_ci case DW_OP_const4s: { 104800b99b8Sopenharmony_ci DFXLOGU("DW_OP_const4s"); 105800b99b8Sopenharmony_ci int32_t val; 106800b99b8Sopenharmony_ci memory_->ReadS32(addr, &val, true); 107800b99b8Sopenharmony_ci OpPush(val); 108800b99b8Sopenharmony_ci } 109800b99b8Sopenharmony_ci break; 110800b99b8Sopenharmony_ci case DW_OP_const8u: { 111800b99b8Sopenharmony_ci DFXLOGU("DW_OP_const8u"); 112800b99b8Sopenharmony_ci uint64_t val; 113800b99b8Sopenharmony_ci memory_->ReadU64(addr, &val, true); 114800b99b8Sopenharmony_ci OpPush(val); 115800b99b8Sopenharmony_ci } 116800b99b8Sopenharmony_ci break; 117800b99b8Sopenharmony_ci case DW_OP_const8s: { 118800b99b8Sopenharmony_ci DFXLOGU("DW_OP_const8s"); 119800b99b8Sopenharmony_ci int64_t val; 120800b99b8Sopenharmony_ci memory_->ReadS64(addr, &val, true); 121800b99b8Sopenharmony_ci OpPush(val); 122800b99b8Sopenharmony_ci } 123800b99b8Sopenharmony_ci break; 124800b99b8Sopenharmony_ci case DW_OP_constu: 125800b99b8Sopenharmony_ci DFXLOGU("DW_OP_constu"); 126800b99b8Sopenharmony_ci OpPush(memory_->ReadUleb128(addr)); 127800b99b8Sopenharmony_ci break; 128800b99b8Sopenharmony_ci case DW_OP_consts: 129800b99b8Sopenharmony_ci DFXLOGU("DW_OP_consts"); 130800b99b8Sopenharmony_ci OpPush(memory_->ReadSleb128(addr)); 131800b99b8Sopenharmony_ci break; 132800b99b8Sopenharmony_ci case DW_OP_dup: 133800b99b8Sopenharmony_ci DFXLOGU("DW_OP_dup"); 134800b99b8Sopenharmony_ci OpDup(); 135800b99b8Sopenharmony_ci break; 136800b99b8Sopenharmony_ci case DW_OP_drop: 137800b99b8Sopenharmony_ci DFXLOGU("DW_OP_drop"); 138800b99b8Sopenharmony_ci OpDrop(); 139800b99b8Sopenharmony_ci break; 140800b99b8Sopenharmony_ci case DW_OP_over: 141800b99b8Sopenharmony_ci DFXLOGU("DW_OP_over"); 142800b99b8Sopenharmony_ci OpOver(); 143800b99b8Sopenharmony_ci break; 144800b99b8Sopenharmony_ci case DW_OP_pick: 145800b99b8Sopenharmony_ci DFXLOGU("DW_OP_pick"); 146800b99b8Sopenharmony_ci OpPick(addr); 147800b99b8Sopenharmony_ci break; 148800b99b8Sopenharmony_ci case DW_OP_swap: 149800b99b8Sopenharmony_ci DFXLOGU("DW_OP_swap"); 150800b99b8Sopenharmony_ci OpSwap(); 151800b99b8Sopenharmony_ci break; 152800b99b8Sopenharmony_ci case DW_OP_rot: 153800b99b8Sopenharmony_ci DFXLOGU("DW_OP_rot"); 154800b99b8Sopenharmony_ci OpRot(); 155800b99b8Sopenharmony_ci break; 156800b99b8Sopenharmony_ci case DW_OP_abs: 157800b99b8Sopenharmony_ci DFXLOGU("DW_OP_abs"); 158800b99b8Sopenharmony_ci OpAbs(); 159800b99b8Sopenharmony_ci break; 160800b99b8Sopenharmony_ci case DW_OP_and: 161800b99b8Sopenharmony_ci DFXLOGU("DW_OP_and"); 162800b99b8Sopenharmony_ci OpAnd(); 163800b99b8Sopenharmony_ci break; 164800b99b8Sopenharmony_ci case DW_OP_div: 165800b99b8Sopenharmony_ci DFXLOGU("DW_OP_div"); 166800b99b8Sopenharmony_ci OpDiv(); 167800b99b8Sopenharmony_ci break; 168800b99b8Sopenharmony_ci case DW_OP_minus: 169800b99b8Sopenharmony_ci DFXLOGU("DW_OP_minus"); 170800b99b8Sopenharmony_ci OpMinus(); 171800b99b8Sopenharmony_ci break; 172800b99b8Sopenharmony_ci case DW_OP_mod: 173800b99b8Sopenharmony_ci DFXLOGU("DW_OP_mod"); 174800b99b8Sopenharmony_ci OpMod(); 175800b99b8Sopenharmony_ci break; 176800b99b8Sopenharmony_ci case DW_OP_mul: 177800b99b8Sopenharmony_ci DFXLOGU("DW_OP_mul"); 178800b99b8Sopenharmony_ci OpMul(); 179800b99b8Sopenharmony_ci break; 180800b99b8Sopenharmony_ci case DW_OP_neg: 181800b99b8Sopenharmony_ci DFXLOGU("DW_OP_neg"); 182800b99b8Sopenharmony_ci OpNeg(); 183800b99b8Sopenharmony_ci break; 184800b99b8Sopenharmony_ci case DW_OP_not: 185800b99b8Sopenharmony_ci DFXLOGU("DW_OP_not"); 186800b99b8Sopenharmony_ci OpNot(); 187800b99b8Sopenharmony_ci break; 188800b99b8Sopenharmony_ci case DW_OP_or: 189800b99b8Sopenharmony_ci DFXLOGU("DW_OP_or"); 190800b99b8Sopenharmony_ci OpOr(); 191800b99b8Sopenharmony_ci break; 192800b99b8Sopenharmony_ci case DW_OP_plus: 193800b99b8Sopenharmony_ci DFXLOGU("DW_OP_plus"); 194800b99b8Sopenharmony_ci OpPlus(); 195800b99b8Sopenharmony_ci break; 196800b99b8Sopenharmony_ci case DW_OP_plus_uconst: 197800b99b8Sopenharmony_ci DFXLOGU("DW_OP_plus_uconst"); 198800b99b8Sopenharmony_ci OpPlusULEBConst(addr); 199800b99b8Sopenharmony_ci break; 200800b99b8Sopenharmony_ci case DW_OP_shl: 201800b99b8Sopenharmony_ci DFXLOGU("DW_OP_shl"); 202800b99b8Sopenharmony_ci OpShl(); 203800b99b8Sopenharmony_ci break; 204800b99b8Sopenharmony_ci case DW_OP_shr: 205800b99b8Sopenharmony_ci DFXLOGU("DW_OP_shr"); 206800b99b8Sopenharmony_ci OpShr(); 207800b99b8Sopenharmony_ci break; 208800b99b8Sopenharmony_ci case DW_OP_shra: 209800b99b8Sopenharmony_ci DFXLOGU("DW_OP_shra"); 210800b99b8Sopenharmony_ci OpShra(); 211800b99b8Sopenharmony_ci break; 212800b99b8Sopenharmony_ci case DW_OP_xor: 213800b99b8Sopenharmony_ci DFXLOGU("DW_OP_xor"); 214800b99b8Sopenharmony_ci OpXor(); 215800b99b8Sopenharmony_ci break; 216800b99b8Sopenharmony_ci case DW_OP_skip: 217800b99b8Sopenharmony_ci DFXLOGU("DW_OP_skip"); 218800b99b8Sopenharmony_ci OpSkip(addr); 219800b99b8Sopenharmony_ci break; 220800b99b8Sopenharmony_ci case DW_OP_bra: 221800b99b8Sopenharmony_ci DFXLOGU("DW_OP_bra"); 222800b99b8Sopenharmony_ci OpBra(addr); 223800b99b8Sopenharmony_ci break; 224800b99b8Sopenharmony_ci case DW_OP_eq: 225800b99b8Sopenharmony_ci DFXLOGU("DW_OP_eq"); 226800b99b8Sopenharmony_ci OpEQ(); 227800b99b8Sopenharmony_ci break; 228800b99b8Sopenharmony_ci case DW_OP_ge: 229800b99b8Sopenharmony_ci DFXLOGU("DW_OP_ge"); 230800b99b8Sopenharmony_ci OpGE(); 231800b99b8Sopenharmony_ci break; 232800b99b8Sopenharmony_ci case DW_OP_gt: 233800b99b8Sopenharmony_ci DFXLOGU("DW_OP_gt"); 234800b99b8Sopenharmony_ci OpGT(); 235800b99b8Sopenharmony_ci break; 236800b99b8Sopenharmony_ci case DW_OP_le: 237800b99b8Sopenharmony_ci DFXLOGU("DW_OP_le"); 238800b99b8Sopenharmony_ci OpLE(); 239800b99b8Sopenharmony_ci break; 240800b99b8Sopenharmony_ci case DW_OP_lt: 241800b99b8Sopenharmony_ci DFXLOGU("DW_OP_lt"); 242800b99b8Sopenharmony_ci OpLT(); 243800b99b8Sopenharmony_ci break; 244800b99b8Sopenharmony_ci case DW_OP_ne: 245800b99b8Sopenharmony_ci DFXLOGU("DW_OP_ne"); 246800b99b8Sopenharmony_ci OpNE(); 247800b99b8Sopenharmony_ci break; 248800b99b8Sopenharmony_ci case DW_OP_lit0: 249800b99b8Sopenharmony_ci case DW_OP_lit1: 250800b99b8Sopenharmony_ci case DW_OP_lit2: 251800b99b8Sopenharmony_ci case DW_OP_lit3: 252800b99b8Sopenharmony_ci case DW_OP_lit4: 253800b99b8Sopenharmony_ci case DW_OP_lit5: 254800b99b8Sopenharmony_ci case DW_OP_lit6: 255800b99b8Sopenharmony_ci case DW_OP_lit7: 256800b99b8Sopenharmony_ci case DW_OP_lit8: 257800b99b8Sopenharmony_ci case DW_OP_lit9: 258800b99b8Sopenharmony_ci case DW_OP_lit10: 259800b99b8Sopenharmony_ci case DW_OP_lit11: 260800b99b8Sopenharmony_ci case DW_OP_lit12: 261800b99b8Sopenharmony_ci case DW_OP_lit13: 262800b99b8Sopenharmony_ci case DW_OP_lit14: 263800b99b8Sopenharmony_ci case DW_OP_lit15: 264800b99b8Sopenharmony_ci case DW_OP_lit16: 265800b99b8Sopenharmony_ci case DW_OP_lit17: 266800b99b8Sopenharmony_ci case DW_OP_lit18: 267800b99b8Sopenharmony_ci case DW_OP_lit19: 268800b99b8Sopenharmony_ci case DW_OP_lit20: 269800b99b8Sopenharmony_ci case DW_OP_lit21: 270800b99b8Sopenharmony_ci case DW_OP_lit22: 271800b99b8Sopenharmony_ci case DW_OP_lit23: 272800b99b8Sopenharmony_ci case DW_OP_lit24: 273800b99b8Sopenharmony_ci case DW_OP_lit25: 274800b99b8Sopenharmony_ci case DW_OP_lit26: 275800b99b8Sopenharmony_ci case DW_OP_lit27: 276800b99b8Sopenharmony_ci case DW_OP_lit28: 277800b99b8Sopenharmony_ci case DW_OP_lit29: 278800b99b8Sopenharmony_ci case DW_OP_lit30: 279800b99b8Sopenharmony_ci case DW_OP_lit31: 280800b99b8Sopenharmony_ci DFXLOGU("DW_OP_litXX"); 281800b99b8Sopenharmony_ci OpLit(opcode); 282800b99b8Sopenharmony_ci break; 283800b99b8Sopenharmony_ci case DW_OP_reg0: 284800b99b8Sopenharmony_ci case DW_OP_reg1: 285800b99b8Sopenharmony_ci case DW_OP_reg2: 286800b99b8Sopenharmony_ci case DW_OP_reg3: 287800b99b8Sopenharmony_ci case DW_OP_reg4: 288800b99b8Sopenharmony_ci case DW_OP_reg5: 289800b99b8Sopenharmony_ci case DW_OP_reg6: 290800b99b8Sopenharmony_ci case DW_OP_reg7: 291800b99b8Sopenharmony_ci case DW_OP_reg8: 292800b99b8Sopenharmony_ci case DW_OP_reg9: 293800b99b8Sopenharmony_ci case DW_OP_reg10: 294800b99b8Sopenharmony_ci case DW_OP_reg11: 295800b99b8Sopenharmony_ci case DW_OP_reg12: 296800b99b8Sopenharmony_ci case DW_OP_reg13: 297800b99b8Sopenharmony_ci case DW_OP_reg14: 298800b99b8Sopenharmony_ci case DW_OP_reg15: 299800b99b8Sopenharmony_ci case DW_OP_reg16: 300800b99b8Sopenharmony_ci case DW_OP_reg17: 301800b99b8Sopenharmony_ci case DW_OP_reg18: 302800b99b8Sopenharmony_ci case DW_OP_reg19: 303800b99b8Sopenharmony_ci case DW_OP_reg20: 304800b99b8Sopenharmony_ci case DW_OP_reg21: 305800b99b8Sopenharmony_ci case DW_OP_reg22: 306800b99b8Sopenharmony_ci case DW_OP_reg23: 307800b99b8Sopenharmony_ci case DW_OP_reg24: 308800b99b8Sopenharmony_ci case DW_OP_reg25: 309800b99b8Sopenharmony_ci case DW_OP_reg26: 310800b99b8Sopenharmony_ci case DW_OP_reg27: 311800b99b8Sopenharmony_ci case DW_OP_reg28: 312800b99b8Sopenharmony_ci case DW_OP_reg29: 313800b99b8Sopenharmony_ci case DW_OP_reg30: 314800b99b8Sopenharmony_ci case DW_OP_reg31: 315800b99b8Sopenharmony_ci DFXLOGU("DW_OP_regXX"); 316800b99b8Sopenharmony_ci OpReg(opcode, regs); 317800b99b8Sopenharmony_ci break; 318800b99b8Sopenharmony_ci case DW_OP_regx: 319800b99b8Sopenharmony_ci DFXLOGU("DW_OP_regx"); 320800b99b8Sopenharmony_ci OpRegx(addr, regs); 321800b99b8Sopenharmony_ci break; 322800b99b8Sopenharmony_ci case DW_OP_breg0: 323800b99b8Sopenharmony_ci case DW_OP_breg1: 324800b99b8Sopenharmony_ci case DW_OP_breg2: 325800b99b8Sopenharmony_ci case DW_OP_breg3: 326800b99b8Sopenharmony_ci case DW_OP_breg4: 327800b99b8Sopenharmony_ci case DW_OP_breg5: 328800b99b8Sopenharmony_ci case DW_OP_breg6: 329800b99b8Sopenharmony_ci case DW_OP_breg7: 330800b99b8Sopenharmony_ci case DW_OP_breg8: 331800b99b8Sopenharmony_ci case DW_OP_breg9: 332800b99b8Sopenharmony_ci case DW_OP_breg10: 333800b99b8Sopenharmony_ci case DW_OP_breg11: 334800b99b8Sopenharmony_ci case DW_OP_breg12: 335800b99b8Sopenharmony_ci case DW_OP_breg13: 336800b99b8Sopenharmony_ci case DW_OP_breg14: 337800b99b8Sopenharmony_ci case DW_OP_breg15: 338800b99b8Sopenharmony_ci case DW_OP_breg16: 339800b99b8Sopenharmony_ci case DW_OP_breg17: 340800b99b8Sopenharmony_ci case DW_OP_breg18: 341800b99b8Sopenharmony_ci case DW_OP_breg19: 342800b99b8Sopenharmony_ci case DW_OP_breg20: 343800b99b8Sopenharmony_ci case DW_OP_breg21: 344800b99b8Sopenharmony_ci case DW_OP_breg22: 345800b99b8Sopenharmony_ci case DW_OP_breg23: 346800b99b8Sopenharmony_ci case DW_OP_breg24: 347800b99b8Sopenharmony_ci case DW_OP_breg25: 348800b99b8Sopenharmony_ci case DW_OP_breg26: 349800b99b8Sopenharmony_ci case DW_OP_breg27: 350800b99b8Sopenharmony_ci case DW_OP_breg28: 351800b99b8Sopenharmony_ci case DW_OP_breg29: 352800b99b8Sopenharmony_ci case DW_OP_breg30: 353800b99b8Sopenharmony_ci case DW_OP_breg31: 354800b99b8Sopenharmony_ci DFXLOGU("DW_OP_bregXX"); 355800b99b8Sopenharmony_ci OpBReg(opcode, addr, regs); 356800b99b8Sopenharmony_ci break; 357800b99b8Sopenharmony_ci case DW_OP_bregx: 358800b99b8Sopenharmony_ci DFXLOGU("DW_OP_bregx"); 359800b99b8Sopenharmony_ci OpBRegx(addr, regs); 360800b99b8Sopenharmony_ci break; 361800b99b8Sopenharmony_ci case DW_OP_deref_size: 362800b99b8Sopenharmony_ci DFXLOGU("DW_OP_deref_size"); 363800b99b8Sopenharmony_ci OpDerefSize(addr); 364800b99b8Sopenharmony_ci break; 365800b99b8Sopenharmony_ci case DW_OP_fbreg: 366800b99b8Sopenharmony_ci case DW_OP_piece: 367800b99b8Sopenharmony_ci case DW_OP_xderef: 368800b99b8Sopenharmony_ci case DW_OP_xderef_size: 369800b99b8Sopenharmony_ci case DW_OP_nop: 370800b99b8Sopenharmony_ci case DW_OP_push_object_address: 371800b99b8Sopenharmony_ci case DW_OP_call2: 372800b99b8Sopenharmony_ci case DW_OP_call4: 373800b99b8Sopenharmony_ci case DW_OP_call_ref: 374800b99b8Sopenharmony_ci DFXLOGE("DWARF OpNop opcode: %{public}x", opcode); 375800b99b8Sopenharmony_ci OpNop(opcode); 376800b99b8Sopenharmony_ci break; 377800b99b8Sopenharmony_ci default: 378800b99b8Sopenharmony_ci DFXLOGE("DWARF Unexpected opcode: %{public}x", opcode); 379800b99b8Sopenharmony_ci return false; 380800b99b8Sopenharmony_ci } 381800b99b8Sopenharmony_ci return true; 382800b99b8Sopenharmony_ci} 383800b99b8Sopenharmony_ci 384800b99b8Sopenharmony_ci// offline unwind should support both dwarf32 and dwarf64 ? 385800b99b8Sopenharmony_citemplate class DwarfOp<uintptr_t>; 386800b99b8Sopenharmony_ci 387800b99b8Sopenharmony_ci} // namespace HiviewDFX 388800b99b8Sopenharmony_ci} // namespace OHOS 389