1275072Semaste//===-- ABIMacOSX_arm64.cpp -------------------------------------*- C++ -*-===//
2275072Semaste//
3353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4353358Sdim// See https://llvm.org/LICENSE.txt for license information.
5353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6275072Semaste//
7275072Semaste//===----------------------------------------------------------------------===//
8275072Semaste
9275072Semaste#include "ABIMacOSX_arm64.h"
10275072Semaste
11309124Sdim#include <vector>
12309124Sdim
13309124Sdim#include "llvm/ADT/STLExtras.h"
14309124Sdim#include "llvm/ADT/Triple.h"
15309124Sdim
16275072Semaste#include "lldb/Core/Module.h"
17275072Semaste#include "lldb/Core/PluginManager.h"
18275072Semaste#include "lldb/Core/Value.h"
19275072Semaste#include "lldb/Core/ValueObjectConstResult.h"
20275072Semaste#include "lldb/Symbol/UnwindPlan.h"
21275072Semaste#include "lldb/Target/Process.h"
22275072Semaste#include "lldb/Target/RegisterContext.h"
23275072Semaste#include "lldb/Target/Target.h"
24275072Semaste#include "lldb/Target/Thread.h"
25321369Sdim#include "lldb/Utility/ConstString.h"
26321369Sdim#include "lldb/Utility/Log.h"
27344779Sdim#include "lldb/Utility/RegisterValue.h"
28344779Sdim#include "lldb/Utility/Scalar.h"
29321369Sdim#include "lldb/Utility/Status.h"
30275072Semaste
31275072Semaste#include "Utility/ARM64_DWARF_Registers.h"
32275072Semaste
33275072Semasteusing namespace lldb;
34275072Semasteusing namespace lldb_private;
35275072Semaste
36275072Semastestatic const char *pluginDesc = "Mac OS X ABI for arm64 targets";
37275072Semaste
38314564Sdimstatic RegisterInfo g_register_infos[] = {
39314564Sdim    //  NAME       ALT       SZ OFF ENCODING          FORMAT
40314564Sdim    //  EH_FRAME             DWARF                  GENERIC
41314564Sdim    //  PROCESS PLUGIN          LLDB NATIVE
42314564Sdim    //  ========== =======   == === =============     ===================
43314564Sdim    //  ===================  ====================== ===========================
44314564Sdim    //  ======================= ======================
45314564Sdim    {"x0",
46314564Sdim     nullptr,
47314564Sdim     8,
48314564Sdim     0,
49314564Sdim     eEncodingUint,
50314564Sdim     eFormatHex,
51314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x0, LLDB_REGNUM_GENERIC_ARG1,
52314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
53314564Sdim     nullptr,
54314564Sdim     nullptr,
55314564Sdim     nullptr,
56314564Sdim     0},
57314564Sdim    {"x1",
58314564Sdim     nullptr,
59314564Sdim     8,
60314564Sdim     0,
61314564Sdim     eEncodingUint,
62314564Sdim     eFormatHex,
63314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x1, LLDB_REGNUM_GENERIC_ARG2,
64314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
65314564Sdim     nullptr,
66314564Sdim     nullptr,
67314564Sdim     nullptr,
68314564Sdim     0},
69314564Sdim    {"x2",
70314564Sdim     nullptr,
71314564Sdim     8,
72314564Sdim     0,
73314564Sdim     eEncodingUint,
74314564Sdim     eFormatHex,
75314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x2, LLDB_REGNUM_GENERIC_ARG3,
76314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
77314564Sdim     nullptr,
78314564Sdim     nullptr,
79314564Sdim     nullptr,
80314564Sdim     0},
81314564Sdim    {"x3",
82314564Sdim     nullptr,
83314564Sdim     8,
84314564Sdim     0,
85314564Sdim     eEncodingUint,
86314564Sdim     eFormatHex,
87314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x3, LLDB_REGNUM_GENERIC_ARG4,
88314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
89314564Sdim     nullptr,
90314564Sdim     nullptr,
91314564Sdim     nullptr,
92314564Sdim     0},
93314564Sdim    {"x4",
94314564Sdim     nullptr,
95314564Sdim     8,
96314564Sdim     0,
97314564Sdim     eEncodingUint,
98314564Sdim     eFormatHex,
99314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x4, LLDB_REGNUM_GENERIC_ARG5,
100314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
101314564Sdim     nullptr,
102314564Sdim     nullptr,
103314564Sdim     nullptr,
104314564Sdim     0},
105314564Sdim    {"x5",
106314564Sdim     nullptr,
107314564Sdim     8,
108314564Sdim     0,
109314564Sdim     eEncodingUint,
110314564Sdim     eFormatHex,
111314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x5, LLDB_REGNUM_GENERIC_ARG6,
112314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
113314564Sdim     nullptr,
114314564Sdim     nullptr,
115314564Sdim     nullptr,
116314564Sdim     0},
117314564Sdim    {"x6",
118314564Sdim     nullptr,
119314564Sdim     8,
120314564Sdim     0,
121314564Sdim     eEncodingUint,
122314564Sdim     eFormatHex,
123314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x6, LLDB_REGNUM_GENERIC_ARG7,
124314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
125314564Sdim     nullptr,
126314564Sdim     nullptr,
127314564Sdim     nullptr,
128314564Sdim     0},
129314564Sdim    {"x7",
130314564Sdim     nullptr,
131314564Sdim     8,
132314564Sdim     0,
133314564Sdim     eEncodingUint,
134314564Sdim     eFormatHex,
135314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x7, LLDB_REGNUM_GENERIC_ARG8,
136314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
137314564Sdim     nullptr,
138314564Sdim     nullptr,
139314564Sdim     nullptr,
140314564Sdim     0},
141314564Sdim    {"x8",
142314564Sdim     nullptr,
143314564Sdim     8,
144314564Sdim     0,
145314564Sdim     eEncodingUint,
146314564Sdim     eFormatHex,
147314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x8, LLDB_INVALID_REGNUM,
148314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
149314564Sdim     nullptr,
150314564Sdim     nullptr,
151314564Sdim     nullptr,
152314564Sdim     0},
153314564Sdim    {"x9",
154314564Sdim     nullptr,
155314564Sdim     8,
156314564Sdim     0,
157314564Sdim     eEncodingUint,
158314564Sdim     eFormatHex,
159314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x9, LLDB_INVALID_REGNUM,
160314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
161314564Sdim     nullptr,
162314564Sdim     nullptr,
163314564Sdim     nullptr,
164314564Sdim     0},
165314564Sdim    {"x10",
166314564Sdim     nullptr,
167314564Sdim     8,
168314564Sdim     0,
169314564Sdim     eEncodingUint,
170314564Sdim     eFormatHex,
171314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x10, LLDB_INVALID_REGNUM,
172314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
173314564Sdim     nullptr,
174314564Sdim     nullptr,
175314564Sdim     nullptr,
176314564Sdim     0},
177314564Sdim    {"x11",
178314564Sdim     nullptr,
179314564Sdim     8,
180314564Sdim     0,
181314564Sdim     eEncodingUint,
182314564Sdim     eFormatHex,
183314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x11, LLDB_INVALID_REGNUM,
184314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
185314564Sdim     nullptr,
186314564Sdim     nullptr,
187314564Sdim     nullptr,
188314564Sdim     0},
189314564Sdim    {"x12",
190314564Sdim     nullptr,
191314564Sdim     8,
192314564Sdim     0,
193314564Sdim     eEncodingUint,
194314564Sdim     eFormatHex,
195314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x12, LLDB_INVALID_REGNUM,
196314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
197314564Sdim     nullptr,
198314564Sdim     nullptr,
199314564Sdim     nullptr,
200314564Sdim     0},
201314564Sdim    {"x13",
202314564Sdim     nullptr,
203314564Sdim     8,
204314564Sdim     0,
205314564Sdim     eEncodingUint,
206314564Sdim     eFormatHex,
207314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x13, LLDB_INVALID_REGNUM,
208314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
209314564Sdim     nullptr,
210314564Sdim     nullptr,
211314564Sdim     nullptr,
212314564Sdim     0},
213314564Sdim    {"x14",
214314564Sdim     nullptr,
215314564Sdim     8,
216314564Sdim     0,
217314564Sdim     eEncodingUint,
218314564Sdim     eFormatHex,
219314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x14, LLDB_INVALID_REGNUM,
220314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
221314564Sdim     nullptr,
222314564Sdim     nullptr,
223314564Sdim     nullptr,
224314564Sdim     0},
225314564Sdim    {"x15",
226314564Sdim     nullptr,
227314564Sdim     8,
228314564Sdim     0,
229314564Sdim     eEncodingUint,
230314564Sdim     eFormatHex,
231314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x15, LLDB_INVALID_REGNUM,
232314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
233314564Sdim     nullptr,
234314564Sdim     nullptr,
235314564Sdim     nullptr,
236314564Sdim     0},
237314564Sdim    {"x16",
238314564Sdim     nullptr,
239314564Sdim     8,
240314564Sdim     0,
241314564Sdim     eEncodingUint,
242314564Sdim     eFormatHex,
243314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x16, LLDB_INVALID_REGNUM,
244314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
245314564Sdim     nullptr,
246314564Sdim     nullptr,
247314564Sdim     nullptr,
248314564Sdim     0},
249314564Sdim    {"x17",
250314564Sdim     nullptr,
251314564Sdim     8,
252314564Sdim     0,
253314564Sdim     eEncodingUint,
254314564Sdim     eFormatHex,
255314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x17, LLDB_INVALID_REGNUM,
256314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
257314564Sdim     nullptr,
258314564Sdim     nullptr,
259314564Sdim     nullptr,
260314564Sdim     0},
261314564Sdim    {"x18",
262314564Sdim     nullptr,
263314564Sdim     8,
264314564Sdim     0,
265314564Sdim     eEncodingUint,
266314564Sdim     eFormatHex,
267314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x18, LLDB_INVALID_REGNUM,
268314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
269314564Sdim     nullptr,
270314564Sdim     nullptr,
271314564Sdim     nullptr,
272314564Sdim     0},
273314564Sdim    {"x19",
274314564Sdim     nullptr,
275314564Sdim     8,
276314564Sdim     0,
277314564Sdim     eEncodingUint,
278314564Sdim     eFormatHex,
279314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x19, LLDB_INVALID_REGNUM,
280314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
281314564Sdim     nullptr,
282314564Sdim     nullptr,
283314564Sdim     nullptr,
284314564Sdim     0},
285314564Sdim    {"x20",
286314564Sdim     nullptr,
287314564Sdim     8,
288314564Sdim     0,
289314564Sdim     eEncodingUint,
290314564Sdim     eFormatHex,
291314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x20, LLDB_INVALID_REGNUM,
292314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
293314564Sdim     nullptr,
294314564Sdim     nullptr,
295314564Sdim     nullptr,
296314564Sdim     0},
297314564Sdim    {"x21",
298314564Sdim     nullptr,
299314564Sdim     8,
300314564Sdim     0,
301314564Sdim     eEncodingUint,
302314564Sdim     eFormatHex,
303314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x21, LLDB_INVALID_REGNUM,
304314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
305314564Sdim     nullptr,
306314564Sdim     nullptr,
307314564Sdim     nullptr,
308314564Sdim     0},
309314564Sdim    {"x22",
310314564Sdim     nullptr,
311314564Sdim     8,
312314564Sdim     0,
313314564Sdim     eEncodingUint,
314314564Sdim     eFormatHex,
315314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x22, LLDB_INVALID_REGNUM,
316314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
317314564Sdim     nullptr,
318314564Sdim     nullptr,
319314564Sdim     nullptr,
320314564Sdim     0},
321314564Sdim    {"x23",
322314564Sdim     nullptr,
323314564Sdim     8,
324314564Sdim     0,
325314564Sdim     eEncodingUint,
326314564Sdim     eFormatHex,
327314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x23, LLDB_INVALID_REGNUM,
328314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
329314564Sdim     nullptr,
330314564Sdim     nullptr,
331314564Sdim     nullptr,
332314564Sdim     0},
333314564Sdim    {"x24",
334314564Sdim     nullptr,
335314564Sdim     8,
336314564Sdim     0,
337314564Sdim     eEncodingUint,
338314564Sdim     eFormatHex,
339314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x24, LLDB_INVALID_REGNUM,
340314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
341314564Sdim     nullptr,
342314564Sdim     nullptr,
343314564Sdim     nullptr,
344314564Sdim     0},
345314564Sdim    {"x25",
346314564Sdim     nullptr,
347314564Sdim     8,
348314564Sdim     0,
349314564Sdim     eEncodingUint,
350314564Sdim     eFormatHex,
351314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x25, LLDB_INVALID_REGNUM,
352314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
353314564Sdim     nullptr,
354314564Sdim     nullptr,
355314564Sdim     nullptr,
356314564Sdim     0},
357314564Sdim    {"x26",
358314564Sdim     nullptr,
359314564Sdim     8,
360314564Sdim     0,
361314564Sdim     eEncodingUint,
362314564Sdim     eFormatHex,
363314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x26, LLDB_INVALID_REGNUM,
364314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
365314564Sdim     nullptr,
366314564Sdim     nullptr,
367314564Sdim     nullptr,
368314564Sdim     0},
369314564Sdim    {"x27",
370314564Sdim     nullptr,
371314564Sdim     8,
372314564Sdim     0,
373314564Sdim     eEncodingUint,
374314564Sdim     eFormatHex,
375314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x27, LLDB_INVALID_REGNUM,
376314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
377314564Sdim     nullptr,
378314564Sdim     nullptr,
379314564Sdim     nullptr,
380314564Sdim     0},
381314564Sdim    {"x28",
382314564Sdim     nullptr,
383314564Sdim     8,
384314564Sdim     0,
385314564Sdim     eEncodingUint,
386314564Sdim     eFormatHex,
387314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x28, LLDB_INVALID_REGNUM,
388314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
389314564Sdim     nullptr,
390314564Sdim     nullptr,
391314564Sdim     nullptr,
392314564Sdim     0},
393314564Sdim    {"fp",
394314564Sdim     "x29",
395314564Sdim     8,
396314564Sdim     0,
397314564Sdim     eEncodingUint,
398314564Sdim     eFormatHex,
399314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x29, LLDB_REGNUM_GENERIC_FP,
400314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
401314564Sdim     nullptr,
402314564Sdim     nullptr,
403314564Sdim     nullptr,
404314564Sdim     0},
405314564Sdim    {"lr",
406314564Sdim     "x30",
407314564Sdim     8,
408314564Sdim     0,
409314564Sdim     eEncodingUint,
410314564Sdim     eFormatHex,
411314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x30, LLDB_REGNUM_GENERIC_RA,
412314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
413314564Sdim     nullptr,
414314564Sdim     nullptr,
415314564Sdim     nullptr,
416314564Sdim     0},
417314564Sdim    {"sp",
418314564Sdim     "x31",
419314564Sdim     8,
420314564Sdim     0,
421314564Sdim     eEncodingUint,
422314564Sdim     eFormatHex,
423314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x31, LLDB_REGNUM_GENERIC_SP,
424314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
425314564Sdim     nullptr,
426314564Sdim     nullptr,
427314564Sdim     nullptr,
428314564Sdim     0},
429314564Sdim    {"pc",
430314564Sdim     nullptr,
431314564Sdim     8,
432314564Sdim     0,
433314564Sdim     eEncodingUint,
434314564Sdim     eFormatHex,
435314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::pc, LLDB_REGNUM_GENERIC_PC,
436314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
437314564Sdim     nullptr,
438314564Sdim     nullptr,
439314564Sdim     nullptr,
440314564Sdim     0},
441314564Sdim    {"cpsr",
442314564Sdim     "psr",
443314564Sdim     4,
444314564Sdim     0,
445314564Sdim     eEncodingUint,
446314564Sdim     eFormatHex,
447314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::cpsr, LLDB_REGNUM_GENERIC_FLAGS,
448314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
449314564Sdim     nullptr,
450314564Sdim     nullptr,
451314564Sdim     nullptr,
452314564Sdim     0},
453275072Semaste
454314564Sdim    {"v0",
455314564Sdim     nullptr,
456314564Sdim     16,
457314564Sdim     0,
458314564Sdim     eEncodingVector,
459314564Sdim     eFormatVectorOfUInt8,
460314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v0, LLDB_INVALID_REGNUM,
461314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
462314564Sdim     nullptr,
463314564Sdim     nullptr,
464314564Sdim     nullptr,
465314564Sdim     0},
466314564Sdim    {"v1",
467314564Sdim     nullptr,
468314564Sdim     16,
469314564Sdim     0,
470314564Sdim     eEncodingVector,
471314564Sdim     eFormatVectorOfUInt8,
472314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v1, LLDB_INVALID_REGNUM,
473314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
474314564Sdim     nullptr,
475314564Sdim     nullptr,
476314564Sdim     nullptr,
477314564Sdim     0},
478314564Sdim    {"v2",
479314564Sdim     nullptr,
480314564Sdim     16,
481314564Sdim     0,
482314564Sdim     eEncodingVector,
483314564Sdim     eFormatVectorOfUInt8,
484314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v2, LLDB_INVALID_REGNUM,
485314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
486314564Sdim     nullptr,
487314564Sdim     nullptr,
488314564Sdim     nullptr,
489314564Sdim     0},
490314564Sdim    {"v3",
491314564Sdim     nullptr,
492314564Sdim     16,
493314564Sdim     0,
494314564Sdim     eEncodingVector,
495314564Sdim     eFormatVectorOfUInt8,
496314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v3, LLDB_INVALID_REGNUM,
497314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
498314564Sdim     nullptr,
499314564Sdim     nullptr,
500314564Sdim     nullptr,
501314564Sdim     0},
502314564Sdim    {"v4",
503314564Sdim     nullptr,
504314564Sdim     16,
505314564Sdim     0,
506314564Sdim     eEncodingVector,
507314564Sdim     eFormatVectorOfUInt8,
508314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v4, LLDB_INVALID_REGNUM,
509314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
510314564Sdim     nullptr,
511314564Sdim     nullptr,
512314564Sdim     nullptr,
513314564Sdim     0},
514314564Sdim    {"v5",
515314564Sdim     nullptr,
516314564Sdim     16,
517314564Sdim     0,
518314564Sdim     eEncodingVector,
519314564Sdim     eFormatVectorOfUInt8,
520314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v5, LLDB_INVALID_REGNUM,
521314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
522314564Sdim     nullptr,
523314564Sdim     nullptr,
524314564Sdim     nullptr,
525314564Sdim     0},
526314564Sdim    {"v6",
527314564Sdim     nullptr,
528314564Sdim     16,
529314564Sdim     0,
530314564Sdim     eEncodingVector,
531314564Sdim     eFormatVectorOfUInt8,
532314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v6, LLDB_INVALID_REGNUM,
533314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
534314564Sdim     nullptr,
535314564Sdim     nullptr,
536314564Sdim     nullptr,
537314564Sdim     0},
538314564Sdim    {"v7",
539314564Sdim     nullptr,
540314564Sdim     16,
541314564Sdim     0,
542314564Sdim     eEncodingVector,
543314564Sdim     eFormatVectorOfUInt8,
544314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v7, LLDB_INVALID_REGNUM,
545314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
546314564Sdim     nullptr,
547314564Sdim     nullptr,
548314564Sdim     nullptr,
549314564Sdim     0},
550314564Sdim    {"v8",
551314564Sdim     nullptr,
552314564Sdim     16,
553314564Sdim     0,
554314564Sdim     eEncodingVector,
555314564Sdim     eFormatVectorOfUInt8,
556314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v8, LLDB_INVALID_REGNUM,
557314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
558314564Sdim     nullptr,
559314564Sdim     nullptr,
560314564Sdim     nullptr,
561314564Sdim     0},
562314564Sdim    {"v9",
563314564Sdim     nullptr,
564314564Sdim     16,
565314564Sdim     0,
566314564Sdim     eEncodingVector,
567314564Sdim     eFormatVectorOfUInt8,
568314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v9, LLDB_INVALID_REGNUM,
569314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
570314564Sdim     nullptr,
571314564Sdim     nullptr,
572314564Sdim     nullptr,
573314564Sdim     0},
574314564Sdim    {"v10",
575314564Sdim     nullptr,
576314564Sdim     16,
577314564Sdim     0,
578314564Sdim     eEncodingVector,
579314564Sdim     eFormatVectorOfUInt8,
580314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v10, LLDB_INVALID_REGNUM,
581314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
582314564Sdim     nullptr,
583314564Sdim     nullptr,
584314564Sdim     nullptr,
585314564Sdim     0},
586314564Sdim    {"v11",
587314564Sdim     nullptr,
588314564Sdim     16,
589314564Sdim     0,
590314564Sdim     eEncodingVector,
591314564Sdim     eFormatVectorOfUInt8,
592314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v11, LLDB_INVALID_REGNUM,
593314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
594314564Sdim     nullptr,
595314564Sdim     nullptr,
596314564Sdim     nullptr,
597314564Sdim     0},
598314564Sdim    {"v12",
599314564Sdim     nullptr,
600314564Sdim     16,
601314564Sdim     0,
602314564Sdim     eEncodingVector,
603314564Sdim     eFormatVectorOfUInt8,
604314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v12, LLDB_INVALID_REGNUM,
605314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
606314564Sdim     nullptr,
607314564Sdim     nullptr,
608314564Sdim     nullptr,
609314564Sdim     0},
610314564Sdim    {"v13",
611314564Sdim     nullptr,
612314564Sdim     16,
613314564Sdim     0,
614314564Sdim     eEncodingVector,
615314564Sdim     eFormatVectorOfUInt8,
616314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v13, LLDB_INVALID_REGNUM,
617314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
618314564Sdim     nullptr,
619314564Sdim     nullptr,
620314564Sdim     nullptr,
621314564Sdim     0},
622314564Sdim    {"v14",
623314564Sdim     nullptr,
624314564Sdim     16,
625314564Sdim     0,
626314564Sdim     eEncodingVector,
627314564Sdim     eFormatVectorOfUInt8,
628314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v14, LLDB_INVALID_REGNUM,
629314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
630314564Sdim     nullptr,
631314564Sdim     nullptr,
632314564Sdim     nullptr,
633314564Sdim     0},
634314564Sdim    {"v15",
635314564Sdim     nullptr,
636314564Sdim     16,
637314564Sdim     0,
638314564Sdim     eEncodingVector,
639314564Sdim     eFormatVectorOfUInt8,
640314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v15, LLDB_INVALID_REGNUM,
641314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
642314564Sdim     nullptr,
643314564Sdim     nullptr,
644314564Sdim     nullptr,
645314564Sdim     0},
646314564Sdim    {"v16",
647314564Sdim     nullptr,
648314564Sdim     16,
649314564Sdim     0,
650314564Sdim     eEncodingVector,
651314564Sdim     eFormatVectorOfUInt8,
652314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v16, LLDB_INVALID_REGNUM,
653314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
654314564Sdim     nullptr,
655314564Sdim     nullptr,
656314564Sdim     nullptr,
657314564Sdim     0},
658314564Sdim    {"v17",
659314564Sdim     nullptr,
660314564Sdim     16,
661314564Sdim     0,
662314564Sdim     eEncodingVector,
663314564Sdim     eFormatVectorOfUInt8,
664314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v17, LLDB_INVALID_REGNUM,
665314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
666314564Sdim     nullptr,
667314564Sdim     nullptr,
668314564Sdim     nullptr,
669314564Sdim     0},
670314564Sdim    {"v18",
671314564Sdim     nullptr,
672314564Sdim     16,
673314564Sdim     0,
674314564Sdim     eEncodingVector,
675314564Sdim     eFormatVectorOfUInt8,
676314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v18, LLDB_INVALID_REGNUM,
677314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
678314564Sdim     nullptr,
679314564Sdim     nullptr,
680314564Sdim     nullptr,
681314564Sdim     0},
682314564Sdim    {"v19",
683314564Sdim     nullptr,
684314564Sdim     16,
685314564Sdim     0,
686314564Sdim     eEncodingVector,
687314564Sdim     eFormatVectorOfUInt8,
688314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v19, LLDB_INVALID_REGNUM,
689314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
690314564Sdim     nullptr,
691314564Sdim     nullptr,
692314564Sdim     nullptr,
693314564Sdim     0},
694314564Sdim    {"v20",
695314564Sdim     nullptr,
696314564Sdim     16,
697314564Sdim     0,
698314564Sdim     eEncodingVector,
699314564Sdim     eFormatVectorOfUInt8,
700314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v20, LLDB_INVALID_REGNUM,
701314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
702314564Sdim     nullptr,
703314564Sdim     nullptr,
704314564Sdim     nullptr,
705314564Sdim     0},
706314564Sdim    {"v21",
707314564Sdim     nullptr,
708314564Sdim     16,
709314564Sdim     0,
710314564Sdim     eEncodingVector,
711314564Sdim     eFormatVectorOfUInt8,
712314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v21, LLDB_INVALID_REGNUM,
713314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
714314564Sdim     nullptr,
715314564Sdim     nullptr,
716314564Sdim     nullptr,
717314564Sdim     0},
718314564Sdim    {"v22",
719314564Sdim     nullptr,
720314564Sdim     16,
721314564Sdim     0,
722314564Sdim     eEncodingVector,
723314564Sdim     eFormatVectorOfUInt8,
724314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v22, LLDB_INVALID_REGNUM,
725314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
726314564Sdim     nullptr,
727314564Sdim     nullptr,
728314564Sdim     nullptr,
729314564Sdim     0},
730314564Sdim    {"v23",
731314564Sdim     nullptr,
732314564Sdim     16,
733314564Sdim     0,
734314564Sdim     eEncodingVector,
735314564Sdim     eFormatVectorOfUInt8,
736314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v23, LLDB_INVALID_REGNUM,
737314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
738314564Sdim     nullptr,
739314564Sdim     nullptr,
740314564Sdim     nullptr,
741314564Sdim     0},
742314564Sdim    {"v24",
743314564Sdim     nullptr,
744314564Sdim     16,
745314564Sdim     0,
746314564Sdim     eEncodingVector,
747314564Sdim     eFormatVectorOfUInt8,
748314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v24, LLDB_INVALID_REGNUM,
749314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
750314564Sdim     nullptr,
751314564Sdim     nullptr,
752314564Sdim     nullptr,
753314564Sdim     0},
754314564Sdim    {"v25",
755314564Sdim     nullptr,
756314564Sdim     16,
757314564Sdim     0,
758314564Sdim     eEncodingVector,
759314564Sdim     eFormatVectorOfUInt8,
760314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v25, LLDB_INVALID_REGNUM,
761314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
762314564Sdim     nullptr,
763314564Sdim     nullptr,
764314564Sdim     nullptr,
765314564Sdim     0},
766314564Sdim    {"v26",
767314564Sdim     nullptr,
768314564Sdim     16,
769314564Sdim     0,
770314564Sdim     eEncodingVector,
771314564Sdim     eFormatVectorOfUInt8,
772314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v26, LLDB_INVALID_REGNUM,
773314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
774314564Sdim     nullptr,
775314564Sdim     nullptr,
776314564Sdim     nullptr,
777314564Sdim     0},
778314564Sdim    {"v27",
779314564Sdim     nullptr,
780314564Sdim     16,
781314564Sdim     0,
782314564Sdim     eEncodingVector,
783314564Sdim     eFormatVectorOfUInt8,
784314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v27, LLDB_INVALID_REGNUM,
785314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
786314564Sdim     nullptr,
787314564Sdim     nullptr,
788314564Sdim     nullptr,
789314564Sdim     0},
790314564Sdim    {"v28",
791314564Sdim     nullptr,
792314564Sdim     16,
793314564Sdim     0,
794314564Sdim     eEncodingVector,
795314564Sdim     eFormatVectorOfUInt8,
796314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v28, LLDB_INVALID_REGNUM,
797314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
798314564Sdim     nullptr,
799314564Sdim     nullptr,
800314564Sdim     nullptr,
801314564Sdim     0},
802314564Sdim    {"v29",
803314564Sdim     nullptr,
804314564Sdim     16,
805314564Sdim     0,
806314564Sdim     eEncodingVector,
807314564Sdim     eFormatVectorOfUInt8,
808314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v29, LLDB_INVALID_REGNUM,
809314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
810314564Sdim     nullptr,
811314564Sdim     nullptr,
812314564Sdim     nullptr,
813314564Sdim     0},
814314564Sdim    {"v30",
815314564Sdim     nullptr,
816314564Sdim     16,
817314564Sdim     0,
818314564Sdim     eEncodingVector,
819314564Sdim     eFormatVectorOfUInt8,
820314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v30, LLDB_INVALID_REGNUM,
821314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
822314564Sdim     nullptr,
823314564Sdim     nullptr,
824314564Sdim     nullptr,
825314564Sdim     0},
826314564Sdim    {"v31",
827314564Sdim     nullptr,
828314564Sdim     16,
829314564Sdim     0,
830314564Sdim     eEncodingVector,
831314564Sdim     eFormatVectorOfUInt8,
832314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v31, LLDB_INVALID_REGNUM,
833314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
834314564Sdim     nullptr,
835314564Sdim     nullptr,
836314564Sdim     nullptr,
837314564Sdim     0},
838275072Semaste
839314564Sdim    {"fpsr",
840314564Sdim     nullptr,
841314564Sdim     4,
842314564Sdim     0,
843314564Sdim     eEncodingUint,
844314564Sdim     eFormatHex,
845314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
846314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
847314564Sdim     nullptr,
848314564Sdim     nullptr,
849314564Sdim     nullptr,
850314564Sdim     0},
851314564Sdim    {"fpcr",
852314564Sdim     nullptr,
853314564Sdim     4,
854314564Sdim     0,
855314564Sdim     eEncodingUint,
856314564Sdim     eFormatHex,
857314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
858314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
859314564Sdim     nullptr,
860314564Sdim     nullptr,
861314564Sdim     nullptr,
862314564Sdim     0},
863275072Semaste
864314564Sdim    {"s0",
865314564Sdim     nullptr,
866314564Sdim     4,
867314564Sdim     0,
868314564Sdim     eEncodingIEEE754,
869314564Sdim     eFormatFloat,
870314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
871314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
872314564Sdim     nullptr,
873314564Sdim     nullptr,
874314564Sdim     nullptr,
875314564Sdim     0},
876314564Sdim    {"s1",
877314564Sdim     nullptr,
878314564Sdim     4,
879314564Sdim     0,
880314564Sdim     eEncodingIEEE754,
881314564Sdim     eFormatFloat,
882314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
883314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
884314564Sdim     nullptr,
885314564Sdim     nullptr,
886314564Sdim     nullptr,
887314564Sdim     0},
888314564Sdim    {"s2",
889314564Sdim     nullptr,
890314564Sdim     4,
891314564Sdim     0,
892314564Sdim     eEncodingIEEE754,
893314564Sdim     eFormatFloat,
894314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
895314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
896314564Sdim     nullptr,
897314564Sdim     nullptr,
898314564Sdim     nullptr,
899314564Sdim     0},
900314564Sdim    {"s3",
901314564Sdim     nullptr,
902314564Sdim     4,
903314564Sdim     0,
904314564Sdim     eEncodingIEEE754,
905314564Sdim     eFormatFloat,
906314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
907314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
908314564Sdim     nullptr,
909314564Sdim     nullptr,
910314564Sdim     nullptr,
911314564Sdim     0},
912314564Sdim    {"s4",
913314564Sdim     nullptr,
914314564Sdim     4,
915314564Sdim     0,
916314564Sdim     eEncodingIEEE754,
917314564Sdim     eFormatFloat,
918314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
919314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
920314564Sdim     nullptr,
921314564Sdim     nullptr,
922314564Sdim     nullptr,
923314564Sdim     0},
924314564Sdim    {"s5",
925314564Sdim     nullptr,
926314564Sdim     4,
927314564Sdim     0,
928314564Sdim     eEncodingIEEE754,
929314564Sdim     eFormatFloat,
930314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
931314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
932314564Sdim     nullptr,
933314564Sdim     nullptr,
934314564Sdim     nullptr,
935314564Sdim     0},
936314564Sdim    {"s6",
937314564Sdim     nullptr,
938314564Sdim     4,
939314564Sdim     0,
940314564Sdim     eEncodingIEEE754,
941314564Sdim     eFormatFloat,
942314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
943314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
944314564Sdim     nullptr,
945314564Sdim     nullptr,
946314564Sdim     nullptr,
947314564Sdim     0},
948314564Sdim    {"s7",
949314564Sdim     nullptr,
950314564Sdim     4,
951314564Sdim     0,
952314564Sdim     eEncodingIEEE754,
953314564Sdim     eFormatFloat,
954314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
955314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
956314564Sdim     nullptr,
957314564Sdim     nullptr,
958314564Sdim     nullptr,
959314564Sdim     0},
960314564Sdim    {"s8",
961314564Sdim     nullptr,
962314564Sdim     4,
963314564Sdim     0,
964314564Sdim     eEncodingIEEE754,
965314564Sdim     eFormatFloat,
966314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
967314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
968314564Sdim     nullptr,
969314564Sdim     nullptr,
970314564Sdim     nullptr,
971314564Sdim     0},
972314564Sdim    {"s9",
973314564Sdim     nullptr,
974314564Sdim     4,
975314564Sdim     0,
976314564Sdim     eEncodingIEEE754,
977314564Sdim     eFormatFloat,
978314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
979314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
980314564Sdim     nullptr,
981314564Sdim     nullptr,
982314564Sdim     nullptr,
983314564Sdim     0},
984314564Sdim    {"s10",
985314564Sdim     nullptr,
986314564Sdim     4,
987314564Sdim     0,
988314564Sdim     eEncodingIEEE754,
989314564Sdim     eFormatFloat,
990314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
991314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
992314564Sdim     nullptr,
993314564Sdim     nullptr,
994314564Sdim     nullptr,
995314564Sdim     0},
996314564Sdim    {"s11",
997314564Sdim     nullptr,
998314564Sdim     4,
999314564Sdim     0,
1000314564Sdim     eEncodingIEEE754,
1001314564Sdim     eFormatFloat,
1002314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1003314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1004314564Sdim     nullptr,
1005314564Sdim     nullptr,
1006314564Sdim     nullptr,
1007314564Sdim     0},
1008314564Sdim    {"s12",
1009314564Sdim     nullptr,
1010314564Sdim     4,
1011314564Sdim     0,
1012314564Sdim     eEncodingIEEE754,
1013314564Sdim     eFormatFloat,
1014314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1015314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1016314564Sdim     nullptr,
1017314564Sdim     nullptr,
1018314564Sdim     nullptr,
1019314564Sdim     0},
1020314564Sdim    {"s13",
1021314564Sdim     nullptr,
1022314564Sdim     4,
1023314564Sdim     0,
1024314564Sdim     eEncodingIEEE754,
1025314564Sdim     eFormatFloat,
1026314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1027314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1028314564Sdim     nullptr,
1029314564Sdim     nullptr,
1030314564Sdim     nullptr,
1031314564Sdim     0},
1032314564Sdim    {"s14",
1033314564Sdim     nullptr,
1034314564Sdim     4,
1035314564Sdim     0,
1036314564Sdim     eEncodingIEEE754,
1037314564Sdim     eFormatFloat,
1038314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1039314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1040314564Sdim     nullptr,
1041314564Sdim     nullptr,
1042314564Sdim     nullptr,
1043314564Sdim     0},
1044314564Sdim    {"s15",
1045314564Sdim     nullptr,
1046314564Sdim     4,
1047314564Sdim     0,
1048314564Sdim     eEncodingIEEE754,
1049314564Sdim     eFormatFloat,
1050314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1051314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1052314564Sdim     nullptr,
1053314564Sdim     nullptr,
1054314564Sdim     nullptr,
1055314564Sdim     0},
1056314564Sdim    {"s16",
1057314564Sdim     nullptr,
1058314564Sdim     4,
1059314564Sdim     0,
1060314564Sdim     eEncodingIEEE754,
1061314564Sdim     eFormatFloat,
1062314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1063314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1064314564Sdim     nullptr,
1065314564Sdim     nullptr,
1066314564Sdim     nullptr,
1067314564Sdim     0},
1068314564Sdim    {"s17",
1069314564Sdim     nullptr,
1070314564Sdim     4,
1071314564Sdim     0,
1072314564Sdim     eEncodingIEEE754,
1073314564Sdim     eFormatFloat,
1074314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1075314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1076314564Sdim     nullptr,
1077314564Sdim     nullptr,
1078314564Sdim     nullptr,
1079314564Sdim     0},
1080314564Sdim    {"s18",
1081314564Sdim     nullptr,
1082314564Sdim     4,
1083314564Sdim     0,
1084314564Sdim     eEncodingIEEE754,
1085314564Sdim     eFormatFloat,
1086314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1087314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1088314564Sdim     nullptr,
1089314564Sdim     nullptr,
1090314564Sdim     nullptr,
1091314564Sdim     0},
1092314564Sdim    {"s19",
1093314564Sdim     nullptr,
1094314564Sdim     4,
1095314564Sdim     0,
1096314564Sdim     eEncodingIEEE754,
1097314564Sdim     eFormatFloat,
1098314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1099314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1100314564Sdim     nullptr,
1101314564Sdim     nullptr,
1102314564Sdim     nullptr,
1103314564Sdim     0},
1104314564Sdim    {"s20",
1105314564Sdim     nullptr,
1106314564Sdim     4,
1107314564Sdim     0,
1108314564Sdim     eEncodingIEEE754,
1109314564Sdim     eFormatFloat,
1110314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1111314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1112314564Sdim     nullptr,
1113314564Sdim     nullptr,
1114314564Sdim     nullptr,
1115314564Sdim     0},
1116314564Sdim    {"s21",
1117314564Sdim     nullptr,
1118314564Sdim     4,
1119314564Sdim     0,
1120314564Sdim     eEncodingIEEE754,
1121314564Sdim     eFormatFloat,
1122314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1123314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1124314564Sdim     nullptr,
1125314564Sdim     nullptr,
1126314564Sdim     nullptr,
1127314564Sdim     0},
1128314564Sdim    {"s22",
1129314564Sdim     nullptr,
1130314564Sdim     4,
1131314564Sdim     0,
1132314564Sdim     eEncodingIEEE754,
1133314564Sdim     eFormatFloat,
1134314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1135314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1136314564Sdim     nullptr,
1137314564Sdim     nullptr,
1138314564Sdim     nullptr,
1139314564Sdim     0},
1140314564Sdim    {"s23",
1141314564Sdim     nullptr,
1142314564Sdim     4,
1143314564Sdim     0,
1144314564Sdim     eEncodingIEEE754,
1145314564Sdim     eFormatFloat,
1146314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1147314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1148314564Sdim     nullptr,
1149314564Sdim     nullptr,
1150314564Sdim     nullptr,
1151314564Sdim     0},
1152314564Sdim    {"s24",
1153314564Sdim     nullptr,
1154314564Sdim     4,
1155314564Sdim     0,
1156314564Sdim     eEncodingIEEE754,
1157314564Sdim     eFormatFloat,
1158314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1159314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1160314564Sdim     nullptr,
1161314564Sdim     nullptr,
1162314564Sdim     nullptr,
1163314564Sdim     0},
1164314564Sdim    {"s25",
1165314564Sdim     nullptr,
1166314564Sdim     4,
1167314564Sdim     0,
1168314564Sdim     eEncodingIEEE754,
1169314564Sdim     eFormatFloat,
1170314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1171314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1172314564Sdim     nullptr,
1173314564Sdim     nullptr,
1174314564Sdim     nullptr,
1175314564Sdim     0},
1176314564Sdim    {"s26",
1177314564Sdim     nullptr,
1178314564Sdim     4,
1179314564Sdim     0,
1180314564Sdim     eEncodingIEEE754,
1181314564Sdim     eFormatFloat,
1182314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1183314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1184314564Sdim     nullptr,
1185314564Sdim     nullptr,
1186314564Sdim     nullptr,
1187314564Sdim     0},
1188314564Sdim    {"s27",
1189314564Sdim     nullptr,
1190314564Sdim     4,
1191314564Sdim     0,
1192314564Sdim     eEncodingIEEE754,
1193314564Sdim     eFormatFloat,
1194314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1195314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1196314564Sdim     nullptr,
1197314564Sdim     nullptr,
1198314564Sdim     nullptr,
1199314564Sdim     0},
1200314564Sdim    {"s28",
1201314564Sdim     nullptr,
1202314564Sdim     4,
1203314564Sdim     0,
1204314564Sdim     eEncodingIEEE754,
1205314564Sdim     eFormatFloat,
1206314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1207314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1208314564Sdim     nullptr,
1209314564Sdim     nullptr,
1210314564Sdim     nullptr,
1211314564Sdim     0},
1212314564Sdim    {"s29",
1213314564Sdim     nullptr,
1214314564Sdim     4,
1215314564Sdim     0,
1216314564Sdim     eEncodingIEEE754,
1217314564Sdim     eFormatFloat,
1218314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1219314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1220314564Sdim     nullptr,
1221314564Sdim     nullptr,
1222314564Sdim     nullptr,
1223314564Sdim     0},
1224314564Sdim    {"s30",
1225314564Sdim     nullptr,
1226314564Sdim     4,
1227314564Sdim     0,
1228314564Sdim     eEncodingIEEE754,
1229314564Sdim     eFormatFloat,
1230314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1231314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1232314564Sdim     nullptr,
1233314564Sdim     nullptr,
1234314564Sdim     nullptr,
1235314564Sdim     0},
1236314564Sdim    {"s31",
1237314564Sdim     nullptr,
1238314564Sdim     4,
1239314564Sdim     0,
1240314564Sdim     eEncodingIEEE754,
1241314564Sdim     eFormatFloat,
1242314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1243314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1244314564Sdim     nullptr,
1245314564Sdim     nullptr,
1246314564Sdim     nullptr,
1247314564Sdim     0},
1248275072Semaste
1249314564Sdim    {"d0",
1250314564Sdim     nullptr,
1251314564Sdim     8,
1252314564Sdim     0,
1253314564Sdim     eEncodingIEEE754,
1254314564Sdim     eFormatFloat,
1255314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1256314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1257314564Sdim     nullptr,
1258314564Sdim     nullptr,
1259314564Sdim     nullptr,
1260314564Sdim     0},
1261314564Sdim    {"d1",
1262314564Sdim     nullptr,
1263314564Sdim     8,
1264314564Sdim     0,
1265314564Sdim     eEncodingIEEE754,
1266314564Sdim     eFormatFloat,
1267314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1268314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1269314564Sdim     nullptr,
1270314564Sdim     nullptr,
1271314564Sdim     nullptr,
1272314564Sdim     0},
1273314564Sdim    {"d2",
1274314564Sdim     nullptr,
1275314564Sdim     8,
1276314564Sdim     0,
1277314564Sdim     eEncodingIEEE754,
1278314564Sdim     eFormatFloat,
1279314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1280314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1281314564Sdim     nullptr,
1282314564Sdim     nullptr,
1283314564Sdim     nullptr,
1284314564Sdim     0},
1285314564Sdim    {"d3",
1286314564Sdim     nullptr,
1287314564Sdim     8,
1288314564Sdim     0,
1289314564Sdim     eEncodingIEEE754,
1290314564Sdim     eFormatFloat,
1291314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1292314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1293314564Sdim     nullptr,
1294314564Sdim     nullptr,
1295314564Sdim     nullptr,
1296314564Sdim     0},
1297314564Sdim    {"d4",
1298314564Sdim     nullptr,
1299314564Sdim     8,
1300314564Sdim     0,
1301314564Sdim     eEncodingIEEE754,
1302314564Sdim     eFormatFloat,
1303314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1304314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1305314564Sdim     nullptr,
1306314564Sdim     nullptr,
1307314564Sdim     nullptr,
1308314564Sdim     0},
1309314564Sdim    {"d5",
1310314564Sdim     nullptr,
1311314564Sdim     8,
1312314564Sdim     0,
1313314564Sdim     eEncodingIEEE754,
1314314564Sdim     eFormatFloat,
1315314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1316314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1317314564Sdim     nullptr,
1318314564Sdim     nullptr,
1319314564Sdim     nullptr,
1320314564Sdim     0},
1321314564Sdim    {"d6",
1322314564Sdim     nullptr,
1323314564Sdim     8,
1324314564Sdim     0,
1325314564Sdim     eEncodingIEEE754,
1326314564Sdim     eFormatFloat,
1327314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1328314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1329314564Sdim     nullptr,
1330314564Sdim     nullptr,
1331314564Sdim     nullptr,
1332314564Sdim     0},
1333314564Sdim    {"d7",
1334314564Sdim     nullptr,
1335314564Sdim     8,
1336314564Sdim     0,
1337314564Sdim     eEncodingIEEE754,
1338314564Sdim     eFormatFloat,
1339314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1340314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1341314564Sdim     nullptr,
1342314564Sdim     nullptr,
1343314564Sdim     nullptr,
1344314564Sdim     0},
1345314564Sdim    {"d8",
1346314564Sdim     nullptr,
1347314564Sdim     8,
1348314564Sdim     0,
1349314564Sdim     eEncodingIEEE754,
1350314564Sdim     eFormatFloat,
1351314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1352314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1353314564Sdim     nullptr,
1354314564Sdim     nullptr,
1355314564Sdim     nullptr,
1356314564Sdim     0},
1357314564Sdim    {"d9",
1358314564Sdim     nullptr,
1359314564Sdim     8,
1360314564Sdim     0,
1361314564Sdim     eEncodingIEEE754,
1362314564Sdim     eFormatFloat,
1363314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1364314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1365314564Sdim     nullptr,
1366314564Sdim     nullptr,
1367314564Sdim     nullptr,
1368314564Sdim     0},
1369314564Sdim    {"d10",
1370314564Sdim     nullptr,
1371314564Sdim     8,
1372314564Sdim     0,
1373314564Sdim     eEncodingIEEE754,
1374314564Sdim     eFormatFloat,
1375314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1376314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1377314564Sdim     nullptr,
1378314564Sdim     nullptr,
1379314564Sdim     nullptr,
1380314564Sdim     0},
1381314564Sdim    {"d11",
1382314564Sdim     nullptr,
1383314564Sdim     8,
1384314564Sdim     0,
1385314564Sdim     eEncodingIEEE754,
1386314564Sdim     eFormatFloat,
1387314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1388314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1389314564Sdim     nullptr,
1390314564Sdim     nullptr,
1391314564Sdim     nullptr,
1392314564Sdim     0},
1393314564Sdim    {"d12",
1394314564Sdim     nullptr,
1395314564Sdim     8,
1396314564Sdim     0,
1397314564Sdim     eEncodingIEEE754,
1398314564Sdim     eFormatFloat,
1399314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1400314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1401314564Sdim     nullptr,
1402314564Sdim     nullptr,
1403314564Sdim     nullptr,
1404314564Sdim     0},
1405314564Sdim    {"d13",
1406314564Sdim     nullptr,
1407314564Sdim     8,
1408314564Sdim     0,
1409314564Sdim     eEncodingIEEE754,
1410314564Sdim     eFormatFloat,
1411314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1412314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1413314564Sdim     nullptr,
1414314564Sdim     nullptr,
1415314564Sdim     nullptr,
1416314564Sdim     0},
1417314564Sdim    {"d14",
1418314564Sdim     nullptr,
1419314564Sdim     8,
1420314564Sdim     0,
1421314564Sdim     eEncodingIEEE754,
1422314564Sdim     eFormatFloat,
1423314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1424314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1425314564Sdim     nullptr,
1426314564Sdim     nullptr,
1427314564Sdim     nullptr,
1428314564Sdim     0},
1429314564Sdim    {"d15",
1430314564Sdim     nullptr,
1431314564Sdim     8,
1432314564Sdim     0,
1433314564Sdim     eEncodingIEEE754,
1434314564Sdim     eFormatFloat,
1435314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1436314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1437314564Sdim     nullptr,
1438314564Sdim     nullptr,
1439314564Sdim     nullptr,
1440314564Sdim     0},
1441314564Sdim    {"d16",
1442314564Sdim     nullptr,
1443314564Sdim     8,
1444314564Sdim     0,
1445314564Sdim     eEncodingIEEE754,
1446314564Sdim     eFormatFloat,
1447314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1448314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1449314564Sdim     nullptr,
1450314564Sdim     nullptr,
1451314564Sdim     nullptr,
1452314564Sdim     0},
1453314564Sdim    {"d17",
1454314564Sdim     nullptr,
1455314564Sdim     8,
1456314564Sdim     0,
1457314564Sdim     eEncodingIEEE754,
1458314564Sdim     eFormatFloat,
1459314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1460314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1461314564Sdim     nullptr,
1462314564Sdim     nullptr,
1463314564Sdim     nullptr,
1464314564Sdim     0},
1465314564Sdim    {"d18",
1466314564Sdim     nullptr,
1467314564Sdim     8,
1468314564Sdim     0,
1469314564Sdim     eEncodingIEEE754,
1470314564Sdim     eFormatFloat,
1471314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1472314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1473314564Sdim     nullptr,
1474314564Sdim     nullptr,
1475314564Sdim     nullptr,
1476314564Sdim     0},
1477314564Sdim    {"d19",
1478314564Sdim     nullptr,
1479314564Sdim     8,
1480314564Sdim     0,
1481314564Sdim     eEncodingIEEE754,
1482314564Sdim     eFormatFloat,
1483314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1484314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1485314564Sdim     nullptr,
1486314564Sdim     nullptr,
1487314564Sdim     nullptr,
1488314564Sdim     0},
1489314564Sdim    {"d20",
1490314564Sdim     nullptr,
1491314564Sdim     8,
1492314564Sdim     0,
1493314564Sdim     eEncodingIEEE754,
1494314564Sdim     eFormatFloat,
1495314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1496314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1497314564Sdim     nullptr,
1498314564Sdim     nullptr,
1499314564Sdim     nullptr,
1500314564Sdim     0},
1501314564Sdim    {"d21",
1502314564Sdim     nullptr,
1503314564Sdim     8,
1504314564Sdim     0,
1505314564Sdim     eEncodingIEEE754,
1506314564Sdim     eFormatFloat,
1507314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1508314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1509314564Sdim     nullptr,
1510314564Sdim     nullptr,
1511314564Sdim     nullptr,
1512314564Sdim     0},
1513314564Sdim    {"d22",
1514314564Sdim     nullptr,
1515314564Sdim     8,
1516314564Sdim     0,
1517314564Sdim     eEncodingIEEE754,
1518314564Sdim     eFormatFloat,
1519314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1520314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1521314564Sdim     nullptr,
1522314564Sdim     nullptr,
1523314564Sdim     nullptr,
1524314564Sdim     0},
1525314564Sdim    {"d23",
1526314564Sdim     nullptr,
1527314564Sdim     8,
1528314564Sdim     0,
1529314564Sdim     eEncodingIEEE754,
1530314564Sdim     eFormatFloat,
1531314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1532314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1533314564Sdim     nullptr,
1534314564Sdim     nullptr,
1535314564Sdim     nullptr,
1536314564Sdim     0},
1537314564Sdim    {"d24",
1538314564Sdim     nullptr,
1539314564Sdim     8,
1540314564Sdim     0,
1541314564Sdim     eEncodingIEEE754,
1542314564Sdim     eFormatFloat,
1543314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1544314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1545314564Sdim     nullptr,
1546314564Sdim     nullptr,
1547314564Sdim     nullptr,
1548314564Sdim     0},
1549314564Sdim    {"d25",
1550314564Sdim     nullptr,
1551314564Sdim     8,
1552314564Sdim     0,
1553314564Sdim     eEncodingIEEE754,
1554314564Sdim     eFormatFloat,
1555314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1556314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1557314564Sdim     nullptr,
1558314564Sdim     nullptr,
1559314564Sdim     nullptr,
1560314564Sdim     0},
1561314564Sdim    {"d26",
1562314564Sdim     nullptr,
1563314564Sdim     8,
1564314564Sdim     0,
1565314564Sdim     eEncodingIEEE754,
1566314564Sdim     eFormatFloat,
1567314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1568314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1569314564Sdim     nullptr,
1570314564Sdim     nullptr,
1571314564Sdim     nullptr,
1572314564Sdim     0},
1573314564Sdim    {"d27",
1574314564Sdim     nullptr,
1575314564Sdim     8,
1576314564Sdim     0,
1577314564Sdim     eEncodingIEEE754,
1578314564Sdim     eFormatFloat,
1579314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1580314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1581314564Sdim     nullptr,
1582314564Sdim     nullptr,
1583314564Sdim     nullptr,
1584314564Sdim     0},
1585314564Sdim    {"d28",
1586314564Sdim     nullptr,
1587314564Sdim     8,
1588314564Sdim     0,
1589314564Sdim     eEncodingIEEE754,
1590314564Sdim     eFormatFloat,
1591314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1592314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1593314564Sdim     nullptr,
1594314564Sdim     nullptr,
1595314564Sdim     nullptr,
1596314564Sdim     0},
1597314564Sdim    {"d29",
1598314564Sdim     nullptr,
1599314564Sdim     8,
1600314564Sdim     0,
1601314564Sdim     eEncodingIEEE754,
1602314564Sdim     eFormatFloat,
1603314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1604314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1605314564Sdim     nullptr,
1606314564Sdim     nullptr,
1607314564Sdim     nullptr,
1608314564Sdim     0},
1609314564Sdim    {"d30",
1610314564Sdim     nullptr,
1611314564Sdim     8,
1612314564Sdim     0,
1613314564Sdim     eEncodingIEEE754,
1614314564Sdim     eFormatFloat,
1615314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1616314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1617314564Sdim     nullptr,
1618314564Sdim     nullptr,
1619314564Sdim     nullptr,
1620314564Sdim     0},
1621314564Sdim    {"d31",
1622314564Sdim     nullptr,
1623314564Sdim     8,
1624314564Sdim     0,
1625314564Sdim     eEncodingIEEE754,
1626314564Sdim     eFormatFloat,
1627314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1628314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1629314564Sdim     nullptr,
1630314564Sdim     nullptr,
1631314564Sdim     nullptr,
1632314564Sdim     0}};
1633275072Semaste
1634314564Sdimstatic const uint32_t k_num_register_infos =
1635314564Sdim    llvm::array_lengthof(g_register_infos);
1636275072Semastestatic bool g_register_info_names_constified = false;
1637275072Semaste
1638275072Semasteconst lldb_private::RegisterInfo *
1639314564SdimABIMacOSX_arm64::GetRegisterInfoArray(uint32_t &count) {
1640314564Sdim  // Make the C-string names and alt_names for the register infos into const
1641314564Sdim  // C-string values by having the ConstString unique the names in the global
1642314564Sdim  // constant C-string pool.
1643314564Sdim  if (!g_register_info_names_constified) {
1644314564Sdim    g_register_info_names_constified = true;
1645314564Sdim    for (uint32_t i = 0; i < k_num_register_infos; ++i) {
1646314564Sdim      if (g_register_infos[i].name)
1647314564Sdim        g_register_infos[i].name =
1648314564Sdim            ConstString(g_register_infos[i].name).GetCString();
1649314564Sdim      if (g_register_infos[i].alt_name)
1650314564Sdim        g_register_infos[i].alt_name =
1651314564Sdim            ConstString(g_register_infos[i].alt_name).GetCString();
1652275072Semaste    }
1653314564Sdim  }
1654314564Sdim  count = k_num_register_infos;
1655314564Sdim  return g_register_infos;
1656275072Semaste}
1657275072Semaste
1658314564Sdimsize_t ABIMacOSX_arm64::GetRedZoneSize() const { return 128; }
1659275072Semaste
1660275072Semaste// Static Functions
1661309124Sdim
1662275072SemasteABISP
1663321369SdimABIMacOSX_arm64::CreateInstance(ProcessSP process_sp, const ArchSpec &arch) {
1664314564Sdim  const llvm::Triple::ArchType arch_type = arch.GetTriple().getArch();
1665314564Sdim  const llvm::Triple::VendorType vendor_type = arch.GetTriple().getVendor();
1666288943Sdim
1667314564Sdim  if (vendor_type == llvm::Triple::Apple) {
1668360784Sdim    if (arch_type == llvm::Triple::aarch64 ||
1669360784Sdim        arch_type == llvm::Triple::aarch64_32) {
1670360784Sdim      return ABISP(
1671360784Sdim          new ABIMacOSX_arm64(std::move(process_sp), MakeMCRegisterInfo(arch)));
1672275072Semaste    }
1673314564Sdim  }
1674288943Sdim
1675314564Sdim  return ABISP();
1676275072Semaste}
1677275072Semaste
1678314564Sdimbool ABIMacOSX_arm64::PrepareTrivialCall(
1679314564Sdim    Thread &thread, lldb::addr_t sp, lldb::addr_t func_addr,
1680314564Sdim    lldb::addr_t return_addr, llvm::ArrayRef<lldb::addr_t> args) const {
1681314564Sdim  RegisterContext *reg_ctx = thread.GetRegisterContext().get();
1682314564Sdim  if (!reg_ctx)
1683314564Sdim    return false;
1684275072Semaste
1685314564Sdim  Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_EXPRESSIONS));
1686275072Semaste
1687314564Sdim  if (log) {
1688314564Sdim    StreamString s;
1689314564Sdim    s.Printf("ABISysV_x86_64::PrepareTrivialCall (tid = 0x%" PRIx64
1690314564Sdim             ", sp = 0x%" PRIx64 ", func_addr = 0x%" PRIx64
1691314564Sdim             ", return_addr = 0x%" PRIx64,
1692314564Sdim             thread.GetID(), (uint64_t)sp, (uint64_t)func_addr,
1693314564Sdim             (uint64_t)return_addr);
1694275072Semaste
1695314564Sdim    for (size_t i = 0; i < args.size(); ++i)
1696314564Sdim      s.Printf(", arg%d = 0x%" PRIx64, static_cast<int>(i + 1), args[i]);
1697314564Sdim    s.PutCString(")");
1698314564Sdim    log->PutString(s.GetString());
1699314564Sdim  }
1700275072Semaste
1701314564Sdim  const uint32_t pc_reg_num = reg_ctx->ConvertRegisterKindToRegisterNumber(
1702314564Sdim      eRegisterKindGeneric, LLDB_REGNUM_GENERIC_PC);
1703314564Sdim  const uint32_t sp_reg_num = reg_ctx->ConvertRegisterKindToRegisterNumber(
1704314564Sdim      eRegisterKindGeneric, LLDB_REGNUM_GENERIC_SP);
1705314564Sdim  const uint32_t ra_reg_num = reg_ctx->ConvertRegisterKindToRegisterNumber(
1706314564Sdim      eRegisterKindGeneric, LLDB_REGNUM_GENERIC_RA);
1707275072Semaste
1708314564Sdim  // x0 - x7 contain first 8 simple args
1709314564Sdim  if (args.size() > 8) // TODO handle more than 6 arguments
1710314564Sdim    return false;
1711275072Semaste
1712314564Sdim  for (size_t i = 0; i < args.size(); ++i) {
1713314564Sdim    const RegisterInfo *reg_info = reg_ctx->GetRegisterInfo(
1714314564Sdim        eRegisterKindGeneric, LLDB_REGNUM_GENERIC_ARG1 + i);
1715360784Sdim    LLDB_LOGF(log, "About to write arg%d (0x%" PRIx64 ") into %s",
1716360784Sdim              static_cast<int>(i + 1), args[i], reg_info->name);
1717314564Sdim    if (!reg_ctx->WriteRegisterFromUnsigned(reg_info, args[i]))
1718314564Sdim      return false;
1719314564Sdim  }
1720275072Semaste
1721314564Sdim  // Set "lr" to the return address
1722314564Sdim  if (!reg_ctx->WriteRegisterFromUnsigned(
1723314564Sdim          reg_ctx->GetRegisterInfoAtIndex(ra_reg_num), return_addr))
1724314564Sdim    return false;
1725275072Semaste
1726314564Sdim  // Set "sp" to the requested value
1727314564Sdim  if (!reg_ctx->WriteRegisterFromUnsigned(
1728314564Sdim          reg_ctx->GetRegisterInfoAtIndex(sp_reg_num), sp))
1729314564Sdim    return false;
1730275072Semaste
1731314564Sdim  // Set "pc" to the address requested
1732314564Sdim  if (!reg_ctx->WriteRegisterFromUnsigned(
1733314564Sdim          reg_ctx->GetRegisterInfoAtIndex(pc_reg_num), func_addr))
1734314564Sdim    return false;
1735275072Semaste
1736314564Sdim  return true;
1737275072Semaste}
1738275072Semaste
1739314564Sdimbool ABIMacOSX_arm64::GetArgumentValues(Thread &thread,
1740314564Sdim                                        ValueList &values) const {
1741314564Sdim  uint32_t num_values = values.GetSize();
1742314564Sdim
1743314564Sdim  ExecutionContext exe_ctx(thread.shared_from_this());
1744314564Sdim
1745314564Sdim  // Extract the register context so we can read arguments from registers
1746314564Sdim
1747314564Sdim  RegisterContext *reg_ctx = thread.GetRegisterContext().get();
1748314564Sdim
1749314564Sdim  if (!reg_ctx)
1750314564Sdim    return false;
1751314564Sdim
1752314564Sdim  addr_t sp = 0;
1753314564Sdim
1754314564Sdim  for (uint32_t value_idx = 0; value_idx < num_values; ++value_idx) {
1755341825Sdim    // We currently only support extracting values with Clang QualTypes. Do we
1756341825Sdim    // care about others?
1757314564Sdim    Value *value = values.GetValueAtIndex(value_idx);
1758314564Sdim
1759314564Sdim    if (!value)
1760314564Sdim      return false;
1761314564Sdim
1762314564Sdim    CompilerType value_type = value->GetCompilerType();
1763344779Sdim    llvm::Optional<uint64_t> bit_size = value_type.GetBitSize(&thread);
1764344779Sdim    if (!bit_size)
1765344779Sdim      return false;
1766314564Sdim
1767344779Sdim    bool is_signed = false;
1768344779Sdim    size_t bit_width = 0;
1769344779Sdim    if (value_type.IsIntegerOrEnumerationType(is_signed)) {
1770344779Sdim      bit_width = *bit_size;
1771344779Sdim    } else if (value_type.IsPointerOrReferenceType()) {
1772344779Sdim      bit_width = *bit_size;
1773344779Sdim    } else {
1774344779Sdim      // We only handle integer, pointer and reference types currently...
1775344779Sdim      return false;
1776344779Sdim    }
1777344779Sdim
1778344779Sdim    if (bit_width <= (exe_ctx.GetProcessRef().GetAddressByteSize() * 8)) {
1779344779Sdim      if (value_idx < 8) {
1780344779Sdim        // Arguments 1-6 are in x0-x5...
1781344779Sdim        const RegisterInfo *reg_info = nullptr;
1782344779Sdim        // Search by generic ID first, then fall back to by name
1783344779Sdim        uint32_t arg_reg_num = reg_ctx->ConvertRegisterKindToRegisterNumber(
1784344779Sdim            eRegisterKindGeneric, LLDB_REGNUM_GENERIC_ARG1 + value_idx);
1785344779Sdim        if (arg_reg_num != LLDB_INVALID_REGNUM) {
1786344779Sdim          reg_info = reg_ctx->GetRegisterInfoAtIndex(arg_reg_num);
1787344779Sdim        } else {
1788344779Sdim          switch (value_idx) {
1789344779Sdim          case 0:
1790344779Sdim            reg_info = reg_ctx->GetRegisterInfoByName("x0");
1791344779Sdim            break;
1792344779Sdim          case 1:
1793344779Sdim            reg_info = reg_ctx->GetRegisterInfoByName("x1");
1794344779Sdim            break;
1795344779Sdim          case 2:
1796344779Sdim            reg_info = reg_ctx->GetRegisterInfoByName("x2");
1797344779Sdim            break;
1798344779Sdim          case 3:
1799344779Sdim            reg_info = reg_ctx->GetRegisterInfoByName("x3");
1800344779Sdim            break;
1801344779Sdim          case 4:
1802344779Sdim            reg_info = reg_ctx->GetRegisterInfoByName("x4");
1803344779Sdim            break;
1804344779Sdim          case 5:
1805344779Sdim            reg_info = reg_ctx->GetRegisterInfoByName("x5");
1806344779Sdim            break;
1807344779Sdim          case 6:
1808344779Sdim            reg_info = reg_ctx->GetRegisterInfoByName("x6");
1809344779Sdim            break;
1810344779Sdim          case 7:
1811344779Sdim            reg_info = reg_ctx->GetRegisterInfoByName("x7");
1812344779Sdim            break;
1813314564Sdim          }
1814344779Sdim        }
1815314564Sdim
1816344779Sdim        if (reg_info) {
1817344779Sdim          RegisterValue reg_value;
1818314564Sdim
1819344779Sdim          if (reg_ctx->ReadRegister(reg_info, reg_value)) {
1820344779Sdim            if (is_signed)
1821344779Sdim              reg_value.SignExtend(bit_width);
1822344779Sdim            if (!reg_value.GetScalarValue(value->GetScalar()))
1823314564Sdim              return false;
1824344779Sdim            continue;
1825314564Sdim          }
1826344779Sdim        }
1827344779Sdim        return false;
1828344779Sdim      } else {
1829344779Sdim        if (sp == 0) {
1830344779Sdim          // Read the stack pointer if we already haven't read it
1831344779Sdim          sp = reg_ctx->GetSP(0);
1832344779Sdim          if (sp == 0)
1833314564Sdim            return false;
1834344779Sdim        }
1835314564Sdim
1836344779Sdim        // Arguments 5 on up are on the stack
1837344779Sdim        const uint32_t arg_byte_size = (bit_width + (8 - 1)) / 8;
1838344779Sdim        Status error;
1839344779Sdim        if (!exe_ctx.GetProcessRef().ReadScalarIntegerFromMemory(
1840344779Sdim                sp, arg_byte_size, is_signed, value->GetScalar(), error))
1841344779Sdim          return false;
1842344779Sdim
1843344779Sdim        sp += arg_byte_size;
1844344779Sdim        // Align up to the next 8 byte boundary if needed
1845344779Sdim        if (sp % 8) {
1846344779Sdim          sp >>= 3;
1847344779Sdim          sp += 1;
1848344779Sdim          sp <<= 3;
1849275072Semaste        }
1850314564Sdim      }
1851275072Semaste    }
1852314564Sdim  }
1853314564Sdim  return true;
1854275072Semaste}
1855275072Semaste
1856321369SdimStatus
1857321369SdimABIMacOSX_arm64::SetReturnValueObject(lldb::StackFrameSP &frame_sp,
1858321369Sdim                                      lldb::ValueObjectSP &new_value_sp) {
1859321369Sdim  Status error;
1860314564Sdim  if (!new_value_sp) {
1861314564Sdim    error.SetErrorString("Empty value object for return value.");
1862314564Sdim    return error;
1863314564Sdim  }
1864314564Sdim
1865314564Sdim  CompilerType return_value_type = new_value_sp->GetCompilerType();
1866314564Sdim  if (!return_value_type) {
1867314564Sdim    error.SetErrorString("Null clang type for return value.");
1868314564Sdim    return error;
1869314564Sdim  }
1870314564Sdim
1871314564Sdim  Thread *thread = frame_sp->GetThread().get();
1872314564Sdim
1873314564Sdim  RegisterContext *reg_ctx = thread->GetRegisterContext().get();
1874314564Sdim
1875314564Sdim  if (reg_ctx) {
1876314564Sdim    DataExtractor data;
1877321369Sdim    Status data_error;
1878314564Sdim    const uint64_t byte_size = new_value_sp->GetData(data, data_error);
1879314564Sdim    if (data_error.Fail()) {
1880314564Sdim      error.SetErrorStringWithFormat(
1881314564Sdim          "Couldn't convert return value to raw data: %s",
1882314564Sdim          data_error.AsCString());
1883314564Sdim      return error;
1884275072Semaste    }
1885275072Semaste
1886314564Sdim    const uint32_t type_flags = return_value_type.GetTypeInfo(nullptr);
1887314564Sdim    if (type_flags & eTypeIsScalar || type_flags & eTypeIsPointer) {
1888314564Sdim      if (type_flags & eTypeIsInteger || type_flags & eTypeIsPointer) {
1889314564Sdim        // Extract the register context so we can read arguments from registers
1890314564Sdim        lldb::offset_t offset = 0;
1891314564Sdim        if (byte_size <= 16) {
1892314564Sdim          const RegisterInfo *x0_info = reg_ctx->GetRegisterInfoByName("x0", 0);
1893314564Sdim          if (byte_size <= 8) {
1894314564Sdim            uint64_t raw_value = data.GetMaxU64(&offset, byte_size);
1895275072Semaste
1896314564Sdim            if (!reg_ctx->WriteRegisterFromUnsigned(x0_info, raw_value))
1897314564Sdim              error.SetErrorString("failed to write register x0");
1898314564Sdim          } else {
1899314564Sdim            uint64_t raw_value = data.GetMaxU64(&offset, 8);
1900314564Sdim
1901314564Sdim            if (reg_ctx->WriteRegisterFromUnsigned(x0_info, raw_value)) {
1902314564Sdim              const RegisterInfo *x1_info =
1903314564Sdim                  reg_ctx->GetRegisterInfoByName("x1", 0);
1904314564Sdim              raw_value = data.GetMaxU64(&offset, byte_size - offset);
1905314564Sdim
1906314564Sdim              if (!reg_ctx->WriteRegisterFromUnsigned(x1_info, raw_value))
1907314564Sdim                error.SetErrorString("failed to write register x1");
1908275072Semaste            }
1909314564Sdim          }
1910314564Sdim        } else {
1911314564Sdim          error.SetErrorString("We don't support returning longer than 128 bit "
1912314564Sdim                               "integer values at present.");
1913314564Sdim        }
1914314564Sdim      } else if (type_flags & eTypeIsFloat) {
1915314564Sdim        if (type_flags & eTypeIsComplex) {
1916314564Sdim          // Don't handle complex yet.
1917314564Sdim          error.SetErrorString(
1918314564Sdim              "returning complex float values are not supported");
1919314564Sdim        } else {
1920314564Sdim          const RegisterInfo *v0_info = reg_ctx->GetRegisterInfoByName("v0", 0);
1921275072Semaste
1922314564Sdim          if (v0_info) {
1923314564Sdim            if (byte_size <= 16) {
1924314564Sdim              if (byte_size <= RegisterValue::GetMaxByteSize()) {
1925314564Sdim                RegisterValue reg_value;
1926314564Sdim                error = reg_value.SetValueFromData(v0_info, data, 0, true);
1927314564Sdim                if (error.Success()) {
1928314564Sdim                  if (!reg_ctx->WriteRegister(v0_info, reg_value))
1929314564Sdim                    error.SetErrorString("failed to write register v0");
1930275072Semaste                }
1931314564Sdim              } else {
1932314564Sdim                error.SetErrorStringWithFormat(
1933314564Sdim                    "returning float values with a byte size of %" PRIu64
1934314564Sdim                    " are not supported",
1935314564Sdim                    byte_size);
1936314564Sdim              }
1937314564Sdim            } else {
1938314564Sdim              error.SetErrorString("returning float values longer than 128 "
1939314564Sdim                                   "bits are not supported");
1940275072Semaste            }
1941314564Sdim          } else {
1942314564Sdim            error.SetErrorString("v0 register is not available on this target");
1943314564Sdim          }
1944275072Semaste        }
1945314564Sdim      }
1946314564Sdim    } else if (type_flags & eTypeIsVector) {
1947314564Sdim      if (byte_size > 0) {
1948314564Sdim        const RegisterInfo *v0_info = reg_ctx->GetRegisterInfoByName("v0", 0);
1949314564Sdim
1950314564Sdim        if (v0_info) {
1951314564Sdim          if (byte_size <= v0_info->byte_size) {
1952314564Sdim            RegisterValue reg_value;
1953314564Sdim            error = reg_value.SetValueFromData(v0_info, data, 0, true);
1954314564Sdim            if (error.Success()) {
1955314564Sdim              if (!reg_ctx->WriteRegister(v0_info, reg_value))
1956314564Sdim                error.SetErrorString("failed to write register v0");
1957275072Semaste            }
1958314564Sdim          }
1959275072Semaste        }
1960314564Sdim      }
1961275072Semaste    }
1962314564Sdim  } else {
1963314564Sdim    error.SetErrorString("no registers are available");
1964314564Sdim  }
1965314564Sdim
1966314564Sdim  return error;
1967275072Semaste}
1968275072Semaste
1969314564Sdimbool ABIMacOSX_arm64::CreateFunctionEntryUnwindPlan(UnwindPlan &unwind_plan) {
1970314564Sdim  unwind_plan.Clear();
1971314564Sdim  unwind_plan.SetRegisterKind(eRegisterKindDWARF);
1972275072Semaste
1973314564Sdim  uint32_t lr_reg_num = arm64_dwarf::lr;
1974314564Sdim  uint32_t sp_reg_num = arm64_dwarf::sp;
1975314564Sdim  uint32_t pc_reg_num = arm64_dwarf::pc;
1976314564Sdim
1977314564Sdim  UnwindPlan::RowSP row(new UnwindPlan::Row);
1978314564Sdim
1979314564Sdim  // Our previous Call Frame Address is the stack pointer
1980314564Sdim  row->GetCFAValue().SetIsRegisterPlusOffset(sp_reg_num, 0);
1981314564Sdim
1982314564Sdim  // Our previous PC is in the LR
1983314564Sdim  row->SetRegisterLocationToRegister(pc_reg_num, lr_reg_num, true);
1984314564Sdim
1985314564Sdim  unwind_plan.AppendRow(row);
1986314564Sdim
1987314564Sdim  // All other registers are the same.
1988314564Sdim
1989314564Sdim  unwind_plan.SetSourceName("arm64 at-func-entry default");
1990314564Sdim  unwind_plan.SetSourcedFromCompiler(eLazyBoolNo);
1991314564Sdim
1992314564Sdim  return true;
1993275072Semaste}
1994275072Semaste
1995314564Sdimbool ABIMacOSX_arm64::CreateDefaultUnwindPlan(UnwindPlan &unwind_plan) {
1996314564Sdim  unwind_plan.Clear();
1997314564Sdim  unwind_plan.SetRegisterKind(eRegisterKindDWARF);
1998275072Semaste
1999314564Sdim  uint32_t fp_reg_num = arm64_dwarf::fp;
2000314564Sdim  uint32_t pc_reg_num = arm64_dwarf::pc;
2001314564Sdim
2002314564Sdim  UnwindPlan::RowSP row(new UnwindPlan::Row);
2003314564Sdim  const int32_t ptr_size = 8;
2004314564Sdim
2005314564Sdim  row->GetCFAValue().SetIsRegisterPlusOffset(fp_reg_num, 2 * ptr_size);
2006314564Sdim  row->SetOffset(0);
2007314564Sdim
2008314564Sdim  row->SetRegisterLocationToAtCFAPlusOffset(fp_reg_num, ptr_size * -2, true);
2009314564Sdim  row->SetRegisterLocationToAtCFAPlusOffset(pc_reg_num, ptr_size * -1, true);
2010314564Sdim
2011314564Sdim  unwind_plan.AppendRow(row);
2012314564Sdim  unwind_plan.SetSourceName("arm64-apple-darwin default unwind plan");
2013314564Sdim  unwind_plan.SetSourcedFromCompiler(eLazyBoolNo);
2014314564Sdim  unwind_plan.SetUnwindPlanValidAtAllInstructions(eLazyBoolNo);
2015360784Sdim  unwind_plan.SetUnwindPlanForSignalTrap(eLazyBoolNo);
2016314564Sdim  return true;
2017275072Semaste}
2018275072Semaste
2019314564Sdim// AAPCS64 (Procedure Call Standard for the ARM 64-bit Architecture) says
2020341825Sdim// registers x19 through x28 and sp are callee preserved. v8-v15 are non-
2021341825Sdim// volatile (and specifically only the lower 8 bytes of these regs), the rest
2022341825Sdim// of the fp/SIMD registers are volatile.
2023360784Sdim//
2024360784Sdim// v. https://github.com/ARM-software/software-standards/blob/master/abi/aapcs64/
2025275072Semaste
2026275072Semaste// We treat x29 as callee preserved also, else the unwinder won't try to
2027275072Semaste// retrieve fp saves.
2028275072Semaste
2029314564Sdimbool ABIMacOSX_arm64::RegisterIsVolatile(const RegisterInfo *reg_info) {
2030314564Sdim  if (reg_info) {
2031314564Sdim    const char *name = reg_info->name;
2032275072Semaste
2033314564Sdim    // Sometimes we'll be called with the "alternate" name for these registers;
2034314564Sdim    // recognize them as non-volatile.
2035275072Semaste
2036314564Sdim    if (name[0] == 'p' && name[1] == 'c') // pc
2037314564Sdim      return false;
2038314564Sdim    if (name[0] == 'f' && name[1] == 'p') // fp
2039314564Sdim      return false;
2040314564Sdim    if (name[0] == 's' && name[1] == 'p') // sp
2041314564Sdim      return false;
2042314564Sdim    if (name[0] == 'l' && name[1] == 'r') // lr
2043314564Sdim      return false;
2044275072Semaste
2045314564Sdim    if (name[0] == 'x') {
2046314564Sdim      // Volatile registers: x0-x18, x30 (lr)
2047314564Sdim      // Return false for the non-volatile gpr regs, true for everything else
2048314564Sdim      switch (name[1]) {
2049314564Sdim      case '1':
2050314564Sdim        switch (name[2]) {
2051314564Sdim        case '9':
2052314564Sdim          return false; // x19 is non-volatile
2053314564Sdim        default:
2054314564Sdim          return true;
2055275072Semaste        }
2056314564Sdim        break;
2057314564Sdim      case '2':
2058314564Sdim        switch (name[2]) {
2059314564Sdim        case '0':
2060314564Sdim        case '1':
2061314564Sdim        case '2':
2062314564Sdim        case '3':
2063314564Sdim        case '4':
2064314564Sdim        case '5':
2065314564Sdim        case '6':
2066314564Sdim        case '7':
2067314564Sdim        case '8':
2068314564Sdim          return false; // x20 - 28 are non-volatile
2069314564Sdim        case '9':
2070314564Sdim          return false; // x29 aka fp treat as non-volatile on Darwin
2071314564Sdim        default:
2072314564Sdim          return true;
2073275072Semaste        }
2074314564Sdim      case '3': // x30 aka lr treat as non-volatile
2075314564Sdim        if (name[2] == '0')
2076314564Sdim          return false;
2077314564Sdim        break;
2078314564Sdim      default:
2079314564Sdim        return true;
2080314564Sdim      }
2081314564Sdim    } else if (name[0] == 'v' || name[0] == 's' || name[0] == 'd') {
2082314564Sdim      // Volatile registers: v0-7, v16-v31
2083314564Sdim      // Return false for non-volatile fp/SIMD regs, true for everything else
2084314564Sdim      switch (name[1]) {
2085314564Sdim      case '8':
2086314564Sdim      case '9':
2087314564Sdim        return false; // v8-v9 are non-volatile
2088314564Sdim      case '1':
2089314564Sdim        switch (name[2]) {
2090314564Sdim        case '0':
2091314564Sdim        case '1':
2092314564Sdim        case '2':
2093314564Sdim        case '3':
2094314564Sdim        case '4':
2095314564Sdim        case '5':
2096314564Sdim          return false; // v10-v15 are non-volatile
2097314564Sdim        default:
2098314564Sdim          return true;
2099314564Sdim        }
2100314564Sdim      default:
2101314564Sdim        return true;
2102314564Sdim      }
2103275072Semaste    }
2104314564Sdim  }
2105314564Sdim  return true;
2106275072Semaste}
2107275072Semaste
2108314564Sdimstatic bool LoadValueFromConsecutiveGPRRegisters(
2109314564Sdim    ExecutionContext &exe_ctx, RegisterContext *reg_ctx,
2110314564Sdim    const CompilerType &value_type,
2111314564Sdim    bool is_return_value, // false => parameter, true => return value
2112314564Sdim    uint32_t &NGRN,       // NGRN (see ABI documentation)
2113314564Sdim    uint32_t &NSRN,       // NSRN (see ABI documentation)
2114314564Sdim    DataExtractor &data) {
2115344779Sdim  llvm::Optional<uint64_t> byte_size = value_type.GetByteSize(nullptr);
2116344779Sdim  if (!byte_size || *byte_size == 0)
2117314564Sdim    return false;
2118314564Sdim
2119353358Sdim  std::unique_ptr<DataBufferHeap> heap_data_up(
2120344779Sdim      new DataBufferHeap(*byte_size, 0));
2121314564Sdim  const ByteOrder byte_order = exe_ctx.GetProcessRef().GetByteOrder();
2122321369Sdim  Status error;
2123314564Sdim
2124314564Sdim  CompilerType base_type;
2125314564Sdim  const uint32_t homogeneous_count =
2126314564Sdim      value_type.IsHomogeneousAggregate(&base_type);
2127314564Sdim  if (homogeneous_count > 0 && homogeneous_count <= 8) {
2128314564Sdim    // Make sure we have enough registers
2129314564Sdim    if (NSRN < 8 && (8 - NSRN) >= homogeneous_count) {
2130314564Sdim      if (!base_type)
2131275072Semaste        return false;
2132344779Sdim      llvm::Optional<uint64_t> base_byte_size = base_type.GetByteSize(nullptr);
2133344779Sdim      if (!base_byte_size)
2134344779Sdim        return false;
2135314564Sdim      uint32_t data_offset = 0;
2136275072Semaste
2137314564Sdim      for (uint32_t i = 0; i < homogeneous_count; ++i) {
2138314564Sdim        char v_name[8];
2139314564Sdim        ::snprintf(v_name, sizeof(v_name), "v%u", NSRN);
2140314564Sdim        const RegisterInfo *reg_info =
2141314564Sdim            reg_ctx->GetRegisterInfoByName(v_name, 0);
2142314564Sdim        if (reg_info == nullptr)
2143314564Sdim          return false;
2144275072Semaste
2145344779Sdim        if (*base_byte_size > reg_info->byte_size)
2146314564Sdim          return false;
2147275072Semaste
2148314564Sdim        RegisterValue reg_value;
2149314564Sdim
2150314564Sdim        if (!reg_ctx->ReadRegister(reg_info, reg_value))
2151314564Sdim          return false;
2152314564Sdim
2153353358Sdim        // Make sure we have enough room in "heap_data_up"
2154353358Sdim        if ((data_offset + *base_byte_size) <= heap_data_up->GetByteSize()) {
2155314564Sdim          const size_t bytes_copied = reg_value.GetAsMemoryData(
2156353358Sdim              reg_info, heap_data_up->GetBytes() + data_offset, *base_byte_size,
2157314564Sdim              byte_order, error);
2158344779Sdim          if (bytes_copied != *base_byte_size)
2159314564Sdim            return false;
2160314564Sdim          data_offset += bytes_copied;
2161314564Sdim          ++NSRN;
2162314564Sdim        } else
2163314564Sdim          return false;
2164314564Sdim      }
2165314564Sdim      data.SetByteOrder(byte_order);
2166314564Sdim      data.SetAddressByteSize(exe_ctx.GetProcessRef().GetAddressByteSize());
2167353358Sdim      data.SetData(DataBufferSP(heap_data_up.release()));
2168314564Sdim      return true;
2169275072Semaste    }
2170314564Sdim  }
2171275072Semaste
2172314564Sdim  const size_t max_reg_byte_size = 16;
2173344779Sdim  if (*byte_size <= max_reg_byte_size) {
2174344779Sdim    size_t bytes_left = *byte_size;
2175314564Sdim    uint32_t data_offset = 0;
2176344779Sdim    while (data_offset < *byte_size) {
2177314564Sdim      if (NGRN >= 8)
2178314564Sdim        return false;
2179275072Semaste
2180314564Sdim      uint32_t reg_num = reg_ctx->ConvertRegisterKindToRegisterNumber(
2181314564Sdim          eRegisterKindGeneric, LLDB_REGNUM_GENERIC_ARG1 + NGRN);
2182314564Sdim      if (reg_num == LLDB_INVALID_REGNUM)
2183314564Sdim        return false;
2184314564Sdim
2185314564Sdim      const RegisterInfo *reg_info = reg_ctx->GetRegisterInfoAtIndex(reg_num);
2186314564Sdim      if (reg_info == nullptr)
2187314564Sdim        return false;
2188314564Sdim
2189314564Sdim      RegisterValue reg_value;
2190314564Sdim
2191314564Sdim      if (!reg_ctx->ReadRegister(reg_info, reg_value))
2192314564Sdim        return false;
2193314564Sdim
2194314564Sdim      const size_t curr_byte_size = std::min<size_t>(8, bytes_left);
2195314564Sdim      const size_t bytes_copied = reg_value.GetAsMemoryData(
2196353358Sdim          reg_info, heap_data_up->GetBytes() + data_offset, curr_byte_size,
2197314564Sdim          byte_order, error);
2198314564Sdim      if (bytes_copied == 0)
2199314564Sdim        return false;
2200314564Sdim      if (bytes_copied >= bytes_left)
2201314564Sdim        break;
2202314564Sdim      data_offset += bytes_copied;
2203314564Sdim      bytes_left -= bytes_copied;
2204314564Sdim      ++NGRN;
2205275072Semaste    }
2206314564Sdim  } else {
2207314564Sdim    const RegisterInfo *reg_info = nullptr;
2208314564Sdim    if (is_return_value) {
2209341825Sdim      // We are assuming we are decoding this immediately after returning from
2210341825Sdim      // a function call and that the address of the structure is in x8
2211314564Sdim      reg_info = reg_ctx->GetRegisterInfoByName("x8", 0);
2212314564Sdim    } else {
2213314564Sdim      // We are assuming we are stopped at the first instruction in a function
2214341825Sdim      // and that the ABI is being respected so all parameters appear where
2215341825Sdim      // they should be (functions with no external linkage can legally violate
2216341825Sdim      // the ABI).
2217314564Sdim      if (NGRN >= 8)
2218314564Sdim        return false;
2219275072Semaste
2220314564Sdim      uint32_t reg_num = reg_ctx->ConvertRegisterKindToRegisterNumber(
2221314564Sdim          eRegisterKindGeneric, LLDB_REGNUM_GENERIC_ARG1 + NGRN);
2222314564Sdim      if (reg_num == LLDB_INVALID_REGNUM)
2223314564Sdim        return false;
2224314564Sdim      reg_info = reg_ctx->GetRegisterInfoAtIndex(reg_num);
2225314564Sdim      if (reg_info == nullptr)
2226314564Sdim        return false;
2227314564Sdim      ++NGRN;
2228314564Sdim    }
2229275072Semaste
2230314564Sdim    if (reg_info == nullptr)
2231314564Sdim      return false;
2232275072Semaste
2233314564Sdim    const lldb::addr_t value_addr =
2234314564Sdim        reg_ctx->ReadRegisterAsUnsigned(reg_info, LLDB_INVALID_ADDRESS);
2235275072Semaste
2236314564Sdim    if (value_addr == LLDB_INVALID_ADDRESS)
2237314564Sdim      return false;
2238314564Sdim
2239314564Sdim    if (exe_ctx.GetProcessRef().ReadMemory(
2240353358Sdim            value_addr, heap_data_up->GetBytes(), heap_data_up->GetByteSize(),
2241353358Sdim            error) != heap_data_up->GetByteSize()) {
2242314564Sdim      return false;
2243275072Semaste    }
2244314564Sdim  }
2245275072Semaste
2246314564Sdim  data.SetByteOrder(byte_order);
2247314564Sdim  data.SetAddressByteSize(exe_ctx.GetProcessRef().GetAddressByteSize());
2248353358Sdim  data.SetData(DataBufferSP(heap_data_up.release()));
2249314564Sdim  return true;
2250275072Semaste}
2251275072Semaste
2252314564SdimValueObjectSP ABIMacOSX_arm64::GetReturnValueObjectImpl(
2253314564Sdim    Thread &thread, CompilerType &return_compiler_type) const {
2254314564Sdim  ValueObjectSP return_valobj_sp;
2255314564Sdim  Value value;
2256275072Semaste
2257314564Sdim  ExecutionContext exe_ctx(thread.shared_from_this());
2258314564Sdim  if (exe_ctx.GetTargetPtr() == nullptr || exe_ctx.GetProcessPtr() == nullptr)
2259314564Sdim    return return_valobj_sp;
2260275072Semaste
2261314564Sdim  // value.SetContext (Value::eContextTypeClangType, return_compiler_type);
2262314564Sdim  value.SetCompilerType(return_compiler_type);
2263314564Sdim
2264314564Sdim  RegisterContext *reg_ctx = thread.GetRegisterContext().get();
2265314564Sdim  if (!reg_ctx)
2266314564Sdim    return return_valobj_sp;
2267314564Sdim
2268344779Sdim  llvm::Optional<uint64_t> byte_size =
2269344779Sdim      return_compiler_type.GetByteSize(nullptr);
2270344779Sdim  if (!byte_size)
2271344779Sdim    return return_valobj_sp;
2272314564Sdim
2273314564Sdim  const uint32_t type_flags = return_compiler_type.GetTypeInfo(nullptr);
2274314564Sdim  if (type_flags & eTypeIsScalar || type_flags & eTypeIsPointer) {
2275314564Sdim    value.SetValueType(Value::eValueTypeScalar);
2276314564Sdim
2277314564Sdim    bool success = false;
2278314564Sdim    if (type_flags & eTypeIsInteger || type_flags & eTypeIsPointer) {
2279314564Sdim      // Extract the register context so we can read arguments from registers
2280344779Sdim      if (*byte_size <= 8) {
2281314564Sdim        const RegisterInfo *x0_reg_info =
2282314564Sdim            reg_ctx->GetRegisterInfoByName("x0", 0);
2283314564Sdim        if (x0_reg_info) {
2284314564Sdim          uint64_t raw_value =
2285314564Sdim              thread.GetRegisterContext()->ReadRegisterAsUnsigned(x0_reg_info,
2286314564Sdim                                                                  0);
2287314564Sdim          const bool is_signed = (type_flags & eTypeIsSigned) != 0;
2288344779Sdim          switch (*byte_size) {
2289314564Sdim          default:
2290314564Sdim            break;
2291314564Sdim          case 16: // uint128_t
2292314564Sdim            // In register x0 and x1
2293275072Semaste            {
2294314564Sdim              const RegisterInfo *x1_reg_info =
2295314564Sdim                  reg_ctx->GetRegisterInfoByName("x1", 0);
2296314564Sdim
2297314564Sdim              if (x1_reg_info) {
2298344779Sdim                if (*byte_size <=
2299314564Sdim                    x0_reg_info->byte_size + x1_reg_info->byte_size) {
2300353358Sdim                  std::unique_ptr<DataBufferHeap> heap_data_up(
2301344779Sdim                      new DataBufferHeap(*byte_size, 0));
2302314564Sdim                  const ByteOrder byte_order =
2303314564Sdim                      exe_ctx.GetProcessRef().GetByteOrder();
2304314564Sdim                  RegisterValue x0_reg_value;
2305314564Sdim                  RegisterValue x1_reg_value;
2306314564Sdim                  if (reg_ctx->ReadRegister(x0_reg_info, x0_reg_value) &&
2307314564Sdim                      reg_ctx->ReadRegister(x1_reg_info, x1_reg_value)) {
2308321369Sdim                    Status error;
2309314564Sdim                    if (x0_reg_value.GetAsMemoryData(
2310353358Sdim                            x0_reg_info, heap_data_up->GetBytes() + 0, 8,
2311314564Sdim                            byte_order, error) &&
2312314564Sdim                        x1_reg_value.GetAsMemoryData(
2313353358Sdim                            x1_reg_info, heap_data_up->GetBytes() + 8, 8,
2314314564Sdim                            byte_order, error)) {
2315314564Sdim                      DataExtractor data(
2316353358Sdim                          DataBufferSP(heap_data_up.release()), byte_order,
2317314564Sdim                          exe_ctx.GetProcessRef().GetAddressByteSize());
2318314564Sdim
2319314564Sdim                      return_valobj_sp = ValueObjectConstResult::Create(
2320314564Sdim                          &thread, return_compiler_type, ConstString(""), data);
2321314564Sdim                      return return_valobj_sp;
2322275072Semaste                    }
2323314564Sdim                  }
2324275072Semaste                }
2325314564Sdim              }
2326275072Semaste            }
2327314564Sdim            break;
2328314564Sdim          case sizeof(uint64_t):
2329314564Sdim            if (is_signed)
2330314564Sdim              value.GetScalar() = (int64_t)(raw_value);
2331314564Sdim            else
2332314564Sdim              value.GetScalar() = (uint64_t)(raw_value);
2333314564Sdim            success = true;
2334314564Sdim            break;
2335314564Sdim
2336314564Sdim          case sizeof(uint32_t):
2337314564Sdim            if (is_signed)
2338314564Sdim              value.GetScalar() = (int32_t)(raw_value & UINT32_MAX);
2339314564Sdim            else
2340314564Sdim              value.GetScalar() = (uint32_t)(raw_value & UINT32_MAX);
2341314564Sdim            success = true;
2342314564Sdim            break;
2343314564Sdim
2344314564Sdim          case sizeof(uint16_t):
2345314564Sdim            if (is_signed)
2346314564Sdim              value.GetScalar() = (int16_t)(raw_value & UINT16_MAX);
2347314564Sdim            else
2348314564Sdim              value.GetScalar() = (uint16_t)(raw_value & UINT16_MAX);
2349314564Sdim            success = true;
2350314564Sdim            break;
2351314564Sdim
2352314564Sdim          case sizeof(uint8_t):
2353314564Sdim            if (is_signed)
2354314564Sdim              value.GetScalar() = (int8_t)(raw_value & UINT8_MAX);
2355314564Sdim            else
2356314564Sdim              value.GetScalar() = (uint8_t)(raw_value & UINT8_MAX);
2357314564Sdim            success = true;
2358314564Sdim            break;
2359314564Sdim          }
2360275072Semaste        }
2361314564Sdim      }
2362314564Sdim    } else if (type_flags & eTypeIsFloat) {
2363314564Sdim      if (type_flags & eTypeIsComplex) {
2364314564Sdim        // Don't handle complex yet.
2365314564Sdim      } else {
2366344779Sdim        if (*byte_size <= sizeof(long double)) {
2367314564Sdim          const RegisterInfo *v0_reg_info =
2368314564Sdim              reg_ctx->GetRegisterInfoByName("v0", 0);
2369314564Sdim          RegisterValue v0_value;
2370314564Sdim          if (reg_ctx->ReadRegister(v0_reg_info, v0_value)) {
2371314564Sdim            DataExtractor data;
2372314564Sdim            if (v0_value.GetData(data)) {
2373314564Sdim              lldb::offset_t offset = 0;
2374344779Sdim              if (*byte_size == sizeof(float)) {
2375314564Sdim                value.GetScalar() = data.GetFloat(&offset);
2376314564Sdim                success = true;
2377344779Sdim              } else if (*byte_size == sizeof(double)) {
2378314564Sdim                value.GetScalar() = data.GetDouble(&offset);
2379314564Sdim                success = true;
2380344779Sdim              } else if (*byte_size == sizeof(long double)) {
2381314564Sdim                value.GetScalar() = data.GetLongDouble(&offset);
2382314564Sdim                success = true;
2383314564Sdim              }
2384275072Semaste            }
2385314564Sdim          }
2386275072Semaste        }
2387314564Sdim      }
2388275072Semaste    }
2389314564Sdim
2390314564Sdim    if (success)
2391314564Sdim      return_valobj_sp = ValueObjectConstResult::Create(
2392314564Sdim          thread.GetStackFrameAtIndex(0).get(), value, ConstString(""));
2393314564Sdim  } else if (type_flags & eTypeIsVector) {
2394344779Sdim    if (*byte_size > 0) {
2395314564Sdim
2396314564Sdim      const RegisterInfo *v0_info = reg_ctx->GetRegisterInfoByName("v0", 0);
2397314564Sdim
2398314564Sdim      if (v0_info) {
2399344779Sdim        if (*byte_size <= v0_info->byte_size) {
2400353358Sdim          std::unique_ptr<DataBufferHeap> heap_data_up(
2401344779Sdim              new DataBufferHeap(*byte_size, 0));
2402314564Sdim          const ByteOrder byte_order = exe_ctx.GetProcessRef().GetByteOrder();
2403314564Sdim          RegisterValue reg_value;
2404314564Sdim          if (reg_ctx->ReadRegister(v0_info, reg_value)) {
2405321369Sdim            Status error;
2406353358Sdim            if (reg_value.GetAsMemoryData(v0_info, heap_data_up->GetBytes(),
2407353358Sdim                                          heap_data_up->GetByteSize(),
2408314564Sdim                                          byte_order, error)) {
2409353358Sdim              DataExtractor data(DataBufferSP(heap_data_up.release()),
2410314564Sdim                                 byte_order,
2411314564Sdim                                 exe_ctx.GetProcessRef().GetAddressByteSize());
2412314564Sdim              return_valobj_sp = ValueObjectConstResult::Create(
2413314564Sdim                  &thread, return_compiler_type, ConstString(""), data);
2414275072Semaste            }
2415314564Sdim          }
2416275072Semaste        }
2417314564Sdim      }
2418275072Semaste    }
2419314564Sdim  } else if (type_flags & eTypeIsStructUnion || type_flags & eTypeIsClass) {
2420314564Sdim    DataExtractor data;
2421314564Sdim
2422314564Sdim    uint32_t NGRN = 0; // Search ABI docs for NGRN
2423314564Sdim    uint32_t NSRN = 0; // Search ABI docs for NSRN
2424314564Sdim    const bool is_return_value = true;
2425314564Sdim    if (LoadValueFromConsecutiveGPRRegisters(
2426314564Sdim            exe_ctx, reg_ctx, return_compiler_type, is_return_value, NGRN, NSRN,
2427314564Sdim            data)) {
2428314564Sdim      return_valobj_sp = ValueObjectConstResult::Create(
2429314564Sdim          &thread, return_compiler_type, ConstString(""), data);
2430275072Semaste    }
2431314564Sdim  }
2432314564Sdim  return return_valobj_sp;
2433275072Semaste}
2434275072Semaste
2435314564Sdimvoid ABIMacOSX_arm64::Initialize() {
2436314564Sdim  PluginManager::RegisterPlugin(GetPluginNameStatic(), pluginDesc,
2437314564Sdim                                CreateInstance);
2438275072Semaste}
2439275072Semaste
2440314564Sdimvoid ABIMacOSX_arm64::Terminate() {
2441314564Sdim  PluginManager::UnregisterPlugin(CreateInstance);
2442275072Semaste}
2443275072Semaste
2444275072Semaste// PluginInterface protocol
2445309124Sdim
2446314564SdimConstString ABIMacOSX_arm64::GetPluginNameStatic() {
2447314564Sdim  static ConstString g_plugin_name("ABIMacOSX_arm64");
2448314564Sdim  return g_plugin_name;
2449275072Semaste}
2450275072Semaste
2451314564Sdimuint32_t ABIMacOSX_arm64::GetPluginVersion() { return 1; }
2452