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