1*eb293b8fSAndroid Build Coastguard Worker /*
2*eb293b8fSAndroid Build Coastguard Worker * Copyright (C) 2017 The Android Open Source Project
3*eb293b8fSAndroid Build Coastguard Worker *
4*eb293b8fSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
5*eb293b8fSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
6*eb293b8fSAndroid Build Coastguard Worker * You may obtain a copy of the License at
7*eb293b8fSAndroid Build Coastguard Worker *
8*eb293b8fSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
9*eb293b8fSAndroid Build Coastguard Worker *
10*eb293b8fSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
11*eb293b8fSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
12*eb293b8fSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*eb293b8fSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
14*eb293b8fSAndroid Build Coastguard Worker * limitations under the License.
15*eb293b8fSAndroid Build Coastguard Worker */
16*eb293b8fSAndroid Build Coastguard Worker
17*eb293b8fSAndroid Build Coastguard Worker #include <stdint.h>
18*eb293b8fSAndroid Build Coastguard Worker
19*eb293b8fSAndroid Build Coastguard Worker #include <deque>
20*eb293b8fSAndroid Build Coastguard Worker #include <string>
21*eb293b8fSAndroid Build Coastguard Worker #include <vector>
22*eb293b8fSAndroid Build Coastguard Worker
23*eb293b8fSAndroid Build Coastguard Worker #include <android-base/stringprintf.h>
24*eb293b8fSAndroid Build Coastguard Worker
25*eb293b8fSAndroid Build Coastguard Worker #include <unwindstack/DwarfError.h>
26*eb293b8fSAndroid Build Coastguard Worker #include <unwindstack/DwarfMemory.h>
27*eb293b8fSAndroid Build Coastguard Worker #include <unwindstack/Log.h>
28*eb293b8fSAndroid Build Coastguard Worker #include <unwindstack/Memory.h>
29*eb293b8fSAndroid Build Coastguard Worker #include <unwindstack/Regs.h>
30*eb293b8fSAndroid Build Coastguard Worker
31*eb293b8fSAndroid Build Coastguard Worker #include "DwarfOp.h"
32*eb293b8fSAndroid Build Coastguard Worker
33*eb293b8fSAndroid Build Coastguard Worker namespace unwindstack {
34*eb293b8fSAndroid Build Coastguard Worker
35*eb293b8fSAndroid Build Coastguard Worker enum DwarfOpHandleFunc : uint8_t {
36*eb293b8fSAndroid Build Coastguard Worker OP_ILLEGAL = 0,
37*eb293b8fSAndroid Build Coastguard Worker OP_DEREF,
38*eb293b8fSAndroid Build Coastguard Worker OP_DEREF_SIZE,
39*eb293b8fSAndroid Build Coastguard Worker OP_PUSH,
40*eb293b8fSAndroid Build Coastguard Worker OP_DUP,
41*eb293b8fSAndroid Build Coastguard Worker OP_DROP,
42*eb293b8fSAndroid Build Coastguard Worker OP_OVER,
43*eb293b8fSAndroid Build Coastguard Worker OP_PICK,
44*eb293b8fSAndroid Build Coastguard Worker OP_SWAP,
45*eb293b8fSAndroid Build Coastguard Worker OP_ROT,
46*eb293b8fSAndroid Build Coastguard Worker OP_ABS,
47*eb293b8fSAndroid Build Coastguard Worker OP_AND,
48*eb293b8fSAndroid Build Coastguard Worker OP_DIV,
49*eb293b8fSAndroid Build Coastguard Worker OP_MINUS,
50*eb293b8fSAndroid Build Coastguard Worker OP_MOD,
51*eb293b8fSAndroid Build Coastguard Worker OP_MUL,
52*eb293b8fSAndroid Build Coastguard Worker OP_NEG,
53*eb293b8fSAndroid Build Coastguard Worker OP_NOT,
54*eb293b8fSAndroid Build Coastguard Worker OP_OR,
55*eb293b8fSAndroid Build Coastguard Worker OP_PLUS,
56*eb293b8fSAndroid Build Coastguard Worker OP_PLUS_UCONST,
57*eb293b8fSAndroid Build Coastguard Worker OP_SHL,
58*eb293b8fSAndroid Build Coastguard Worker OP_SHR,
59*eb293b8fSAndroid Build Coastguard Worker OP_SHRA,
60*eb293b8fSAndroid Build Coastguard Worker OP_XOR,
61*eb293b8fSAndroid Build Coastguard Worker OP_BRA,
62*eb293b8fSAndroid Build Coastguard Worker OP_EQ,
63*eb293b8fSAndroid Build Coastguard Worker OP_GE,
64*eb293b8fSAndroid Build Coastguard Worker OP_GT,
65*eb293b8fSAndroid Build Coastguard Worker OP_LE,
66*eb293b8fSAndroid Build Coastguard Worker OP_LT,
67*eb293b8fSAndroid Build Coastguard Worker OP_NE,
68*eb293b8fSAndroid Build Coastguard Worker OP_SKIP,
69*eb293b8fSAndroid Build Coastguard Worker OP_LIT,
70*eb293b8fSAndroid Build Coastguard Worker OP_REG,
71*eb293b8fSAndroid Build Coastguard Worker OP_REGX,
72*eb293b8fSAndroid Build Coastguard Worker OP_BREG,
73*eb293b8fSAndroid Build Coastguard Worker OP_BREGX,
74*eb293b8fSAndroid Build Coastguard Worker OP_NOP,
75*eb293b8fSAndroid Build Coastguard Worker OP_NOT_IMPLEMENTED,
76*eb293b8fSAndroid Build Coastguard Worker };
77*eb293b8fSAndroid Build Coastguard Worker
78*eb293b8fSAndroid Build Coastguard Worker struct OpCallback {
79*eb293b8fSAndroid Build Coastguard Worker // It may seem tempting to "clean this up" by replacing "const char[26]" with
80*eb293b8fSAndroid Build Coastguard Worker // "const char*", but doing so would place the entire callback table in
81*eb293b8fSAndroid Build Coastguard Worker // .data.rel.ro section, instead of .rodata section, and thus increase
82*eb293b8fSAndroid Build Coastguard Worker // dirty memory usage. Libunwindstack is used by the linker and therefore
83*eb293b8fSAndroid Build Coastguard Worker // loaded for every running process, so every bit of memory counts.
84*eb293b8fSAndroid Build Coastguard Worker // Unlike C standard, C++ standard guarantees this array is big enough to
85*eb293b8fSAndroid Build Coastguard Worker // store the names, or else we would get a compilation error.
86*eb293b8fSAndroid Build Coastguard Worker const char name[26];
87*eb293b8fSAndroid Build Coastguard Worker
88*eb293b8fSAndroid Build Coastguard Worker // Similarily for this field, we do NOT want to directly store function
89*eb293b8fSAndroid Build Coastguard Worker // pointers here. Not only would that cause the callback table to be placed
90*eb293b8fSAndroid Build Coastguard Worker // in .data.rel.ro section, but it would be duplicated for each AddressType.
91*eb293b8fSAndroid Build Coastguard Worker // Instead, we use DwarfOpHandleFunc enum to decouple the callback table from
92*eb293b8fSAndroid Build Coastguard Worker // the function pointers.
93*eb293b8fSAndroid Build Coastguard Worker DwarfOpHandleFunc handle_func;
94*eb293b8fSAndroid Build Coastguard Worker
95*eb293b8fSAndroid Build Coastguard Worker uint8_t num_required_stack_values;
96*eb293b8fSAndroid Build Coastguard Worker uint8_t num_operands;
97*eb293b8fSAndroid Build Coastguard Worker uint8_t operands[2];
98*eb293b8fSAndroid Build Coastguard Worker };
99*eb293b8fSAndroid Build Coastguard Worker
100*eb293b8fSAndroid Build Coastguard Worker constexpr static OpCallback kCallbackTable[256] = {
101*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0x00 illegal op
102*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0x01 illegal op
103*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0x02 illegal op
104*eb293b8fSAndroid Build Coastguard Worker {
105*eb293b8fSAndroid Build Coastguard Worker // 0x03 DW_OP_addr
106*eb293b8fSAndroid Build Coastguard Worker "DW_OP_addr",
107*eb293b8fSAndroid Build Coastguard Worker OP_PUSH,
108*eb293b8fSAndroid Build Coastguard Worker 0,
109*eb293b8fSAndroid Build Coastguard Worker 1,
110*eb293b8fSAndroid Build Coastguard Worker {DW_EH_PE_absptr},
111*eb293b8fSAndroid Build Coastguard Worker },
112*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0x04 illegal op
113*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0x05 illegal op
114*eb293b8fSAndroid Build Coastguard Worker {
115*eb293b8fSAndroid Build Coastguard Worker // 0x06 DW_OP_deref
116*eb293b8fSAndroid Build Coastguard Worker "DW_OP_deref",
117*eb293b8fSAndroid Build Coastguard Worker OP_DEREF,
118*eb293b8fSAndroid Build Coastguard Worker 1,
119*eb293b8fSAndroid Build Coastguard Worker 0,
120*eb293b8fSAndroid Build Coastguard Worker {},
121*eb293b8fSAndroid Build Coastguard Worker },
122*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0x07 illegal op
123*eb293b8fSAndroid Build Coastguard Worker {
124*eb293b8fSAndroid Build Coastguard Worker // 0x08 DW_OP_const1u
125*eb293b8fSAndroid Build Coastguard Worker "DW_OP_const1u",
126*eb293b8fSAndroid Build Coastguard Worker OP_PUSH,
127*eb293b8fSAndroid Build Coastguard Worker 0,
128*eb293b8fSAndroid Build Coastguard Worker 1,
129*eb293b8fSAndroid Build Coastguard Worker {DW_EH_PE_udata1},
130*eb293b8fSAndroid Build Coastguard Worker },
131*eb293b8fSAndroid Build Coastguard Worker {
132*eb293b8fSAndroid Build Coastguard Worker // 0x09 DW_OP_const1s
133*eb293b8fSAndroid Build Coastguard Worker "DW_OP_const1s",
134*eb293b8fSAndroid Build Coastguard Worker OP_PUSH,
135*eb293b8fSAndroid Build Coastguard Worker 0,
136*eb293b8fSAndroid Build Coastguard Worker 1,
137*eb293b8fSAndroid Build Coastguard Worker {DW_EH_PE_sdata1},
138*eb293b8fSAndroid Build Coastguard Worker },
139*eb293b8fSAndroid Build Coastguard Worker {
140*eb293b8fSAndroid Build Coastguard Worker // 0x0a DW_OP_const2u
141*eb293b8fSAndroid Build Coastguard Worker "DW_OP_const2u",
142*eb293b8fSAndroid Build Coastguard Worker OP_PUSH,
143*eb293b8fSAndroid Build Coastguard Worker 0,
144*eb293b8fSAndroid Build Coastguard Worker 1,
145*eb293b8fSAndroid Build Coastguard Worker {DW_EH_PE_udata2},
146*eb293b8fSAndroid Build Coastguard Worker },
147*eb293b8fSAndroid Build Coastguard Worker {
148*eb293b8fSAndroid Build Coastguard Worker // 0x0b DW_OP_const2s
149*eb293b8fSAndroid Build Coastguard Worker "DW_OP_const2s",
150*eb293b8fSAndroid Build Coastguard Worker OP_PUSH,
151*eb293b8fSAndroid Build Coastguard Worker 0,
152*eb293b8fSAndroid Build Coastguard Worker 1,
153*eb293b8fSAndroid Build Coastguard Worker {DW_EH_PE_sdata2},
154*eb293b8fSAndroid Build Coastguard Worker },
155*eb293b8fSAndroid Build Coastguard Worker {
156*eb293b8fSAndroid Build Coastguard Worker // 0x0c DW_OP_const4u
157*eb293b8fSAndroid Build Coastguard Worker "DW_OP_const4u",
158*eb293b8fSAndroid Build Coastguard Worker OP_PUSH,
159*eb293b8fSAndroid Build Coastguard Worker 0,
160*eb293b8fSAndroid Build Coastguard Worker 1,
161*eb293b8fSAndroid Build Coastguard Worker {DW_EH_PE_udata4},
162*eb293b8fSAndroid Build Coastguard Worker },
163*eb293b8fSAndroid Build Coastguard Worker {
164*eb293b8fSAndroid Build Coastguard Worker // 0x0d DW_OP_const4s
165*eb293b8fSAndroid Build Coastguard Worker "DW_OP_const4s",
166*eb293b8fSAndroid Build Coastguard Worker OP_PUSH,
167*eb293b8fSAndroid Build Coastguard Worker 0,
168*eb293b8fSAndroid Build Coastguard Worker 1,
169*eb293b8fSAndroid Build Coastguard Worker {DW_EH_PE_sdata4},
170*eb293b8fSAndroid Build Coastguard Worker },
171*eb293b8fSAndroid Build Coastguard Worker {
172*eb293b8fSAndroid Build Coastguard Worker // 0x0e DW_OP_const8u
173*eb293b8fSAndroid Build Coastguard Worker "DW_OP_const8u",
174*eb293b8fSAndroid Build Coastguard Worker OP_PUSH,
175*eb293b8fSAndroid Build Coastguard Worker 0,
176*eb293b8fSAndroid Build Coastguard Worker 1,
177*eb293b8fSAndroid Build Coastguard Worker {DW_EH_PE_udata8},
178*eb293b8fSAndroid Build Coastguard Worker },
179*eb293b8fSAndroid Build Coastguard Worker {
180*eb293b8fSAndroid Build Coastguard Worker // 0x0f DW_OP_const8s
181*eb293b8fSAndroid Build Coastguard Worker "DW_OP_const8s",
182*eb293b8fSAndroid Build Coastguard Worker OP_PUSH,
183*eb293b8fSAndroid Build Coastguard Worker 0,
184*eb293b8fSAndroid Build Coastguard Worker 1,
185*eb293b8fSAndroid Build Coastguard Worker {DW_EH_PE_sdata8},
186*eb293b8fSAndroid Build Coastguard Worker },
187*eb293b8fSAndroid Build Coastguard Worker {
188*eb293b8fSAndroid Build Coastguard Worker // 0x10 DW_OP_constu
189*eb293b8fSAndroid Build Coastguard Worker "DW_OP_constu",
190*eb293b8fSAndroid Build Coastguard Worker OP_PUSH,
191*eb293b8fSAndroid Build Coastguard Worker 0,
192*eb293b8fSAndroid Build Coastguard Worker 1,
193*eb293b8fSAndroid Build Coastguard Worker {DW_EH_PE_uleb128},
194*eb293b8fSAndroid Build Coastguard Worker },
195*eb293b8fSAndroid Build Coastguard Worker {
196*eb293b8fSAndroid Build Coastguard Worker // 0x11 DW_OP_consts
197*eb293b8fSAndroid Build Coastguard Worker "DW_OP_consts",
198*eb293b8fSAndroid Build Coastguard Worker OP_PUSH,
199*eb293b8fSAndroid Build Coastguard Worker 0,
200*eb293b8fSAndroid Build Coastguard Worker 1,
201*eb293b8fSAndroid Build Coastguard Worker {DW_EH_PE_sleb128},
202*eb293b8fSAndroid Build Coastguard Worker },
203*eb293b8fSAndroid Build Coastguard Worker {
204*eb293b8fSAndroid Build Coastguard Worker // 0x12 DW_OP_dup
205*eb293b8fSAndroid Build Coastguard Worker "DW_OP_dup",
206*eb293b8fSAndroid Build Coastguard Worker OP_DUP,
207*eb293b8fSAndroid Build Coastguard Worker 1,
208*eb293b8fSAndroid Build Coastguard Worker 0,
209*eb293b8fSAndroid Build Coastguard Worker {},
210*eb293b8fSAndroid Build Coastguard Worker },
211*eb293b8fSAndroid Build Coastguard Worker {
212*eb293b8fSAndroid Build Coastguard Worker // 0x13 DW_OP_drop
213*eb293b8fSAndroid Build Coastguard Worker "DW_OP_drop",
214*eb293b8fSAndroid Build Coastguard Worker OP_DROP,
215*eb293b8fSAndroid Build Coastguard Worker 1,
216*eb293b8fSAndroid Build Coastguard Worker 0,
217*eb293b8fSAndroid Build Coastguard Worker {},
218*eb293b8fSAndroid Build Coastguard Worker },
219*eb293b8fSAndroid Build Coastguard Worker {
220*eb293b8fSAndroid Build Coastguard Worker // 0x14 DW_OP_over
221*eb293b8fSAndroid Build Coastguard Worker "DW_OP_over",
222*eb293b8fSAndroid Build Coastguard Worker OP_OVER,
223*eb293b8fSAndroid Build Coastguard Worker 2,
224*eb293b8fSAndroid Build Coastguard Worker 0,
225*eb293b8fSAndroid Build Coastguard Worker {},
226*eb293b8fSAndroid Build Coastguard Worker },
227*eb293b8fSAndroid Build Coastguard Worker {
228*eb293b8fSAndroid Build Coastguard Worker // 0x15 DW_OP_pick
229*eb293b8fSAndroid Build Coastguard Worker "DW_OP_pick",
230*eb293b8fSAndroid Build Coastguard Worker OP_PICK,
231*eb293b8fSAndroid Build Coastguard Worker 0,
232*eb293b8fSAndroid Build Coastguard Worker 1,
233*eb293b8fSAndroid Build Coastguard Worker {DW_EH_PE_udata1},
234*eb293b8fSAndroid Build Coastguard Worker },
235*eb293b8fSAndroid Build Coastguard Worker {
236*eb293b8fSAndroid Build Coastguard Worker // 0x16 DW_OP_swap
237*eb293b8fSAndroid Build Coastguard Worker "DW_OP_swap",
238*eb293b8fSAndroid Build Coastguard Worker OP_SWAP,
239*eb293b8fSAndroid Build Coastguard Worker 2,
240*eb293b8fSAndroid Build Coastguard Worker 0,
241*eb293b8fSAndroid Build Coastguard Worker {},
242*eb293b8fSAndroid Build Coastguard Worker },
243*eb293b8fSAndroid Build Coastguard Worker {
244*eb293b8fSAndroid Build Coastguard Worker // 0x17 DW_OP_rot
245*eb293b8fSAndroid Build Coastguard Worker "DW_OP_rot",
246*eb293b8fSAndroid Build Coastguard Worker OP_ROT,
247*eb293b8fSAndroid Build Coastguard Worker 3,
248*eb293b8fSAndroid Build Coastguard Worker 0,
249*eb293b8fSAndroid Build Coastguard Worker {},
250*eb293b8fSAndroid Build Coastguard Worker },
251*eb293b8fSAndroid Build Coastguard Worker {
252*eb293b8fSAndroid Build Coastguard Worker // 0x18 DW_OP_xderef
253*eb293b8fSAndroid Build Coastguard Worker "DW_OP_xderef",
254*eb293b8fSAndroid Build Coastguard Worker OP_NOT_IMPLEMENTED,
255*eb293b8fSAndroid Build Coastguard Worker 2,
256*eb293b8fSAndroid Build Coastguard Worker 0,
257*eb293b8fSAndroid Build Coastguard Worker {},
258*eb293b8fSAndroid Build Coastguard Worker },
259*eb293b8fSAndroid Build Coastguard Worker {
260*eb293b8fSAndroid Build Coastguard Worker // 0x19 DW_OP_abs
261*eb293b8fSAndroid Build Coastguard Worker "DW_OP_abs",
262*eb293b8fSAndroid Build Coastguard Worker OP_ABS,
263*eb293b8fSAndroid Build Coastguard Worker 1,
264*eb293b8fSAndroid Build Coastguard Worker 0,
265*eb293b8fSAndroid Build Coastguard Worker {},
266*eb293b8fSAndroid Build Coastguard Worker },
267*eb293b8fSAndroid Build Coastguard Worker {
268*eb293b8fSAndroid Build Coastguard Worker // 0x1a DW_OP_and
269*eb293b8fSAndroid Build Coastguard Worker "DW_OP_and",
270*eb293b8fSAndroid Build Coastguard Worker OP_AND,
271*eb293b8fSAndroid Build Coastguard Worker 2,
272*eb293b8fSAndroid Build Coastguard Worker 0,
273*eb293b8fSAndroid Build Coastguard Worker {},
274*eb293b8fSAndroid Build Coastguard Worker },
275*eb293b8fSAndroid Build Coastguard Worker {
276*eb293b8fSAndroid Build Coastguard Worker // 0x1b DW_OP_div
277*eb293b8fSAndroid Build Coastguard Worker "DW_OP_div",
278*eb293b8fSAndroid Build Coastguard Worker OP_DIV,
279*eb293b8fSAndroid Build Coastguard Worker 2,
280*eb293b8fSAndroid Build Coastguard Worker 0,
281*eb293b8fSAndroid Build Coastguard Worker {},
282*eb293b8fSAndroid Build Coastguard Worker },
283*eb293b8fSAndroid Build Coastguard Worker {
284*eb293b8fSAndroid Build Coastguard Worker // 0x1c DW_OP_minus
285*eb293b8fSAndroid Build Coastguard Worker "DW_OP_minus",
286*eb293b8fSAndroid Build Coastguard Worker OP_MINUS,
287*eb293b8fSAndroid Build Coastguard Worker 2,
288*eb293b8fSAndroid Build Coastguard Worker 0,
289*eb293b8fSAndroid Build Coastguard Worker {},
290*eb293b8fSAndroid Build Coastguard Worker },
291*eb293b8fSAndroid Build Coastguard Worker {
292*eb293b8fSAndroid Build Coastguard Worker // 0x1d DW_OP_mod
293*eb293b8fSAndroid Build Coastguard Worker "DW_OP_mod",
294*eb293b8fSAndroid Build Coastguard Worker OP_MOD,
295*eb293b8fSAndroid Build Coastguard Worker 2,
296*eb293b8fSAndroid Build Coastguard Worker 0,
297*eb293b8fSAndroid Build Coastguard Worker {},
298*eb293b8fSAndroid Build Coastguard Worker },
299*eb293b8fSAndroid Build Coastguard Worker {
300*eb293b8fSAndroid Build Coastguard Worker // 0x1e DW_OP_mul
301*eb293b8fSAndroid Build Coastguard Worker "DW_OP_mul",
302*eb293b8fSAndroid Build Coastguard Worker OP_MUL,
303*eb293b8fSAndroid Build Coastguard Worker 2,
304*eb293b8fSAndroid Build Coastguard Worker 0,
305*eb293b8fSAndroid Build Coastguard Worker {},
306*eb293b8fSAndroid Build Coastguard Worker },
307*eb293b8fSAndroid Build Coastguard Worker {
308*eb293b8fSAndroid Build Coastguard Worker // 0x1f DW_OP_neg
309*eb293b8fSAndroid Build Coastguard Worker "DW_OP_neg",
310*eb293b8fSAndroid Build Coastguard Worker OP_NEG,
311*eb293b8fSAndroid Build Coastguard Worker 1,
312*eb293b8fSAndroid Build Coastguard Worker 0,
313*eb293b8fSAndroid Build Coastguard Worker {},
314*eb293b8fSAndroid Build Coastguard Worker },
315*eb293b8fSAndroid Build Coastguard Worker {
316*eb293b8fSAndroid Build Coastguard Worker // 0x20 DW_OP_not
317*eb293b8fSAndroid Build Coastguard Worker "DW_OP_not",
318*eb293b8fSAndroid Build Coastguard Worker OP_NOT,
319*eb293b8fSAndroid Build Coastguard Worker 1,
320*eb293b8fSAndroid Build Coastguard Worker 0,
321*eb293b8fSAndroid Build Coastguard Worker {},
322*eb293b8fSAndroid Build Coastguard Worker },
323*eb293b8fSAndroid Build Coastguard Worker {
324*eb293b8fSAndroid Build Coastguard Worker // 0x21 DW_OP_or
325*eb293b8fSAndroid Build Coastguard Worker "DW_OP_or",
326*eb293b8fSAndroid Build Coastguard Worker OP_OR,
327*eb293b8fSAndroid Build Coastguard Worker 2,
328*eb293b8fSAndroid Build Coastguard Worker 0,
329*eb293b8fSAndroid Build Coastguard Worker {},
330*eb293b8fSAndroid Build Coastguard Worker },
331*eb293b8fSAndroid Build Coastguard Worker {
332*eb293b8fSAndroid Build Coastguard Worker // 0x22 DW_OP_plus
333*eb293b8fSAndroid Build Coastguard Worker "DW_OP_plus",
334*eb293b8fSAndroid Build Coastguard Worker OP_PLUS,
335*eb293b8fSAndroid Build Coastguard Worker 2,
336*eb293b8fSAndroid Build Coastguard Worker 0,
337*eb293b8fSAndroid Build Coastguard Worker {},
338*eb293b8fSAndroid Build Coastguard Worker },
339*eb293b8fSAndroid Build Coastguard Worker {
340*eb293b8fSAndroid Build Coastguard Worker // 0x23 DW_OP_plus_uconst
341*eb293b8fSAndroid Build Coastguard Worker "DW_OP_plus_uconst",
342*eb293b8fSAndroid Build Coastguard Worker OP_PLUS_UCONST,
343*eb293b8fSAndroid Build Coastguard Worker 1,
344*eb293b8fSAndroid Build Coastguard Worker 1,
345*eb293b8fSAndroid Build Coastguard Worker {DW_EH_PE_uleb128},
346*eb293b8fSAndroid Build Coastguard Worker },
347*eb293b8fSAndroid Build Coastguard Worker {
348*eb293b8fSAndroid Build Coastguard Worker // 0x24 DW_OP_shl
349*eb293b8fSAndroid Build Coastguard Worker "DW_OP_shl",
350*eb293b8fSAndroid Build Coastguard Worker OP_SHL,
351*eb293b8fSAndroid Build Coastguard Worker 2,
352*eb293b8fSAndroid Build Coastguard Worker 0,
353*eb293b8fSAndroid Build Coastguard Worker {},
354*eb293b8fSAndroid Build Coastguard Worker },
355*eb293b8fSAndroid Build Coastguard Worker {
356*eb293b8fSAndroid Build Coastguard Worker // 0x25 DW_OP_shr
357*eb293b8fSAndroid Build Coastguard Worker "DW_OP_shr",
358*eb293b8fSAndroid Build Coastguard Worker OP_SHR,
359*eb293b8fSAndroid Build Coastguard Worker 2,
360*eb293b8fSAndroid Build Coastguard Worker 0,
361*eb293b8fSAndroid Build Coastguard Worker {},
362*eb293b8fSAndroid Build Coastguard Worker },
363*eb293b8fSAndroid Build Coastguard Worker {
364*eb293b8fSAndroid Build Coastguard Worker // 0x26 DW_OP_shra
365*eb293b8fSAndroid Build Coastguard Worker "DW_OP_shra",
366*eb293b8fSAndroid Build Coastguard Worker OP_SHRA,
367*eb293b8fSAndroid Build Coastguard Worker 2,
368*eb293b8fSAndroid Build Coastguard Worker 0,
369*eb293b8fSAndroid Build Coastguard Worker {},
370*eb293b8fSAndroid Build Coastguard Worker },
371*eb293b8fSAndroid Build Coastguard Worker {
372*eb293b8fSAndroid Build Coastguard Worker // 0x27 DW_OP_xor
373*eb293b8fSAndroid Build Coastguard Worker "DW_OP_xor",
374*eb293b8fSAndroid Build Coastguard Worker OP_XOR,
375*eb293b8fSAndroid Build Coastguard Worker 2,
376*eb293b8fSAndroid Build Coastguard Worker 0,
377*eb293b8fSAndroid Build Coastguard Worker {},
378*eb293b8fSAndroid Build Coastguard Worker },
379*eb293b8fSAndroid Build Coastguard Worker {
380*eb293b8fSAndroid Build Coastguard Worker // 0x28 DW_OP_bra
381*eb293b8fSAndroid Build Coastguard Worker "DW_OP_bra",
382*eb293b8fSAndroid Build Coastguard Worker OP_BRA,
383*eb293b8fSAndroid Build Coastguard Worker 1,
384*eb293b8fSAndroid Build Coastguard Worker 1,
385*eb293b8fSAndroid Build Coastguard Worker {DW_EH_PE_sdata2},
386*eb293b8fSAndroid Build Coastguard Worker },
387*eb293b8fSAndroid Build Coastguard Worker {
388*eb293b8fSAndroid Build Coastguard Worker // 0x29 DW_OP_eq
389*eb293b8fSAndroid Build Coastguard Worker "DW_OP_eq",
390*eb293b8fSAndroid Build Coastguard Worker OP_EQ,
391*eb293b8fSAndroid Build Coastguard Worker 2,
392*eb293b8fSAndroid Build Coastguard Worker 0,
393*eb293b8fSAndroid Build Coastguard Worker {},
394*eb293b8fSAndroid Build Coastguard Worker },
395*eb293b8fSAndroid Build Coastguard Worker {
396*eb293b8fSAndroid Build Coastguard Worker // 0x2a DW_OP_ge
397*eb293b8fSAndroid Build Coastguard Worker "DW_OP_ge",
398*eb293b8fSAndroid Build Coastguard Worker OP_GE,
399*eb293b8fSAndroid Build Coastguard Worker 2,
400*eb293b8fSAndroid Build Coastguard Worker 0,
401*eb293b8fSAndroid Build Coastguard Worker {},
402*eb293b8fSAndroid Build Coastguard Worker },
403*eb293b8fSAndroid Build Coastguard Worker {
404*eb293b8fSAndroid Build Coastguard Worker // 0x2b DW_OP_gt
405*eb293b8fSAndroid Build Coastguard Worker "DW_OP_gt",
406*eb293b8fSAndroid Build Coastguard Worker OP_GT,
407*eb293b8fSAndroid Build Coastguard Worker 2,
408*eb293b8fSAndroid Build Coastguard Worker 0,
409*eb293b8fSAndroid Build Coastguard Worker {},
410*eb293b8fSAndroid Build Coastguard Worker },
411*eb293b8fSAndroid Build Coastguard Worker {
412*eb293b8fSAndroid Build Coastguard Worker // 0x2c DW_OP_le
413*eb293b8fSAndroid Build Coastguard Worker "DW_OP_le",
414*eb293b8fSAndroid Build Coastguard Worker OP_LE,
415*eb293b8fSAndroid Build Coastguard Worker 2,
416*eb293b8fSAndroid Build Coastguard Worker 0,
417*eb293b8fSAndroid Build Coastguard Worker {},
418*eb293b8fSAndroid Build Coastguard Worker },
419*eb293b8fSAndroid Build Coastguard Worker {
420*eb293b8fSAndroid Build Coastguard Worker // 0x2d DW_OP_lt
421*eb293b8fSAndroid Build Coastguard Worker "DW_OP_lt",
422*eb293b8fSAndroid Build Coastguard Worker OP_LT,
423*eb293b8fSAndroid Build Coastguard Worker 2,
424*eb293b8fSAndroid Build Coastguard Worker 0,
425*eb293b8fSAndroid Build Coastguard Worker {},
426*eb293b8fSAndroid Build Coastguard Worker },
427*eb293b8fSAndroid Build Coastguard Worker {
428*eb293b8fSAndroid Build Coastguard Worker // 0x2e DW_OP_ne
429*eb293b8fSAndroid Build Coastguard Worker "DW_OP_ne",
430*eb293b8fSAndroid Build Coastguard Worker OP_NE,
431*eb293b8fSAndroid Build Coastguard Worker 2,
432*eb293b8fSAndroid Build Coastguard Worker 0,
433*eb293b8fSAndroid Build Coastguard Worker {},
434*eb293b8fSAndroid Build Coastguard Worker },
435*eb293b8fSAndroid Build Coastguard Worker {
436*eb293b8fSAndroid Build Coastguard Worker // 0x2f DW_OP_skip
437*eb293b8fSAndroid Build Coastguard Worker "DW_OP_skip",
438*eb293b8fSAndroid Build Coastguard Worker OP_SKIP,
439*eb293b8fSAndroid Build Coastguard Worker 0,
440*eb293b8fSAndroid Build Coastguard Worker 1,
441*eb293b8fSAndroid Build Coastguard Worker {DW_EH_PE_sdata2},
442*eb293b8fSAndroid Build Coastguard Worker },
443*eb293b8fSAndroid Build Coastguard Worker {
444*eb293b8fSAndroid Build Coastguard Worker // 0x30 DW_OP_lit0
445*eb293b8fSAndroid Build Coastguard Worker "DW_OP_lit0",
446*eb293b8fSAndroid Build Coastguard Worker OP_LIT,
447*eb293b8fSAndroid Build Coastguard Worker 0,
448*eb293b8fSAndroid Build Coastguard Worker 0,
449*eb293b8fSAndroid Build Coastguard Worker {},
450*eb293b8fSAndroid Build Coastguard Worker },
451*eb293b8fSAndroid Build Coastguard Worker {
452*eb293b8fSAndroid Build Coastguard Worker // 0x31 DW_OP_lit1
453*eb293b8fSAndroid Build Coastguard Worker "DW_OP_lit1",
454*eb293b8fSAndroid Build Coastguard Worker OP_LIT,
455*eb293b8fSAndroid Build Coastguard Worker 0,
456*eb293b8fSAndroid Build Coastguard Worker 0,
457*eb293b8fSAndroid Build Coastguard Worker {},
458*eb293b8fSAndroid Build Coastguard Worker },
459*eb293b8fSAndroid Build Coastguard Worker {
460*eb293b8fSAndroid Build Coastguard Worker // 0x32 DW_OP_lit2
461*eb293b8fSAndroid Build Coastguard Worker "DW_OP_lit2",
462*eb293b8fSAndroid Build Coastguard Worker OP_LIT,
463*eb293b8fSAndroid Build Coastguard Worker 0,
464*eb293b8fSAndroid Build Coastguard Worker 0,
465*eb293b8fSAndroid Build Coastguard Worker {},
466*eb293b8fSAndroid Build Coastguard Worker },
467*eb293b8fSAndroid Build Coastguard Worker {
468*eb293b8fSAndroid Build Coastguard Worker // 0x33 DW_OP_lit3
469*eb293b8fSAndroid Build Coastguard Worker "DW_OP_lit3",
470*eb293b8fSAndroid Build Coastguard Worker OP_LIT,
471*eb293b8fSAndroid Build Coastguard Worker 0,
472*eb293b8fSAndroid Build Coastguard Worker 0,
473*eb293b8fSAndroid Build Coastguard Worker {},
474*eb293b8fSAndroid Build Coastguard Worker },
475*eb293b8fSAndroid Build Coastguard Worker {
476*eb293b8fSAndroid Build Coastguard Worker // 0x34 DW_OP_lit4
477*eb293b8fSAndroid Build Coastguard Worker "DW_OP_lit4",
478*eb293b8fSAndroid Build Coastguard Worker OP_LIT,
479*eb293b8fSAndroid Build Coastguard Worker 0,
480*eb293b8fSAndroid Build Coastguard Worker 0,
481*eb293b8fSAndroid Build Coastguard Worker {},
482*eb293b8fSAndroid Build Coastguard Worker },
483*eb293b8fSAndroid Build Coastguard Worker {
484*eb293b8fSAndroid Build Coastguard Worker // 0x35 DW_OP_lit5
485*eb293b8fSAndroid Build Coastguard Worker "DW_OP_lit5",
486*eb293b8fSAndroid Build Coastguard Worker OP_LIT,
487*eb293b8fSAndroid Build Coastguard Worker 0,
488*eb293b8fSAndroid Build Coastguard Worker 0,
489*eb293b8fSAndroid Build Coastguard Worker {},
490*eb293b8fSAndroid Build Coastguard Worker },
491*eb293b8fSAndroid Build Coastguard Worker {
492*eb293b8fSAndroid Build Coastguard Worker // 0x36 DW_OP_lit6
493*eb293b8fSAndroid Build Coastguard Worker "DW_OP_lit6",
494*eb293b8fSAndroid Build Coastguard Worker OP_LIT,
495*eb293b8fSAndroid Build Coastguard Worker 0,
496*eb293b8fSAndroid Build Coastguard Worker 0,
497*eb293b8fSAndroid Build Coastguard Worker {},
498*eb293b8fSAndroid Build Coastguard Worker },
499*eb293b8fSAndroid Build Coastguard Worker {
500*eb293b8fSAndroid Build Coastguard Worker // 0x37 DW_OP_lit7
501*eb293b8fSAndroid Build Coastguard Worker "DW_OP_lit7",
502*eb293b8fSAndroid Build Coastguard Worker OP_LIT,
503*eb293b8fSAndroid Build Coastguard Worker 0,
504*eb293b8fSAndroid Build Coastguard Worker 0,
505*eb293b8fSAndroid Build Coastguard Worker {},
506*eb293b8fSAndroid Build Coastguard Worker },
507*eb293b8fSAndroid Build Coastguard Worker {
508*eb293b8fSAndroid Build Coastguard Worker // 0x38 DW_OP_lit8
509*eb293b8fSAndroid Build Coastguard Worker "DW_OP_lit8",
510*eb293b8fSAndroid Build Coastguard Worker OP_LIT,
511*eb293b8fSAndroid Build Coastguard Worker 0,
512*eb293b8fSAndroid Build Coastguard Worker 0,
513*eb293b8fSAndroid Build Coastguard Worker {},
514*eb293b8fSAndroid Build Coastguard Worker },
515*eb293b8fSAndroid Build Coastguard Worker {
516*eb293b8fSAndroid Build Coastguard Worker // 0x39 DW_OP_lit9
517*eb293b8fSAndroid Build Coastguard Worker "DW_OP_lit9",
518*eb293b8fSAndroid Build Coastguard Worker OP_LIT,
519*eb293b8fSAndroid Build Coastguard Worker 0,
520*eb293b8fSAndroid Build Coastguard Worker 0,
521*eb293b8fSAndroid Build Coastguard Worker {},
522*eb293b8fSAndroid Build Coastguard Worker },
523*eb293b8fSAndroid Build Coastguard Worker {
524*eb293b8fSAndroid Build Coastguard Worker // 0x3a DW_OP_lit10
525*eb293b8fSAndroid Build Coastguard Worker "DW_OP_lit10",
526*eb293b8fSAndroid Build Coastguard Worker OP_LIT,
527*eb293b8fSAndroid Build Coastguard Worker 0,
528*eb293b8fSAndroid Build Coastguard Worker 0,
529*eb293b8fSAndroid Build Coastguard Worker {},
530*eb293b8fSAndroid Build Coastguard Worker },
531*eb293b8fSAndroid Build Coastguard Worker {
532*eb293b8fSAndroid Build Coastguard Worker // 0x3b DW_OP_lit11
533*eb293b8fSAndroid Build Coastguard Worker "DW_OP_lit11",
534*eb293b8fSAndroid Build Coastguard Worker OP_LIT,
535*eb293b8fSAndroid Build Coastguard Worker 0,
536*eb293b8fSAndroid Build Coastguard Worker 0,
537*eb293b8fSAndroid Build Coastguard Worker {},
538*eb293b8fSAndroid Build Coastguard Worker },
539*eb293b8fSAndroid Build Coastguard Worker {
540*eb293b8fSAndroid Build Coastguard Worker // 0x3c DW_OP_lit12
541*eb293b8fSAndroid Build Coastguard Worker "DW_OP_lit12",
542*eb293b8fSAndroid Build Coastguard Worker OP_LIT,
543*eb293b8fSAndroid Build Coastguard Worker 0,
544*eb293b8fSAndroid Build Coastguard Worker 0,
545*eb293b8fSAndroid Build Coastguard Worker {},
546*eb293b8fSAndroid Build Coastguard Worker },
547*eb293b8fSAndroid Build Coastguard Worker {
548*eb293b8fSAndroid Build Coastguard Worker // 0x3d DW_OP_lit13
549*eb293b8fSAndroid Build Coastguard Worker "DW_OP_lit13",
550*eb293b8fSAndroid Build Coastguard Worker OP_LIT,
551*eb293b8fSAndroid Build Coastguard Worker 0,
552*eb293b8fSAndroid Build Coastguard Worker 0,
553*eb293b8fSAndroid Build Coastguard Worker {},
554*eb293b8fSAndroid Build Coastguard Worker },
555*eb293b8fSAndroid Build Coastguard Worker {
556*eb293b8fSAndroid Build Coastguard Worker // 0x3e DW_OP_lit14
557*eb293b8fSAndroid Build Coastguard Worker "DW_OP_lit14",
558*eb293b8fSAndroid Build Coastguard Worker OP_LIT,
559*eb293b8fSAndroid Build Coastguard Worker 0,
560*eb293b8fSAndroid Build Coastguard Worker 0,
561*eb293b8fSAndroid Build Coastguard Worker {},
562*eb293b8fSAndroid Build Coastguard Worker },
563*eb293b8fSAndroid Build Coastguard Worker {
564*eb293b8fSAndroid Build Coastguard Worker // 0x3f DW_OP_lit15
565*eb293b8fSAndroid Build Coastguard Worker "DW_OP_lit15",
566*eb293b8fSAndroid Build Coastguard Worker OP_LIT,
567*eb293b8fSAndroid Build Coastguard Worker 0,
568*eb293b8fSAndroid Build Coastguard Worker 0,
569*eb293b8fSAndroid Build Coastguard Worker {},
570*eb293b8fSAndroid Build Coastguard Worker },
571*eb293b8fSAndroid Build Coastguard Worker {
572*eb293b8fSAndroid Build Coastguard Worker // 0x40 DW_OP_lit16
573*eb293b8fSAndroid Build Coastguard Worker "DW_OP_lit16",
574*eb293b8fSAndroid Build Coastguard Worker OP_LIT,
575*eb293b8fSAndroid Build Coastguard Worker 0,
576*eb293b8fSAndroid Build Coastguard Worker 0,
577*eb293b8fSAndroid Build Coastguard Worker {},
578*eb293b8fSAndroid Build Coastguard Worker },
579*eb293b8fSAndroid Build Coastguard Worker {
580*eb293b8fSAndroid Build Coastguard Worker // 0x41 DW_OP_lit17
581*eb293b8fSAndroid Build Coastguard Worker "DW_OP_lit17",
582*eb293b8fSAndroid Build Coastguard Worker OP_LIT,
583*eb293b8fSAndroid Build Coastguard Worker 0,
584*eb293b8fSAndroid Build Coastguard Worker 0,
585*eb293b8fSAndroid Build Coastguard Worker {},
586*eb293b8fSAndroid Build Coastguard Worker },
587*eb293b8fSAndroid Build Coastguard Worker {
588*eb293b8fSAndroid Build Coastguard Worker // 0x42 DW_OP_lit18
589*eb293b8fSAndroid Build Coastguard Worker "DW_OP_lit18",
590*eb293b8fSAndroid Build Coastguard Worker OP_LIT,
591*eb293b8fSAndroid Build Coastguard Worker 0,
592*eb293b8fSAndroid Build Coastguard Worker 0,
593*eb293b8fSAndroid Build Coastguard Worker {},
594*eb293b8fSAndroid Build Coastguard Worker },
595*eb293b8fSAndroid Build Coastguard Worker {
596*eb293b8fSAndroid Build Coastguard Worker // 0x43 DW_OP_lit19
597*eb293b8fSAndroid Build Coastguard Worker "DW_OP_lit19",
598*eb293b8fSAndroid Build Coastguard Worker OP_LIT,
599*eb293b8fSAndroid Build Coastguard Worker 0,
600*eb293b8fSAndroid Build Coastguard Worker 0,
601*eb293b8fSAndroid Build Coastguard Worker {},
602*eb293b8fSAndroid Build Coastguard Worker },
603*eb293b8fSAndroid Build Coastguard Worker {
604*eb293b8fSAndroid Build Coastguard Worker // 0x44 DW_OP_lit20
605*eb293b8fSAndroid Build Coastguard Worker "DW_OP_lit20",
606*eb293b8fSAndroid Build Coastguard Worker OP_LIT,
607*eb293b8fSAndroid Build Coastguard Worker 0,
608*eb293b8fSAndroid Build Coastguard Worker 0,
609*eb293b8fSAndroid Build Coastguard Worker {},
610*eb293b8fSAndroid Build Coastguard Worker },
611*eb293b8fSAndroid Build Coastguard Worker {
612*eb293b8fSAndroid Build Coastguard Worker // 0x45 DW_OP_lit21
613*eb293b8fSAndroid Build Coastguard Worker "DW_OP_lit21",
614*eb293b8fSAndroid Build Coastguard Worker OP_LIT,
615*eb293b8fSAndroid Build Coastguard Worker 0,
616*eb293b8fSAndroid Build Coastguard Worker 0,
617*eb293b8fSAndroid Build Coastguard Worker {},
618*eb293b8fSAndroid Build Coastguard Worker },
619*eb293b8fSAndroid Build Coastguard Worker {
620*eb293b8fSAndroid Build Coastguard Worker // 0x46 DW_OP_lit22
621*eb293b8fSAndroid Build Coastguard Worker "DW_OP_lit22",
622*eb293b8fSAndroid Build Coastguard Worker OP_LIT,
623*eb293b8fSAndroid Build Coastguard Worker 0,
624*eb293b8fSAndroid Build Coastguard Worker 0,
625*eb293b8fSAndroid Build Coastguard Worker {},
626*eb293b8fSAndroid Build Coastguard Worker },
627*eb293b8fSAndroid Build Coastguard Worker {
628*eb293b8fSAndroid Build Coastguard Worker // 0x47 DW_OP_lit23
629*eb293b8fSAndroid Build Coastguard Worker "DW_OP_lit23",
630*eb293b8fSAndroid Build Coastguard Worker OP_LIT,
631*eb293b8fSAndroid Build Coastguard Worker 0,
632*eb293b8fSAndroid Build Coastguard Worker 0,
633*eb293b8fSAndroid Build Coastguard Worker {},
634*eb293b8fSAndroid Build Coastguard Worker },
635*eb293b8fSAndroid Build Coastguard Worker {
636*eb293b8fSAndroid Build Coastguard Worker // 0x48 DW_OP_lit24
637*eb293b8fSAndroid Build Coastguard Worker "DW_OP_lit24",
638*eb293b8fSAndroid Build Coastguard Worker OP_LIT,
639*eb293b8fSAndroid Build Coastguard Worker 0,
640*eb293b8fSAndroid Build Coastguard Worker 0,
641*eb293b8fSAndroid Build Coastguard Worker {},
642*eb293b8fSAndroid Build Coastguard Worker },
643*eb293b8fSAndroid Build Coastguard Worker {
644*eb293b8fSAndroid Build Coastguard Worker // 0x49 DW_OP_lit25
645*eb293b8fSAndroid Build Coastguard Worker "DW_OP_lit25",
646*eb293b8fSAndroid Build Coastguard Worker OP_LIT,
647*eb293b8fSAndroid Build Coastguard Worker 0,
648*eb293b8fSAndroid Build Coastguard Worker 0,
649*eb293b8fSAndroid Build Coastguard Worker {},
650*eb293b8fSAndroid Build Coastguard Worker },
651*eb293b8fSAndroid Build Coastguard Worker {
652*eb293b8fSAndroid Build Coastguard Worker // 0x4a DW_OP_lit26
653*eb293b8fSAndroid Build Coastguard Worker "DW_OP_lit26",
654*eb293b8fSAndroid Build Coastguard Worker OP_LIT,
655*eb293b8fSAndroid Build Coastguard Worker 0,
656*eb293b8fSAndroid Build Coastguard Worker 0,
657*eb293b8fSAndroid Build Coastguard Worker {},
658*eb293b8fSAndroid Build Coastguard Worker },
659*eb293b8fSAndroid Build Coastguard Worker {
660*eb293b8fSAndroid Build Coastguard Worker // 0x4b DW_OP_lit27
661*eb293b8fSAndroid Build Coastguard Worker "DW_OP_lit27",
662*eb293b8fSAndroid Build Coastguard Worker OP_LIT,
663*eb293b8fSAndroid Build Coastguard Worker 0,
664*eb293b8fSAndroid Build Coastguard Worker 0,
665*eb293b8fSAndroid Build Coastguard Worker {},
666*eb293b8fSAndroid Build Coastguard Worker },
667*eb293b8fSAndroid Build Coastguard Worker {
668*eb293b8fSAndroid Build Coastguard Worker // 0x4c DW_OP_lit28
669*eb293b8fSAndroid Build Coastguard Worker "DW_OP_lit28",
670*eb293b8fSAndroid Build Coastguard Worker OP_LIT,
671*eb293b8fSAndroid Build Coastguard Worker 0,
672*eb293b8fSAndroid Build Coastguard Worker 0,
673*eb293b8fSAndroid Build Coastguard Worker {},
674*eb293b8fSAndroid Build Coastguard Worker },
675*eb293b8fSAndroid Build Coastguard Worker {
676*eb293b8fSAndroid Build Coastguard Worker // 0x4d DW_OP_lit29
677*eb293b8fSAndroid Build Coastguard Worker "DW_OP_lit29",
678*eb293b8fSAndroid Build Coastguard Worker OP_LIT,
679*eb293b8fSAndroid Build Coastguard Worker 0,
680*eb293b8fSAndroid Build Coastguard Worker 0,
681*eb293b8fSAndroid Build Coastguard Worker {},
682*eb293b8fSAndroid Build Coastguard Worker },
683*eb293b8fSAndroid Build Coastguard Worker {
684*eb293b8fSAndroid Build Coastguard Worker // 0x4e DW_OP_lit30
685*eb293b8fSAndroid Build Coastguard Worker "DW_OP_lit30",
686*eb293b8fSAndroid Build Coastguard Worker OP_LIT,
687*eb293b8fSAndroid Build Coastguard Worker 0,
688*eb293b8fSAndroid Build Coastguard Worker 0,
689*eb293b8fSAndroid Build Coastguard Worker {},
690*eb293b8fSAndroid Build Coastguard Worker },
691*eb293b8fSAndroid Build Coastguard Worker {
692*eb293b8fSAndroid Build Coastguard Worker // 0x4f DW_OP_lit31
693*eb293b8fSAndroid Build Coastguard Worker "DW_OP_lit31",
694*eb293b8fSAndroid Build Coastguard Worker OP_LIT,
695*eb293b8fSAndroid Build Coastguard Worker 0,
696*eb293b8fSAndroid Build Coastguard Worker 0,
697*eb293b8fSAndroid Build Coastguard Worker {},
698*eb293b8fSAndroid Build Coastguard Worker },
699*eb293b8fSAndroid Build Coastguard Worker {
700*eb293b8fSAndroid Build Coastguard Worker // 0x50 DW_OP_reg0
701*eb293b8fSAndroid Build Coastguard Worker "DW_OP_reg0",
702*eb293b8fSAndroid Build Coastguard Worker OP_REG,
703*eb293b8fSAndroid Build Coastguard Worker 0,
704*eb293b8fSAndroid Build Coastguard Worker 0,
705*eb293b8fSAndroid Build Coastguard Worker {},
706*eb293b8fSAndroid Build Coastguard Worker },
707*eb293b8fSAndroid Build Coastguard Worker {
708*eb293b8fSAndroid Build Coastguard Worker // 0x51 DW_OP_reg1
709*eb293b8fSAndroid Build Coastguard Worker "DW_OP_reg1",
710*eb293b8fSAndroid Build Coastguard Worker OP_REG,
711*eb293b8fSAndroid Build Coastguard Worker 0,
712*eb293b8fSAndroid Build Coastguard Worker 0,
713*eb293b8fSAndroid Build Coastguard Worker {},
714*eb293b8fSAndroid Build Coastguard Worker },
715*eb293b8fSAndroid Build Coastguard Worker {
716*eb293b8fSAndroid Build Coastguard Worker // 0x52 DW_OP_reg2
717*eb293b8fSAndroid Build Coastguard Worker "DW_OP_reg2",
718*eb293b8fSAndroid Build Coastguard Worker OP_REG,
719*eb293b8fSAndroid Build Coastguard Worker 0,
720*eb293b8fSAndroid Build Coastguard Worker 0,
721*eb293b8fSAndroid Build Coastguard Worker {},
722*eb293b8fSAndroid Build Coastguard Worker },
723*eb293b8fSAndroid Build Coastguard Worker {
724*eb293b8fSAndroid Build Coastguard Worker // 0x53 DW_OP_reg3
725*eb293b8fSAndroid Build Coastguard Worker "DW_OP_reg3",
726*eb293b8fSAndroid Build Coastguard Worker OP_REG,
727*eb293b8fSAndroid Build Coastguard Worker 0,
728*eb293b8fSAndroid Build Coastguard Worker 0,
729*eb293b8fSAndroid Build Coastguard Worker {},
730*eb293b8fSAndroid Build Coastguard Worker },
731*eb293b8fSAndroid Build Coastguard Worker {
732*eb293b8fSAndroid Build Coastguard Worker // 0x54 DW_OP_reg4
733*eb293b8fSAndroid Build Coastguard Worker "DW_OP_reg4",
734*eb293b8fSAndroid Build Coastguard Worker OP_REG,
735*eb293b8fSAndroid Build Coastguard Worker 0,
736*eb293b8fSAndroid Build Coastguard Worker 0,
737*eb293b8fSAndroid Build Coastguard Worker {},
738*eb293b8fSAndroid Build Coastguard Worker },
739*eb293b8fSAndroid Build Coastguard Worker {
740*eb293b8fSAndroid Build Coastguard Worker // 0x55 DW_OP_reg5
741*eb293b8fSAndroid Build Coastguard Worker "DW_OP_reg5",
742*eb293b8fSAndroid Build Coastguard Worker OP_REG,
743*eb293b8fSAndroid Build Coastguard Worker 0,
744*eb293b8fSAndroid Build Coastguard Worker 0,
745*eb293b8fSAndroid Build Coastguard Worker {},
746*eb293b8fSAndroid Build Coastguard Worker },
747*eb293b8fSAndroid Build Coastguard Worker {
748*eb293b8fSAndroid Build Coastguard Worker // 0x56 DW_OP_reg6
749*eb293b8fSAndroid Build Coastguard Worker "DW_OP_reg6",
750*eb293b8fSAndroid Build Coastguard Worker OP_REG,
751*eb293b8fSAndroid Build Coastguard Worker 0,
752*eb293b8fSAndroid Build Coastguard Worker 0,
753*eb293b8fSAndroid Build Coastguard Worker {},
754*eb293b8fSAndroid Build Coastguard Worker },
755*eb293b8fSAndroid Build Coastguard Worker {
756*eb293b8fSAndroid Build Coastguard Worker // 0x57 DW_OP_reg7
757*eb293b8fSAndroid Build Coastguard Worker "DW_OP_reg7",
758*eb293b8fSAndroid Build Coastguard Worker OP_REG,
759*eb293b8fSAndroid Build Coastguard Worker 0,
760*eb293b8fSAndroid Build Coastguard Worker 0,
761*eb293b8fSAndroid Build Coastguard Worker {},
762*eb293b8fSAndroid Build Coastguard Worker },
763*eb293b8fSAndroid Build Coastguard Worker {
764*eb293b8fSAndroid Build Coastguard Worker // 0x58 DW_OP_reg8
765*eb293b8fSAndroid Build Coastguard Worker "DW_OP_reg8",
766*eb293b8fSAndroid Build Coastguard Worker OP_REG,
767*eb293b8fSAndroid Build Coastguard Worker 0,
768*eb293b8fSAndroid Build Coastguard Worker 0,
769*eb293b8fSAndroid Build Coastguard Worker {},
770*eb293b8fSAndroid Build Coastguard Worker },
771*eb293b8fSAndroid Build Coastguard Worker {
772*eb293b8fSAndroid Build Coastguard Worker // 0x59 DW_OP_reg9
773*eb293b8fSAndroid Build Coastguard Worker "DW_OP_reg9",
774*eb293b8fSAndroid Build Coastguard Worker OP_REG,
775*eb293b8fSAndroid Build Coastguard Worker 0,
776*eb293b8fSAndroid Build Coastguard Worker 0,
777*eb293b8fSAndroid Build Coastguard Worker {},
778*eb293b8fSAndroid Build Coastguard Worker },
779*eb293b8fSAndroid Build Coastguard Worker {
780*eb293b8fSAndroid Build Coastguard Worker // 0x5a DW_OP_reg10
781*eb293b8fSAndroid Build Coastguard Worker "DW_OP_reg10",
782*eb293b8fSAndroid Build Coastguard Worker OP_REG,
783*eb293b8fSAndroid Build Coastguard Worker 0,
784*eb293b8fSAndroid Build Coastguard Worker 0,
785*eb293b8fSAndroid Build Coastguard Worker {},
786*eb293b8fSAndroid Build Coastguard Worker },
787*eb293b8fSAndroid Build Coastguard Worker {
788*eb293b8fSAndroid Build Coastguard Worker // 0x5b DW_OP_reg11
789*eb293b8fSAndroid Build Coastguard Worker "DW_OP_reg11",
790*eb293b8fSAndroid Build Coastguard Worker OP_REG,
791*eb293b8fSAndroid Build Coastguard Worker 0,
792*eb293b8fSAndroid Build Coastguard Worker 0,
793*eb293b8fSAndroid Build Coastguard Worker {},
794*eb293b8fSAndroid Build Coastguard Worker },
795*eb293b8fSAndroid Build Coastguard Worker {
796*eb293b8fSAndroid Build Coastguard Worker // 0x5c DW_OP_reg12
797*eb293b8fSAndroid Build Coastguard Worker "DW_OP_reg12",
798*eb293b8fSAndroid Build Coastguard Worker OP_REG,
799*eb293b8fSAndroid Build Coastguard Worker 0,
800*eb293b8fSAndroid Build Coastguard Worker 0,
801*eb293b8fSAndroid Build Coastguard Worker {},
802*eb293b8fSAndroid Build Coastguard Worker },
803*eb293b8fSAndroid Build Coastguard Worker {
804*eb293b8fSAndroid Build Coastguard Worker // 0x5d DW_OP_reg13
805*eb293b8fSAndroid Build Coastguard Worker "DW_OP_reg13",
806*eb293b8fSAndroid Build Coastguard Worker OP_REG,
807*eb293b8fSAndroid Build Coastguard Worker 0,
808*eb293b8fSAndroid Build Coastguard Worker 0,
809*eb293b8fSAndroid Build Coastguard Worker {},
810*eb293b8fSAndroid Build Coastguard Worker },
811*eb293b8fSAndroid Build Coastguard Worker {
812*eb293b8fSAndroid Build Coastguard Worker // 0x5e DW_OP_reg14
813*eb293b8fSAndroid Build Coastguard Worker "DW_OP_reg14",
814*eb293b8fSAndroid Build Coastguard Worker OP_REG,
815*eb293b8fSAndroid Build Coastguard Worker 0,
816*eb293b8fSAndroid Build Coastguard Worker 0,
817*eb293b8fSAndroid Build Coastguard Worker {},
818*eb293b8fSAndroid Build Coastguard Worker },
819*eb293b8fSAndroid Build Coastguard Worker {
820*eb293b8fSAndroid Build Coastguard Worker // 0x5f DW_OP_reg15
821*eb293b8fSAndroid Build Coastguard Worker "DW_OP_reg15",
822*eb293b8fSAndroid Build Coastguard Worker OP_REG,
823*eb293b8fSAndroid Build Coastguard Worker 0,
824*eb293b8fSAndroid Build Coastguard Worker 0,
825*eb293b8fSAndroid Build Coastguard Worker {},
826*eb293b8fSAndroid Build Coastguard Worker },
827*eb293b8fSAndroid Build Coastguard Worker {
828*eb293b8fSAndroid Build Coastguard Worker // 0x60 DW_OP_reg16
829*eb293b8fSAndroid Build Coastguard Worker "DW_OP_reg16",
830*eb293b8fSAndroid Build Coastguard Worker OP_REG,
831*eb293b8fSAndroid Build Coastguard Worker 0,
832*eb293b8fSAndroid Build Coastguard Worker 0,
833*eb293b8fSAndroid Build Coastguard Worker {},
834*eb293b8fSAndroid Build Coastguard Worker },
835*eb293b8fSAndroid Build Coastguard Worker {
836*eb293b8fSAndroid Build Coastguard Worker // 0x61 DW_OP_reg17
837*eb293b8fSAndroid Build Coastguard Worker "DW_OP_reg17",
838*eb293b8fSAndroid Build Coastguard Worker OP_REG,
839*eb293b8fSAndroid Build Coastguard Worker 0,
840*eb293b8fSAndroid Build Coastguard Worker 0,
841*eb293b8fSAndroid Build Coastguard Worker {},
842*eb293b8fSAndroid Build Coastguard Worker },
843*eb293b8fSAndroid Build Coastguard Worker {
844*eb293b8fSAndroid Build Coastguard Worker // 0x62 DW_OP_reg18
845*eb293b8fSAndroid Build Coastguard Worker "DW_OP_reg18",
846*eb293b8fSAndroid Build Coastguard Worker OP_REG,
847*eb293b8fSAndroid Build Coastguard Worker 0,
848*eb293b8fSAndroid Build Coastguard Worker 0,
849*eb293b8fSAndroid Build Coastguard Worker {},
850*eb293b8fSAndroid Build Coastguard Worker },
851*eb293b8fSAndroid Build Coastguard Worker {
852*eb293b8fSAndroid Build Coastguard Worker // 0x63 DW_OP_reg19
853*eb293b8fSAndroid Build Coastguard Worker "DW_OP_reg19",
854*eb293b8fSAndroid Build Coastguard Worker OP_REG,
855*eb293b8fSAndroid Build Coastguard Worker 0,
856*eb293b8fSAndroid Build Coastguard Worker 0,
857*eb293b8fSAndroid Build Coastguard Worker {},
858*eb293b8fSAndroid Build Coastguard Worker },
859*eb293b8fSAndroid Build Coastguard Worker {
860*eb293b8fSAndroid Build Coastguard Worker // 0x64 DW_OP_reg20
861*eb293b8fSAndroid Build Coastguard Worker "DW_OP_reg20",
862*eb293b8fSAndroid Build Coastguard Worker OP_REG,
863*eb293b8fSAndroid Build Coastguard Worker 0,
864*eb293b8fSAndroid Build Coastguard Worker 0,
865*eb293b8fSAndroid Build Coastguard Worker {},
866*eb293b8fSAndroid Build Coastguard Worker },
867*eb293b8fSAndroid Build Coastguard Worker {
868*eb293b8fSAndroid Build Coastguard Worker // 0x65 DW_OP_reg21
869*eb293b8fSAndroid Build Coastguard Worker "DW_OP_reg21",
870*eb293b8fSAndroid Build Coastguard Worker OP_REG,
871*eb293b8fSAndroid Build Coastguard Worker 0,
872*eb293b8fSAndroid Build Coastguard Worker 0,
873*eb293b8fSAndroid Build Coastguard Worker {},
874*eb293b8fSAndroid Build Coastguard Worker },
875*eb293b8fSAndroid Build Coastguard Worker {
876*eb293b8fSAndroid Build Coastguard Worker // 0x66 DW_OP_reg22
877*eb293b8fSAndroid Build Coastguard Worker "DW_OP_reg22",
878*eb293b8fSAndroid Build Coastguard Worker OP_REG,
879*eb293b8fSAndroid Build Coastguard Worker 0,
880*eb293b8fSAndroid Build Coastguard Worker 0,
881*eb293b8fSAndroid Build Coastguard Worker {},
882*eb293b8fSAndroid Build Coastguard Worker },
883*eb293b8fSAndroid Build Coastguard Worker {
884*eb293b8fSAndroid Build Coastguard Worker // 0x67 DW_OP_reg23
885*eb293b8fSAndroid Build Coastguard Worker "DW_OP_reg23",
886*eb293b8fSAndroid Build Coastguard Worker OP_REG,
887*eb293b8fSAndroid Build Coastguard Worker 0,
888*eb293b8fSAndroid Build Coastguard Worker 0,
889*eb293b8fSAndroid Build Coastguard Worker {},
890*eb293b8fSAndroid Build Coastguard Worker },
891*eb293b8fSAndroid Build Coastguard Worker {
892*eb293b8fSAndroid Build Coastguard Worker // 0x68 DW_OP_reg24
893*eb293b8fSAndroid Build Coastguard Worker "DW_OP_reg24",
894*eb293b8fSAndroid Build Coastguard Worker OP_REG,
895*eb293b8fSAndroid Build Coastguard Worker 0,
896*eb293b8fSAndroid Build Coastguard Worker 0,
897*eb293b8fSAndroid Build Coastguard Worker {},
898*eb293b8fSAndroid Build Coastguard Worker },
899*eb293b8fSAndroid Build Coastguard Worker {
900*eb293b8fSAndroid Build Coastguard Worker // 0x69 DW_OP_reg25
901*eb293b8fSAndroid Build Coastguard Worker "DW_OP_reg25",
902*eb293b8fSAndroid Build Coastguard Worker OP_REG,
903*eb293b8fSAndroid Build Coastguard Worker 0,
904*eb293b8fSAndroid Build Coastguard Worker 0,
905*eb293b8fSAndroid Build Coastguard Worker {},
906*eb293b8fSAndroid Build Coastguard Worker },
907*eb293b8fSAndroid Build Coastguard Worker {
908*eb293b8fSAndroid Build Coastguard Worker // 0x6a DW_OP_reg26
909*eb293b8fSAndroid Build Coastguard Worker "DW_OP_reg26",
910*eb293b8fSAndroid Build Coastguard Worker OP_REG,
911*eb293b8fSAndroid Build Coastguard Worker 0,
912*eb293b8fSAndroid Build Coastguard Worker 0,
913*eb293b8fSAndroid Build Coastguard Worker {},
914*eb293b8fSAndroid Build Coastguard Worker },
915*eb293b8fSAndroid Build Coastguard Worker {
916*eb293b8fSAndroid Build Coastguard Worker // 0x6b DW_OP_reg27
917*eb293b8fSAndroid Build Coastguard Worker "DW_OP_reg27",
918*eb293b8fSAndroid Build Coastguard Worker OP_REG,
919*eb293b8fSAndroid Build Coastguard Worker 0,
920*eb293b8fSAndroid Build Coastguard Worker 0,
921*eb293b8fSAndroid Build Coastguard Worker {},
922*eb293b8fSAndroid Build Coastguard Worker },
923*eb293b8fSAndroid Build Coastguard Worker {
924*eb293b8fSAndroid Build Coastguard Worker // 0x6c DW_OP_reg28
925*eb293b8fSAndroid Build Coastguard Worker "DW_OP_reg28",
926*eb293b8fSAndroid Build Coastguard Worker OP_REG,
927*eb293b8fSAndroid Build Coastguard Worker 0,
928*eb293b8fSAndroid Build Coastguard Worker 0,
929*eb293b8fSAndroid Build Coastguard Worker {},
930*eb293b8fSAndroid Build Coastguard Worker },
931*eb293b8fSAndroid Build Coastguard Worker {
932*eb293b8fSAndroid Build Coastguard Worker // 0x6d DW_OP_reg29
933*eb293b8fSAndroid Build Coastguard Worker "DW_OP_reg29",
934*eb293b8fSAndroid Build Coastguard Worker OP_REG,
935*eb293b8fSAndroid Build Coastguard Worker 0,
936*eb293b8fSAndroid Build Coastguard Worker 0,
937*eb293b8fSAndroid Build Coastguard Worker {},
938*eb293b8fSAndroid Build Coastguard Worker },
939*eb293b8fSAndroid Build Coastguard Worker {
940*eb293b8fSAndroid Build Coastguard Worker // 0x6e DW_OP_reg30
941*eb293b8fSAndroid Build Coastguard Worker "DW_OP_reg30",
942*eb293b8fSAndroid Build Coastguard Worker OP_REG,
943*eb293b8fSAndroid Build Coastguard Worker 0,
944*eb293b8fSAndroid Build Coastguard Worker 0,
945*eb293b8fSAndroid Build Coastguard Worker {},
946*eb293b8fSAndroid Build Coastguard Worker },
947*eb293b8fSAndroid Build Coastguard Worker {
948*eb293b8fSAndroid Build Coastguard Worker // 0x6f DW_OP_reg31
949*eb293b8fSAndroid Build Coastguard Worker "DW_OP_reg31",
950*eb293b8fSAndroid Build Coastguard Worker OP_REG,
951*eb293b8fSAndroid Build Coastguard Worker 0,
952*eb293b8fSAndroid Build Coastguard Worker 0,
953*eb293b8fSAndroid Build Coastguard Worker {},
954*eb293b8fSAndroid Build Coastguard Worker },
955*eb293b8fSAndroid Build Coastguard Worker {
956*eb293b8fSAndroid Build Coastguard Worker // 0x70 DW_OP_breg0
957*eb293b8fSAndroid Build Coastguard Worker "DW_OP_breg0",
958*eb293b8fSAndroid Build Coastguard Worker OP_BREG,
959*eb293b8fSAndroid Build Coastguard Worker 0,
960*eb293b8fSAndroid Build Coastguard Worker 1,
961*eb293b8fSAndroid Build Coastguard Worker {DW_EH_PE_sleb128},
962*eb293b8fSAndroid Build Coastguard Worker },
963*eb293b8fSAndroid Build Coastguard Worker {
964*eb293b8fSAndroid Build Coastguard Worker // 0x71 DW_OP_breg1
965*eb293b8fSAndroid Build Coastguard Worker "DW_OP_breg1",
966*eb293b8fSAndroid Build Coastguard Worker OP_BREG,
967*eb293b8fSAndroid Build Coastguard Worker 0,
968*eb293b8fSAndroid Build Coastguard Worker 1,
969*eb293b8fSAndroid Build Coastguard Worker {DW_EH_PE_sleb128},
970*eb293b8fSAndroid Build Coastguard Worker },
971*eb293b8fSAndroid Build Coastguard Worker {
972*eb293b8fSAndroid Build Coastguard Worker // 0x72 DW_OP_breg2
973*eb293b8fSAndroid Build Coastguard Worker "DW_OP_breg2",
974*eb293b8fSAndroid Build Coastguard Worker OP_BREG,
975*eb293b8fSAndroid Build Coastguard Worker 0,
976*eb293b8fSAndroid Build Coastguard Worker 1,
977*eb293b8fSAndroid Build Coastguard Worker {DW_EH_PE_sleb128},
978*eb293b8fSAndroid Build Coastguard Worker },
979*eb293b8fSAndroid Build Coastguard Worker {
980*eb293b8fSAndroid Build Coastguard Worker // 0x73 DW_OP_breg3
981*eb293b8fSAndroid Build Coastguard Worker "DW_OP_breg3",
982*eb293b8fSAndroid Build Coastguard Worker OP_BREG,
983*eb293b8fSAndroid Build Coastguard Worker 0,
984*eb293b8fSAndroid Build Coastguard Worker 1,
985*eb293b8fSAndroid Build Coastguard Worker {DW_EH_PE_sleb128},
986*eb293b8fSAndroid Build Coastguard Worker },
987*eb293b8fSAndroid Build Coastguard Worker {
988*eb293b8fSAndroid Build Coastguard Worker // 0x74 DW_OP_breg4
989*eb293b8fSAndroid Build Coastguard Worker "DW_OP_breg4",
990*eb293b8fSAndroid Build Coastguard Worker OP_BREG,
991*eb293b8fSAndroid Build Coastguard Worker 0,
992*eb293b8fSAndroid Build Coastguard Worker 1,
993*eb293b8fSAndroid Build Coastguard Worker {DW_EH_PE_sleb128},
994*eb293b8fSAndroid Build Coastguard Worker },
995*eb293b8fSAndroid Build Coastguard Worker {
996*eb293b8fSAndroid Build Coastguard Worker // 0x75 DW_OP_breg5
997*eb293b8fSAndroid Build Coastguard Worker "DW_OP_breg5",
998*eb293b8fSAndroid Build Coastguard Worker OP_BREG,
999*eb293b8fSAndroid Build Coastguard Worker 0,
1000*eb293b8fSAndroid Build Coastguard Worker 1,
1001*eb293b8fSAndroid Build Coastguard Worker {DW_EH_PE_sleb128},
1002*eb293b8fSAndroid Build Coastguard Worker },
1003*eb293b8fSAndroid Build Coastguard Worker {
1004*eb293b8fSAndroid Build Coastguard Worker // 0x76 DW_OP_breg6
1005*eb293b8fSAndroid Build Coastguard Worker "DW_OP_breg6",
1006*eb293b8fSAndroid Build Coastguard Worker OP_BREG,
1007*eb293b8fSAndroid Build Coastguard Worker 0,
1008*eb293b8fSAndroid Build Coastguard Worker 1,
1009*eb293b8fSAndroid Build Coastguard Worker {DW_EH_PE_sleb128},
1010*eb293b8fSAndroid Build Coastguard Worker },
1011*eb293b8fSAndroid Build Coastguard Worker {
1012*eb293b8fSAndroid Build Coastguard Worker // 0x77 DW_OP_breg7
1013*eb293b8fSAndroid Build Coastguard Worker "DW_OP_breg7",
1014*eb293b8fSAndroid Build Coastguard Worker OP_BREG,
1015*eb293b8fSAndroid Build Coastguard Worker 0,
1016*eb293b8fSAndroid Build Coastguard Worker 1,
1017*eb293b8fSAndroid Build Coastguard Worker {DW_EH_PE_sleb128},
1018*eb293b8fSAndroid Build Coastguard Worker },
1019*eb293b8fSAndroid Build Coastguard Worker {
1020*eb293b8fSAndroid Build Coastguard Worker // 0x78 DW_OP_breg8
1021*eb293b8fSAndroid Build Coastguard Worker "DW_OP_breg8",
1022*eb293b8fSAndroid Build Coastguard Worker OP_BREG,
1023*eb293b8fSAndroid Build Coastguard Worker 0,
1024*eb293b8fSAndroid Build Coastguard Worker 1,
1025*eb293b8fSAndroid Build Coastguard Worker {DW_EH_PE_sleb128},
1026*eb293b8fSAndroid Build Coastguard Worker },
1027*eb293b8fSAndroid Build Coastguard Worker {
1028*eb293b8fSAndroid Build Coastguard Worker // 0x79 DW_OP_breg9
1029*eb293b8fSAndroid Build Coastguard Worker "DW_OP_breg9",
1030*eb293b8fSAndroid Build Coastguard Worker OP_BREG,
1031*eb293b8fSAndroid Build Coastguard Worker 0,
1032*eb293b8fSAndroid Build Coastguard Worker 1,
1033*eb293b8fSAndroid Build Coastguard Worker {DW_EH_PE_sleb128},
1034*eb293b8fSAndroid Build Coastguard Worker },
1035*eb293b8fSAndroid Build Coastguard Worker {
1036*eb293b8fSAndroid Build Coastguard Worker // 0x7a DW_OP_breg10
1037*eb293b8fSAndroid Build Coastguard Worker "DW_OP_breg10",
1038*eb293b8fSAndroid Build Coastguard Worker OP_BREG,
1039*eb293b8fSAndroid Build Coastguard Worker 0,
1040*eb293b8fSAndroid Build Coastguard Worker 1,
1041*eb293b8fSAndroid Build Coastguard Worker {DW_EH_PE_sleb128},
1042*eb293b8fSAndroid Build Coastguard Worker },
1043*eb293b8fSAndroid Build Coastguard Worker {
1044*eb293b8fSAndroid Build Coastguard Worker // 0x7b DW_OP_breg11
1045*eb293b8fSAndroid Build Coastguard Worker "DW_OP_breg11",
1046*eb293b8fSAndroid Build Coastguard Worker OP_BREG,
1047*eb293b8fSAndroid Build Coastguard Worker 0,
1048*eb293b8fSAndroid Build Coastguard Worker 1,
1049*eb293b8fSAndroid Build Coastguard Worker {DW_EH_PE_sleb128},
1050*eb293b8fSAndroid Build Coastguard Worker },
1051*eb293b8fSAndroid Build Coastguard Worker {
1052*eb293b8fSAndroid Build Coastguard Worker // 0x7c DW_OP_breg12
1053*eb293b8fSAndroid Build Coastguard Worker "DW_OP_breg12",
1054*eb293b8fSAndroid Build Coastguard Worker OP_BREG,
1055*eb293b8fSAndroid Build Coastguard Worker 0,
1056*eb293b8fSAndroid Build Coastguard Worker 1,
1057*eb293b8fSAndroid Build Coastguard Worker {DW_EH_PE_sleb128},
1058*eb293b8fSAndroid Build Coastguard Worker },
1059*eb293b8fSAndroid Build Coastguard Worker {
1060*eb293b8fSAndroid Build Coastguard Worker // 0x7d DW_OP_breg13
1061*eb293b8fSAndroid Build Coastguard Worker "DW_OP_breg13",
1062*eb293b8fSAndroid Build Coastguard Worker OP_BREG,
1063*eb293b8fSAndroid Build Coastguard Worker 0,
1064*eb293b8fSAndroid Build Coastguard Worker 1,
1065*eb293b8fSAndroid Build Coastguard Worker {DW_EH_PE_sleb128},
1066*eb293b8fSAndroid Build Coastguard Worker },
1067*eb293b8fSAndroid Build Coastguard Worker {
1068*eb293b8fSAndroid Build Coastguard Worker // 0x7e DW_OP_breg14
1069*eb293b8fSAndroid Build Coastguard Worker "DW_OP_breg14",
1070*eb293b8fSAndroid Build Coastguard Worker OP_BREG,
1071*eb293b8fSAndroid Build Coastguard Worker 0,
1072*eb293b8fSAndroid Build Coastguard Worker 1,
1073*eb293b8fSAndroid Build Coastguard Worker {DW_EH_PE_sleb128},
1074*eb293b8fSAndroid Build Coastguard Worker },
1075*eb293b8fSAndroid Build Coastguard Worker {
1076*eb293b8fSAndroid Build Coastguard Worker // 0x7f DW_OP_breg15
1077*eb293b8fSAndroid Build Coastguard Worker "DW_OP_breg15",
1078*eb293b8fSAndroid Build Coastguard Worker OP_BREG,
1079*eb293b8fSAndroid Build Coastguard Worker 0,
1080*eb293b8fSAndroid Build Coastguard Worker 1,
1081*eb293b8fSAndroid Build Coastguard Worker {DW_EH_PE_sleb128},
1082*eb293b8fSAndroid Build Coastguard Worker },
1083*eb293b8fSAndroid Build Coastguard Worker {
1084*eb293b8fSAndroid Build Coastguard Worker // 0x80 DW_OP_breg16
1085*eb293b8fSAndroid Build Coastguard Worker "DW_OP_breg16",
1086*eb293b8fSAndroid Build Coastguard Worker OP_BREG,
1087*eb293b8fSAndroid Build Coastguard Worker 0,
1088*eb293b8fSAndroid Build Coastguard Worker 1,
1089*eb293b8fSAndroid Build Coastguard Worker {DW_EH_PE_sleb128},
1090*eb293b8fSAndroid Build Coastguard Worker },
1091*eb293b8fSAndroid Build Coastguard Worker {
1092*eb293b8fSAndroid Build Coastguard Worker // 0x81 DW_OP_breg17
1093*eb293b8fSAndroid Build Coastguard Worker "DW_OP_breg17",
1094*eb293b8fSAndroid Build Coastguard Worker OP_BREG,
1095*eb293b8fSAndroid Build Coastguard Worker 0,
1096*eb293b8fSAndroid Build Coastguard Worker 1,
1097*eb293b8fSAndroid Build Coastguard Worker {DW_EH_PE_sleb128},
1098*eb293b8fSAndroid Build Coastguard Worker },
1099*eb293b8fSAndroid Build Coastguard Worker {
1100*eb293b8fSAndroid Build Coastguard Worker // 0x82 DW_OP_breg18
1101*eb293b8fSAndroid Build Coastguard Worker "DW_OP_breg18",
1102*eb293b8fSAndroid Build Coastguard Worker OP_BREG,
1103*eb293b8fSAndroid Build Coastguard Worker 0,
1104*eb293b8fSAndroid Build Coastguard Worker 1,
1105*eb293b8fSAndroid Build Coastguard Worker {DW_EH_PE_sleb128},
1106*eb293b8fSAndroid Build Coastguard Worker },
1107*eb293b8fSAndroid Build Coastguard Worker {
1108*eb293b8fSAndroid Build Coastguard Worker // 0x83 DW_OP_breg19
1109*eb293b8fSAndroid Build Coastguard Worker "DW_OP_breg19",
1110*eb293b8fSAndroid Build Coastguard Worker OP_BREG,
1111*eb293b8fSAndroid Build Coastguard Worker 0,
1112*eb293b8fSAndroid Build Coastguard Worker 1,
1113*eb293b8fSAndroid Build Coastguard Worker {DW_EH_PE_sleb128},
1114*eb293b8fSAndroid Build Coastguard Worker },
1115*eb293b8fSAndroid Build Coastguard Worker {
1116*eb293b8fSAndroid Build Coastguard Worker // 0x84 DW_OP_breg20
1117*eb293b8fSAndroid Build Coastguard Worker "DW_OP_breg20",
1118*eb293b8fSAndroid Build Coastguard Worker OP_BREG,
1119*eb293b8fSAndroid Build Coastguard Worker 0,
1120*eb293b8fSAndroid Build Coastguard Worker 1,
1121*eb293b8fSAndroid Build Coastguard Worker {DW_EH_PE_sleb128},
1122*eb293b8fSAndroid Build Coastguard Worker },
1123*eb293b8fSAndroid Build Coastguard Worker {
1124*eb293b8fSAndroid Build Coastguard Worker // 0x85 DW_OP_breg21
1125*eb293b8fSAndroid Build Coastguard Worker "DW_OP_breg21",
1126*eb293b8fSAndroid Build Coastguard Worker OP_BREG,
1127*eb293b8fSAndroid Build Coastguard Worker 0,
1128*eb293b8fSAndroid Build Coastguard Worker 1,
1129*eb293b8fSAndroid Build Coastguard Worker {DW_EH_PE_sleb128},
1130*eb293b8fSAndroid Build Coastguard Worker },
1131*eb293b8fSAndroid Build Coastguard Worker {
1132*eb293b8fSAndroid Build Coastguard Worker // 0x86 DW_OP_breg22
1133*eb293b8fSAndroid Build Coastguard Worker "DW_OP_breg22",
1134*eb293b8fSAndroid Build Coastguard Worker OP_BREG,
1135*eb293b8fSAndroid Build Coastguard Worker 0,
1136*eb293b8fSAndroid Build Coastguard Worker 1,
1137*eb293b8fSAndroid Build Coastguard Worker {DW_EH_PE_sleb128},
1138*eb293b8fSAndroid Build Coastguard Worker },
1139*eb293b8fSAndroid Build Coastguard Worker {
1140*eb293b8fSAndroid Build Coastguard Worker // 0x87 DW_OP_breg23
1141*eb293b8fSAndroid Build Coastguard Worker "DW_OP_breg23",
1142*eb293b8fSAndroid Build Coastguard Worker OP_BREG,
1143*eb293b8fSAndroid Build Coastguard Worker 0,
1144*eb293b8fSAndroid Build Coastguard Worker 1,
1145*eb293b8fSAndroid Build Coastguard Worker {DW_EH_PE_sleb128},
1146*eb293b8fSAndroid Build Coastguard Worker },
1147*eb293b8fSAndroid Build Coastguard Worker {
1148*eb293b8fSAndroid Build Coastguard Worker // 0x88 DW_OP_breg24
1149*eb293b8fSAndroid Build Coastguard Worker "DW_OP_breg24",
1150*eb293b8fSAndroid Build Coastguard Worker OP_BREG,
1151*eb293b8fSAndroid Build Coastguard Worker 0,
1152*eb293b8fSAndroid Build Coastguard Worker 1,
1153*eb293b8fSAndroid Build Coastguard Worker {DW_EH_PE_sleb128},
1154*eb293b8fSAndroid Build Coastguard Worker },
1155*eb293b8fSAndroid Build Coastguard Worker {
1156*eb293b8fSAndroid Build Coastguard Worker // 0x89 DW_OP_breg25
1157*eb293b8fSAndroid Build Coastguard Worker "DW_OP_breg25",
1158*eb293b8fSAndroid Build Coastguard Worker OP_BREG,
1159*eb293b8fSAndroid Build Coastguard Worker 0,
1160*eb293b8fSAndroid Build Coastguard Worker 1,
1161*eb293b8fSAndroid Build Coastguard Worker {DW_EH_PE_sleb128},
1162*eb293b8fSAndroid Build Coastguard Worker },
1163*eb293b8fSAndroid Build Coastguard Worker {
1164*eb293b8fSAndroid Build Coastguard Worker // 0x8a DW_OP_breg26
1165*eb293b8fSAndroid Build Coastguard Worker "DW_OP_breg26",
1166*eb293b8fSAndroid Build Coastguard Worker OP_BREG,
1167*eb293b8fSAndroid Build Coastguard Worker 0,
1168*eb293b8fSAndroid Build Coastguard Worker 1,
1169*eb293b8fSAndroid Build Coastguard Worker {DW_EH_PE_sleb128},
1170*eb293b8fSAndroid Build Coastguard Worker },
1171*eb293b8fSAndroid Build Coastguard Worker {
1172*eb293b8fSAndroid Build Coastguard Worker // 0x8b DW_OP_breg27
1173*eb293b8fSAndroid Build Coastguard Worker "DW_OP_breg27",
1174*eb293b8fSAndroid Build Coastguard Worker OP_BREG,
1175*eb293b8fSAndroid Build Coastguard Worker 0,
1176*eb293b8fSAndroid Build Coastguard Worker 1,
1177*eb293b8fSAndroid Build Coastguard Worker {DW_EH_PE_sleb128},
1178*eb293b8fSAndroid Build Coastguard Worker },
1179*eb293b8fSAndroid Build Coastguard Worker {
1180*eb293b8fSAndroid Build Coastguard Worker // 0x8c DW_OP_breg28
1181*eb293b8fSAndroid Build Coastguard Worker "DW_OP_breg28",
1182*eb293b8fSAndroid Build Coastguard Worker OP_BREG,
1183*eb293b8fSAndroid Build Coastguard Worker 0,
1184*eb293b8fSAndroid Build Coastguard Worker 1,
1185*eb293b8fSAndroid Build Coastguard Worker {DW_EH_PE_sleb128},
1186*eb293b8fSAndroid Build Coastguard Worker },
1187*eb293b8fSAndroid Build Coastguard Worker {
1188*eb293b8fSAndroid Build Coastguard Worker // 0x8d DW_OP_breg29
1189*eb293b8fSAndroid Build Coastguard Worker "DW_OP_breg29",
1190*eb293b8fSAndroid Build Coastguard Worker OP_BREG,
1191*eb293b8fSAndroid Build Coastguard Worker 0,
1192*eb293b8fSAndroid Build Coastguard Worker 1,
1193*eb293b8fSAndroid Build Coastguard Worker {DW_EH_PE_sleb128},
1194*eb293b8fSAndroid Build Coastguard Worker },
1195*eb293b8fSAndroid Build Coastguard Worker {
1196*eb293b8fSAndroid Build Coastguard Worker // 0x8e DW_OP_breg30
1197*eb293b8fSAndroid Build Coastguard Worker "DW_OP_breg30",
1198*eb293b8fSAndroid Build Coastguard Worker OP_BREG,
1199*eb293b8fSAndroid Build Coastguard Worker 0,
1200*eb293b8fSAndroid Build Coastguard Worker 1,
1201*eb293b8fSAndroid Build Coastguard Worker {DW_EH_PE_sleb128},
1202*eb293b8fSAndroid Build Coastguard Worker },
1203*eb293b8fSAndroid Build Coastguard Worker {
1204*eb293b8fSAndroid Build Coastguard Worker // 0x8f DW_OP_breg31
1205*eb293b8fSAndroid Build Coastguard Worker "DW_OP_breg31",
1206*eb293b8fSAndroid Build Coastguard Worker OP_BREG,
1207*eb293b8fSAndroid Build Coastguard Worker 0,
1208*eb293b8fSAndroid Build Coastguard Worker 1,
1209*eb293b8fSAndroid Build Coastguard Worker {DW_EH_PE_sleb128},
1210*eb293b8fSAndroid Build Coastguard Worker },
1211*eb293b8fSAndroid Build Coastguard Worker {
1212*eb293b8fSAndroid Build Coastguard Worker // 0x90 DW_OP_regx
1213*eb293b8fSAndroid Build Coastguard Worker "DW_OP_regx",
1214*eb293b8fSAndroid Build Coastguard Worker OP_REGX,
1215*eb293b8fSAndroid Build Coastguard Worker 0,
1216*eb293b8fSAndroid Build Coastguard Worker 1,
1217*eb293b8fSAndroid Build Coastguard Worker {DW_EH_PE_uleb128},
1218*eb293b8fSAndroid Build Coastguard Worker },
1219*eb293b8fSAndroid Build Coastguard Worker {
1220*eb293b8fSAndroid Build Coastguard Worker // 0x91 DW_OP_fbreg
1221*eb293b8fSAndroid Build Coastguard Worker "DW_OP_fbreg",
1222*eb293b8fSAndroid Build Coastguard Worker OP_NOT_IMPLEMENTED,
1223*eb293b8fSAndroid Build Coastguard Worker 0,
1224*eb293b8fSAndroid Build Coastguard Worker 1,
1225*eb293b8fSAndroid Build Coastguard Worker {DW_EH_PE_sleb128},
1226*eb293b8fSAndroid Build Coastguard Worker },
1227*eb293b8fSAndroid Build Coastguard Worker {
1228*eb293b8fSAndroid Build Coastguard Worker // 0x92 DW_OP_bregx
1229*eb293b8fSAndroid Build Coastguard Worker "DW_OP_bregx",
1230*eb293b8fSAndroid Build Coastguard Worker OP_BREGX,
1231*eb293b8fSAndroid Build Coastguard Worker 0,
1232*eb293b8fSAndroid Build Coastguard Worker 2,
1233*eb293b8fSAndroid Build Coastguard Worker {DW_EH_PE_uleb128, DW_EH_PE_sleb128},
1234*eb293b8fSAndroid Build Coastguard Worker },
1235*eb293b8fSAndroid Build Coastguard Worker {
1236*eb293b8fSAndroid Build Coastguard Worker // 0x93 DW_OP_piece
1237*eb293b8fSAndroid Build Coastguard Worker "DW_OP_piece",
1238*eb293b8fSAndroid Build Coastguard Worker OP_NOT_IMPLEMENTED,
1239*eb293b8fSAndroid Build Coastguard Worker 0,
1240*eb293b8fSAndroid Build Coastguard Worker 1,
1241*eb293b8fSAndroid Build Coastguard Worker {DW_EH_PE_uleb128},
1242*eb293b8fSAndroid Build Coastguard Worker },
1243*eb293b8fSAndroid Build Coastguard Worker {
1244*eb293b8fSAndroid Build Coastguard Worker // 0x94 DW_OP_deref_size
1245*eb293b8fSAndroid Build Coastguard Worker "DW_OP_deref_size",
1246*eb293b8fSAndroid Build Coastguard Worker OP_DEREF_SIZE,
1247*eb293b8fSAndroid Build Coastguard Worker 1,
1248*eb293b8fSAndroid Build Coastguard Worker 1,
1249*eb293b8fSAndroid Build Coastguard Worker {DW_EH_PE_udata1},
1250*eb293b8fSAndroid Build Coastguard Worker },
1251*eb293b8fSAndroid Build Coastguard Worker {
1252*eb293b8fSAndroid Build Coastguard Worker // 0x95 DW_OP_xderef_size
1253*eb293b8fSAndroid Build Coastguard Worker "DW_OP_xderef_size",
1254*eb293b8fSAndroid Build Coastguard Worker OP_NOT_IMPLEMENTED,
1255*eb293b8fSAndroid Build Coastguard Worker 0,
1256*eb293b8fSAndroid Build Coastguard Worker 1,
1257*eb293b8fSAndroid Build Coastguard Worker {DW_EH_PE_udata1},
1258*eb293b8fSAndroid Build Coastguard Worker },
1259*eb293b8fSAndroid Build Coastguard Worker {
1260*eb293b8fSAndroid Build Coastguard Worker // 0x96 DW_OP_nop
1261*eb293b8fSAndroid Build Coastguard Worker "DW_OP_nop",
1262*eb293b8fSAndroid Build Coastguard Worker OP_NOP,
1263*eb293b8fSAndroid Build Coastguard Worker 0,
1264*eb293b8fSAndroid Build Coastguard Worker 0,
1265*eb293b8fSAndroid Build Coastguard Worker {},
1266*eb293b8fSAndroid Build Coastguard Worker },
1267*eb293b8fSAndroid Build Coastguard Worker {
1268*eb293b8fSAndroid Build Coastguard Worker // 0x97 DW_OP_push_object_address
1269*eb293b8fSAndroid Build Coastguard Worker "DW_OP_push_object_address",
1270*eb293b8fSAndroid Build Coastguard Worker OP_NOT_IMPLEMENTED,
1271*eb293b8fSAndroid Build Coastguard Worker 0,
1272*eb293b8fSAndroid Build Coastguard Worker 0,
1273*eb293b8fSAndroid Build Coastguard Worker {},
1274*eb293b8fSAndroid Build Coastguard Worker },
1275*eb293b8fSAndroid Build Coastguard Worker {
1276*eb293b8fSAndroid Build Coastguard Worker // 0x98 DW_OP_call2
1277*eb293b8fSAndroid Build Coastguard Worker "DW_OP_call2",
1278*eb293b8fSAndroid Build Coastguard Worker OP_NOT_IMPLEMENTED,
1279*eb293b8fSAndroid Build Coastguard Worker 0,
1280*eb293b8fSAndroid Build Coastguard Worker 1,
1281*eb293b8fSAndroid Build Coastguard Worker {DW_EH_PE_udata2},
1282*eb293b8fSAndroid Build Coastguard Worker },
1283*eb293b8fSAndroid Build Coastguard Worker {
1284*eb293b8fSAndroid Build Coastguard Worker // 0x99 DW_OP_call4
1285*eb293b8fSAndroid Build Coastguard Worker "DW_OP_call4",
1286*eb293b8fSAndroid Build Coastguard Worker OP_NOT_IMPLEMENTED,
1287*eb293b8fSAndroid Build Coastguard Worker 0,
1288*eb293b8fSAndroid Build Coastguard Worker 1,
1289*eb293b8fSAndroid Build Coastguard Worker {DW_EH_PE_udata4},
1290*eb293b8fSAndroid Build Coastguard Worker },
1291*eb293b8fSAndroid Build Coastguard Worker {
1292*eb293b8fSAndroid Build Coastguard Worker // 0x9a DW_OP_call_ref
1293*eb293b8fSAndroid Build Coastguard Worker "DW_OP_call_ref",
1294*eb293b8fSAndroid Build Coastguard Worker OP_NOT_IMPLEMENTED,
1295*eb293b8fSAndroid Build Coastguard Worker 0,
1296*eb293b8fSAndroid Build Coastguard Worker 0, // Has a different sized operand (4 bytes or 8 bytes).
1297*eb293b8fSAndroid Build Coastguard Worker {},
1298*eb293b8fSAndroid Build Coastguard Worker },
1299*eb293b8fSAndroid Build Coastguard Worker {
1300*eb293b8fSAndroid Build Coastguard Worker // 0x9b DW_OP_form_tls_address
1301*eb293b8fSAndroid Build Coastguard Worker "DW_OP_form_tls_address",
1302*eb293b8fSAndroid Build Coastguard Worker OP_NOT_IMPLEMENTED,
1303*eb293b8fSAndroid Build Coastguard Worker 0,
1304*eb293b8fSAndroid Build Coastguard Worker 0,
1305*eb293b8fSAndroid Build Coastguard Worker {},
1306*eb293b8fSAndroid Build Coastguard Worker },
1307*eb293b8fSAndroid Build Coastguard Worker {
1308*eb293b8fSAndroid Build Coastguard Worker // 0x9c DW_OP_call_frame_cfa
1309*eb293b8fSAndroid Build Coastguard Worker "DW_OP_call_frame_cfa",
1310*eb293b8fSAndroid Build Coastguard Worker OP_NOT_IMPLEMENTED,
1311*eb293b8fSAndroid Build Coastguard Worker 0,
1312*eb293b8fSAndroid Build Coastguard Worker 0,
1313*eb293b8fSAndroid Build Coastguard Worker {},
1314*eb293b8fSAndroid Build Coastguard Worker },
1315*eb293b8fSAndroid Build Coastguard Worker {
1316*eb293b8fSAndroid Build Coastguard Worker // 0x9d DW_OP_bit_piece
1317*eb293b8fSAndroid Build Coastguard Worker "DW_OP_bit_piece",
1318*eb293b8fSAndroid Build Coastguard Worker OP_NOT_IMPLEMENTED,
1319*eb293b8fSAndroid Build Coastguard Worker 0,
1320*eb293b8fSAndroid Build Coastguard Worker 2,
1321*eb293b8fSAndroid Build Coastguard Worker {DW_EH_PE_uleb128, DW_EH_PE_uleb128},
1322*eb293b8fSAndroid Build Coastguard Worker },
1323*eb293b8fSAndroid Build Coastguard Worker {
1324*eb293b8fSAndroid Build Coastguard Worker // 0x9e DW_OP_implicit_value
1325*eb293b8fSAndroid Build Coastguard Worker "DW_OP_implicit_value",
1326*eb293b8fSAndroid Build Coastguard Worker OP_NOT_IMPLEMENTED,
1327*eb293b8fSAndroid Build Coastguard Worker 0,
1328*eb293b8fSAndroid Build Coastguard Worker 1,
1329*eb293b8fSAndroid Build Coastguard Worker {DW_EH_PE_uleb128},
1330*eb293b8fSAndroid Build Coastguard Worker },
1331*eb293b8fSAndroid Build Coastguard Worker {
1332*eb293b8fSAndroid Build Coastguard Worker // 0x9f DW_OP_stack_value
1333*eb293b8fSAndroid Build Coastguard Worker "DW_OP_stack_value",
1334*eb293b8fSAndroid Build Coastguard Worker OP_NOT_IMPLEMENTED,
1335*eb293b8fSAndroid Build Coastguard Worker 1,
1336*eb293b8fSAndroid Build Coastguard Worker 0,
1337*eb293b8fSAndroid Build Coastguard Worker {},
1338*eb293b8fSAndroid Build Coastguard Worker },
1339*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xa0 illegal op
1340*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xa1 illegal op
1341*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xa2 illegal op
1342*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xa3 illegal op
1343*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xa4 illegal op
1344*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xa5 illegal op
1345*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xa6 illegal op
1346*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xa7 illegal op
1347*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xa8 illegal op
1348*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xa9 illegal op
1349*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xaa illegal op
1350*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xab illegal op
1351*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xac illegal op
1352*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xad illegal op
1353*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xae illegal op
1354*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xaf illegal op
1355*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xb0 illegal op
1356*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xb1 illegal op
1357*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xb2 illegal op
1358*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xb3 illegal op
1359*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xb4 illegal op
1360*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xb5 illegal op
1361*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xb6 illegal op
1362*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xb7 illegal op
1363*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xb8 illegal op
1364*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xb9 illegal op
1365*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xba illegal op
1366*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xbb illegal op
1367*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xbc illegal op
1368*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xbd illegal op
1369*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xbe illegal op
1370*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xbf illegal op
1371*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xc0 illegal op
1372*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xc1 illegal op
1373*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xc2 illegal op
1374*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xc3 illegal op
1375*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xc4 illegal op
1376*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xc5 illegal op
1377*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xc6 illegal op
1378*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xc7 illegal op
1379*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xc8 illegal op
1380*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xc9 illegal op
1381*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xca illegal op
1382*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xcb illegal op
1383*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xcc illegal op
1384*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xcd illegal op
1385*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xce illegal op
1386*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xcf illegal op
1387*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xd0 illegal op
1388*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xd1 illegal op
1389*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xd2 illegal op
1390*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xd3 illegal op
1391*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xd4 illegal op
1392*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xd5 illegal op
1393*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xd6 illegal op
1394*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xd7 illegal op
1395*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xd8 illegal op
1396*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xd9 illegal op
1397*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xda illegal op
1398*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xdb illegal op
1399*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xdc illegal op
1400*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xdd illegal op
1401*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xde illegal op
1402*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xdf illegal op
1403*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xe0 DW_OP_lo_user
1404*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xe1 illegal op
1405*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xe2 illegal op
1406*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xe3 illegal op
1407*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xe4 illegal op
1408*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xe5 illegal op
1409*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xe6 illegal op
1410*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xe7 illegal op
1411*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xe8 illegal op
1412*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xe9 illegal op
1413*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xea illegal op
1414*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xeb illegal op
1415*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xec illegal op
1416*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xed illegal op
1417*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xee illegal op
1418*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xef illegal op
1419*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xf0 illegal op
1420*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xf1 illegal op
1421*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xf2 illegal op
1422*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xf3 illegal op
1423*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xf4 illegal op
1424*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xf5 illegal op
1425*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xf6 illegal op
1426*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xf7 illegal op
1427*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xf8 illegal op
1428*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xf9 illegal op
1429*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xfa illegal op
1430*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xfb illegal op
1431*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xfc illegal op
1432*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xfd illegal op
1433*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xfe illegal op
1434*eb293b8fSAndroid Build Coastguard Worker {"", OP_ILLEGAL, 0, 0, {}}, // 0xff DW_OP_hi_user
1435*eb293b8fSAndroid Build Coastguard Worker };
1436*eb293b8fSAndroid Build Coastguard Worker
1437*eb293b8fSAndroid Build Coastguard Worker template <typename AddressType>
1438*eb293b8fSAndroid Build Coastguard Worker const typename DwarfOp<AddressType>::OpHandleFuncPtr DwarfOp<AddressType>::kOpHandleFuncList[] = {
1439*eb293b8fSAndroid Build Coastguard Worker [OP_ILLEGAL] = nullptr,
1440*eb293b8fSAndroid Build Coastguard Worker [OP_DEREF] = &DwarfOp<AddressType>::op_deref,
1441*eb293b8fSAndroid Build Coastguard Worker [OP_DEREF_SIZE] = &DwarfOp<AddressType>::op_deref_size,
1442*eb293b8fSAndroid Build Coastguard Worker [OP_PUSH] = &DwarfOp<AddressType>::op_push,
1443*eb293b8fSAndroid Build Coastguard Worker [OP_DUP] = &DwarfOp<AddressType>::op_dup,
1444*eb293b8fSAndroid Build Coastguard Worker [OP_DROP] = &DwarfOp<AddressType>::op_drop,
1445*eb293b8fSAndroid Build Coastguard Worker [OP_OVER] = &DwarfOp<AddressType>::op_over,
1446*eb293b8fSAndroid Build Coastguard Worker [OP_PICK] = &DwarfOp<AddressType>::op_pick,
1447*eb293b8fSAndroid Build Coastguard Worker [OP_SWAP] = &DwarfOp<AddressType>::op_swap,
1448*eb293b8fSAndroid Build Coastguard Worker [OP_ROT] = &DwarfOp<AddressType>::op_rot,
1449*eb293b8fSAndroid Build Coastguard Worker [OP_ABS] = &DwarfOp<AddressType>::op_abs,
1450*eb293b8fSAndroid Build Coastguard Worker [OP_AND] = &DwarfOp<AddressType>::op_and,
1451*eb293b8fSAndroid Build Coastguard Worker [OP_DIV] = &DwarfOp<AddressType>::op_div,
1452*eb293b8fSAndroid Build Coastguard Worker [OP_MINUS] = &DwarfOp<AddressType>::op_minus,
1453*eb293b8fSAndroid Build Coastguard Worker [OP_MOD] = &DwarfOp<AddressType>::op_mod,
1454*eb293b8fSAndroid Build Coastguard Worker [OP_MUL] = &DwarfOp<AddressType>::op_mul,
1455*eb293b8fSAndroid Build Coastguard Worker [OP_NEG] = &DwarfOp<AddressType>::op_neg,
1456*eb293b8fSAndroid Build Coastguard Worker [OP_NOT] = &DwarfOp<AddressType>::op_not,
1457*eb293b8fSAndroid Build Coastguard Worker [OP_OR] = &DwarfOp<AddressType>::op_or,
1458*eb293b8fSAndroid Build Coastguard Worker [OP_PLUS] = &DwarfOp<AddressType>::op_plus,
1459*eb293b8fSAndroid Build Coastguard Worker [OP_PLUS_UCONST] = &DwarfOp<AddressType>::op_plus_uconst,
1460*eb293b8fSAndroid Build Coastguard Worker [OP_SHL] = &DwarfOp<AddressType>::op_shl,
1461*eb293b8fSAndroid Build Coastguard Worker [OP_SHR] = &DwarfOp<AddressType>::op_shr,
1462*eb293b8fSAndroid Build Coastguard Worker [OP_SHRA] = &DwarfOp<AddressType>::op_shra,
1463*eb293b8fSAndroid Build Coastguard Worker [OP_XOR] = &DwarfOp<AddressType>::op_xor,
1464*eb293b8fSAndroid Build Coastguard Worker [OP_BRA] = &DwarfOp<AddressType>::op_bra,
1465*eb293b8fSAndroid Build Coastguard Worker [OP_EQ] = &DwarfOp<AddressType>::op_eq,
1466*eb293b8fSAndroid Build Coastguard Worker [OP_GE] = &DwarfOp<AddressType>::op_ge,
1467*eb293b8fSAndroid Build Coastguard Worker [OP_GT] = &DwarfOp<AddressType>::op_gt,
1468*eb293b8fSAndroid Build Coastguard Worker [OP_LE] = &DwarfOp<AddressType>::op_le,
1469*eb293b8fSAndroid Build Coastguard Worker [OP_LT] = &DwarfOp<AddressType>::op_lt,
1470*eb293b8fSAndroid Build Coastguard Worker [OP_NE] = &DwarfOp<AddressType>::op_ne,
1471*eb293b8fSAndroid Build Coastguard Worker [OP_SKIP] = &DwarfOp<AddressType>::op_skip,
1472*eb293b8fSAndroid Build Coastguard Worker [OP_LIT] = &DwarfOp<AddressType>::op_lit,
1473*eb293b8fSAndroid Build Coastguard Worker [OP_REG] = &DwarfOp<AddressType>::op_reg,
1474*eb293b8fSAndroid Build Coastguard Worker [OP_REGX] = &DwarfOp<AddressType>::op_regx,
1475*eb293b8fSAndroid Build Coastguard Worker [OP_BREG] = &DwarfOp<AddressType>::op_breg,
1476*eb293b8fSAndroid Build Coastguard Worker [OP_BREGX] = &DwarfOp<AddressType>::op_bregx,
1477*eb293b8fSAndroid Build Coastguard Worker [OP_NOP] = &DwarfOp<AddressType>::op_nop,
1478*eb293b8fSAndroid Build Coastguard Worker [OP_NOT_IMPLEMENTED] = &DwarfOp<AddressType>::op_not_implemented,
1479*eb293b8fSAndroid Build Coastguard Worker };
1480*eb293b8fSAndroid Build Coastguard Worker
1481*eb293b8fSAndroid Build Coastguard Worker template <typename AddressType>
Eval(uint64_t start,uint64_t end)1482*eb293b8fSAndroid Build Coastguard Worker bool DwarfOp<AddressType>::Eval(uint64_t start, uint64_t end) {
1483*eb293b8fSAndroid Build Coastguard Worker is_register_ = false;
1484*eb293b8fSAndroid Build Coastguard Worker stack_.clear();
1485*eb293b8fSAndroid Build Coastguard Worker memory_->set_cur_offset(start);
1486*eb293b8fSAndroid Build Coastguard Worker dex_pc_set_ = false;
1487*eb293b8fSAndroid Build Coastguard Worker
1488*eb293b8fSAndroid Build Coastguard Worker // Unroll the first Decode calls to be able to check for a special
1489*eb293b8fSAndroid Build Coastguard Worker // sequence of ops and values that indicate this is the dex pc.
1490*eb293b8fSAndroid Build Coastguard Worker // The pattern is:
1491*eb293b8fSAndroid Build Coastguard Worker // OP_const4u (0x0c) 'D' 'E' 'X' '1'
1492*eb293b8fSAndroid Build Coastguard Worker // OP_drop (0x13)
1493*eb293b8fSAndroid Build Coastguard Worker if (memory_->cur_offset() < end) {
1494*eb293b8fSAndroid Build Coastguard Worker if (!Decode()) {
1495*eb293b8fSAndroid Build Coastguard Worker return false;
1496*eb293b8fSAndroid Build Coastguard Worker }
1497*eb293b8fSAndroid Build Coastguard Worker } else {
1498*eb293b8fSAndroid Build Coastguard Worker return true;
1499*eb293b8fSAndroid Build Coastguard Worker }
1500*eb293b8fSAndroid Build Coastguard Worker bool check_for_drop;
1501*eb293b8fSAndroid Build Coastguard Worker if (cur_op_ == 0x0c && operands_.back() == 0x31584544) {
1502*eb293b8fSAndroid Build Coastguard Worker check_for_drop = true;
1503*eb293b8fSAndroid Build Coastguard Worker } else {
1504*eb293b8fSAndroid Build Coastguard Worker check_for_drop = false;
1505*eb293b8fSAndroid Build Coastguard Worker }
1506*eb293b8fSAndroid Build Coastguard Worker if (memory_->cur_offset() < end) {
1507*eb293b8fSAndroid Build Coastguard Worker if (!Decode()) {
1508*eb293b8fSAndroid Build Coastguard Worker return false;
1509*eb293b8fSAndroid Build Coastguard Worker }
1510*eb293b8fSAndroid Build Coastguard Worker } else {
1511*eb293b8fSAndroid Build Coastguard Worker return true;
1512*eb293b8fSAndroid Build Coastguard Worker }
1513*eb293b8fSAndroid Build Coastguard Worker
1514*eb293b8fSAndroid Build Coastguard Worker if (check_for_drop && cur_op_ == 0x13) {
1515*eb293b8fSAndroid Build Coastguard Worker dex_pc_set_ = true;
1516*eb293b8fSAndroid Build Coastguard Worker }
1517*eb293b8fSAndroid Build Coastguard Worker
1518*eb293b8fSAndroid Build Coastguard Worker uint32_t iterations = 2;
1519*eb293b8fSAndroid Build Coastguard Worker while (memory_->cur_offset() < end) {
1520*eb293b8fSAndroid Build Coastguard Worker if (!Decode()) {
1521*eb293b8fSAndroid Build Coastguard Worker return false;
1522*eb293b8fSAndroid Build Coastguard Worker }
1523*eb293b8fSAndroid Build Coastguard Worker // To protect against a branch that creates an infinite loop,
1524*eb293b8fSAndroid Build Coastguard Worker // terminate if the number of iterations gets too high.
1525*eb293b8fSAndroid Build Coastguard Worker if (iterations++ == 1000) {
1526*eb293b8fSAndroid Build Coastguard Worker last_error_.code = DWARF_ERROR_TOO_MANY_ITERATIONS;
1527*eb293b8fSAndroid Build Coastguard Worker return false;
1528*eb293b8fSAndroid Build Coastguard Worker }
1529*eb293b8fSAndroid Build Coastguard Worker }
1530*eb293b8fSAndroid Build Coastguard Worker return true;
1531*eb293b8fSAndroid Build Coastguard Worker }
1532*eb293b8fSAndroid Build Coastguard Worker
1533*eb293b8fSAndroid Build Coastguard Worker template <typename AddressType>
Decode()1534*eb293b8fSAndroid Build Coastguard Worker bool DwarfOp<AddressType>::Decode() {
1535*eb293b8fSAndroid Build Coastguard Worker last_error_.code = DWARF_ERROR_NONE;
1536*eb293b8fSAndroid Build Coastguard Worker if (!memory_->ReadBytes(&cur_op_, 1)) {
1537*eb293b8fSAndroid Build Coastguard Worker last_error_.code = DWARF_ERROR_MEMORY_INVALID;
1538*eb293b8fSAndroid Build Coastguard Worker last_error_.address = memory_->cur_offset();
1539*eb293b8fSAndroid Build Coastguard Worker return false;
1540*eb293b8fSAndroid Build Coastguard Worker }
1541*eb293b8fSAndroid Build Coastguard Worker
1542*eb293b8fSAndroid Build Coastguard Worker const auto* op = &kCallbackTable[cur_op_];
1543*eb293b8fSAndroid Build Coastguard Worker if (op->handle_func == OP_ILLEGAL) {
1544*eb293b8fSAndroid Build Coastguard Worker last_error_.code = DWARF_ERROR_ILLEGAL_VALUE;
1545*eb293b8fSAndroid Build Coastguard Worker return false;
1546*eb293b8fSAndroid Build Coastguard Worker }
1547*eb293b8fSAndroid Build Coastguard Worker
1548*eb293b8fSAndroid Build Coastguard Worker const auto handle_func = kOpHandleFuncList[op->handle_func];
1549*eb293b8fSAndroid Build Coastguard Worker
1550*eb293b8fSAndroid Build Coastguard Worker // Make sure that the required number of stack elements is available.
1551*eb293b8fSAndroid Build Coastguard Worker if (stack_.size() < op->num_required_stack_values) {
1552*eb293b8fSAndroid Build Coastguard Worker last_error_.code = DWARF_ERROR_STACK_INDEX_NOT_VALID;
1553*eb293b8fSAndroid Build Coastguard Worker return false;
1554*eb293b8fSAndroid Build Coastguard Worker }
1555*eb293b8fSAndroid Build Coastguard Worker
1556*eb293b8fSAndroid Build Coastguard Worker operands_.clear();
1557*eb293b8fSAndroid Build Coastguard Worker for (size_t i = 0; i < op->num_operands; i++) {
1558*eb293b8fSAndroid Build Coastguard Worker uint64_t value;
1559*eb293b8fSAndroid Build Coastguard Worker if (!memory_->ReadEncodedValue<AddressType>(op->operands[i], &value)) {
1560*eb293b8fSAndroid Build Coastguard Worker last_error_.code = DWARF_ERROR_MEMORY_INVALID;
1561*eb293b8fSAndroid Build Coastguard Worker last_error_.address = memory_->cur_offset();
1562*eb293b8fSAndroid Build Coastguard Worker return false;
1563*eb293b8fSAndroid Build Coastguard Worker }
1564*eb293b8fSAndroid Build Coastguard Worker operands_.push_back(value);
1565*eb293b8fSAndroid Build Coastguard Worker }
1566*eb293b8fSAndroid Build Coastguard Worker return (this->*handle_func)();
1567*eb293b8fSAndroid Build Coastguard Worker }
1568*eb293b8fSAndroid Build Coastguard Worker
1569*eb293b8fSAndroid Build Coastguard Worker template <typename AddressType>
GetLogInfo(uint64_t start,uint64_t end,std::vector<std::string> * lines)1570*eb293b8fSAndroid Build Coastguard Worker void DwarfOp<AddressType>::GetLogInfo(uint64_t start, uint64_t end,
1571*eb293b8fSAndroid Build Coastguard Worker std::vector<std::string>* lines) {
1572*eb293b8fSAndroid Build Coastguard Worker memory_->set_cur_offset(start);
1573*eb293b8fSAndroid Build Coastguard Worker while (memory_->cur_offset() < end) {
1574*eb293b8fSAndroid Build Coastguard Worker uint8_t cur_op;
1575*eb293b8fSAndroid Build Coastguard Worker if (!memory_->ReadBytes(&cur_op, 1)) {
1576*eb293b8fSAndroid Build Coastguard Worker return;
1577*eb293b8fSAndroid Build Coastguard Worker }
1578*eb293b8fSAndroid Build Coastguard Worker
1579*eb293b8fSAndroid Build Coastguard Worker std::string raw_string(android::base::StringPrintf("Raw Data: 0x%02x", cur_op));
1580*eb293b8fSAndroid Build Coastguard Worker std::string log_string;
1581*eb293b8fSAndroid Build Coastguard Worker const auto* op = &kCallbackTable[cur_op];
1582*eb293b8fSAndroid Build Coastguard Worker if (op->handle_func == OP_ILLEGAL) {
1583*eb293b8fSAndroid Build Coastguard Worker log_string = "Illegal";
1584*eb293b8fSAndroid Build Coastguard Worker } else {
1585*eb293b8fSAndroid Build Coastguard Worker log_string = op->name;
1586*eb293b8fSAndroid Build Coastguard Worker uint64_t start_offset = memory_->cur_offset();
1587*eb293b8fSAndroid Build Coastguard Worker for (size_t i = 0; i < op->num_operands; i++) {
1588*eb293b8fSAndroid Build Coastguard Worker uint64_t value;
1589*eb293b8fSAndroid Build Coastguard Worker if (!memory_->ReadEncodedValue<AddressType>(op->operands[i], &value)) {
1590*eb293b8fSAndroid Build Coastguard Worker return;
1591*eb293b8fSAndroid Build Coastguard Worker }
1592*eb293b8fSAndroid Build Coastguard Worker log_string += ' ' + std::to_string(value);
1593*eb293b8fSAndroid Build Coastguard Worker }
1594*eb293b8fSAndroid Build Coastguard Worker uint64_t end_offset = memory_->cur_offset();
1595*eb293b8fSAndroid Build Coastguard Worker
1596*eb293b8fSAndroid Build Coastguard Worker memory_->set_cur_offset(start_offset);
1597*eb293b8fSAndroid Build Coastguard Worker for (size_t i = start_offset; i < end_offset; i++) {
1598*eb293b8fSAndroid Build Coastguard Worker uint8_t byte;
1599*eb293b8fSAndroid Build Coastguard Worker if (!memory_->ReadBytes(&byte, 1)) {
1600*eb293b8fSAndroid Build Coastguard Worker return;
1601*eb293b8fSAndroid Build Coastguard Worker }
1602*eb293b8fSAndroid Build Coastguard Worker raw_string += android::base::StringPrintf(" 0x%02x", byte);
1603*eb293b8fSAndroid Build Coastguard Worker }
1604*eb293b8fSAndroid Build Coastguard Worker memory_->set_cur_offset(end_offset);
1605*eb293b8fSAndroid Build Coastguard Worker }
1606*eb293b8fSAndroid Build Coastguard Worker lines->push_back(std::move(log_string));
1607*eb293b8fSAndroid Build Coastguard Worker lines->push_back(std::move(raw_string));
1608*eb293b8fSAndroid Build Coastguard Worker }
1609*eb293b8fSAndroid Build Coastguard Worker }
1610*eb293b8fSAndroid Build Coastguard Worker
1611*eb293b8fSAndroid Build Coastguard Worker template <typename AddressType>
op_deref()1612*eb293b8fSAndroid Build Coastguard Worker bool DwarfOp<AddressType>::op_deref() {
1613*eb293b8fSAndroid Build Coastguard Worker // Read the address and dereference it.
1614*eb293b8fSAndroid Build Coastguard Worker AddressType addr = StackPop();
1615*eb293b8fSAndroid Build Coastguard Worker AddressType value;
1616*eb293b8fSAndroid Build Coastguard Worker if (!regular_memory()->ReadFully(addr, &value, sizeof(value))) {
1617*eb293b8fSAndroid Build Coastguard Worker last_error_.code = DWARF_ERROR_MEMORY_INVALID;
1618*eb293b8fSAndroid Build Coastguard Worker last_error_.address = addr;
1619*eb293b8fSAndroid Build Coastguard Worker return false;
1620*eb293b8fSAndroid Build Coastguard Worker }
1621*eb293b8fSAndroid Build Coastguard Worker stack_.push_front(value);
1622*eb293b8fSAndroid Build Coastguard Worker return true;
1623*eb293b8fSAndroid Build Coastguard Worker }
1624*eb293b8fSAndroid Build Coastguard Worker
1625*eb293b8fSAndroid Build Coastguard Worker template <typename AddressType>
op_deref_size()1626*eb293b8fSAndroid Build Coastguard Worker bool DwarfOp<AddressType>::op_deref_size() {
1627*eb293b8fSAndroid Build Coastguard Worker AddressType bytes_to_read = OperandAt(0);
1628*eb293b8fSAndroid Build Coastguard Worker if (bytes_to_read > sizeof(AddressType) || bytes_to_read == 0) {
1629*eb293b8fSAndroid Build Coastguard Worker last_error_.code = DWARF_ERROR_ILLEGAL_VALUE;
1630*eb293b8fSAndroid Build Coastguard Worker return false;
1631*eb293b8fSAndroid Build Coastguard Worker }
1632*eb293b8fSAndroid Build Coastguard Worker // Read the address and dereference it.
1633*eb293b8fSAndroid Build Coastguard Worker AddressType addr = StackPop();
1634*eb293b8fSAndroid Build Coastguard Worker AddressType value = 0;
1635*eb293b8fSAndroid Build Coastguard Worker if (!regular_memory()->ReadFully(addr, &value, bytes_to_read)) {
1636*eb293b8fSAndroid Build Coastguard Worker last_error_.code = DWARF_ERROR_MEMORY_INVALID;
1637*eb293b8fSAndroid Build Coastguard Worker last_error_.address = addr;
1638*eb293b8fSAndroid Build Coastguard Worker return false;
1639*eb293b8fSAndroid Build Coastguard Worker }
1640*eb293b8fSAndroid Build Coastguard Worker stack_.push_front(value);
1641*eb293b8fSAndroid Build Coastguard Worker return true;
1642*eb293b8fSAndroid Build Coastguard Worker }
1643*eb293b8fSAndroid Build Coastguard Worker
1644*eb293b8fSAndroid Build Coastguard Worker template <typename AddressType>
op_push()1645*eb293b8fSAndroid Build Coastguard Worker bool DwarfOp<AddressType>::op_push() {
1646*eb293b8fSAndroid Build Coastguard Worker // Push all of the operands.
1647*eb293b8fSAndroid Build Coastguard Worker for (auto operand : operands_) {
1648*eb293b8fSAndroid Build Coastguard Worker stack_.push_front(operand);
1649*eb293b8fSAndroid Build Coastguard Worker }
1650*eb293b8fSAndroid Build Coastguard Worker return true;
1651*eb293b8fSAndroid Build Coastguard Worker }
1652*eb293b8fSAndroid Build Coastguard Worker
1653*eb293b8fSAndroid Build Coastguard Worker template <typename AddressType>
op_dup()1654*eb293b8fSAndroid Build Coastguard Worker bool DwarfOp<AddressType>::op_dup() {
1655*eb293b8fSAndroid Build Coastguard Worker stack_.push_front(StackAt(0));
1656*eb293b8fSAndroid Build Coastguard Worker return true;
1657*eb293b8fSAndroid Build Coastguard Worker }
1658*eb293b8fSAndroid Build Coastguard Worker
1659*eb293b8fSAndroid Build Coastguard Worker template <typename AddressType>
op_drop()1660*eb293b8fSAndroid Build Coastguard Worker bool DwarfOp<AddressType>::op_drop() {
1661*eb293b8fSAndroid Build Coastguard Worker StackPop();
1662*eb293b8fSAndroid Build Coastguard Worker return true;
1663*eb293b8fSAndroid Build Coastguard Worker }
1664*eb293b8fSAndroid Build Coastguard Worker
1665*eb293b8fSAndroid Build Coastguard Worker template <typename AddressType>
op_over()1666*eb293b8fSAndroid Build Coastguard Worker bool DwarfOp<AddressType>::op_over() {
1667*eb293b8fSAndroid Build Coastguard Worker stack_.push_front(StackAt(1));
1668*eb293b8fSAndroid Build Coastguard Worker return true;
1669*eb293b8fSAndroid Build Coastguard Worker }
1670*eb293b8fSAndroid Build Coastguard Worker
1671*eb293b8fSAndroid Build Coastguard Worker template <typename AddressType>
op_pick()1672*eb293b8fSAndroid Build Coastguard Worker bool DwarfOp<AddressType>::op_pick() {
1673*eb293b8fSAndroid Build Coastguard Worker AddressType index = OperandAt(0);
1674*eb293b8fSAndroid Build Coastguard Worker if (index >= StackSize()) {
1675*eb293b8fSAndroid Build Coastguard Worker last_error_.code = DWARF_ERROR_STACK_INDEX_NOT_VALID;
1676*eb293b8fSAndroid Build Coastguard Worker return false;
1677*eb293b8fSAndroid Build Coastguard Worker }
1678*eb293b8fSAndroid Build Coastguard Worker stack_.push_front(StackAt(index));
1679*eb293b8fSAndroid Build Coastguard Worker return true;
1680*eb293b8fSAndroid Build Coastguard Worker }
1681*eb293b8fSAndroid Build Coastguard Worker
1682*eb293b8fSAndroid Build Coastguard Worker template <typename AddressType>
op_swap()1683*eb293b8fSAndroid Build Coastguard Worker bool DwarfOp<AddressType>::op_swap() {
1684*eb293b8fSAndroid Build Coastguard Worker AddressType old_value = stack_[0];
1685*eb293b8fSAndroid Build Coastguard Worker stack_[0] = stack_[1];
1686*eb293b8fSAndroid Build Coastguard Worker stack_[1] = old_value;
1687*eb293b8fSAndroid Build Coastguard Worker return true;
1688*eb293b8fSAndroid Build Coastguard Worker }
1689*eb293b8fSAndroid Build Coastguard Worker
1690*eb293b8fSAndroid Build Coastguard Worker template <typename AddressType>
op_rot()1691*eb293b8fSAndroid Build Coastguard Worker bool DwarfOp<AddressType>::op_rot() {
1692*eb293b8fSAndroid Build Coastguard Worker AddressType top = stack_[0];
1693*eb293b8fSAndroid Build Coastguard Worker stack_[0] = stack_[1];
1694*eb293b8fSAndroid Build Coastguard Worker stack_[1] = stack_[2];
1695*eb293b8fSAndroid Build Coastguard Worker stack_[2] = top;
1696*eb293b8fSAndroid Build Coastguard Worker return true;
1697*eb293b8fSAndroid Build Coastguard Worker }
1698*eb293b8fSAndroid Build Coastguard Worker
1699*eb293b8fSAndroid Build Coastguard Worker template <typename AddressType>
op_abs()1700*eb293b8fSAndroid Build Coastguard Worker bool DwarfOp<AddressType>::op_abs() {
1701*eb293b8fSAndroid Build Coastguard Worker SignedType signed_value = static_cast<SignedType>(stack_[0]);
1702*eb293b8fSAndroid Build Coastguard Worker if (signed_value < 0) {
1703*eb293b8fSAndroid Build Coastguard Worker signed_value = -signed_value;
1704*eb293b8fSAndroid Build Coastguard Worker }
1705*eb293b8fSAndroid Build Coastguard Worker stack_[0] = static_cast<AddressType>(signed_value);
1706*eb293b8fSAndroid Build Coastguard Worker return true;
1707*eb293b8fSAndroid Build Coastguard Worker }
1708*eb293b8fSAndroid Build Coastguard Worker
1709*eb293b8fSAndroid Build Coastguard Worker template <typename AddressType>
op_and()1710*eb293b8fSAndroid Build Coastguard Worker bool DwarfOp<AddressType>::op_and() {
1711*eb293b8fSAndroid Build Coastguard Worker AddressType top = StackPop();
1712*eb293b8fSAndroid Build Coastguard Worker stack_[0] &= top;
1713*eb293b8fSAndroid Build Coastguard Worker return true;
1714*eb293b8fSAndroid Build Coastguard Worker }
1715*eb293b8fSAndroid Build Coastguard Worker
1716*eb293b8fSAndroid Build Coastguard Worker template <typename AddressType>
op_div()1717*eb293b8fSAndroid Build Coastguard Worker bool DwarfOp<AddressType>::op_div() {
1718*eb293b8fSAndroid Build Coastguard Worker AddressType top = StackPop();
1719*eb293b8fSAndroid Build Coastguard Worker if (top == 0) {
1720*eb293b8fSAndroid Build Coastguard Worker last_error_.code = DWARF_ERROR_ILLEGAL_VALUE;
1721*eb293b8fSAndroid Build Coastguard Worker return false;
1722*eb293b8fSAndroid Build Coastguard Worker }
1723*eb293b8fSAndroid Build Coastguard Worker SignedType signed_divisor = static_cast<SignedType>(top);
1724*eb293b8fSAndroid Build Coastguard Worker SignedType signed_dividend = static_cast<SignedType>(stack_[0]);
1725*eb293b8fSAndroid Build Coastguard Worker stack_[0] = static_cast<AddressType>(signed_dividend / signed_divisor);
1726*eb293b8fSAndroid Build Coastguard Worker return true;
1727*eb293b8fSAndroid Build Coastguard Worker }
1728*eb293b8fSAndroid Build Coastguard Worker
1729*eb293b8fSAndroid Build Coastguard Worker template <typename AddressType>
op_minus()1730*eb293b8fSAndroid Build Coastguard Worker bool DwarfOp<AddressType>::op_minus() {
1731*eb293b8fSAndroid Build Coastguard Worker AddressType top = StackPop();
1732*eb293b8fSAndroid Build Coastguard Worker stack_[0] -= top;
1733*eb293b8fSAndroid Build Coastguard Worker return true;
1734*eb293b8fSAndroid Build Coastguard Worker }
1735*eb293b8fSAndroid Build Coastguard Worker
1736*eb293b8fSAndroid Build Coastguard Worker template <typename AddressType>
op_mod()1737*eb293b8fSAndroid Build Coastguard Worker bool DwarfOp<AddressType>::op_mod() {
1738*eb293b8fSAndroid Build Coastguard Worker AddressType top = StackPop();
1739*eb293b8fSAndroid Build Coastguard Worker if (top == 0) {
1740*eb293b8fSAndroid Build Coastguard Worker last_error_.code = DWARF_ERROR_ILLEGAL_VALUE;
1741*eb293b8fSAndroid Build Coastguard Worker return false;
1742*eb293b8fSAndroid Build Coastguard Worker }
1743*eb293b8fSAndroid Build Coastguard Worker stack_[0] %= top;
1744*eb293b8fSAndroid Build Coastguard Worker return true;
1745*eb293b8fSAndroid Build Coastguard Worker }
1746*eb293b8fSAndroid Build Coastguard Worker
1747*eb293b8fSAndroid Build Coastguard Worker template <typename AddressType>
op_mul()1748*eb293b8fSAndroid Build Coastguard Worker bool DwarfOp<AddressType>::op_mul() {
1749*eb293b8fSAndroid Build Coastguard Worker AddressType top = StackPop();
1750*eb293b8fSAndroid Build Coastguard Worker stack_[0] *= top;
1751*eb293b8fSAndroid Build Coastguard Worker return true;
1752*eb293b8fSAndroid Build Coastguard Worker }
1753*eb293b8fSAndroid Build Coastguard Worker
1754*eb293b8fSAndroid Build Coastguard Worker template <typename AddressType>
op_neg()1755*eb293b8fSAndroid Build Coastguard Worker bool DwarfOp<AddressType>::op_neg() {
1756*eb293b8fSAndroid Build Coastguard Worker SignedType signed_value = static_cast<SignedType>(stack_[0]);
1757*eb293b8fSAndroid Build Coastguard Worker stack_[0] = static_cast<AddressType>(-signed_value);
1758*eb293b8fSAndroid Build Coastguard Worker return true;
1759*eb293b8fSAndroid Build Coastguard Worker }
1760*eb293b8fSAndroid Build Coastguard Worker
1761*eb293b8fSAndroid Build Coastguard Worker template <typename AddressType>
op_not()1762*eb293b8fSAndroid Build Coastguard Worker bool DwarfOp<AddressType>::op_not() {
1763*eb293b8fSAndroid Build Coastguard Worker stack_[0] = ~stack_[0];
1764*eb293b8fSAndroid Build Coastguard Worker return true;
1765*eb293b8fSAndroid Build Coastguard Worker }
1766*eb293b8fSAndroid Build Coastguard Worker
1767*eb293b8fSAndroid Build Coastguard Worker template <typename AddressType>
op_or()1768*eb293b8fSAndroid Build Coastguard Worker bool DwarfOp<AddressType>::op_or() {
1769*eb293b8fSAndroid Build Coastguard Worker AddressType top = StackPop();
1770*eb293b8fSAndroid Build Coastguard Worker stack_[0] |= top;
1771*eb293b8fSAndroid Build Coastguard Worker return true;
1772*eb293b8fSAndroid Build Coastguard Worker }
1773*eb293b8fSAndroid Build Coastguard Worker
1774*eb293b8fSAndroid Build Coastguard Worker template <typename AddressType>
op_plus()1775*eb293b8fSAndroid Build Coastguard Worker bool DwarfOp<AddressType>::op_plus() {
1776*eb293b8fSAndroid Build Coastguard Worker AddressType top = StackPop();
1777*eb293b8fSAndroid Build Coastguard Worker stack_[0] += top;
1778*eb293b8fSAndroid Build Coastguard Worker return true;
1779*eb293b8fSAndroid Build Coastguard Worker }
1780*eb293b8fSAndroid Build Coastguard Worker
1781*eb293b8fSAndroid Build Coastguard Worker template <typename AddressType>
op_plus_uconst()1782*eb293b8fSAndroid Build Coastguard Worker bool DwarfOp<AddressType>::op_plus_uconst() {
1783*eb293b8fSAndroid Build Coastguard Worker stack_[0] += OperandAt(0);
1784*eb293b8fSAndroid Build Coastguard Worker return true;
1785*eb293b8fSAndroid Build Coastguard Worker }
1786*eb293b8fSAndroid Build Coastguard Worker
1787*eb293b8fSAndroid Build Coastguard Worker template <typename AddressType>
op_shl()1788*eb293b8fSAndroid Build Coastguard Worker bool DwarfOp<AddressType>::op_shl() {
1789*eb293b8fSAndroid Build Coastguard Worker AddressType top = StackPop();
1790*eb293b8fSAndroid Build Coastguard Worker stack_[0] <<= top;
1791*eb293b8fSAndroid Build Coastguard Worker return true;
1792*eb293b8fSAndroid Build Coastguard Worker }
1793*eb293b8fSAndroid Build Coastguard Worker
1794*eb293b8fSAndroid Build Coastguard Worker template <typename AddressType>
op_shr()1795*eb293b8fSAndroid Build Coastguard Worker bool DwarfOp<AddressType>::op_shr() {
1796*eb293b8fSAndroid Build Coastguard Worker AddressType top = StackPop();
1797*eb293b8fSAndroid Build Coastguard Worker stack_[0] >>= top;
1798*eb293b8fSAndroid Build Coastguard Worker return true;
1799*eb293b8fSAndroid Build Coastguard Worker }
1800*eb293b8fSAndroid Build Coastguard Worker
1801*eb293b8fSAndroid Build Coastguard Worker template <typename AddressType>
op_shra()1802*eb293b8fSAndroid Build Coastguard Worker bool DwarfOp<AddressType>::op_shra() {
1803*eb293b8fSAndroid Build Coastguard Worker AddressType top = StackPop();
1804*eb293b8fSAndroid Build Coastguard Worker SignedType signed_value = static_cast<SignedType>(stack_[0]) >> top;
1805*eb293b8fSAndroid Build Coastguard Worker stack_[0] = static_cast<AddressType>(signed_value);
1806*eb293b8fSAndroid Build Coastguard Worker return true;
1807*eb293b8fSAndroid Build Coastguard Worker }
1808*eb293b8fSAndroid Build Coastguard Worker
1809*eb293b8fSAndroid Build Coastguard Worker template <typename AddressType>
op_xor()1810*eb293b8fSAndroid Build Coastguard Worker bool DwarfOp<AddressType>::op_xor() {
1811*eb293b8fSAndroid Build Coastguard Worker AddressType top = StackPop();
1812*eb293b8fSAndroid Build Coastguard Worker stack_[0] ^= top;
1813*eb293b8fSAndroid Build Coastguard Worker return true;
1814*eb293b8fSAndroid Build Coastguard Worker }
1815*eb293b8fSAndroid Build Coastguard Worker
1816*eb293b8fSAndroid Build Coastguard Worker template <typename AddressType>
op_bra()1817*eb293b8fSAndroid Build Coastguard Worker bool DwarfOp<AddressType>::op_bra() {
1818*eb293b8fSAndroid Build Coastguard Worker // Requires one stack element.
1819*eb293b8fSAndroid Build Coastguard Worker AddressType top = StackPop();
1820*eb293b8fSAndroid Build Coastguard Worker if (top == 0) {
1821*eb293b8fSAndroid Build Coastguard Worker return true;
1822*eb293b8fSAndroid Build Coastguard Worker }
1823*eb293b8fSAndroid Build Coastguard Worker
1824*eb293b8fSAndroid Build Coastguard Worker int16_t offset = static_cast<int16_t>(OperandAt(0));
1825*eb293b8fSAndroid Build Coastguard Worker uint64_t cur_offset = memory_->cur_offset() + offset;
1826*eb293b8fSAndroid Build Coastguard Worker memory_->set_cur_offset(cur_offset);
1827*eb293b8fSAndroid Build Coastguard Worker return true;
1828*eb293b8fSAndroid Build Coastguard Worker }
1829*eb293b8fSAndroid Build Coastguard Worker
1830*eb293b8fSAndroid Build Coastguard Worker template <typename AddressType>
op_eq()1831*eb293b8fSAndroid Build Coastguard Worker bool DwarfOp<AddressType>::op_eq() {
1832*eb293b8fSAndroid Build Coastguard Worker AddressType top = StackPop();
1833*eb293b8fSAndroid Build Coastguard Worker stack_[0] = bool_to_dwarf_bool(stack_[0] == top);
1834*eb293b8fSAndroid Build Coastguard Worker return true;
1835*eb293b8fSAndroid Build Coastguard Worker }
1836*eb293b8fSAndroid Build Coastguard Worker
1837*eb293b8fSAndroid Build Coastguard Worker template <typename AddressType>
op_ge()1838*eb293b8fSAndroid Build Coastguard Worker bool DwarfOp<AddressType>::op_ge() {
1839*eb293b8fSAndroid Build Coastguard Worker AddressType top = StackPop();
1840*eb293b8fSAndroid Build Coastguard Worker stack_[0] = bool_to_dwarf_bool(stack_[0] >= top);
1841*eb293b8fSAndroid Build Coastguard Worker return true;
1842*eb293b8fSAndroid Build Coastguard Worker }
1843*eb293b8fSAndroid Build Coastguard Worker
1844*eb293b8fSAndroid Build Coastguard Worker template <typename AddressType>
op_gt()1845*eb293b8fSAndroid Build Coastguard Worker bool DwarfOp<AddressType>::op_gt() {
1846*eb293b8fSAndroid Build Coastguard Worker AddressType top = StackPop();
1847*eb293b8fSAndroid Build Coastguard Worker stack_[0] = bool_to_dwarf_bool(stack_[0] > top);
1848*eb293b8fSAndroid Build Coastguard Worker return true;
1849*eb293b8fSAndroid Build Coastguard Worker }
1850*eb293b8fSAndroid Build Coastguard Worker
1851*eb293b8fSAndroid Build Coastguard Worker template <typename AddressType>
op_le()1852*eb293b8fSAndroid Build Coastguard Worker bool DwarfOp<AddressType>::op_le() {
1853*eb293b8fSAndroid Build Coastguard Worker AddressType top = StackPop();
1854*eb293b8fSAndroid Build Coastguard Worker stack_[0] = bool_to_dwarf_bool(stack_[0] <= top);
1855*eb293b8fSAndroid Build Coastguard Worker return true;
1856*eb293b8fSAndroid Build Coastguard Worker }
1857*eb293b8fSAndroid Build Coastguard Worker
1858*eb293b8fSAndroid Build Coastguard Worker template <typename AddressType>
op_lt()1859*eb293b8fSAndroid Build Coastguard Worker bool DwarfOp<AddressType>::op_lt() {
1860*eb293b8fSAndroid Build Coastguard Worker AddressType top = StackPop();
1861*eb293b8fSAndroid Build Coastguard Worker stack_[0] = bool_to_dwarf_bool(stack_[0] < top);
1862*eb293b8fSAndroid Build Coastguard Worker return true;
1863*eb293b8fSAndroid Build Coastguard Worker }
1864*eb293b8fSAndroid Build Coastguard Worker
1865*eb293b8fSAndroid Build Coastguard Worker template <typename AddressType>
op_ne()1866*eb293b8fSAndroid Build Coastguard Worker bool DwarfOp<AddressType>::op_ne() {
1867*eb293b8fSAndroid Build Coastguard Worker AddressType top = StackPop();
1868*eb293b8fSAndroid Build Coastguard Worker stack_[0] = bool_to_dwarf_bool(stack_[0] != top);
1869*eb293b8fSAndroid Build Coastguard Worker return true;
1870*eb293b8fSAndroid Build Coastguard Worker }
1871*eb293b8fSAndroid Build Coastguard Worker
1872*eb293b8fSAndroid Build Coastguard Worker template <typename AddressType>
op_skip()1873*eb293b8fSAndroid Build Coastguard Worker bool DwarfOp<AddressType>::op_skip() {
1874*eb293b8fSAndroid Build Coastguard Worker int16_t offset = static_cast<int16_t>(OperandAt(0));
1875*eb293b8fSAndroid Build Coastguard Worker uint64_t cur_offset = memory_->cur_offset() + offset;
1876*eb293b8fSAndroid Build Coastguard Worker memory_->set_cur_offset(cur_offset);
1877*eb293b8fSAndroid Build Coastguard Worker return true;
1878*eb293b8fSAndroid Build Coastguard Worker }
1879*eb293b8fSAndroid Build Coastguard Worker
1880*eb293b8fSAndroid Build Coastguard Worker template <typename AddressType>
op_lit()1881*eb293b8fSAndroid Build Coastguard Worker bool DwarfOp<AddressType>::op_lit() {
1882*eb293b8fSAndroid Build Coastguard Worker stack_.push_front(cur_op() - 0x30);
1883*eb293b8fSAndroid Build Coastguard Worker return true;
1884*eb293b8fSAndroid Build Coastguard Worker }
1885*eb293b8fSAndroid Build Coastguard Worker
1886*eb293b8fSAndroid Build Coastguard Worker template <typename AddressType>
op_reg()1887*eb293b8fSAndroid Build Coastguard Worker bool DwarfOp<AddressType>::op_reg() {
1888*eb293b8fSAndroid Build Coastguard Worker is_register_ = true;
1889*eb293b8fSAndroid Build Coastguard Worker stack_.push_front(cur_op() - 0x50);
1890*eb293b8fSAndroid Build Coastguard Worker return true;
1891*eb293b8fSAndroid Build Coastguard Worker }
1892*eb293b8fSAndroid Build Coastguard Worker
1893*eb293b8fSAndroid Build Coastguard Worker template <typename AddressType>
op_regx()1894*eb293b8fSAndroid Build Coastguard Worker bool DwarfOp<AddressType>::op_regx() {
1895*eb293b8fSAndroid Build Coastguard Worker is_register_ = true;
1896*eb293b8fSAndroid Build Coastguard Worker stack_.push_front(OperandAt(0));
1897*eb293b8fSAndroid Build Coastguard Worker return true;
1898*eb293b8fSAndroid Build Coastguard Worker }
1899*eb293b8fSAndroid Build Coastguard Worker
1900*eb293b8fSAndroid Build Coastguard Worker // It's not clear for breg/bregx, if this op should read the current
1901*eb293b8fSAndroid Build Coastguard Worker // value of the register, or where we think that register is located.
1902*eb293b8fSAndroid Build Coastguard Worker // For simplicity, the code will read the value before doing the unwind.
1903*eb293b8fSAndroid Build Coastguard Worker template <typename AddressType>
op_breg()1904*eb293b8fSAndroid Build Coastguard Worker bool DwarfOp<AddressType>::op_breg() {
1905*eb293b8fSAndroid Build Coastguard Worker uint16_t reg = regs_info_->regs->Convert(cur_op() - 0x70);
1906*eb293b8fSAndroid Build Coastguard Worker if (reg >= regs_info_->Total()) {
1907*eb293b8fSAndroid Build Coastguard Worker last_error_.code = DWARF_ERROR_ILLEGAL_VALUE;
1908*eb293b8fSAndroid Build Coastguard Worker return false;
1909*eb293b8fSAndroid Build Coastguard Worker }
1910*eb293b8fSAndroid Build Coastguard Worker stack_.push_front(regs_info_->Get(reg) + OperandAt(0));
1911*eb293b8fSAndroid Build Coastguard Worker return true;
1912*eb293b8fSAndroid Build Coastguard Worker }
1913*eb293b8fSAndroid Build Coastguard Worker
1914*eb293b8fSAndroid Build Coastguard Worker template <typename AddressType>
op_bregx()1915*eb293b8fSAndroid Build Coastguard Worker bool DwarfOp<AddressType>::op_bregx() {
1916*eb293b8fSAndroid Build Coastguard Worker uint16_t reg = regs_info_->regs->Convert(OperandAt(0));
1917*eb293b8fSAndroid Build Coastguard Worker if (reg >= regs_info_->Total()) {
1918*eb293b8fSAndroid Build Coastguard Worker last_error_.code = DWARF_ERROR_ILLEGAL_VALUE;
1919*eb293b8fSAndroid Build Coastguard Worker return false;
1920*eb293b8fSAndroid Build Coastguard Worker }
1921*eb293b8fSAndroid Build Coastguard Worker stack_.push_front(regs_info_->Get(reg) + OperandAt(1));
1922*eb293b8fSAndroid Build Coastguard Worker return true;
1923*eb293b8fSAndroid Build Coastguard Worker }
1924*eb293b8fSAndroid Build Coastguard Worker
1925*eb293b8fSAndroid Build Coastguard Worker template <typename AddressType>
op_nop()1926*eb293b8fSAndroid Build Coastguard Worker bool DwarfOp<AddressType>::op_nop() {
1927*eb293b8fSAndroid Build Coastguard Worker return true;
1928*eb293b8fSAndroid Build Coastguard Worker }
1929*eb293b8fSAndroid Build Coastguard Worker
1930*eb293b8fSAndroid Build Coastguard Worker template <typename AddressType>
op_not_implemented()1931*eb293b8fSAndroid Build Coastguard Worker bool DwarfOp<AddressType>::op_not_implemented() {
1932*eb293b8fSAndroid Build Coastguard Worker last_error_.code = DWARF_ERROR_NOT_IMPLEMENTED;
1933*eb293b8fSAndroid Build Coastguard Worker return false;
1934*eb293b8fSAndroid Build Coastguard Worker }
1935*eb293b8fSAndroid Build Coastguard Worker
1936*eb293b8fSAndroid Build Coastguard Worker // Explicitly instantiate DwarfOp.
1937*eb293b8fSAndroid Build Coastguard Worker template class DwarfOp<uint32_t>;
1938*eb293b8fSAndroid Build Coastguard Worker template class DwarfOp<uint64_t>;
1939*eb293b8fSAndroid Build Coastguard Worker
1940*eb293b8fSAndroid Build Coastguard Worker } // namespace unwindstack
1941