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