blob: c29bf35dfc21e4faa5ebd828d9e6e98afc2b0114 [file] [log] [blame]
Christopher Ferris55d22ef2017-04-04 10:41:31 -07001/*
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"
Christopher Ferrisd226a512017-07-14 10:37:19 -070028#include "DwarfError.h"
29
30namespace unwindstack {
Christopher Ferris55d22ef2017-04-04 10:41:31 -070031
32enum 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.
40class DwarfMemory;
41class Memory;
42template <typename AddressType>
Christopher Ferris7b8e4672017-06-01 17:55:25 -070043class RegsImpl;
Christopher Ferris55d22ef2017-04-04 10:41:31 -070044
45template <typename AddressType>
46class 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
Christopher Ferris7b8e4672017-06-01 17:55:25 -070073 void set_regs(RegsImpl<AddressType>* regs) { regs_ = regs; }
Christopher Ferris55d22ef2017-04-04 10:41:31 -070074
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
Christopher Ferris7b8e4672017-06-01 17:55:25 -070097 RegsImpl<AddressType>* regs_;
Christopher Ferris55d22ef2017-04-04 10:41:31 -070098 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
Christopher Ferrisd226a512017-07-14 10:37:19 -07001639} // namespace unwindstack
1640
Christopher Ferris55d22ef2017-04-04 10:41:31 -07001641#endif // _LIBUNWINDSTACK_DWARF_OP_H