Home | History | Annotate | Download | only in libunwindstack
      1 /*
      2  * Copyright (C) 2016 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 #ifndef _LIBUNWINDSTACK_DWARF_OP_H
     18 #define _LIBUNWINDSTACK_DWARF_OP_H
     19 
     20 #include <stdint.h>
     21 
     22 #include <deque>
     23 #include <string>
     24 #include <type_traits>
     25 #include <vector>
     26 
     27 #include "DwarfEncoding.h"
     28 #include "DwarfError.h"
     29 
     30 namespace unwindstack {
     31 
     32 enum DwarfVersion : uint8_t {
     33   DWARF_VERSION_2 = 2,
     34   DWARF_VERSION_3 = 3,
     35   DWARF_VERSION_4 = 4,
     36   DWARF_VERSION_MAX = DWARF_VERSION_4,
     37 };
     38 
     39 // Forward declarations.
     40 class DwarfMemory;
     41 class Memory;
     42 template <typename AddressType>
     43 class RegsImpl;
     44 
     45 template <typename AddressType>
     46 class DwarfOp {
     47   // Signed version of AddressType
     48   typedef typename std::make_signed<AddressType>::type SignedType;
     49 
     50   struct OpCallback {
     51     const char* name;
     52     bool (DwarfOp::*handle_func)();
     53     uint8_t supported_version;
     54     uint8_t num_required_stack_values;
     55     uint8_t num_operands;
     56     uint8_t operands[2];
     57   };
     58 
     59  public:
     60   DwarfOp(DwarfMemory* memory, Memory* regular_memory)
     61       : memory_(memory), regular_memory_(regular_memory) {}
     62   virtual ~DwarfOp() = default;
     63 
     64   bool Decode(uint8_t dwarf_version);
     65 
     66   bool Eval(uint64_t start, uint64_t end, uint8_t dwarf_version);
     67 
     68   void GetLogInfo(uint64_t start, uint64_t end, std::vector<std::string>* lines);
     69 
     70   AddressType StackAt(size_t index) { return stack_[index]; }
     71   size_t StackSize() { return stack_.size(); }
     72 
     73   void set_regs(RegsImpl<AddressType>* regs) { regs_ = regs; }
     74 
     75   DwarfError last_error() { return last_error_; }
     76 
     77   bool is_register() { return is_register_; }
     78 
     79   uint8_t cur_op() { return cur_op_; }
     80 
     81   Memory* regular_memory() { return regular_memory_; }
     82 
     83  protected:
     84   AddressType OperandAt(size_t index) { return operands_[index]; }
     85   size_t OperandsSize() { return operands_.size(); }
     86 
     87   AddressType StackPop() {
     88     AddressType value = stack_.front();
     89     stack_.pop_front();
     90     return value;
     91   }
     92 
     93  private:
     94   DwarfMemory* memory_;
     95   Memory* regular_memory_;
     96 
     97   RegsImpl<AddressType>* regs_;
     98   bool is_register_ = false;
     99   DwarfError last_error_ = DWARF_ERROR_NONE;
    100   uint8_t cur_op_;
    101   std::vector<AddressType> operands_;
    102   std::deque<AddressType> stack_;
    103 
    104   inline AddressType bool_to_dwarf_bool(bool value) { return value ? 1 : 0; }
    105 
    106   // Op processing functions.
    107   bool op_deref();
    108   bool op_deref_size();
    109   bool op_push();
    110   bool op_dup();
    111   bool op_drop();
    112   bool op_over();
    113   bool op_pick();
    114   bool op_swap();
    115   bool op_rot();
    116   bool op_abs();
    117   bool op_and();
    118   bool op_div();
    119   bool op_minus();
    120   bool op_mod();
    121   bool op_mul();
    122   bool op_neg();
    123   bool op_not();
    124   bool op_or();
    125   bool op_plus();
    126   bool op_plus_uconst();
    127   bool op_shl();
    128   bool op_shr();
    129   bool op_shra();
    130   bool op_xor();
    131   bool op_bra();
    132   bool op_eq();
    133   bool op_ge();
    134   bool op_gt();
    135   bool op_le();
    136   bool op_lt();
    137   bool op_ne();
    138   bool op_skip();
    139   bool op_lit();
    140   bool op_reg();
    141   bool op_regx();
    142   bool op_breg();
    143   bool op_bregx();
    144   bool op_nop();
    145   bool op_not_implemented();
    146 
    147   constexpr static OpCallback kCallbackTable[256] = {
    148       {nullptr, nullptr, 0, 0, 0, {}},  // 0x00 illegal op
    149       {nullptr, nullptr, 0, 0, 0, {}},  // 0x01 illegal op
    150       {nullptr, nullptr, 0, 0, 0, {}},  // 0x02 illegal op
    151       {
    152           // 0x03 DW_OP_addr
    153           "DW_OP_addr",
    154           &DwarfOp::op_push,
    155           DWARF_VERSION_2,
    156           0,
    157           1,
    158           {DW_EH_PE_absptr},
    159       },
    160       {nullptr, nullptr, 0, 0, 0, {}},  // 0x04 illegal op
    161       {nullptr, nullptr, 0, 0, 0, {}},  // 0x05 illegal op
    162       {
    163           // 0x06 DW_OP_deref
    164           "DW_OP_deref",
    165           &DwarfOp::op_deref,
    166           DWARF_VERSION_2,
    167           1,
    168           0,
    169           {},
    170       },
    171       {nullptr, nullptr, 0, 0, 0, {}},  // 0x07 illegal op
    172       {
    173           // 0x08 DW_OP_const1u
    174           "DW_OP_const1u",
    175           &DwarfOp::op_push,
    176           DWARF_VERSION_2,
    177           0,
    178           1,
    179           {DW_EH_PE_udata1},
    180       },
    181       {
    182           // 0x09 DW_OP_const1s
    183           "DW_OP_const1s",
    184           &DwarfOp::op_push,
    185           DWARF_VERSION_2,
    186           0,
    187           1,
    188           {DW_EH_PE_sdata1},
    189       },
    190       {
    191           // 0x0a DW_OP_const2u
    192           "DW_OP_const2u",
    193           &DwarfOp::op_push,
    194           DWARF_VERSION_2,
    195           0,
    196           1,
    197           {DW_EH_PE_udata2},
    198       },
    199       {
    200           // 0x0b DW_OP_const2s
    201           "DW_OP_const2s",
    202           &DwarfOp::op_push,
    203           DWARF_VERSION_2,
    204           0,
    205           1,
    206           {DW_EH_PE_sdata2},
    207       },
    208       {
    209           // 0x0c DW_OP_const4u
    210           "DW_OP_const4u",
    211           &DwarfOp::op_push,
    212           DWARF_VERSION_2,
    213           0,
    214           1,
    215           {DW_EH_PE_udata4},
    216       },
    217       {
    218           // 0x0d DW_OP_const4s
    219           "DW_OP_const4s",
    220           &DwarfOp::op_push,
    221           DWARF_VERSION_2,
    222           0,
    223           1,
    224           {DW_EH_PE_sdata4},
    225       },
    226       {
    227           // 0x0e DW_OP_const8u
    228           "DW_OP_const8u",
    229           &DwarfOp::op_push,
    230           DWARF_VERSION_2,
    231           0,
    232           1,
    233           {DW_EH_PE_udata8},
    234       },
    235       {
    236           // 0x0f DW_OP_const8s
    237           "DW_OP_const8s",
    238           &DwarfOp::op_push,
    239           DWARF_VERSION_2,
    240           0,
    241           1,
    242           {DW_EH_PE_sdata8},
    243       },
    244       {
    245           // 0x10 DW_OP_constu
    246           "DW_OP_constu",
    247           &DwarfOp::op_push,
    248           DWARF_VERSION_2,
    249           0,
    250           1,
    251           {DW_EH_PE_uleb128},
    252       },
    253       {
    254           // 0x11 DW_OP_consts
    255           "DW_OP_consts",
    256           &DwarfOp::op_push,
    257           DWARF_VERSION_2,
    258           0,
    259           1,
    260           {DW_EH_PE_sleb128},
    261       },
    262       {
    263           // 0x12 DW_OP_dup
    264           "DW_OP_dup",
    265           &DwarfOp::op_dup,
    266           DWARF_VERSION_2,
    267           1,
    268           0,
    269           {},
    270       },
    271       {
    272           // 0x13 DW_OP_drop
    273           "DW_OP_drop",
    274           &DwarfOp::op_drop,
    275           DWARF_VERSION_2,
    276           1,
    277           0,
    278           {},
    279       },
    280       {
    281           // 0x14 DW_OP_over
    282           "DW_OP_over",
    283           &DwarfOp::op_over,
    284           DWARF_VERSION_2,
    285           2,
    286           0,
    287           {},
    288       },
    289       {
    290           // 0x15 DW_OP_pick
    291           "DW_OP_pick",
    292           &DwarfOp::op_pick,
    293           DWARF_VERSION_2,
    294           0,
    295           1,
    296           {DW_EH_PE_udata1},
    297       },
    298       {
    299           // 0x16 DW_OP_swap
    300           "DW_OP_swap",
    301           &DwarfOp::op_swap,
    302           DWARF_VERSION_2,
    303           2,
    304           0,
    305           {},
    306       },
    307       {
    308           // 0x17 DW_OP_rot
    309           "DW_OP_rot",
    310           &DwarfOp::op_rot,
    311           DWARF_VERSION_2,
    312           3,
    313           0,
    314           {},
    315       },
    316       {
    317           // 0x18 DW_OP_xderef
    318           "DW_OP_xderef",
    319           &DwarfOp::op_not_implemented,
    320           DWARF_VERSION_2,
    321           2,
    322           0,
    323           {},
    324       },
    325       {
    326           // 0x19 DW_OP_abs
    327           "DW_OP_abs",
    328           &DwarfOp::op_abs,
    329           DWARF_VERSION_2,
    330           1,
    331           0,
    332           {},
    333       },
    334       {
    335           // 0x1a DW_OP_and
    336           "DW_OP_and",
    337           &DwarfOp::op_and,
    338           DWARF_VERSION_2,
    339           2,
    340           0,
    341           {},
    342       },
    343       {
    344           // 0x1b DW_OP_div
    345           "DW_OP_div",
    346           &DwarfOp::op_div,
    347           DWARF_VERSION_2,
    348           2,
    349           0,
    350           {},
    351       },
    352       {
    353           // 0x1c DW_OP_minus
    354           "DW_OP_minus",
    355           &DwarfOp::op_minus,
    356           DWARF_VERSION_2,
    357           2,
    358           0,
    359           {},
    360       },
    361       {
    362           // 0x1d DW_OP_mod
    363           "DW_OP_mod",
    364           &DwarfOp::op_mod,
    365           DWARF_VERSION_2,
    366           2,
    367           0,
    368           {},
    369       },
    370       {
    371           // 0x1e DW_OP_mul
    372           "DW_OP_mul",
    373           &DwarfOp::op_mul,
    374           DWARF_VERSION_2,
    375           2,
    376           0,
    377           {},
    378       },
    379       {
    380           // 0x1f DW_OP_neg
    381           "DW_OP_neg",
    382           &DwarfOp::op_neg,
    383           DWARF_VERSION_2,
    384           1,
    385           0,
    386           {},
    387       },
    388       {
    389           // 0x20 DW_OP_not
    390           "DW_OP_not",
    391           &DwarfOp::op_not,
    392           DWARF_VERSION_2,
    393           1,
    394           0,
    395           {},
    396       },
    397       {
    398           // 0x21 DW_OP_or
    399           "DW_OP_or",
    400           &DwarfOp::op_or,
    401           DWARF_VERSION_2,
    402           2,
    403           0,
    404           {},
    405       },
    406       {
    407           // 0x22 DW_OP_plus
    408           "DW_OP_plus",
    409           &DwarfOp::op_plus,
    410           DWARF_VERSION_2,
    411           2,
    412           0,
    413           {},
    414       },
    415       {
    416           // 0x23 DW_OP_plus_uconst
    417           "DW_OP_plus_uconst",
    418           &DwarfOp::op_plus_uconst,
    419           DWARF_VERSION_2,
    420           1,
    421           1,
    422           {DW_EH_PE_uleb128},
    423       },
    424       {
    425           // 0x24 DW_OP_shl
    426           "DW_OP_shl",
    427           &DwarfOp::op_shl,
    428           DWARF_VERSION_2,
    429           2,
    430           0,
    431           {},
    432       },
    433       {
    434           // 0x25 DW_OP_shr
    435           "DW_OP_shr",
    436           &DwarfOp::op_shr,
    437           DWARF_VERSION_2,
    438           2,
    439           0,
    440           {},
    441       },
    442       {
    443           // 0x26 DW_OP_shra
    444           "DW_OP_shra",
    445           &DwarfOp::op_shra,
    446           DWARF_VERSION_2,
    447           2,
    448           0,
    449           {},
    450       },
    451       {
    452           // 0x27 DW_OP_xor
    453           "DW_OP_xor",
    454           &DwarfOp::op_xor,
    455           DWARF_VERSION_2,
    456           2,
    457           0,
    458           {},
    459       },
    460       {
    461           // 0x28 DW_OP_bra
    462           "DW_OP_bra",
    463           &DwarfOp::op_bra,
    464           DWARF_VERSION_2,
    465           1,
    466           1,
    467           {DW_EH_PE_sdata2},
    468       },
    469       {
    470           // 0x29 DW_OP_eq
    471           "DW_OP_eq",
    472           &DwarfOp::op_eq,
    473           DWARF_VERSION_2,
    474           2,
    475           0,
    476           {},
    477       },
    478       {
    479           // 0x2a DW_OP_ge
    480           "DW_OP_ge",
    481           &DwarfOp::op_ge,
    482           DWARF_VERSION_2,
    483           2,
    484           0,
    485           {},
    486       },
    487       {
    488           // 0x2b DW_OP_gt
    489           "DW_OP_gt",
    490           &DwarfOp::op_gt,
    491           DWARF_VERSION_2,
    492           2,
    493           0,
    494           {},
    495       },
    496       {
    497           // 0x2c DW_OP_le
    498           "DW_OP_le",
    499           &DwarfOp::op_le,
    500           DWARF_VERSION_2,
    501           2,
    502           0,
    503           {},
    504       },
    505       {
    506           // 0x2d DW_OP_lt
    507           "DW_OP_lt",
    508           &DwarfOp::op_lt,
    509           DWARF_VERSION_2,
    510           2,
    511           0,
    512           {},
    513       },
    514       {
    515           // 0x2e DW_OP_ne
    516           "DW_OP_ne",
    517           &DwarfOp::op_ne,
    518           DWARF_VERSION_2,
    519           2,
    520           0,
    521           {},
    522       },
    523       {
    524           // 0x2f DW_OP_skip
    525           "DW_OP_skip",
    526           &DwarfOp::op_skip,
    527           DWARF_VERSION_2,
    528           0,
    529           1,
    530           {DW_EH_PE_sdata2},
    531       },
    532       {
    533           // 0x30 DW_OP_lit0
    534           "DW_OP_lit0",
    535           &DwarfOp::op_lit,
    536           DWARF_VERSION_2,
    537           0,
    538           0,
    539           {},
    540       },
    541       {
    542           // 0x31 DW_OP_lit1
    543           "DW_OP_lit1",
    544           &DwarfOp::op_lit,
    545           DWARF_VERSION_2,
    546           0,
    547           0,
    548           {},
    549       },
    550       {
    551           // 0x32 DW_OP_lit2
    552           "DW_OP_lit2",
    553           &DwarfOp::op_lit,
    554           DWARF_VERSION_2,
    555           0,
    556           0,
    557           {},
    558       },
    559       {
    560           // 0x33 DW_OP_lit3
    561           "DW_OP_lit3",
    562           &DwarfOp::op_lit,
    563           DWARF_VERSION_2,
    564           0,
    565           0,
    566           {},
    567       },
    568       {
    569           // 0x34 DW_OP_lit4
    570           "DW_OP_lit4",
    571           &DwarfOp::op_lit,
    572           DWARF_VERSION_2,
    573           0,
    574           0,
    575           {},
    576       },
    577       {
    578           // 0x35 DW_OP_lit5
    579           "DW_OP_lit5",
    580           &DwarfOp::op_lit,
    581           DWARF_VERSION_2,
    582           0,
    583           0,
    584           {},
    585       },
    586       {
    587           // 0x36 DW_OP_lit6
    588           "DW_OP_lit6",
    589           &DwarfOp::op_lit,
    590           DWARF_VERSION_2,
    591           0,
    592           0,
    593           {},
    594       },
    595       {
    596           // 0x37 DW_OP_lit7
    597           "DW_OP_lit7",
    598           &DwarfOp::op_lit,
    599           DWARF_VERSION_2,
    600           0,
    601           0,
    602           {},
    603       },
    604       {
    605           // 0x38 DW_OP_lit8
    606           "DW_OP_lit8",
    607           &DwarfOp::op_lit,
    608           DWARF_VERSION_2,
    609           0,
    610           0,
    611           {},
    612       },
    613       {
    614           // 0x39 DW_OP_lit9
    615           "DW_OP_lit9",
    616           &DwarfOp::op_lit,
    617           DWARF_VERSION_2,
    618           0,
    619           0,
    620           {},
    621       },
    622       {
    623           // 0x3a DW_OP_lit10
    624           "DW_OP_lit10",
    625           &DwarfOp::op_lit,
    626           DWARF_VERSION_2,
    627           0,
    628           0,
    629           {},
    630       },
    631       {
    632           // 0x3b DW_OP_lit11
    633           "DW_OP_lit11",
    634           &DwarfOp::op_lit,
    635           DWARF_VERSION_2,
    636           0,
    637           0,
    638           {},
    639       },
    640       {
    641           // 0x3c DW_OP_lit12
    642           "DW_OP_lit12",
    643           &DwarfOp::op_lit,
    644           DWARF_VERSION_2,
    645           0,
    646           0,
    647           {},
    648       },
    649       {
    650           // 0x3d DW_OP_lit13
    651           "DW_OP_lit13",
    652           &DwarfOp::op_lit,
    653           DWARF_VERSION_2,
    654           0,
    655           0,
    656           {},
    657       },
    658       {
    659           // 0x3e DW_OP_lit14
    660           "DW_OP_lit14",
    661           &DwarfOp::op_lit,
    662           DWARF_VERSION_2,
    663           0,
    664           0,
    665           {},
    666       },
    667       {
    668           // 0x3f DW_OP_lit15
    669           "DW_OP_lit15",
    670           &DwarfOp::op_lit,
    671           DWARF_VERSION_2,
    672           0,
    673           0,
    674           {},
    675       },
    676       {
    677           // 0x40 DW_OP_lit16
    678           "DW_OP_lit16",
    679           &DwarfOp::op_lit,
    680           DWARF_VERSION_2,
    681           0,
    682           0,
    683           {},
    684       },
    685       {
    686           // 0x41 DW_OP_lit17
    687           "DW_OP_lit17",
    688           &DwarfOp::op_lit,
    689           DWARF_VERSION_2,
    690           0,
    691           0,
    692           {},
    693       },
    694       {
    695           // 0x42 DW_OP_lit18
    696           "DW_OP_lit18",
    697           &DwarfOp::op_lit,
    698           DWARF_VERSION_2,
    699           0,
    700           0,
    701           {},
    702       },
    703       {
    704           // 0x43 DW_OP_lit19
    705           "DW_OP_lit19",
    706           &DwarfOp::op_lit,
    707           DWARF_VERSION_2,
    708           0,
    709           0,
    710           {},
    711       },
    712       {
    713           // 0x44 DW_OP_lit20
    714           "DW_OP_lit20",
    715           &DwarfOp::op_lit,
    716           DWARF_VERSION_2,
    717           0,
    718           0,
    719           {},
    720       },
    721       {
    722           // 0x45 DW_OP_lit21
    723           "DW_OP_lit21",
    724           &DwarfOp::op_lit,
    725           DWARF_VERSION_2,
    726           0,
    727           0,
    728           {},
    729       },
    730       {
    731           // 0x46 DW_OP_lit22
    732           "DW_OP_lit22",
    733           &DwarfOp::op_lit,
    734           DWARF_VERSION_2,
    735           0,
    736           0,
    737           {},
    738       },
    739       {
    740           // 0x47 DW_OP_lit23
    741           "DW_OP_lit23",
    742           &DwarfOp::op_lit,
    743           DWARF_VERSION_2,
    744           0,
    745           0,
    746           {},
    747       },
    748       {
    749           // 0x48 DW_OP_lit24
    750           "DW_OP_lit24",
    751           &DwarfOp::op_lit,
    752           DWARF_VERSION_2,
    753           0,
    754           0,
    755           {},
    756       },
    757       {
    758           // 0x49 DW_OP_lit25
    759           "DW_OP_lit25",
    760           &DwarfOp::op_lit,
    761           DWARF_VERSION_2,
    762           0,
    763           0,
    764           {},
    765       },
    766       {
    767           // 0x4a DW_OP_lit26
    768           "DW_OP_lit26",
    769           &DwarfOp::op_lit,
    770           DWARF_VERSION_2,
    771           0,
    772           0,
    773           {},
    774       },
    775       {
    776           // 0x4b DW_OP_lit27
    777           "DW_OP_lit27",
    778           &DwarfOp::op_lit,
    779           DWARF_VERSION_2,
    780           0,
    781           0,
    782           {},
    783       },
    784       {
    785           // 0x4c DW_OP_lit28
    786           "DW_OP_lit28",
    787           &DwarfOp::op_lit,
    788           DWARF_VERSION_2,
    789           0,
    790           0,
    791           {},
    792       },
    793       {
    794           // 0x4d DW_OP_lit29
    795           "DW_OP_lit29",
    796           &DwarfOp::op_lit,
    797           DWARF_VERSION_2,
    798           0,
    799           0,
    800           {},
    801       },
    802       {
    803           // 0x4e DW_OP_lit30
    804           "DW_OP_lit30",
    805           &DwarfOp::op_lit,
    806           DWARF_VERSION_2,
    807           0,
    808           0,
    809           {},
    810       },
    811       {
    812           // 0x4f DW_OP_lit31
    813           "DW_OP_lit31",
    814           &DwarfOp::op_lit,
    815           DWARF_VERSION_2,
    816           0,
    817           0,
    818           {},
    819       },
    820       {
    821           // 0x50 DW_OP_reg0
    822           "DW_OP_reg0",
    823           &DwarfOp::op_reg,
    824           DWARF_VERSION_2,
    825           0,
    826           0,
    827           {},
    828       },
    829       {
    830           // 0x51 DW_OP_reg1
    831           "DW_OP_reg1",
    832           &DwarfOp::op_reg,
    833           DWARF_VERSION_2,
    834           0,
    835           0,
    836           {},
    837       },
    838       {
    839           // 0x52 DW_OP_reg2
    840           "DW_OP_reg2",
    841           &DwarfOp::op_reg,
    842           DWARF_VERSION_2,
    843           0,
    844           0,
    845           {},
    846       },
    847       {
    848           // 0x53 DW_OP_reg3
    849           "DW_OP_reg3",
    850           &DwarfOp::op_reg,
    851           DWARF_VERSION_2,
    852           0,
    853           0,
    854           {},
    855       },
    856       {
    857           // 0x54 DW_OP_reg4
    858           "DW_OP_reg4",
    859           &DwarfOp::op_reg,
    860           DWARF_VERSION_2,
    861           0,
    862           0,
    863           {},
    864       },
    865       {
    866           // 0x55 DW_OP_reg5
    867           "DW_OP_reg5",
    868           &DwarfOp::op_reg,
    869           DWARF_VERSION_2,
    870           0,
    871           0,
    872           {},
    873       },
    874       {
    875           // 0x56 DW_OP_reg6
    876           "DW_OP_reg6",
    877           &DwarfOp::op_reg,
    878           DWARF_VERSION_2,
    879           0,
    880           0,
    881           {},
    882       },
    883       {
    884           // 0x57 DW_OP_reg7
    885           "DW_OP_reg7",
    886           &DwarfOp::op_reg,
    887           DWARF_VERSION_2,
    888           0,
    889           0,
    890           {},
    891       },
    892       {
    893           // 0x58 DW_OP_reg8
    894           "DW_OP_reg8",
    895           &DwarfOp::op_reg,
    896           DWARF_VERSION_2,
    897           0,
    898           0,
    899           {},
    900       },
    901       {
    902           // 0x59 DW_OP_reg9
    903           "DW_OP_reg9",
    904           &DwarfOp::op_reg,
    905           DWARF_VERSION_2,
    906           0,
    907           0,
    908           {},
    909       },
    910       {
    911           // 0x5a DW_OP_reg10
    912           "DW_OP_reg10",
    913           &DwarfOp::op_reg,
    914           DWARF_VERSION_2,
    915           0,
    916           0,
    917           {},
    918       },
    919       {
    920           // 0x5b DW_OP_reg11
    921           "DW_OP_reg11",
    922           &DwarfOp::op_reg,
    923           DWARF_VERSION_2,
    924           0,
    925           0,
    926           {},
    927       },
    928       {
    929           // 0x5c DW_OP_reg12
    930           "DW_OP_reg12",
    931           &DwarfOp::op_reg,
    932           DWARF_VERSION_2,
    933           0,
    934           0,
    935           {},
    936       },
    937       {
    938           // 0x5d DW_OP_reg13
    939           "DW_OP_reg13",
    940           &DwarfOp::op_reg,
    941           DWARF_VERSION_2,
    942           0,
    943           0,
    944           {},
    945       },
    946       {
    947           // 0x5e DW_OP_reg14
    948           "DW_OP_reg14",
    949           &DwarfOp::op_reg,
    950           DWARF_VERSION_2,
    951           0,
    952           0,
    953           {},
    954       },
    955       {
    956           // 0x5f DW_OP_reg15
    957           "DW_OP_reg15",
    958           &DwarfOp::op_reg,
    959           DWARF_VERSION_2,
    960           0,
    961           0,
    962           {},
    963       },
    964       {
    965           // 0x60 DW_OP_reg16
    966           "DW_OP_reg16",
    967           &DwarfOp::op_reg,
    968           DWARF_VERSION_2,
    969           0,
    970           0,
    971           {},
    972       },
    973       {
    974           // 0x61 DW_OP_reg17
    975           "DW_OP_reg17",
    976           &DwarfOp::op_reg,
    977           DWARF_VERSION_2,
    978           0,
    979           0,
    980           {},
    981       },
    982       {
    983           // 0x62 DW_OP_reg18
    984           "DW_OP_reg18",
    985           &DwarfOp::op_reg,
    986           DWARF_VERSION_2,
    987           0,
    988           0,
    989           {},
    990       },
    991       {
    992           // 0x63 DW_OP_reg19
    993           "DW_OP_reg19",
    994           &DwarfOp::op_reg,
    995           DWARF_VERSION_2,
    996           0,
    997           0,
    998           {},
    999       },
   1000       {
   1001           // 0x64 DW_OP_reg20
   1002           "DW_OP_reg20",
   1003           &DwarfOp::op_reg,
   1004           DWARF_VERSION_2,
   1005           0,
   1006           0,
   1007           {},
   1008       },
   1009       {
   1010           // 0x65 DW_OP_reg21
   1011           "DW_OP_reg21",
   1012           &DwarfOp::op_reg,
   1013           DWARF_VERSION_2,
   1014           0,
   1015           0,
   1016           {},
   1017       },
   1018       {
   1019           // 0x66 DW_OP_reg22
   1020           "DW_OP_reg22",
   1021           &DwarfOp::op_reg,
   1022           DWARF_VERSION_2,
   1023           0,
   1024           0,
   1025           {},
   1026       },
   1027       {
   1028           // 0x67 DW_OP_reg23
   1029           "DW_OP_reg23",
   1030           &DwarfOp::op_reg,
   1031           DWARF_VERSION_2,
   1032           0,
   1033           0,
   1034           {},
   1035       },
   1036       {
   1037           // 0x68 DW_OP_reg24
   1038           "DW_OP_reg24",
   1039           &DwarfOp::op_reg,
   1040           DWARF_VERSION_2,
   1041           0,
   1042           0,
   1043           {},
   1044       },
   1045       {
   1046           // 0x69 DW_OP_reg25
   1047           "DW_OP_reg25",
   1048           &DwarfOp::op_reg,
   1049           DWARF_VERSION_2,
   1050           0,
   1051           0,
   1052           {},
   1053       },
   1054       {
   1055           // 0x6a DW_OP_reg26
   1056           "DW_OP_reg26",
   1057           &DwarfOp::op_reg,
   1058           DWARF_VERSION_2,
   1059           0,
   1060           0,
   1061           {},
   1062       },
   1063       {
   1064           // 0x6b DW_OP_reg27
   1065           "DW_OP_reg27",
   1066           &DwarfOp::op_reg,
   1067           DWARF_VERSION_2,
   1068           0,
   1069           0,
   1070           {},
   1071       },
   1072       {
   1073           // 0x6c DW_OP_reg28
   1074           "DW_OP_reg28",
   1075           &DwarfOp::op_reg,
   1076           DWARF_VERSION_2,
   1077           0,
   1078           0,
   1079           {},
   1080       },
   1081       {
   1082           // 0x6d DW_OP_reg29
   1083           "DW_OP_reg29",
   1084           &DwarfOp::op_reg,
   1085           DWARF_VERSION_2,
   1086           0,
   1087           0,
   1088           {},
   1089       },
   1090       {
   1091           // 0x6e DW_OP_reg30
   1092           "DW_OP_reg30",
   1093           &DwarfOp::op_reg,
   1094           DWARF_VERSION_2,
   1095           0,
   1096           0,
   1097           {},
   1098       },
   1099       {
   1100           // 0x6f DW_OP_reg31
   1101           "DW_OP_reg31",
   1102           &DwarfOp::op_reg,
   1103           DWARF_VERSION_2,
   1104           0,
   1105           0,
   1106           {},
   1107       },
   1108       {
   1109           // 0x70 DW_OP_breg0
   1110           "DW_OP_breg0",
   1111           &DwarfOp::op_breg,
   1112           DWARF_VERSION_2,
   1113           0,
   1114           1,
   1115           {DW_EH_PE_sleb128},
   1116       },
   1117       {
   1118           // 0x71 DW_OP_breg1
   1119           "DW_OP_breg1",
   1120           &DwarfOp::op_breg,
   1121           DWARF_VERSION_2,
   1122           0,
   1123           1,
   1124           {DW_EH_PE_sleb128},
   1125       },
   1126       {
   1127           // 0x72 DW_OP_breg2
   1128           "DW_OP_breg2",
   1129           &DwarfOp::op_breg,
   1130           DWARF_VERSION_2,
   1131           0,
   1132           1,
   1133           {DW_EH_PE_sleb128},
   1134       },
   1135       {
   1136           // 0x73 DW_OP_breg3
   1137           "DW_OP_breg3",
   1138           &DwarfOp::op_breg,
   1139           DWARF_VERSION_2,
   1140           0,
   1141           1,
   1142           {DW_EH_PE_sleb128},
   1143       },
   1144       {
   1145           // 0x74 DW_OP_breg4
   1146           "DW_OP_breg4",
   1147           &DwarfOp::op_breg,
   1148           DWARF_VERSION_2,
   1149           0,
   1150           1,
   1151           {DW_EH_PE_sleb128},
   1152       },
   1153       {
   1154           // 0x75 DW_OP_breg5
   1155           "DW_OP_breg5",
   1156           &DwarfOp::op_breg,
   1157           DWARF_VERSION_2,
   1158           0,
   1159           1,
   1160           {DW_EH_PE_sleb128},
   1161       },
   1162       {
   1163           // 0x76 DW_OP_breg6
   1164           "DW_OP_breg6",
   1165           &DwarfOp::op_breg,
   1166           DWARF_VERSION_2,
   1167           0,
   1168           1,
   1169           {DW_EH_PE_sleb128},
   1170       },
   1171       {
   1172           // 0x77 DW_OP_breg7
   1173           "DW_OP_breg7",
   1174           &DwarfOp::op_breg,
   1175           DWARF_VERSION_2,
   1176           0,
   1177           1,
   1178           {DW_EH_PE_sleb128},
   1179       },
   1180       {
   1181           // 0x78 DW_OP_breg8
   1182           "DW_OP_breg8",
   1183           &DwarfOp::op_breg,
   1184           DWARF_VERSION_2,
   1185           0,
   1186           1,
   1187           {DW_EH_PE_sleb128},
   1188       },
   1189       {
   1190           // 0x79 DW_OP_breg9
   1191           "DW_OP_breg9",
   1192           &DwarfOp::op_breg,
   1193           DWARF_VERSION_2,
   1194           0,
   1195           1,
   1196           {DW_EH_PE_sleb128},
   1197       },
   1198       {
   1199           // 0x7a DW_OP_breg10
   1200           "DW_OP_breg10",
   1201           &DwarfOp::op_breg,
   1202           DWARF_VERSION_2,
   1203           0,
   1204           1,
   1205           {DW_EH_PE_sleb128},
   1206       },
   1207       {
   1208           // 0x7b DW_OP_breg11
   1209           "DW_OP_breg11",
   1210           &DwarfOp::op_breg,
   1211           DWARF_VERSION_2,
   1212           0,
   1213           1,
   1214           {DW_EH_PE_sleb128},
   1215       },
   1216       {
   1217           // 0x7c DW_OP_breg12
   1218           "DW_OP_breg12",
   1219           &DwarfOp::op_breg,
   1220           DWARF_VERSION_2,
   1221           0,
   1222           1,
   1223           {DW_EH_PE_sleb128},
   1224       },
   1225       {
   1226           // 0x7d DW_OP_breg13
   1227           "DW_OP_breg13",
   1228           &DwarfOp::op_breg,
   1229           DWARF_VERSION_2,
   1230           0,
   1231           1,
   1232           {DW_EH_PE_sleb128},
   1233       },
   1234       {
   1235           // 0x7e DW_OP_breg14
   1236           "DW_OP_breg14",
   1237           &DwarfOp::op_breg,
   1238           DWARF_VERSION_2,
   1239           0,
   1240           1,
   1241           {DW_EH_PE_sleb128},
   1242       },
   1243       {
   1244           // 0x7f DW_OP_breg15
   1245           "DW_OP_breg15",
   1246           &DwarfOp::op_breg,
   1247           DWARF_VERSION_2,
   1248           0,
   1249           1,
   1250           {DW_EH_PE_sleb128},
   1251       },
   1252       {
   1253           // 0x80 DW_OP_breg16
   1254           "DW_OP_breg16",
   1255           &DwarfOp::op_breg,
   1256           DWARF_VERSION_2,
   1257           0,
   1258           1,
   1259           {DW_EH_PE_sleb128},
   1260       },
   1261       {
   1262           // 0x81 DW_OP_breg17
   1263           "DW_OP_breg17",
   1264           &DwarfOp::op_breg,
   1265           DWARF_VERSION_2,
   1266           0,
   1267           1,
   1268           {DW_EH_PE_sleb128},
   1269       },
   1270       {
   1271           // 0x82 DW_OP_breg18
   1272           "DW_OP_breg18",
   1273           &DwarfOp::op_breg,
   1274           DWARF_VERSION_2,
   1275           0,
   1276           1,
   1277           {DW_EH_PE_sleb128},
   1278       },
   1279       {
   1280           // 0x83 DW_OP_breg19
   1281           "DW_OP_breg19",
   1282           &DwarfOp::op_breg,
   1283           DWARF_VERSION_2,
   1284           0,
   1285           1,
   1286           {DW_EH_PE_sleb128},
   1287       },
   1288       {
   1289           // 0x84 DW_OP_breg20
   1290           "DW_OP_breg20",
   1291           &DwarfOp::op_breg,
   1292           DWARF_VERSION_2,
   1293           0,
   1294           1,
   1295           {DW_EH_PE_sleb128},
   1296       },
   1297       {
   1298           // 0x85 DW_OP_breg21
   1299           "DW_OP_breg21",
   1300           &DwarfOp::op_breg,
   1301           DWARF_VERSION_2,
   1302           0,
   1303           1,
   1304           {DW_EH_PE_sleb128},
   1305       },
   1306       {
   1307           // 0x86 DW_OP_breg22
   1308           "DW_OP_breg22",
   1309           &DwarfOp::op_breg,
   1310           DWARF_VERSION_2,
   1311           0,
   1312           1,
   1313           {DW_EH_PE_sleb128},
   1314       },
   1315       {
   1316           // 0x87 DW_OP_breg23
   1317           "DW_OP_breg23",
   1318           &DwarfOp::op_breg,
   1319           DWARF_VERSION_2,
   1320           0,
   1321           1,
   1322           {DW_EH_PE_sleb128},
   1323       },
   1324       {
   1325           // 0x88 DW_OP_breg24
   1326           "DW_OP_breg24",
   1327           &DwarfOp::op_breg,
   1328           DWARF_VERSION_2,
   1329           0,
   1330           1,
   1331           {DW_EH_PE_sleb128},
   1332       },
   1333       {
   1334           // 0x89 DW_OP_breg25
   1335           "DW_OP_breg25",
   1336           &DwarfOp::op_breg,
   1337           DWARF_VERSION_2,
   1338           0,
   1339           1,
   1340           {DW_EH_PE_sleb128},
   1341       },
   1342       {
   1343           // 0x8a DW_OP_breg26
   1344           "DW_OP_breg26",
   1345           &DwarfOp::op_breg,
   1346           DWARF_VERSION_2,
   1347           0,
   1348           1,
   1349           {DW_EH_PE_sleb128},
   1350       },
   1351       {
   1352           // 0x8b DW_OP_breg27
   1353           "DW_OP_breg27",
   1354           &DwarfOp::op_breg,
   1355           DWARF_VERSION_2,
   1356           0,
   1357           1,
   1358           {DW_EH_PE_sleb128},
   1359       },
   1360       {
   1361           // 0x8c DW_OP_breg28
   1362           "DW_OP_breg28",
   1363           &DwarfOp::op_breg,
   1364           DWARF_VERSION_2,
   1365           0,
   1366           1,
   1367           {DW_EH_PE_sleb128},
   1368       },
   1369       {
   1370           // 0x8d DW_OP_breg29
   1371           "DW_OP_breg29",
   1372           &DwarfOp::op_breg,
   1373           DWARF_VERSION_2,
   1374           0,
   1375           1,
   1376           {DW_EH_PE_sleb128},
   1377       },
   1378       {
   1379           // 0x8e DW_OP_breg30
   1380           "DW_OP_breg30",
   1381           &DwarfOp::op_breg,
   1382           DWARF_VERSION_2,
   1383           0,
   1384           1,
   1385           {DW_EH_PE_sleb128},
   1386       },
   1387       {
   1388           // 0x8f DW_OP_breg31
   1389           "DW_OP_breg31",
   1390           &DwarfOp::op_breg,
   1391           DWARF_VERSION_2,
   1392           0,
   1393           1,
   1394           {DW_EH_PE_sleb128},
   1395       },
   1396       {
   1397           // 0x90 DW_OP_regx
   1398           "DW_OP_regx",
   1399           &DwarfOp::op_regx,
   1400           DWARF_VERSION_2,
   1401           0,
   1402           1,
   1403           {DW_EH_PE_uleb128},
   1404       },
   1405       {
   1406           // 0x91 DW_OP_fbreg
   1407           "DW_OP_fbreg",
   1408           &DwarfOp::op_not_implemented,
   1409           DWARF_VERSION_2,
   1410           0,
   1411           1,
   1412           {DW_EH_PE_sleb128},
   1413       },
   1414       {
   1415           // 0x92 DW_OP_bregx
   1416           "DW_OP_bregx",
   1417           &DwarfOp::op_bregx,
   1418           DWARF_VERSION_2,
   1419           0,
   1420           2,
   1421           {DW_EH_PE_uleb128, DW_EH_PE_sleb128},
   1422       },
   1423       {
   1424           // 0x93 DW_OP_piece
   1425           "DW_OP_piece",
   1426           &DwarfOp::op_not_implemented,
   1427           DWARF_VERSION_2,
   1428           0,
   1429           1,
   1430           {DW_EH_PE_uleb128},
   1431       },
   1432       {
   1433           // 0x94 DW_OP_deref_size
   1434           "DW_OP_deref_size",
   1435           &DwarfOp::op_deref_size,
   1436           DWARF_VERSION_2,
   1437           1,
   1438           1,
   1439           {DW_EH_PE_udata1},
   1440       },
   1441       {
   1442           // 0x95 DW_OP_xderef_size
   1443           "DW_OP_xderef_size",
   1444           &DwarfOp::op_not_implemented,
   1445           DWARF_VERSION_2,
   1446           0,
   1447           1,
   1448           {DW_EH_PE_udata1},
   1449       },
   1450       {
   1451           // 0x96 DW_OP_nop
   1452           "DW_OP_nop",
   1453           &DwarfOp::op_nop,
   1454           DWARF_VERSION_2,
   1455           0,
   1456           0,
   1457           {},
   1458       },
   1459       {
   1460           // 0x97 DW_OP_push_object_address
   1461           "DW_OP_push_object_address",
   1462           &DwarfOp::op_not_implemented,
   1463           DWARF_VERSION_3,
   1464           0,
   1465           0,
   1466           {},
   1467       },
   1468       {
   1469           // 0x98 DW_OP_call2
   1470           "DW_OP_call2",
   1471           &DwarfOp::op_not_implemented,
   1472           DWARF_VERSION_3,
   1473           0,
   1474           1,
   1475           {DW_EH_PE_udata2},
   1476       },
   1477       {
   1478           // 0x99 DW_OP_call4
   1479           "DW_OP_call4",
   1480           &DwarfOp::op_not_implemented,
   1481           DWARF_VERSION_3,
   1482           0,
   1483           1,
   1484           {DW_EH_PE_udata4},
   1485       },
   1486       {
   1487           // 0x9a DW_OP_call_ref
   1488           "DW_OP_call_ref",
   1489           &DwarfOp::op_not_implemented,
   1490           DWARF_VERSION_3,
   1491           0,
   1492           0,  // Has a different sized operand (4 bytes or 8 bytes).
   1493           {},
   1494       },
   1495       {
   1496           // 0x9b DW_OP_form_tls_address
   1497           "DW_OP_form_tls_address",
   1498           &DwarfOp::op_not_implemented,
   1499           DWARF_VERSION_3,
   1500           0,
   1501           0,
   1502           {},
   1503       },
   1504       {
   1505           // 0x9c DW_OP_call_frame_cfa
   1506           "DW_OP_call_frame_cfa",
   1507           &DwarfOp::op_not_implemented,
   1508           DWARF_VERSION_3,
   1509           0,
   1510           0,
   1511           {},
   1512       },
   1513       {
   1514           // 0x9d DW_OP_bit_piece
   1515           "DW_OP_bit_piece",
   1516           &DwarfOp::op_not_implemented,
   1517           DWARF_VERSION_3,
   1518           0,
   1519           2,
   1520           {DW_EH_PE_uleb128, DW_EH_PE_uleb128},
   1521       },
   1522       {
   1523           // 0x9e DW_OP_implicit_value
   1524           "DW_OP_implicit_value",
   1525           &DwarfOp::op_not_implemented,
   1526           DWARF_VERSION_4,
   1527           0,
   1528           1,
   1529           {DW_EH_PE_uleb128},
   1530       },
   1531       {
   1532           // 0x9f DW_OP_stack_value
   1533           "DW_OP_stack_value",
   1534           &DwarfOp::op_not_implemented,
   1535           DWARF_VERSION_4,
   1536           1,
   1537           0,
   1538           {},
   1539       },
   1540       {nullptr, nullptr, 0, 0, 0, {}},  // 0xa0 illegal op
   1541       {nullptr, nullptr, 0, 0, 0, {}},  // 0xa1 illegal op
   1542       {nullptr, nullptr, 0, 0, 0, {}},  // 0xa2 illegal op
   1543       {nullptr, nullptr, 0, 0, 0, {}},  // 0xa3 illegal op
   1544       {nullptr, nullptr, 0, 0, 0, {}},  // 0xa4 illegal op
   1545       {nullptr, nullptr, 0, 0, 0, {}},  // 0xa5 illegal op
   1546       {nullptr, nullptr, 0, 0, 0, {}},  // 0xa6 illegal op
   1547       {nullptr, nullptr, 0, 0, 0, {}},  // 0xa7 illegal op
   1548       {nullptr, nullptr, 0, 0, 0, {}},  // 0xa8 illegal op
   1549       {nullptr, nullptr, 0, 0, 0, {}},  // 0xa9 illegal op
   1550       {nullptr, nullptr, 0, 0, 0, {}},  // 0xaa illegal op
   1551       {nullptr, nullptr, 0, 0, 0, {}},  // 0xab illegal op
   1552       {nullptr, nullptr, 0, 0, 0, {}},  // 0xac illegal op
   1553       {nullptr, nullptr, 0, 0, 0, {}},  // 0xad illegal op
   1554       {nullptr, nullptr, 0, 0, 0, {}},  // 0xae illegal op
   1555       {nullptr, nullptr, 0, 0, 0, {}},  // 0xaf illegal op
   1556       {nullptr, nullptr, 0, 0, 0, {}},  // 0xb0 illegal op
   1557       {nullptr, nullptr, 0, 0, 0, {}},  // 0xb1 illegal op
   1558       {nullptr, nullptr, 0, 0, 0, {}},  // 0xb2 illegal op
   1559       {nullptr, nullptr, 0, 0, 0, {}},  // 0xb3 illegal op
   1560       {nullptr, nullptr, 0, 0, 0, {}},  // 0xb4 illegal op
   1561       {nullptr, nullptr, 0, 0, 0, {}},  // 0xb5 illegal op
   1562       {nullptr, nullptr, 0, 0, 0, {}},  // 0xb6 illegal op
   1563       {nullptr, nullptr, 0, 0, 0, {}},  // 0xb7 illegal op
   1564       {nullptr, nullptr, 0, 0, 0, {}},  // 0xb8 illegal op
   1565       {nullptr, nullptr, 0, 0, 0, {}},  // 0xb9 illegal op
   1566       {nullptr, nullptr, 0, 0, 0, {}},  // 0xba illegal op
   1567       {nullptr, nullptr, 0, 0, 0, {}},  // 0xbb illegal op
   1568       {nullptr, nullptr, 0, 0, 0, {}},  // 0xbc illegal op
   1569       {nullptr, nullptr, 0, 0, 0, {}},  // 0xbd illegal op
   1570       {nullptr, nullptr, 0, 0, 0, {}},  // 0xbe illegal op
   1571       {nullptr, nullptr, 0, 0, 0, {}},  // 0xbf illegal op
   1572       {nullptr, nullptr, 0, 0, 0, {}},  // 0xc0 illegal op
   1573       {nullptr, nullptr, 0, 0, 0, {}},  // 0xc1 illegal op
   1574       {nullptr, nullptr, 0, 0, 0, {}},  // 0xc2 illegal op
   1575       {nullptr, nullptr, 0, 0, 0, {}},  // 0xc3 illegal op
   1576       {nullptr, nullptr, 0, 0, 0, {}},  // 0xc4 illegal op
   1577       {nullptr, nullptr, 0, 0, 0, {}},  // 0xc5 illegal op
   1578       {nullptr, nullptr, 0, 0, 0, {}},  // 0xc6 illegal op
   1579       {nullptr, nullptr, 0, 0, 0, {}},  // 0xc7 illegal op
   1580       {nullptr, nullptr, 0, 0, 0, {}},  // 0xc8 illegal op
   1581       {nullptr, nullptr, 0, 0, 0, {}},  // 0xc9 illegal op
   1582       {nullptr, nullptr, 0, 0, 0, {}},  // 0xca illegal op
   1583       {nullptr, nullptr, 0, 0, 0, {}},  // 0xcb illegal op
   1584       {nullptr, nullptr, 0, 0, 0, {}},  // 0xcc illegal op
   1585       {nullptr, nullptr, 0, 0, 0, {}},  // 0xcd illegal op
   1586       {nullptr, nullptr, 0, 0, 0, {}},  // 0xce illegal op
   1587       {nullptr, nullptr, 0, 0, 0, {}},  // 0xcf illegal op
   1588       {nullptr, nullptr, 0, 0, 0, {}},  // 0xd0 illegal op
   1589       {nullptr, nullptr, 0, 0, 0, {}},  // 0xd1 illegal op
   1590       {nullptr, nullptr, 0, 0, 0, {}},  // 0xd2 illegal op
   1591       {nullptr, nullptr, 0, 0, 0, {}},  // 0xd3 illegal op
   1592       {nullptr, nullptr, 0, 0, 0, {}},  // 0xd4 illegal op
   1593       {nullptr, nullptr, 0, 0, 0, {}},  // 0xd5 illegal op
   1594       {nullptr, nullptr, 0, 0, 0, {}},  // 0xd6 illegal op
   1595       {nullptr, nullptr, 0, 0, 0, {}},  // 0xd7 illegal op
   1596       {nullptr, nullptr, 0, 0, 0, {}},  // 0xd8 illegal op
   1597       {nullptr, nullptr, 0, 0, 0, {}},  // 0xd9 illegal op
   1598       {nullptr, nullptr, 0, 0, 0, {}},  // 0xda illegal op
   1599       {nullptr, nullptr, 0, 0, 0, {}},  // 0xdb illegal op
   1600       {nullptr, nullptr, 0, 0, 0, {}},  // 0xdc illegal op
   1601       {nullptr, nullptr, 0, 0, 0, {}},  // 0xdd illegal op
   1602       {nullptr, nullptr, 0, 0, 0, {}},  // 0xde illegal op
   1603       {nullptr, nullptr, 0, 0, 0, {}},  // 0xdf illegal op
   1604       {nullptr, nullptr, 0, 0, 0, {}},  // 0xe0 DW_OP_lo_user
   1605       {nullptr, nullptr, 0, 0, 0, {}},  // 0xe1 illegal op
   1606       {nullptr, nullptr, 0, 0, 0, {}},  // 0xe2 illegal op
   1607       {nullptr, nullptr, 0, 0, 0, {}},  // 0xe3 illegal op
   1608       {nullptr, nullptr, 0, 0, 0, {}},  // 0xe4 illegal op
   1609       {nullptr, nullptr, 0, 0, 0, {}},  // 0xe5 illegal op
   1610       {nullptr, nullptr, 0, 0, 0, {}},  // 0xe6 illegal op
   1611       {nullptr, nullptr, 0, 0, 0, {}},  // 0xe7 illegal op
   1612       {nullptr, nullptr, 0, 0, 0, {}},  // 0xe8 illegal op
   1613       {nullptr, nullptr, 0, 0, 0, {}},  // 0xe9 illegal op
   1614       {nullptr, nullptr, 0, 0, 0, {}},  // 0xea illegal op
   1615       {nullptr, nullptr, 0, 0, 0, {}},  // 0xeb illegal op
   1616       {nullptr, nullptr, 0, 0, 0, {}},  // 0xec illegal op
   1617       {nullptr, nullptr, 0, 0, 0, {}},  // 0xed illegal op
   1618       {nullptr, nullptr, 0, 0, 0, {}},  // 0xee illegal op
   1619       {nullptr, nullptr, 0, 0, 0, {}},  // 0xef illegal op
   1620       {nullptr, nullptr, 0, 0, 0, {}},  // 0xf0 illegal op
   1621       {nullptr, nullptr, 0, 0, 0, {}},  // 0xf1 illegal op
   1622       {nullptr, nullptr, 0, 0, 0, {}},  // 0xf2 illegal op
   1623       {nullptr, nullptr, 0, 0, 0, {}},  // 0xf3 illegal op
   1624       {nullptr, nullptr, 0, 0, 0, {}},  // 0xf4 illegal op
   1625       {nullptr, nullptr, 0, 0, 0, {}},  // 0xf5 illegal op
   1626       {nullptr, nullptr, 0, 0, 0, {}},  // 0xf6 illegal op
   1627       {nullptr, nullptr, 0, 0, 0, {}},  // 0xf7 illegal op
   1628       {nullptr, nullptr, 0, 0, 0, {}},  // 0xf8 illegal op
   1629       {nullptr, nullptr, 0, 0, 0, {}},  // 0xf9 illegal op
   1630       {nullptr, nullptr, 0, 0, 0, {}},  // 0xfa illegal op
   1631       {nullptr, nullptr, 0, 0, 0, {}},  // 0xfb illegal op
   1632       {nullptr, nullptr, 0, 0, 0, {}},  // 0xfc illegal op
   1633       {nullptr, nullptr, 0, 0, 0, {}},  // 0xfd illegal op
   1634       {nullptr, nullptr, 0, 0, 0, {}},  // 0xfe illegal op
   1635       {nullptr, nullptr, 0, 0, 0, {}},  // 0xff DW_OP_hi_user
   1636   };
   1637 };
   1638 
   1639 }  // namespace unwindstack
   1640 
   1641 #endif  // _LIBUNWINDSTACK_DWARF_OP_H
   1642