ABIMacOSX_arm64.cpp revision 321369
1275072Semaste//===-- ABIMacOSX_arm64.cpp -------------------------------------*- C++ -*-===//
2275072Semaste//
3275072Semaste//                     The LLVM Compiler Infrastructure
4275072Semaste//
5275072Semaste// This file is distributed under the University of Illinois Open Source
6275072Semaste// License. See LICENSE.TXT for details.
7275072Semaste//
8275072Semaste//===----------------------------------------------------------------------===//
9275072Semaste
10275072Semaste#include "ABIMacOSX_arm64.h"
11275072Semaste
12309124Sdim// C Includes
13309124Sdim// C++ Includes
14309124Sdim#include <vector>
15309124Sdim
16309124Sdim// Other libraries and framework includes
17309124Sdim#include "llvm/ADT/STLExtras.h"
18309124Sdim#include "llvm/ADT/Triple.h"
19309124Sdim
20275072Semaste#include "lldb/Core/Module.h"
21275072Semaste#include "lldb/Core/PluginManager.h"
22275072Semaste#include "lldb/Core/RegisterValue.h"
23275072Semaste#include "lldb/Core/Scalar.h"
24275072Semaste#include "lldb/Core/Value.h"
25275072Semaste#include "lldb/Core/ValueObjectConstResult.h"
26275072Semaste#include "lldb/Symbol/UnwindPlan.h"
27275072Semaste#include "lldb/Target/Process.h"
28275072Semaste#include "lldb/Target/RegisterContext.h"
29275072Semaste#include "lldb/Target/Target.h"
30275072Semaste#include "lldb/Target/Thread.h"
31321369Sdim#include "lldb/Utility/ConstString.h"
32321369Sdim#include "lldb/Utility/Log.h"
33321369Sdim#include "lldb/Utility/Status.h"
34275072Semaste
35275072Semaste#include "Utility/ARM64_DWARF_Registers.h"
36275072Semaste
37275072Semasteusing namespace lldb;
38275072Semasteusing namespace lldb_private;
39275072Semaste
40275072Semastestatic const char *pluginDesc = "Mac OS X ABI for arm64 targets";
41275072Semaste
42314564Sdimstatic RegisterInfo g_register_infos[] = {
43314564Sdim    //  NAME       ALT       SZ OFF ENCODING          FORMAT
44314564Sdim    //  EH_FRAME             DWARF                  GENERIC
45314564Sdim    //  PROCESS PLUGIN          LLDB NATIVE
46314564Sdim    //  ========== =======   == === =============     ===================
47314564Sdim    //  ===================  ====================== ===========================
48314564Sdim    //  ======================= ======================
49314564Sdim    {"x0",
50314564Sdim     nullptr,
51314564Sdim     8,
52314564Sdim     0,
53314564Sdim     eEncodingUint,
54314564Sdim     eFormatHex,
55314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x0, LLDB_REGNUM_GENERIC_ARG1,
56314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
57314564Sdim     nullptr,
58314564Sdim     nullptr,
59314564Sdim     nullptr,
60314564Sdim     0},
61314564Sdim    {"x1",
62314564Sdim     nullptr,
63314564Sdim     8,
64314564Sdim     0,
65314564Sdim     eEncodingUint,
66314564Sdim     eFormatHex,
67314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x1, LLDB_REGNUM_GENERIC_ARG2,
68314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
69314564Sdim     nullptr,
70314564Sdim     nullptr,
71314564Sdim     nullptr,
72314564Sdim     0},
73314564Sdim    {"x2",
74314564Sdim     nullptr,
75314564Sdim     8,
76314564Sdim     0,
77314564Sdim     eEncodingUint,
78314564Sdim     eFormatHex,
79314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x2, LLDB_REGNUM_GENERIC_ARG3,
80314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
81314564Sdim     nullptr,
82314564Sdim     nullptr,
83314564Sdim     nullptr,
84314564Sdim     0},
85314564Sdim    {"x3",
86314564Sdim     nullptr,
87314564Sdim     8,
88314564Sdim     0,
89314564Sdim     eEncodingUint,
90314564Sdim     eFormatHex,
91314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x3, LLDB_REGNUM_GENERIC_ARG4,
92314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
93314564Sdim     nullptr,
94314564Sdim     nullptr,
95314564Sdim     nullptr,
96314564Sdim     0},
97314564Sdim    {"x4",
98314564Sdim     nullptr,
99314564Sdim     8,
100314564Sdim     0,
101314564Sdim     eEncodingUint,
102314564Sdim     eFormatHex,
103314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x4, LLDB_REGNUM_GENERIC_ARG5,
104314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
105314564Sdim     nullptr,
106314564Sdim     nullptr,
107314564Sdim     nullptr,
108314564Sdim     0},
109314564Sdim    {"x5",
110314564Sdim     nullptr,
111314564Sdim     8,
112314564Sdim     0,
113314564Sdim     eEncodingUint,
114314564Sdim     eFormatHex,
115314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x5, LLDB_REGNUM_GENERIC_ARG6,
116314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
117314564Sdim     nullptr,
118314564Sdim     nullptr,
119314564Sdim     nullptr,
120314564Sdim     0},
121314564Sdim    {"x6",
122314564Sdim     nullptr,
123314564Sdim     8,
124314564Sdim     0,
125314564Sdim     eEncodingUint,
126314564Sdim     eFormatHex,
127314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x6, LLDB_REGNUM_GENERIC_ARG7,
128314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
129314564Sdim     nullptr,
130314564Sdim     nullptr,
131314564Sdim     nullptr,
132314564Sdim     0},
133314564Sdim    {"x7",
134314564Sdim     nullptr,
135314564Sdim     8,
136314564Sdim     0,
137314564Sdim     eEncodingUint,
138314564Sdim     eFormatHex,
139314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x7, LLDB_REGNUM_GENERIC_ARG8,
140314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
141314564Sdim     nullptr,
142314564Sdim     nullptr,
143314564Sdim     nullptr,
144314564Sdim     0},
145314564Sdim    {"x8",
146314564Sdim     nullptr,
147314564Sdim     8,
148314564Sdim     0,
149314564Sdim     eEncodingUint,
150314564Sdim     eFormatHex,
151314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x8, LLDB_INVALID_REGNUM,
152314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
153314564Sdim     nullptr,
154314564Sdim     nullptr,
155314564Sdim     nullptr,
156314564Sdim     0},
157314564Sdim    {"x9",
158314564Sdim     nullptr,
159314564Sdim     8,
160314564Sdim     0,
161314564Sdim     eEncodingUint,
162314564Sdim     eFormatHex,
163314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x9, LLDB_INVALID_REGNUM,
164314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
165314564Sdim     nullptr,
166314564Sdim     nullptr,
167314564Sdim     nullptr,
168314564Sdim     0},
169314564Sdim    {"x10",
170314564Sdim     nullptr,
171314564Sdim     8,
172314564Sdim     0,
173314564Sdim     eEncodingUint,
174314564Sdim     eFormatHex,
175314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x10, LLDB_INVALID_REGNUM,
176314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
177314564Sdim     nullptr,
178314564Sdim     nullptr,
179314564Sdim     nullptr,
180314564Sdim     0},
181314564Sdim    {"x11",
182314564Sdim     nullptr,
183314564Sdim     8,
184314564Sdim     0,
185314564Sdim     eEncodingUint,
186314564Sdim     eFormatHex,
187314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x11, LLDB_INVALID_REGNUM,
188314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
189314564Sdim     nullptr,
190314564Sdim     nullptr,
191314564Sdim     nullptr,
192314564Sdim     0},
193314564Sdim    {"x12",
194314564Sdim     nullptr,
195314564Sdim     8,
196314564Sdim     0,
197314564Sdim     eEncodingUint,
198314564Sdim     eFormatHex,
199314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x12, LLDB_INVALID_REGNUM,
200314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
201314564Sdim     nullptr,
202314564Sdim     nullptr,
203314564Sdim     nullptr,
204314564Sdim     0},
205314564Sdim    {"x13",
206314564Sdim     nullptr,
207314564Sdim     8,
208314564Sdim     0,
209314564Sdim     eEncodingUint,
210314564Sdim     eFormatHex,
211314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x13, LLDB_INVALID_REGNUM,
212314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
213314564Sdim     nullptr,
214314564Sdim     nullptr,
215314564Sdim     nullptr,
216314564Sdim     0},
217314564Sdim    {"x14",
218314564Sdim     nullptr,
219314564Sdim     8,
220314564Sdim     0,
221314564Sdim     eEncodingUint,
222314564Sdim     eFormatHex,
223314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x14, LLDB_INVALID_REGNUM,
224314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
225314564Sdim     nullptr,
226314564Sdim     nullptr,
227314564Sdim     nullptr,
228314564Sdim     0},
229314564Sdim    {"x15",
230314564Sdim     nullptr,
231314564Sdim     8,
232314564Sdim     0,
233314564Sdim     eEncodingUint,
234314564Sdim     eFormatHex,
235314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x15, LLDB_INVALID_REGNUM,
236314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
237314564Sdim     nullptr,
238314564Sdim     nullptr,
239314564Sdim     nullptr,
240314564Sdim     0},
241314564Sdim    {"x16",
242314564Sdim     nullptr,
243314564Sdim     8,
244314564Sdim     0,
245314564Sdim     eEncodingUint,
246314564Sdim     eFormatHex,
247314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x16, LLDB_INVALID_REGNUM,
248314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
249314564Sdim     nullptr,
250314564Sdim     nullptr,
251314564Sdim     nullptr,
252314564Sdim     0},
253314564Sdim    {"x17",
254314564Sdim     nullptr,
255314564Sdim     8,
256314564Sdim     0,
257314564Sdim     eEncodingUint,
258314564Sdim     eFormatHex,
259314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x17, LLDB_INVALID_REGNUM,
260314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
261314564Sdim     nullptr,
262314564Sdim     nullptr,
263314564Sdim     nullptr,
264314564Sdim     0},
265314564Sdim    {"x18",
266314564Sdim     nullptr,
267314564Sdim     8,
268314564Sdim     0,
269314564Sdim     eEncodingUint,
270314564Sdim     eFormatHex,
271314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x18, LLDB_INVALID_REGNUM,
272314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
273314564Sdim     nullptr,
274314564Sdim     nullptr,
275314564Sdim     nullptr,
276314564Sdim     0},
277314564Sdim    {"x19",
278314564Sdim     nullptr,
279314564Sdim     8,
280314564Sdim     0,
281314564Sdim     eEncodingUint,
282314564Sdim     eFormatHex,
283314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x19, LLDB_INVALID_REGNUM,
284314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
285314564Sdim     nullptr,
286314564Sdim     nullptr,
287314564Sdim     nullptr,
288314564Sdim     0},
289314564Sdim    {"x20",
290314564Sdim     nullptr,
291314564Sdim     8,
292314564Sdim     0,
293314564Sdim     eEncodingUint,
294314564Sdim     eFormatHex,
295314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x20, LLDB_INVALID_REGNUM,
296314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
297314564Sdim     nullptr,
298314564Sdim     nullptr,
299314564Sdim     nullptr,
300314564Sdim     0},
301314564Sdim    {"x21",
302314564Sdim     nullptr,
303314564Sdim     8,
304314564Sdim     0,
305314564Sdim     eEncodingUint,
306314564Sdim     eFormatHex,
307314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x21, LLDB_INVALID_REGNUM,
308314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
309314564Sdim     nullptr,
310314564Sdim     nullptr,
311314564Sdim     nullptr,
312314564Sdim     0},
313314564Sdim    {"x22",
314314564Sdim     nullptr,
315314564Sdim     8,
316314564Sdim     0,
317314564Sdim     eEncodingUint,
318314564Sdim     eFormatHex,
319314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x22, LLDB_INVALID_REGNUM,
320314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
321314564Sdim     nullptr,
322314564Sdim     nullptr,
323314564Sdim     nullptr,
324314564Sdim     0},
325314564Sdim    {"x23",
326314564Sdim     nullptr,
327314564Sdim     8,
328314564Sdim     0,
329314564Sdim     eEncodingUint,
330314564Sdim     eFormatHex,
331314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x23, LLDB_INVALID_REGNUM,
332314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
333314564Sdim     nullptr,
334314564Sdim     nullptr,
335314564Sdim     nullptr,
336314564Sdim     0},
337314564Sdim    {"x24",
338314564Sdim     nullptr,
339314564Sdim     8,
340314564Sdim     0,
341314564Sdim     eEncodingUint,
342314564Sdim     eFormatHex,
343314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x24, LLDB_INVALID_REGNUM,
344314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
345314564Sdim     nullptr,
346314564Sdim     nullptr,
347314564Sdim     nullptr,
348314564Sdim     0},
349314564Sdim    {"x25",
350314564Sdim     nullptr,
351314564Sdim     8,
352314564Sdim     0,
353314564Sdim     eEncodingUint,
354314564Sdim     eFormatHex,
355314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x25, LLDB_INVALID_REGNUM,
356314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
357314564Sdim     nullptr,
358314564Sdim     nullptr,
359314564Sdim     nullptr,
360314564Sdim     0},
361314564Sdim    {"x26",
362314564Sdim     nullptr,
363314564Sdim     8,
364314564Sdim     0,
365314564Sdim     eEncodingUint,
366314564Sdim     eFormatHex,
367314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x26, LLDB_INVALID_REGNUM,
368314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
369314564Sdim     nullptr,
370314564Sdim     nullptr,
371314564Sdim     nullptr,
372314564Sdim     0},
373314564Sdim    {"x27",
374314564Sdim     nullptr,
375314564Sdim     8,
376314564Sdim     0,
377314564Sdim     eEncodingUint,
378314564Sdim     eFormatHex,
379314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x27, LLDB_INVALID_REGNUM,
380314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
381314564Sdim     nullptr,
382314564Sdim     nullptr,
383314564Sdim     nullptr,
384314564Sdim     0},
385314564Sdim    {"x28",
386314564Sdim     nullptr,
387314564Sdim     8,
388314564Sdim     0,
389314564Sdim     eEncodingUint,
390314564Sdim     eFormatHex,
391314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x28, LLDB_INVALID_REGNUM,
392314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
393314564Sdim     nullptr,
394314564Sdim     nullptr,
395314564Sdim     nullptr,
396314564Sdim     0},
397314564Sdim    {"fp",
398314564Sdim     "x29",
399314564Sdim     8,
400314564Sdim     0,
401314564Sdim     eEncodingUint,
402314564Sdim     eFormatHex,
403314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x29, LLDB_REGNUM_GENERIC_FP,
404314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
405314564Sdim     nullptr,
406314564Sdim     nullptr,
407314564Sdim     nullptr,
408314564Sdim     0},
409314564Sdim    {"lr",
410314564Sdim     "x30",
411314564Sdim     8,
412314564Sdim     0,
413314564Sdim     eEncodingUint,
414314564Sdim     eFormatHex,
415314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x30, LLDB_REGNUM_GENERIC_RA,
416314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
417314564Sdim     nullptr,
418314564Sdim     nullptr,
419314564Sdim     nullptr,
420314564Sdim     0},
421314564Sdim    {"sp",
422314564Sdim     "x31",
423314564Sdim     8,
424314564Sdim     0,
425314564Sdim     eEncodingUint,
426314564Sdim     eFormatHex,
427314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::x31, LLDB_REGNUM_GENERIC_SP,
428314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
429314564Sdim     nullptr,
430314564Sdim     nullptr,
431314564Sdim     nullptr,
432314564Sdim     0},
433314564Sdim    {"pc",
434314564Sdim     nullptr,
435314564Sdim     8,
436314564Sdim     0,
437314564Sdim     eEncodingUint,
438314564Sdim     eFormatHex,
439314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::pc, LLDB_REGNUM_GENERIC_PC,
440314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
441314564Sdim     nullptr,
442314564Sdim     nullptr,
443314564Sdim     nullptr,
444314564Sdim     0},
445314564Sdim    {"cpsr",
446314564Sdim     "psr",
447314564Sdim     4,
448314564Sdim     0,
449314564Sdim     eEncodingUint,
450314564Sdim     eFormatHex,
451314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::cpsr, LLDB_REGNUM_GENERIC_FLAGS,
452314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
453314564Sdim     nullptr,
454314564Sdim     nullptr,
455314564Sdim     nullptr,
456314564Sdim     0},
457275072Semaste
458314564Sdim    {"v0",
459314564Sdim     nullptr,
460314564Sdim     16,
461314564Sdim     0,
462314564Sdim     eEncodingVector,
463314564Sdim     eFormatVectorOfUInt8,
464314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v0, LLDB_INVALID_REGNUM,
465314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
466314564Sdim     nullptr,
467314564Sdim     nullptr,
468314564Sdim     nullptr,
469314564Sdim     0},
470314564Sdim    {"v1",
471314564Sdim     nullptr,
472314564Sdim     16,
473314564Sdim     0,
474314564Sdim     eEncodingVector,
475314564Sdim     eFormatVectorOfUInt8,
476314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v1, LLDB_INVALID_REGNUM,
477314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
478314564Sdim     nullptr,
479314564Sdim     nullptr,
480314564Sdim     nullptr,
481314564Sdim     0},
482314564Sdim    {"v2",
483314564Sdim     nullptr,
484314564Sdim     16,
485314564Sdim     0,
486314564Sdim     eEncodingVector,
487314564Sdim     eFormatVectorOfUInt8,
488314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v2, LLDB_INVALID_REGNUM,
489314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
490314564Sdim     nullptr,
491314564Sdim     nullptr,
492314564Sdim     nullptr,
493314564Sdim     0},
494314564Sdim    {"v3",
495314564Sdim     nullptr,
496314564Sdim     16,
497314564Sdim     0,
498314564Sdim     eEncodingVector,
499314564Sdim     eFormatVectorOfUInt8,
500314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v3, LLDB_INVALID_REGNUM,
501314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
502314564Sdim     nullptr,
503314564Sdim     nullptr,
504314564Sdim     nullptr,
505314564Sdim     0},
506314564Sdim    {"v4",
507314564Sdim     nullptr,
508314564Sdim     16,
509314564Sdim     0,
510314564Sdim     eEncodingVector,
511314564Sdim     eFormatVectorOfUInt8,
512314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v4, LLDB_INVALID_REGNUM,
513314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
514314564Sdim     nullptr,
515314564Sdim     nullptr,
516314564Sdim     nullptr,
517314564Sdim     0},
518314564Sdim    {"v5",
519314564Sdim     nullptr,
520314564Sdim     16,
521314564Sdim     0,
522314564Sdim     eEncodingVector,
523314564Sdim     eFormatVectorOfUInt8,
524314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v5, LLDB_INVALID_REGNUM,
525314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
526314564Sdim     nullptr,
527314564Sdim     nullptr,
528314564Sdim     nullptr,
529314564Sdim     0},
530314564Sdim    {"v6",
531314564Sdim     nullptr,
532314564Sdim     16,
533314564Sdim     0,
534314564Sdim     eEncodingVector,
535314564Sdim     eFormatVectorOfUInt8,
536314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v6, LLDB_INVALID_REGNUM,
537314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
538314564Sdim     nullptr,
539314564Sdim     nullptr,
540314564Sdim     nullptr,
541314564Sdim     0},
542314564Sdim    {"v7",
543314564Sdim     nullptr,
544314564Sdim     16,
545314564Sdim     0,
546314564Sdim     eEncodingVector,
547314564Sdim     eFormatVectorOfUInt8,
548314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v7, LLDB_INVALID_REGNUM,
549314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
550314564Sdim     nullptr,
551314564Sdim     nullptr,
552314564Sdim     nullptr,
553314564Sdim     0},
554314564Sdim    {"v8",
555314564Sdim     nullptr,
556314564Sdim     16,
557314564Sdim     0,
558314564Sdim     eEncodingVector,
559314564Sdim     eFormatVectorOfUInt8,
560314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v8, LLDB_INVALID_REGNUM,
561314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
562314564Sdim     nullptr,
563314564Sdim     nullptr,
564314564Sdim     nullptr,
565314564Sdim     0},
566314564Sdim    {"v9",
567314564Sdim     nullptr,
568314564Sdim     16,
569314564Sdim     0,
570314564Sdim     eEncodingVector,
571314564Sdim     eFormatVectorOfUInt8,
572314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v9, LLDB_INVALID_REGNUM,
573314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
574314564Sdim     nullptr,
575314564Sdim     nullptr,
576314564Sdim     nullptr,
577314564Sdim     0},
578314564Sdim    {"v10",
579314564Sdim     nullptr,
580314564Sdim     16,
581314564Sdim     0,
582314564Sdim     eEncodingVector,
583314564Sdim     eFormatVectorOfUInt8,
584314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v10, LLDB_INVALID_REGNUM,
585314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
586314564Sdim     nullptr,
587314564Sdim     nullptr,
588314564Sdim     nullptr,
589314564Sdim     0},
590314564Sdim    {"v11",
591314564Sdim     nullptr,
592314564Sdim     16,
593314564Sdim     0,
594314564Sdim     eEncodingVector,
595314564Sdim     eFormatVectorOfUInt8,
596314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v11, LLDB_INVALID_REGNUM,
597314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
598314564Sdim     nullptr,
599314564Sdim     nullptr,
600314564Sdim     nullptr,
601314564Sdim     0},
602314564Sdim    {"v12",
603314564Sdim     nullptr,
604314564Sdim     16,
605314564Sdim     0,
606314564Sdim     eEncodingVector,
607314564Sdim     eFormatVectorOfUInt8,
608314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v12, LLDB_INVALID_REGNUM,
609314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
610314564Sdim     nullptr,
611314564Sdim     nullptr,
612314564Sdim     nullptr,
613314564Sdim     0},
614314564Sdim    {"v13",
615314564Sdim     nullptr,
616314564Sdim     16,
617314564Sdim     0,
618314564Sdim     eEncodingVector,
619314564Sdim     eFormatVectorOfUInt8,
620314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v13, LLDB_INVALID_REGNUM,
621314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
622314564Sdim     nullptr,
623314564Sdim     nullptr,
624314564Sdim     nullptr,
625314564Sdim     0},
626314564Sdim    {"v14",
627314564Sdim     nullptr,
628314564Sdim     16,
629314564Sdim     0,
630314564Sdim     eEncodingVector,
631314564Sdim     eFormatVectorOfUInt8,
632314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v14, LLDB_INVALID_REGNUM,
633314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
634314564Sdim     nullptr,
635314564Sdim     nullptr,
636314564Sdim     nullptr,
637314564Sdim     0},
638314564Sdim    {"v15",
639314564Sdim     nullptr,
640314564Sdim     16,
641314564Sdim     0,
642314564Sdim     eEncodingVector,
643314564Sdim     eFormatVectorOfUInt8,
644314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v15, LLDB_INVALID_REGNUM,
645314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
646314564Sdim     nullptr,
647314564Sdim     nullptr,
648314564Sdim     nullptr,
649314564Sdim     0},
650314564Sdim    {"v16",
651314564Sdim     nullptr,
652314564Sdim     16,
653314564Sdim     0,
654314564Sdim     eEncodingVector,
655314564Sdim     eFormatVectorOfUInt8,
656314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v16, LLDB_INVALID_REGNUM,
657314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
658314564Sdim     nullptr,
659314564Sdim     nullptr,
660314564Sdim     nullptr,
661314564Sdim     0},
662314564Sdim    {"v17",
663314564Sdim     nullptr,
664314564Sdim     16,
665314564Sdim     0,
666314564Sdim     eEncodingVector,
667314564Sdim     eFormatVectorOfUInt8,
668314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v17, LLDB_INVALID_REGNUM,
669314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
670314564Sdim     nullptr,
671314564Sdim     nullptr,
672314564Sdim     nullptr,
673314564Sdim     0},
674314564Sdim    {"v18",
675314564Sdim     nullptr,
676314564Sdim     16,
677314564Sdim     0,
678314564Sdim     eEncodingVector,
679314564Sdim     eFormatVectorOfUInt8,
680314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v18, LLDB_INVALID_REGNUM,
681314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
682314564Sdim     nullptr,
683314564Sdim     nullptr,
684314564Sdim     nullptr,
685314564Sdim     0},
686314564Sdim    {"v19",
687314564Sdim     nullptr,
688314564Sdim     16,
689314564Sdim     0,
690314564Sdim     eEncodingVector,
691314564Sdim     eFormatVectorOfUInt8,
692314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v19, LLDB_INVALID_REGNUM,
693314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
694314564Sdim     nullptr,
695314564Sdim     nullptr,
696314564Sdim     nullptr,
697314564Sdim     0},
698314564Sdim    {"v20",
699314564Sdim     nullptr,
700314564Sdim     16,
701314564Sdim     0,
702314564Sdim     eEncodingVector,
703314564Sdim     eFormatVectorOfUInt8,
704314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v20, LLDB_INVALID_REGNUM,
705314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
706314564Sdim     nullptr,
707314564Sdim     nullptr,
708314564Sdim     nullptr,
709314564Sdim     0},
710314564Sdim    {"v21",
711314564Sdim     nullptr,
712314564Sdim     16,
713314564Sdim     0,
714314564Sdim     eEncodingVector,
715314564Sdim     eFormatVectorOfUInt8,
716314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v21, LLDB_INVALID_REGNUM,
717314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
718314564Sdim     nullptr,
719314564Sdim     nullptr,
720314564Sdim     nullptr,
721314564Sdim     0},
722314564Sdim    {"v22",
723314564Sdim     nullptr,
724314564Sdim     16,
725314564Sdim     0,
726314564Sdim     eEncodingVector,
727314564Sdim     eFormatVectorOfUInt8,
728314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v22, LLDB_INVALID_REGNUM,
729314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
730314564Sdim     nullptr,
731314564Sdim     nullptr,
732314564Sdim     nullptr,
733314564Sdim     0},
734314564Sdim    {"v23",
735314564Sdim     nullptr,
736314564Sdim     16,
737314564Sdim     0,
738314564Sdim     eEncodingVector,
739314564Sdim     eFormatVectorOfUInt8,
740314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v23, LLDB_INVALID_REGNUM,
741314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
742314564Sdim     nullptr,
743314564Sdim     nullptr,
744314564Sdim     nullptr,
745314564Sdim     0},
746314564Sdim    {"v24",
747314564Sdim     nullptr,
748314564Sdim     16,
749314564Sdim     0,
750314564Sdim     eEncodingVector,
751314564Sdim     eFormatVectorOfUInt8,
752314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v24, LLDB_INVALID_REGNUM,
753314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
754314564Sdim     nullptr,
755314564Sdim     nullptr,
756314564Sdim     nullptr,
757314564Sdim     0},
758314564Sdim    {"v25",
759314564Sdim     nullptr,
760314564Sdim     16,
761314564Sdim     0,
762314564Sdim     eEncodingVector,
763314564Sdim     eFormatVectorOfUInt8,
764314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v25, LLDB_INVALID_REGNUM,
765314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
766314564Sdim     nullptr,
767314564Sdim     nullptr,
768314564Sdim     nullptr,
769314564Sdim     0},
770314564Sdim    {"v26",
771314564Sdim     nullptr,
772314564Sdim     16,
773314564Sdim     0,
774314564Sdim     eEncodingVector,
775314564Sdim     eFormatVectorOfUInt8,
776314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v26, LLDB_INVALID_REGNUM,
777314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
778314564Sdim     nullptr,
779314564Sdim     nullptr,
780314564Sdim     nullptr,
781314564Sdim     0},
782314564Sdim    {"v27",
783314564Sdim     nullptr,
784314564Sdim     16,
785314564Sdim     0,
786314564Sdim     eEncodingVector,
787314564Sdim     eFormatVectorOfUInt8,
788314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v27, LLDB_INVALID_REGNUM,
789314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
790314564Sdim     nullptr,
791314564Sdim     nullptr,
792314564Sdim     nullptr,
793314564Sdim     0},
794314564Sdim    {"v28",
795314564Sdim     nullptr,
796314564Sdim     16,
797314564Sdim     0,
798314564Sdim     eEncodingVector,
799314564Sdim     eFormatVectorOfUInt8,
800314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v28, LLDB_INVALID_REGNUM,
801314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
802314564Sdim     nullptr,
803314564Sdim     nullptr,
804314564Sdim     nullptr,
805314564Sdim     0},
806314564Sdim    {"v29",
807314564Sdim     nullptr,
808314564Sdim     16,
809314564Sdim     0,
810314564Sdim     eEncodingVector,
811314564Sdim     eFormatVectorOfUInt8,
812314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v29, LLDB_INVALID_REGNUM,
813314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
814314564Sdim     nullptr,
815314564Sdim     nullptr,
816314564Sdim     nullptr,
817314564Sdim     0},
818314564Sdim    {"v30",
819314564Sdim     nullptr,
820314564Sdim     16,
821314564Sdim     0,
822314564Sdim     eEncodingVector,
823314564Sdim     eFormatVectorOfUInt8,
824314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v30, LLDB_INVALID_REGNUM,
825314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
826314564Sdim     nullptr,
827314564Sdim     nullptr,
828314564Sdim     nullptr,
829314564Sdim     0},
830314564Sdim    {"v31",
831314564Sdim     nullptr,
832314564Sdim     16,
833314564Sdim     0,
834314564Sdim     eEncodingVector,
835314564Sdim     eFormatVectorOfUInt8,
836314564Sdim     {LLDB_INVALID_REGNUM, arm64_dwarf::v31, LLDB_INVALID_REGNUM,
837314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
838314564Sdim     nullptr,
839314564Sdim     nullptr,
840314564Sdim     nullptr,
841314564Sdim     0},
842275072Semaste
843314564Sdim    {"fpsr",
844314564Sdim     nullptr,
845314564Sdim     4,
846314564Sdim     0,
847314564Sdim     eEncodingUint,
848314564Sdim     eFormatHex,
849314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
850314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
851314564Sdim     nullptr,
852314564Sdim     nullptr,
853314564Sdim     nullptr,
854314564Sdim     0},
855314564Sdim    {"fpcr",
856314564Sdim     nullptr,
857314564Sdim     4,
858314564Sdim     0,
859314564Sdim     eEncodingUint,
860314564Sdim     eFormatHex,
861314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
862314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
863314564Sdim     nullptr,
864314564Sdim     nullptr,
865314564Sdim     nullptr,
866314564Sdim     0},
867275072Semaste
868314564Sdim    {"s0",
869314564Sdim     nullptr,
870314564Sdim     4,
871314564Sdim     0,
872314564Sdim     eEncodingIEEE754,
873314564Sdim     eFormatFloat,
874314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
875314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
876314564Sdim     nullptr,
877314564Sdim     nullptr,
878314564Sdim     nullptr,
879314564Sdim     0},
880314564Sdim    {"s1",
881314564Sdim     nullptr,
882314564Sdim     4,
883314564Sdim     0,
884314564Sdim     eEncodingIEEE754,
885314564Sdim     eFormatFloat,
886314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
887314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
888314564Sdim     nullptr,
889314564Sdim     nullptr,
890314564Sdim     nullptr,
891314564Sdim     0},
892314564Sdim    {"s2",
893314564Sdim     nullptr,
894314564Sdim     4,
895314564Sdim     0,
896314564Sdim     eEncodingIEEE754,
897314564Sdim     eFormatFloat,
898314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
899314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
900314564Sdim     nullptr,
901314564Sdim     nullptr,
902314564Sdim     nullptr,
903314564Sdim     0},
904314564Sdim    {"s3",
905314564Sdim     nullptr,
906314564Sdim     4,
907314564Sdim     0,
908314564Sdim     eEncodingIEEE754,
909314564Sdim     eFormatFloat,
910314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
911314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
912314564Sdim     nullptr,
913314564Sdim     nullptr,
914314564Sdim     nullptr,
915314564Sdim     0},
916314564Sdim    {"s4",
917314564Sdim     nullptr,
918314564Sdim     4,
919314564Sdim     0,
920314564Sdim     eEncodingIEEE754,
921314564Sdim     eFormatFloat,
922314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
923314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
924314564Sdim     nullptr,
925314564Sdim     nullptr,
926314564Sdim     nullptr,
927314564Sdim     0},
928314564Sdim    {"s5",
929314564Sdim     nullptr,
930314564Sdim     4,
931314564Sdim     0,
932314564Sdim     eEncodingIEEE754,
933314564Sdim     eFormatFloat,
934314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
935314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
936314564Sdim     nullptr,
937314564Sdim     nullptr,
938314564Sdim     nullptr,
939314564Sdim     0},
940314564Sdim    {"s6",
941314564Sdim     nullptr,
942314564Sdim     4,
943314564Sdim     0,
944314564Sdim     eEncodingIEEE754,
945314564Sdim     eFormatFloat,
946314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
947314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
948314564Sdim     nullptr,
949314564Sdim     nullptr,
950314564Sdim     nullptr,
951314564Sdim     0},
952314564Sdim    {"s7",
953314564Sdim     nullptr,
954314564Sdim     4,
955314564Sdim     0,
956314564Sdim     eEncodingIEEE754,
957314564Sdim     eFormatFloat,
958314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
959314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
960314564Sdim     nullptr,
961314564Sdim     nullptr,
962314564Sdim     nullptr,
963314564Sdim     0},
964314564Sdim    {"s8",
965314564Sdim     nullptr,
966314564Sdim     4,
967314564Sdim     0,
968314564Sdim     eEncodingIEEE754,
969314564Sdim     eFormatFloat,
970314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
971314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
972314564Sdim     nullptr,
973314564Sdim     nullptr,
974314564Sdim     nullptr,
975314564Sdim     0},
976314564Sdim    {"s9",
977314564Sdim     nullptr,
978314564Sdim     4,
979314564Sdim     0,
980314564Sdim     eEncodingIEEE754,
981314564Sdim     eFormatFloat,
982314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
983314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
984314564Sdim     nullptr,
985314564Sdim     nullptr,
986314564Sdim     nullptr,
987314564Sdim     0},
988314564Sdim    {"s10",
989314564Sdim     nullptr,
990314564Sdim     4,
991314564Sdim     0,
992314564Sdim     eEncodingIEEE754,
993314564Sdim     eFormatFloat,
994314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
995314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
996314564Sdim     nullptr,
997314564Sdim     nullptr,
998314564Sdim     nullptr,
999314564Sdim     0},
1000314564Sdim    {"s11",
1001314564Sdim     nullptr,
1002314564Sdim     4,
1003314564Sdim     0,
1004314564Sdim     eEncodingIEEE754,
1005314564Sdim     eFormatFloat,
1006314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1007314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1008314564Sdim     nullptr,
1009314564Sdim     nullptr,
1010314564Sdim     nullptr,
1011314564Sdim     0},
1012314564Sdim    {"s12",
1013314564Sdim     nullptr,
1014314564Sdim     4,
1015314564Sdim     0,
1016314564Sdim     eEncodingIEEE754,
1017314564Sdim     eFormatFloat,
1018314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1019314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1020314564Sdim     nullptr,
1021314564Sdim     nullptr,
1022314564Sdim     nullptr,
1023314564Sdim     0},
1024314564Sdim    {"s13",
1025314564Sdim     nullptr,
1026314564Sdim     4,
1027314564Sdim     0,
1028314564Sdim     eEncodingIEEE754,
1029314564Sdim     eFormatFloat,
1030314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1031314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1032314564Sdim     nullptr,
1033314564Sdim     nullptr,
1034314564Sdim     nullptr,
1035314564Sdim     0},
1036314564Sdim    {"s14",
1037314564Sdim     nullptr,
1038314564Sdim     4,
1039314564Sdim     0,
1040314564Sdim     eEncodingIEEE754,
1041314564Sdim     eFormatFloat,
1042314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1043314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1044314564Sdim     nullptr,
1045314564Sdim     nullptr,
1046314564Sdim     nullptr,
1047314564Sdim     0},
1048314564Sdim    {"s15",
1049314564Sdim     nullptr,
1050314564Sdim     4,
1051314564Sdim     0,
1052314564Sdim     eEncodingIEEE754,
1053314564Sdim     eFormatFloat,
1054314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1055314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1056314564Sdim     nullptr,
1057314564Sdim     nullptr,
1058314564Sdim     nullptr,
1059314564Sdim     0},
1060314564Sdim    {"s16",
1061314564Sdim     nullptr,
1062314564Sdim     4,
1063314564Sdim     0,
1064314564Sdim     eEncodingIEEE754,
1065314564Sdim     eFormatFloat,
1066314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1067314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1068314564Sdim     nullptr,
1069314564Sdim     nullptr,
1070314564Sdim     nullptr,
1071314564Sdim     0},
1072314564Sdim    {"s17",
1073314564Sdim     nullptr,
1074314564Sdim     4,
1075314564Sdim     0,
1076314564Sdim     eEncodingIEEE754,
1077314564Sdim     eFormatFloat,
1078314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1079314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1080314564Sdim     nullptr,
1081314564Sdim     nullptr,
1082314564Sdim     nullptr,
1083314564Sdim     0},
1084314564Sdim    {"s18",
1085314564Sdim     nullptr,
1086314564Sdim     4,
1087314564Sdim     0,
1088314564Sdim     eEncodingIEEE754,
1089314564Sdim     eFormatFloat,
1090314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1091314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1092314564Sdim     nullptr,
1093314564Sdim     nullptr,
1094314564Sdim     nullptr,
1095314564Sdim     0},
1096314564Sdim    {"s19",
1097314564Sdim     nullptr,
1098314564Sdim     4,
1099314564Sdim     0,
1100314564Sdim     eEncodingIEEE754,
1101314564Sdim     eFormatFloat,
1102314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1103314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1104314564Sdim     nullptr,
1105314564Sdim     nullptr,
1106314564Sdim     nullptr,
1107314564Sdim     0},
1108314564Sdim    {"s20",
1109314564Sdim     nullptr,
1110314564Sdim     4,
1111314564Sdim     0,
1112314564Sdim     eEncodingIEEE754,
1113314564Sdim     eFormatFloat,
1114314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1115314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1116314564Sdim     nullptr,
1117314564Sdim     nullptr,
1118314564Sdim     nullptr,
1119314564Sdim     0},
1120314564Sdim    {"s21",
1121314564Sdim     nullptr,
1122314564Sdim     4,
1123314564Sdim     0,
1124314564Sdim     eEncodingIEEE754,
1125314564Sdim     eFormatFloat,
1126314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1127314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1128314564Sdim     nullptr,
1129314564Sdim     nullptr,
1130314564Sdim     nullptr,
1131314564Sdim     0},
1132314564Sdim    {"s22",
1133314564Sdim     nullptr,
1134314564Sdim     4,
1135314564Sdim     0,
1136314564Sdim     eEncodingIEEE754,
1137314564Sdim     eFormatFloat,
1138314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1139314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1140314564Sdim     nullptr,
1141314564Sdim     nullptr,
1142314564Sdim     nullptr,
1143314564Sdim     0},
1144314564Sdim    {"s23",
1145314564Sdim     nullptr,
1146314564Sdim     4,
1147314564Sdim     0,
1148314564Sdim     eEncodingIEEE754,
1149314564Sdim     eFormatFloat,
1150314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1151314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1152314564Sdim     nullptr,
1153314564Sdim     nullptr,
1154314564Sdim     nullptr,
1155314564Sdim     0},
1156314564Sdim    {"s24",
1157314564Sdim     nullptr,
1158314564Sdim     4,
1159314564Sdim     0,
1160314564Sdim     eEncodingIEEE754,
1161314564Sdim     eFormatFloat,
1162314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1163314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1164314564Sdim     nullptr,
1165314564Sdim     nullptr,
1166314564Sdim     nullptr,
1167314564Sdim     0},
1168314564Sdim    {"s25",
1169314564Sdim     nullptr,
1170314564Sdim     4,
1171314564Sdim     0,
1172314564Sdim     eEncodingIEEE754,
1173314564Sdim     eFormatFloat,
1174314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1175314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1176314564Sdim     nullptr,
1177314564Sdim     nullptr,
1178314564Sdim     nullptr,
1179314564Sdim     0},
1180314564Sdim    {"s26",
1181314564Sdim     nullptr,
1182314564Sdim     4,
1183314564Sdim     0,
1184314564Sdim     eEncodingIEEE754,
1185314564Sdim     eFormatFloat,
1186314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1187314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1188314564Sdim     nullptr,
1189314564Sdim     nullptr,
1190314564Sdim     nullptr,
1191314564Sdim     0},
1192314564Sdim    {"s27",
1193314564Sdim     nullptr,
1194314564Sdim     4,
1195314564Sdim     0,
1196314564Sdim     eEncodingIEEE754,
1197314564Sdim     eFormatFloat,
1198314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1199314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1200314564Sdim     nullptr,
1201314564Sdim     nullptr,
1202314564Sdim     nullptr,
1203314564Sdim     0},
1204314564Sdim    {"s28",
1205314564Sdim     nullptr,
1206314564Sdim     4,
1207314564Sdim     0,
1208314564Sdim     eEncodingIEEE754,
1209314564Sdim     eFormatFloat,
1210314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1211314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1212314564Sdim     nullptr,
1213314564Sdim     nullptr,
1214314564Sdim     nullptr,
1215314564Sdim     0},
1216314564Sdim    {"s29",
1217314564Sdim     nullptr,
1218314564Sdim     4,
1219314564Sdim     0,
1220314564Sdim     eEncodingIEEE754,
1221314564Sdim     eFormatFloat,
1222314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1223314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1224314564Sdim     nullptr,
1225314564Sdim     nullptr,
1226314564Sdim     nullptr,
1227314564Sdim     0},
1228314564Sdim    {"s30",
1229314564Sdim     nullptr,
1230314564Sdim     4,
1231314564Sdim     0,
1232314564Sdim     eEncodingIEEE754,
1233314564Sdim     eFormatFloat,
1234314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1235314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1236314564Sdim     nullptr,
1237314564Sdim     nullptr,
1238314564Sdim     nullptr,
1239314564Sdim     0},
1240314564Sdim    {"s31",
1241314564Sdim     nullptr,
1242314564Sdim     4,
1243314564Sdim     0,
1244314564Sdim     eEncodingIEEE754,
1245314564Sdim     eFormatFloat,
1246314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1247314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1248314564Sdim     nullptr,
1249314564Sdim     nullptr,
1250314564Sdim     nullptr,
1251314564Sdim     0},
1252275072Semaste
1253314564Sdim    {"d0",
1254314564Sdim     nullptr,
1255314564Sdim     8,
1256314564Sdim     0,
1257314564Sdim     eEncodingIEEE754,
1258314564Sdim     eFormatFloat,
1259314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1260314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1261314564Sdim     nullptr,
1262314564Sdim     nullptr,
1263314564Sdim     nullptr,
1264314564Sdim     0},
1265314564Sdim    {"d1",
1266314564Sdim     nullptr,
1267314564Sdim     8,
1268314564Sdim     0,
1269314564Sdim     eEncodingIEEE754,
1270314564Sdim     eFormatFloat,
1271314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1272314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1273314564Sdim     nullptr,
1274314564Sdim     nullptr,
1275314564Sdim     nullptr,
1276314564Sdim     0},
1277314564Sdim    {"d2",
1278314564Sdim     nullptr,
1279314564Sdim     8,
1280314564Sdim     0,
1281314564Sdim     eEncodingIEEE754,
1282314564Sdim     eFormatFloat,
1283314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1284314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1285314564Sdim     nullptr,
1286314564Sdim     nullptr,
1287314564Sdim     nullptr,
1288314564Sdim     0},
1289314564Sdim    {"d3",
1290314564Sdim     nullptr,
1291314564Sdim     8,
1292314564Sdim     0,
1293314564Sdim     eEncodingIEEE754,
1294314564Sdim     eFormatFloat,
1295314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1296314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1297314564Sdim     nullptr,
1298314564Sdim     nullptr,
1299314564Sdim     nullptr,
1300314564Sdim     0},
1301314564Sdim    {"d4",
1302314564Sdim     nullptr,
1303314564Sdim     8,
1304314564Sdim     0,
1305314564Sdim     eEncodingIEEE754,
1306314564Sdim     eFormatFloat,
1307314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1308314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1309314564Sdim     nullptr,
1310314564Sdim     nullptr,
1311314564Sdim     nullptr,
1312314564Sdim     0},
1313314564Sdim    {"d5",
1314314564Sdim     nullptr,
1315314564Sdim     8,
1316314564Sdim     0,
1317314564Sdim     eEncodingIEEE754,
1318314564Sdim     eFormatFloat,
1319314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1320314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1321314564Sdim     nullptr,
1322314564Sdim     nullptr,
1323314564Sdim     nullptr,
1324314564Sdim     0},
1325314564Sdim    {"d6",
1326314564Sdim     nullptr,
1327314564Sdim     8,
1328314564Sdim     0,
1329314564Sdim     eEncodingIEEE754,
1330314564Sdim     eFormatFloat,
1331314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1332314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1333314564Sdim     nullptr,
1334314564Sdim     nullptr,
1335314564Sdim     nullptr,
1336314564Sdim     0},
1337314564Sdim    {"d7",
1338314564Sdim     nullptr,
1339314564Sdim     8,
1340314564Sdim     0,
1341314564Sdim     eEncodingIEEE754,
1342314564Sdim     eFormatFloat,
1343314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1344314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1345314564Sdim     nullptr,
1346314564Sdim     nullptr,
1347314564Sdim     nullptr,
1348314564Sdim     0},
1349314564Sdim    {"d8",
1350314564Sdim     nullptr,
1351314564Sdim     8,
1352314564Sdim     0,
1353314564Sdim     eEncodingIEEE754,
1354314564Sdim     eFormatFloat,
1355314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1356314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1357314564Sdim     nullptr,
1358314564Sdim     nullptr,
1359314564Sdim     nullptr,
1360314564Sdim     0},
1361314564Sdim    {"d9",
1362314564Sdim     nullptr,
1363314564Sdim     8,
1364314564Sdim     0,
1365314564Sdim     eEncodingIEEE754,
1366314564Sdim     eFormatFloat,
1367314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1368314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1369314564Sdim     nullptr,
1370314564Sdim     nullptr,
1371314564Sdim     nullptr,
1372314564Sdim     0},
1373314564Sdim    {"d10",
1374314564Sdim     nullptr,
1375314564Sdim     8,
1376314564Sdim     0,
1377314564Sdim     eEncodingIEEE754,
1378314564Sdim     eFormatFloat,
1379314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1380314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1381314564Sdim     nullptr,
1382314564Sdim     nullptr,
1383314564Sdim     nullptr,
1384314564Sdim     0},
1385314564Sdim    {"d11",
1386314564Sdim     nullptr,
1387314564Sdim     8,
1388314564Sdim     0,
1389314564Sdim     eEncodingIEEE754,
1390314564Sdim     eFormatFloat,
1391314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1392314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1393314564Sdim     nullptr,
1394314564Sdim     nullptr,
1395314564Sdim     nullptr,
1396314564Sdim     0},
1397314564Sdim    {"d12",
1398314564Sdim     nullptr,
1399314564Sdim     8,
1400314564Sdim     0,
1401314564Sdim     eEncodingIEEE754,
1402314564Sdim     eFormatFloat,
1403314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1404314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1405314564Sdim     nullptr,
1406314564Sdim     nullptr,
1407314564Sdim     nullptr,
1408314564Sdim     0},
1409314564Sdim    {"d13",
1410314564Sdim     nullptr,
1411314564Sdim     8,
1412314564Sdim     0,
1413314564Sdim     eEncodingIEEE754,
1414314564Sdim     eFormatFloat,
1415314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1416314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1417314564Sdim     nullptr,
1418314564Sdim     nullptr,
1419314564Sdim     nullptr,
1420314564Sdim     0},
1421314564Sdim    {"d14",
1422314564Sdim     nullptr,
1423314564Sdim     8,
1424314564Sdim     0,
1425314564Sdim     eEncodingIEEE754,
1426314564Sdim     eFormatFloat,
1427314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1428314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1429314564Sdim     nullptr,
1430314564Sdim     nullptr,
1431314564Sdim     nullptr,
1432314564Sdim     0},
1433314564Sdim    {"d15",
1434314564Sdim     nullptr,
1435314564Sdim     8,
1436314564Sdim     0,
1437314564Sdim     eEncodingIEEE754,
1438314564Sdim     eFormatFloat,
1439314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1440314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1441314564Sdim     nullptr,
1442314564Sdim     nullptr,
1443314564Sdim     nullptr,
1444314564Sdim     0},
1445314564Sdim    {"d16",
1446314564Sdim     nullptr,
1447314564Sdim     8,
1448314564Sdim     0,
1449314564Sdim     eEncodingIEEE754,
1450314564Sdim     eFormatFloat,
1451314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1452314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1453314564Sdim     nullptr,
1454314564Sdim     nullptr,
1455314564Sdim     nullptr,
1456314564Sdim     0},
1457314564Sdim    {"d17",
1458314564Sdim     nullptr,
1459314564Sdim     8,
1460314564Sdim     0,
1461314564Sdim     eEncodingIEEE754,
1462314564Sdim     eFormatFloat,
1463314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1464314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1465314564Sdim     nullptr,
1466314564Sdim     nullptr,
1467314564Sdim     nullptr,
1468314564Sdim     0},
1469314564Sdim    {"d18",
1470314564Sdim     nullptr,
1471314564Sdim     8,
1472314564Sdim     0,
1473314564Sdim     eEncodingIEEE754,
1474314564Sdim     eFormatFloat,
1475314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1476314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1477314564Sdim     nullptr,
1478314564Sdim     nullptr,
1479314564Sdim     nullptr,
1480314564Sdim     0},
1481314564Sdim    {"d19",
1482314564Sdim     nullptr,
1483314564Sdim     8,
1484314564Sdim     0,
1485314564Sdim     eEncodingIEEE754,
1486314564Sdim     eFormatFloat,
1487314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1488314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1489314564Sdim     nullptr,
1490314564Sdim     nullptr,
1491314564Sdim     nullptr,
1492314564Sdim     0},
1493314564Sdim    {"d20",
1494314564Sdim     nullptr,
1495314564Sdim     8,
1496314564Sdim     0,
1497314564Sdim     eEncodingIEEE754,
1498314564Sdim     eFormatFloat,
1499314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1500314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1501314564Sdim     nullptr,
1502314564Sdim     nullptr,
1503314564Sdim     nullptr,
1504314564Sdim     0},
1505314564Sdim    {"d21",
1506314564Sdim     nullptr,
1507314564Sdim     8,
1508314564Sdim     0,
1509314564Sdim     eEncodingIEEE754,
1510314564Sdim     eFormatFloat,
1511314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1512314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1513314564Sdim     nullptr,
1514314564Sdim     nullptr,
1515314564Sdim     nullptr,
1516314564Sdim     0},
1517314564Sdim    {"d22",
1518314564Sdim     nullptr,
1519314564Sdim     8,
1520314564Sdim     0,
1521314564Sdim     eEncodingIEEE754,
1522314564Sdim     eFormatFloat,
1523314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1524314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1525314564Sdim     nullptr,
1526314564Sdim     nullptr,
1527314564Sdim     nullptr,
1528314564Sdim     0},
1529314564Sdim    {"d23",
1530314564Sdim     nullptr,
1531314564Sdim     8,
1532314564Sdim     0,
1533314564Sdim     eEncodingIEEE754,
1534314564Sdim     eFormatFloat,
1535314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1536314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1537314564Sdim     nullptr,
1538314564Sdim     nullptr,
1539314564Sdim     nullptr,
1540314564Sdim     0},
1541314564Sdim    {"d24",
1542314564Sdim     nullptr,
1543314564Sdim     8,
1544314564Sdim     0,
1545314564Sdim     eEncodingIEEE754,
1546314564Sdim     eFormatFloat,
1547314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1548314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1549314564Sdim     nullptr,
1550314564Sdim     nullptr,
1551314564Sdim     nullptr,
1552314564Sdim     0},
1553314564Sdim    {"d25",
1554314564Sdim     nullptr,
1555314564Sdim     8,
1556314564Sdim     0,
1557314564Sdim     eEncodingIEEE754,
1558314564Sdim     eFormatFloat,
1559314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1560314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1561314564Sdim     nullptr,
1562314564Sdim     nullptr,
1563314564Sdim     nullptr,
1564314564Sdim     0},
1565314564Sdim    {"d26",
1566314564Sdim     nullptr,
1567314564Sdim     8,
1568314564Sdim     0,
1569314564Sdim     eEncodingIEEE754,
1570314564Sdim     eFormatFloat,
1571314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1572314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1573314564Sdim     nullptr,
1574314564Sdim     nullptr,
1575314564Sdim     nullptr,
1576314564Sdim     0},
1577314564Sdim    {"d27",
1578314564Sdim     nullptr,
1579314564Sdim     8,
1580314564Sdim     0,
1581314564Sdim     eEncodingIEEE754,
1582314564Sdim     eFormatFloat,
1583314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1584314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1585314564Sdim     nullptr,
1586314564Sdim     nullptr,
1587314564Sdim     nullptr,
1588314564Sdim     0},
1589314564Sdim    {"d28",
1590314564Sdim     nullptr,
1591314564Sdim     8,
1592314564Sdim     0,
1593314564Sdim     eEncodingIEEE754,
1594314564Sdim     eFormatFloat,
1595314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1596314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1597314564Sdim     nullptr,
1598314564Sdim     nullptr,
1599314564Sdim     nullptr,
1600314564Sdim     0},
1601314564Sdim    {"d29",
1602314564Sdim     nullptr,
1603314564Sdim     8,
1604314564Sdim     0,
1605314564Sdim     eEncodingIEEE754,
1606314564Sdim     eFormatFloat,
1607314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1608314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1609314564Sdim     nullptr,
1610314564Sdim     nullptr,
1611314564Sdim     nullptr,
1612314564Sdim     0},
1613314564Sdim    {"d30",
1614314564Sdim     nullptr,
1615314564Sdim     8,
1616314564Sdim     0,
1617314564Sdim     eEncodingIEEE754,
1618314564Sdim     eFormatFloat,
1619314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1620314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1621314564Sdim     nullptr,
1622314564Sdim     nullptr,
1623314564Sdim     nullptr,
1624314564Sdim     0},
1625314564Sdim    {"d31",
1626314564Sdim     nullptr,
1627314564Sdim     8,
1628314564Sdim     0,
1629314564Sdim     eEncodingIEEE754,
1630314564Sdim     eFormatFloat,
1631314564Sdim     {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1632314564Sdim      LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
1633314564Sdim     nullptr,
1634314564Sdim     nullptr,
1635314564Sdim     nullptr,
1636314564Sdim     0}};
1637275072Semaste
1638314564Sdimstatic const uint32_t k_num_register_infos =
1639314564Sdim    llvm::array_lengthof(g_register_infos);
1640275072Semastestatic bool g_register_info_names_constified = false;
1641275072Semaste
1642275072Semasteconst lldb_private::RegisterInfo *
1643314564SdimABIMacOSX_arm64::GetRegisterInfoArray(uint32_t &count) {
1644314564Sdim  // Make the C-string names and alt_names for the register infos into const
1645314564Sdim  // C-string values by having the ConstString unique the names in the global
1646314564Sdim  // constant C-string pool.
1647314564Sdim  if (!g_register_info_names_constified) {
1648314564Sdim    g_register_info_names_constified = true;
1649314564Sdim    for (uint32_t i = 0; i < k_num_register_infos; ++i) {
1650314564Sdim      if (g_register_infos[i].name)
1651314564Sdim        g_register_infos[i].name =
1652314564Sdim            ConstString(g_register_infos[i].name).GetCString();
1653314564Sdim      if (g_register_infos[i].alt_name)
1654314564Sdim        g_register_infos[i].alt_name =
1655314564Sdim            ConstString(g_register_infos[i].alt_name).GetCString();
1656275072Semaste    }
1657314564Sdim  }
1658314564Sdim  count = k_num_register_infos;
1659314564Sdim  return g_register_infos;
1660275072Semaste}
1661275072Semaste
1662314564Sdimsize_t ABIMacOSX_arm64::GetRedZoneSize() const { return 128; }
1663275072Semaste
1664275072Semaste//------------------------------------------------------------------
1665275072Semaste// Static Functions
1666275072Semaste//------------------------------------------------------------------
1667309124Sdim
1668275072SemasteABISP
1669321369SdimABIMacOSX_arm64::CreateInstance(ProcessSP process_sp, const ArchSpec &arch) {
1670314564Sdim  static ABISP g_abi_sp;
1671314564Sdim  const llvm::Triple::ArchType arch_type = arch.GetTriple().getArch();
1672314564Sdim  const llvm::Triple::VendorType vendor_type = arch.GetTriple().getVendor();
1673288943Sdim
1674314564Sdim  if (vendor_type == llvm::Triple::Apple) {
1675314564Sdim    if (arch_type == llvm::Triple::aarch64) {
1676314564Sdim      if (!g_abi_sp)
1677321369Sdim        g_abi_sp.reset(new ABIMacOSX_arm64(process_sp));
1678314564Sdim      return g_abi_sp;
1679275072Semaste    }
1680314564Sdim  }
1681288943Sdim
1682314564Sdim  return ABISP();
1683275072Semaste}
1684275072Semaste
1685314564Sdimbool ABIMacOSX_arm64::PrepareTrivialCall(
1686314564Sdim    Thread &thread, lldb::addr_t sp, lldb::addr_t func_addr,
1687314564Sdim    lldb::addr_t return_addr, llvm::ArrayRef<lldb::addr_t> args) const {
1688314564Sdim  RegisterContext *reg_ctx = thread.GetRegisterContext().get();
1689314564Sdim  if (!reg_ctx)
1690314564Sdim    return false;
1691275072Semaste
1692314564Sdim  Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_EXPRESSIONS));
1693275072Semaste
1694314564Sdim  if (log) {
1695314564Sdim    StreamString s;
1696314564Sdim    s.Printf("ABISysV_x86_64::PrepareTrivialCall (tid = 0x%" PRIx64
1697314564Sdim             ", sp = 0x%" PRIx64 ", func_addr = 0x%" PRIx64
1698314564Sdim             ", return_addr = 0x%" PRIx64,
1699314564Sdim             thread.GetID(), (uint64_t)sp, (uint64_t)func_addr,
1700314564Sdim             (uint64_t)return_addr);
1701275072Semaste
1702314564Sdim    for (size_t i = 0; i < args.size(); ++i)
1703314564Sdim      s.Printf(", arg%d = 0x%" PRIx64, static_cast<int>(i + 1), args[i]);
1704314564Sdim    s.PutCString(")");
1705314564Sdim    log->PutString(s.GetString());
1706314564Sdim  }
1707275072Semaste
1708314564Sdim  const uint32_t pc_reg_num = reg_ctx->ConvertRegisterKindToRegisterNumber(
1709314564Sdim      eRegisterKindGeneric, LLDB_REGNUM_GENERIC_PC);
1710314564Sdim  const uint32_t sp_reg_num = reg_ctx->ConvertRegisterKindToRegisterNumber(
1711314564Sdim      eRegisterKindGeneric, LLDB_REGNUM_GENERIC_SP);
1712314564Sdim  const uint32_t ra_reg_num = reg_ctx->ConvertRegisterKindToRegisterNumber(
1713314564Sdim      eRegisterKindGeneric, LLDB_REGNUM_GENERIC_RA);
1714275072Semaste
1715314564Sdim  // x0 - x7 contain first 8 simple args
1716314564Sdim  if (args.size() > 8) // TODO handle more than 6 arguments
1717314564Sdim    return false;
1718275072Semaste
1719314564Sdim  for (size_t i = 0; i < args.size(); ++i) {
1720314564Sdim    const RegisterInfo *reg_info = reg_ctx->GetRegisterInfo(
1721314564Sdim        eRegisterKindGeneric, LLDB_REGNUM_GENERIC_ARG1 + i);
1722314564Sdim    if (log)
1723314564Sdim      log->Printf("About to write arg%d (0x%" PRIx64 ") into %s",
1724314564Sdim                  static_cast<int>(i + 1), args[i], reg_info->name);
1725314564Sdim    if (!reg_ctx->WriteRegisterFromUnsigned(reg_info, args[i]))
1726314564Sdim      return false;
1727314564Sdim  }
1728275072Semaste
1729314564Sdim  // Set "lr" to the return address
1730314564Sdim  if (!reg_ctx->WriteRegisterFromUnsigned(
1731314564Sdim          reg_ctx->GetRegisterInfoAtIndex(ra_reg_num), return_addr))
1732314564Sdim    return false;
1733275072Semaste
1734314564Sdim  // Set "sp" to the requested value
1735314564Sdim  if (!reg_ctx->WriteRegisterFromUnsigned(
1736314564Sdim          reg_ctx->GetRegisterInfoAtIndex(sp_reg_num), sp))
1737314564Sdim    return false;
1738275072Semaste
1739314564Sdim  // Set "pc" to the address requested
1740314564Sdim  if (!reg_ctx->WriteRegisterFromUnsigned(
1741314564Sdim          reg_ctx->GetRegisterInfoAtIndex(pc_reg_num), func_addr))
1742314564Sdim    return false;
1743275072Semaste
1744314564Sdim  return true;
1745275072Semaste}
1746275072Semaste
1747314564Sdimbool ABIMacOSX_arm64::GetArgumentValues(Thread &thread,
1748314564Sdim                                        ValueList &values) const {
1749314564Sdim  uint32_t num_values = values.GetSize();
1750314564Sdim
1751314564Sdim  ExecutionContext exe_ctx(thread.shared_from_this());
1752314564Sdim
1753314564Sdim  // Extract the register context so we can read arguments from registers
1754314564Sdim
1755314564Sdim  RegisterContext *reg_ctx = thread.GetRegisterContext().get();
1756314564Sdim
1757314564Sdim  if (!reg_ctx)
1758314564Sdim    return false;
1759314564Sdim
1760314564Sdim  addr_t sp = 0;
1761314564Sdim
1762314564Sdim  for (uint32_t value_idx = 0; value_idx < num_values; ++value_idx) {
1763314564Sdim    // We currently only support extracting values with Clang QualTypes.
1764314564Sdim    // Do we care about others?
1765314564Sdim    Value *value = values.GetValueAtIndex(value_idx);
1766314564Sdim
1767314564Sdim    if (!value)
1768314564Sdim      return false;
1769314564Sdim
1770314564Sdim    CompilerType value_type = value->GetCompilerType();
1771314564Sdim    if (value_type) {
1772314564Sdim      bool is_signed = false;
1773314564Sdim      size_t bit_width = 0;
1774314564Sdim      if (value_type.IsIntegerOrEnumerationType(is_signed)) {
1775314564Sdim        bit_width = value_type.GetBitSize(&thread);
1776314564Sdim      } else if (value_type.IsPointerOrReferenceType()) {
1777314564Sdim        bit_width = value_type.GetBitSize(&thread);
1778314564Sdim      } else {
1779314564Sdim        // We only handle integer, pointer and reference types currently...
1780275072Semaste        return false;
1781314564Sdim      }
1782314564Sdim
1783314564Sdim      if (bit_width <= (exe_ctx.GetProcessRef().GetAddressByteSize() * 8)) {
1784314564Sdim        if (value_idx < 8) {
1785314564Sdim          // Arguments 1-6 are in x0-x5...
1786314564Sdim          const RegisterInfo *reg_info = nullptr;
1787314564Sdim          // Search by generic ID first, then fall back to by name
1788314564Sdim          uint32_t arg_reg_num = reg_ctx->ConvertRegisterKindToRegisterNumber(
1789314564Sdim              eRegisterKindGeneric, LLDB_REGNUM_GENERIC_ARG1 + value_idx);
1790314564Sdim          if (arg_reg_num != LLDB_INVALID_REGNUM) {
1791314564Sdim            reg_info = reg_ctx->GetRegisterInfoAtIndex(arg_reg_num);
1792314564Sdim          } else {
1793314564Sdim            switch (value_idx) {
1794314564Sdim            case 0:
1795314564Sdim              reg_info = reg_ctx->GetRegisterInfoByName("x0");
1796314564Sdim              break;
1797314564Sdim            case 1:
1798314564Sdim              reg_info = reg_ctx->GetRegisterInfoByName("x1");
1799314564Sdim              break;
1800314564Sdim            case 2:
1801314564Sdim              reg_info = reg_ctx->GetRegisterInfoByName("x2");
1802314564Sdim              break;
1803314564Sdim            case 3:
1804314564Sdim              reg_info = reg_ctx->GetRegisterInfoByName("x3");
1805314564Sdim              break;
1806314564Sdim            case 4:
1807314564Sdim              reg_info = reg_ctx->GetRegisterInfoByName("x4");
1808314564Sdim              break;
1809314564Sdim            case 5:
1810314564Sdim              reg_info = reg_ctx->GetRegisterInfoByName("x5");
1811314564Sdim              break;
1812314564Sdim            case 6:
1813314564Sdim              reg_info = reg_ctx->GetRegisterInfoByName("x6");
1814314564Sdim              break;
1815314564Sdim            case 7:
1816314564Sdim              reg_info = reg_ctx->GetRegisterInfoByName("x7");
1817314564Sdim              break;
1818275072Semaste            }
1819314564Sdim          }
1820314564Sdim
1821314564Sdim          if (reg_info) {
1822314564Sdim            RegisterValue reg_value;
1823314564Sdim
1824314564Sdim            if (reg_ctx->ReadRegister(reg_info, reg_value)) {
1825314564Sdim              if (is_signed)
1826314564Sdim                reg_value.SignExtend(bit_width);
1827314564Sdim              if (!reg_value.GetScalarValue(value->GetScalar()))
1828275072Semaste                return false;
1829314564Sdim              continue;
1830275072Semaste            }
1831314564Sdim          }
1832314564Sdim          return false;
1833314564Sdim        } else {
1834314564Sdim          if (sp == 0) {
1835314564Sdim            // Read the stack pointer if we already haven't read it
1836314564Sdim            sp = reg_ctx->GetSP(0);
1837314564Sdim            if (sp == 0)
1838314564Sdim              return false;
1839314564Sdim          }
1840275072Semaste
1841314564Sdim          // Arguments 5 on up are on the stack
1842314564Sdim          const uint32_t arg_byte_size = (bit_width + (8 - 1)) / 8;
1843321369Sdim          Status error;
1844314564Sdim          if (!exe_ctx.GetProcessRef().ReadScalarIntegerFromMemory(
1845314564Sdim                  sp, arg_byte_size, is_signed, value->GetScalar(), error))
1846314564Sdim            return false;
1847314564Sdim
1848314564Sdim          sp += arg_byte_size;
1849314564Sdim          // Align up to the next 8 byte boundary if needed
1850314564Sdim          if (sp % 8) {
1851314564Sdim            sp >>= 3;
1852314564Sdim            sp += 1;
1853314564Sdim            sp <<= 3;
1854314564Sdim          }
1855275072Semaste        }
1856314564Sdim      }
1857275072Semaste    }
1858314564Sdim  }
1859314564Sdim  return true;
1860275072Semaste}
1861275072Semaste
1862321369SdimStatus
1863321369SdimABIMacOSX_arm64::SetReturnValueObject(lldb::StackFrameSP &frame_sp,
1864321369Sdim                                      lldb::ValueObjectSP &new_value_sp) {
1865321369Sdim  Status error;
1866314564Sdim  if (!new_value_sp) {
1867314564Sdim    error.SetErrorString("Empty value object for return value.");
1868314564Sdim    return error;
1869314564Sdim  }
1870314564Sdim
1871314564Sdim  CompilerType return_value_type = new_value_sp->GetCompilerType();
1872314564Sdim  if (!return_value_type) {
1873314564Sdim    error.SetErrorString("Null clang type for return value.");
1874314564Sdim    return error;
1875314564Sdim  }
1876314564Sdim
1877314564Sdim  Thread *thread = frame_sp->GetThread().get();
1878314564Sdim
1879314564Sdim  RegisterContext *reg_ctx = thread->GetRegisterContext().get();
1880314564Sdim
1881314564Sdim  if (reg_ctx) {
1882314564Sdim    DataExtractor data;
1883321369Sdim    Status data_error;
1884314564Sdim    const uint64_t byte_size = new_value_sp->GetData(data, data_error);
1885314564Sdim    if (data_error.Fail()) {
1886314564Sdim      error.SetErrorStringWithFormat(
1887314564Sdim          "Couldn't convert return value to raw data: %s",
1888314564Sdim          data_error.AsCString());
1889314564Sdim      return error;
1890275072Semaste    }
1891275072Semaste
1892314564Sdim    const uint32_t type_flags = return_value_type.GetTypeInfo(nullptr);
1893314564Sdim    if (type_flags & eTypeIsScalar || type_flags & eTypeIsPointer) {
1894314564Sdim      if (type_flags & eTypeIsInteger || type_flags & eTypeIsPointer) {
1895314564Sdim        // Extract the register context so we can read arguments from registers
1896314564Sdim        lldb::offset_t offset = 0;
1897314564Sdim        if (byte_size <= 16) {
1898314564Sdim          const RegisterInfo *x0_info = reg_ctx->GetRegisterInfoByName("x0", 0);
1899314564Sdim          if (byte_size <= 8) {
1900314564Sdim            uint64_t raw_value = data.GetMaxU64(&offset, byte_size);
1901275072Semaste
1902314564Sdim            if (!reg_ctx->WriteRegisterFromUnsigned(x0_info, raw_value))
1903314564Sdim              error.SetErrorString("failed to write register x0");
1904314564Sdim          } else {
1905314564Sdim            uint64_t raw_value = data.GetMaxU64(&offset, 8);
1906314564Sdim
1907314564Sdim            if (reg_ctx->WriteRegisterFromUnsigned(x0_info, raw_value)) {
1908314564Sdim              const RegisterInfo *x1_info =
1909314564Sdim                  reg_ctx->GetRegisterInfoByName("x1", 0);
1910314564Sdim              raw_value = data.GetMaxU64(&offset, byte_size - offset);
1911314564Sdim
1912314564Sdim              if (!reg_ctx->WriteRegisterFromUnsigned(x1_info, raw_value))
1913314564Sdim                error.SetErrorString("failed to write register x1");
1914275072Semaste            }
1915314564Sdim          }
1916314564Sdim        } else {
1917314564Sdim          error.SetErrorString("We don't support returning longer than 128 bit "
1918314564Sdim                               "integer values at present.");
1919314564Sdim        }
1920314564Sdim      } else if (type_flags & eTypeIsFloat) {
1921314564Sdim        if (type_flags & eTypeIsComplex) {
1922314564Sdim          // Don't handle complex yet.
1923314564Sdim          error.SetErrorString(
1924314564Sdim              "returning complex float values are not supported");
1925314564Sdim        } else {
1926314564Sdim          const RegisterInfo *v0_info = reg_ctx->GetRegisterInfoByName("v0", 0);
1927275072Semaste
1928314564Sdim          if (v0_info) {
1929314564Sdim            if (byte_size <= 16) {
1930314564Sdim              if (byte_size <= RegisterValue::GetMaxByteSize()) {
1931314564Sdim                RegisterValue reg_value;
1932314564Sdim                error = reg_value.SetValueFromData(v0_info, data, 0, true);
1933314564Sdim                if (error.Success()) {
1934314564Sdim                  if (!reg_ctx->WriteRegister(v0_info, reg_value))
1935314564Sdim                    error.SetErrorString("failed to write register v0");
1936275072Semaste                }
1937314564Sdim              } else {
1938314564Sdim                error.SetErrorStringWithFormat(
1939314564Sdim                    "returning float values with a byte size of %" PRIu64
1940314564Sdim                    " are not supported",
1941314564Sdim                    byte_size);
1942314564Sdim              }
1943314564Sdim            } else {
1944314564Sdim              error.SetErrorString("returning float values longer than 128 "
1945314564Sdim                                   "bits are not supported");
1946275072Semaste            }
1947314564Sdim          } else {
1948314564Sdim            error.SetErrorString("v0 register is not available on this target");
1949314564Sdim          }
1950275072Semaste        }
1951314564Sdim      }
1952314564Sdim    } else if (type_flags & eTypeIsVector) {
1953314564Sdim      if (byte_size > 0) {
1954314564Sdim        const RegisterInfo *v0_info = reg_ctx->GetRegisterInfoByName("v0", 0);
1955314564Sdim
1956314564Sdim        if (v0_info) {
1957314564Sdim          if (byte_size <= v0_info->byte_size) {
1958314564Sdim            RegisterValue reg_value;
1959314564Sdim            error = reg_value.SetValueFromData(v0_info, data, 0, true);
1960314564Sdim            if (error.Success()) {
1961314564Sdim              if (!reg_ctx->WriteRegister(v0_info, reg_value))
1962314564Sdim                error.SetErrorString("failed to write register v0");
1963275072Semaste            }
1964314564Sdim          }
1965275072Semaste        }
1966314564Sdim      }
1967275072Semaste    }
1968314564Sdim  } else {
1969314564Sdim    error.SetErrorString("no registers are available");
1970314564Sdim  }
1971314564Sdim
1972314564Sdim  return error;
1973275072Semaste}
1974275072Semaste
1975314564Sdimbool ABIMacOSX_arm64::CreateFunctionEntryUnwindPlan(UnwindPlan &unwind_plan) {
1976314564Sdim  unwind_plan.Clear();
1977314564Sdim  unwind_plan.SetRegisterKind(eRegisterKindDWARF);
1978275072Semaste
1979314564Sdim  uint32_t lr_reg_num = arm64_dwarf::lr;
1980314564Sdim  uint32_t sp_reg_num = arm64_dwarf::sp;
1981314564Sdim  uint32_t pc_reg_num = arm64_dwarf::pc;
1982314564Sdim
1983314564Sdim  UnwindPlan::RowSP row(new UnwindPlan::Row);
1984314564Sdim
1985314564Sdim  // Our previous Call Frame Address is the stack pointer
1986314564Sdim  row->GetCFAValue().SetIsRegisterPlusOffset(sp_reg_num, 0);
1987314564Sdim
1988314564Sdim  // Our previous PC is in the LR
1989314564Sdim  row->SetRegisterLocationToRegister(pc_reg_num, lr_reg_num, true);
1990314564Sdim
1991314564Sdim  unwind_plan.AppendRow(row);
1992314564Sdim
1993314564Sdim  // All other registers are the same.
1994314564Sdim
1995314564Sdim  unwind_plan.SetSourceName("arm64 at-func-entry default");
1996314564Sdim  unwind_plan.SetSourcedFromCompiler(eLazyBoolNo);
1997314564Sdim
1998314564Sdim  return true;
1999275072Semaste}
2000275072Semaste
2001314564Sdimbool ABIMacOSX_arm64::CreateDefaultUnwindPlan(UnwindPlan &unwind_plan) {
2002314564Sdim  unwind_plan.Clear();
2003314564Sdim  unwind_plan.SetRegisterKind(eRegisterKindDWARF);
2004275072Semaste
2005314564Sdim  uint32_t fp_reg_num = arm64_dwarf::fp;
2006314564Sdim  uint32_t pc_reg_num = arm64_dwarf::pc;
2007314564Sdim
2008314564Sdim  UnwindPlan::RowSP row(new UnwindPlan::Row);
2009314564Sdim  const int32_t ptr_size = 8;
2010314564Sdim
2011314564Sdim  row->GetCFAValue().SetIsRegisterPlusOffset(fp_reg_num, 2 * ptr_size);
2012314564Sdim  row->SetOffset(0);
2013314564Sdim
2014314564Sdim  row->SetRegisterLocationToAtCFAPlusOffset(fp_reg_num, ptr_size * -2, true);
2015314564Sdim  row->SetRegisterLocationToAtCFAPlusOffset(pc_reg_num, ptr_size * -1, true);
2016314564Sdim
2017314564Sdim  unwind_plan.AppendRow(row);
2018314564Sdim  unwind_plan.SetSourceName("arm64-apple-darwin default unwind plan");
2019314564Sdim  unwind_plan.SetSourcedFromCompiler(eLazyBoolNo);
2020314564Sdim  unwind_plan.SetUnwindPlanValidAtAllInstructions(eLazyBoolNo);
2021314564Sdim  return true;
2022275072Semaste}
2023275072Semaste
2024314564Sdim// AAPCS64 (Procedure Call Standard for the ARM 64-bit Architecture) says
2025314564Sdim// registers x19 through x28 and sp are callee preserved.
2026314564Sdim// v8-v15 are non-volatile (and specifically only the lower 8 bytes of these
2027314564Sdim// regs),
2028275072Semaste// the rest of the fp/SIMD registers are volatile.
2029275072Semaste
2030275072Semaste// We treat x29 as callee preserved also, else the unwinder won't try to
2031275072Semaste// retrieve fp saves.
2032275072Semaste
2033314564Sdimbool ABIMacOSX_arm64::RegisterIsVolatile(const RegisterInfo *reg_info) {
2034314564Sdim  if (reg_info) {
2035314564Sdim    const char *name = reg_info->name;
2036275072Semaste
2037314564Sdim    // Sometimes we'll be called with the "alternate" name for these registers;
2038314564Sdim    // recognize them as non-volatile.
2039275072Semaste
2040314564Sdim    if (name[0] == 'p' && name[1] == 'c') // pc
2041314564Sdim      return false;
2042314564Sdim    if (name[0] == 'f' && name[1] == 'p') // fp
2043314564Sdim      return false;
2044314564Sdim    if (name[0] == 's' && name[1] == 'p') // sp
2045314564Sdim      return false;
2046314564Sdim    if (name[0] == 'l' && name[1] == 'r') // lr
2047314564Sdim      return false;
2048275072Semaste
2049314564Sdim    if (name[0] == 'x') {
2050314564Sdim      // Volatile registers: x0-x18, x30 (lr)
2051314564Sdim      // Return false for the non-volatile gpr regs, true for everything else
2052314564Sdim      switch (name[1]) {
2053314564Sdim      case '1':
2054314564Sdim        switch (name[2]) {
2055314564Sdim        case '9':
2056314564Sdim          return false; // x19 is non-volatile
2057314564Sdim        default:
2058314564Sdim          return true;
2059275072Semaste        }
2060314564Sdim        break;
2061314564Sdim      case '2':
2062314564Sdim        switch (name[2]) {
2063314564Sdim        case '0':
2064314564Sdim        case '1':
2065314564Sdim        case '2':
2066314564Sdim        case '3':
2067314564Sdim        case '4':
2068314564Sdim        case '5':
2069314564Sdim        case '6':
2070314564Sdim        case '7':
2071314564Sdim        case '8':
2072314564Sdim          return false; // x20 - 28 are non-volatile
2073314564Sdim        case '9':
2074314564Sdim          return false; // x29 aka fp treat as non-volatile on Darwin
2075314564Sdim        default:
2076314564Sdim          return true;
2077275072Semaste        }
2078314564Sdim      case '3': // x30 aka lr treat as non-volatile
2079314564Sdim        if (name[2] == '0')
2080314564Sdim          return false;
2081314564Sdim        break;
2082314564Sdim      default:
2083314564Sdim        return true;
2084314564Sdim      }
2085314564Sdim    } else if (name[0] == 'v' || name[0] == 's' || name[0] == 'd') {
2086314564Sdim      // Volatile registers: v0-7, v16-v31
2087314564Sdim      // Return false for non-volatile fp/SIMD regs, true for everything else
2088314564Sdim      switch (name[1]) {
2089314564Sdim      case '8':
2090314564Sdim      case '9':
2091314564Sdim        return false; // v8-v9 are non-volatile
2092314564Sdim      case '1':
2093314564Sdim        switch (name[2]) {
2094314564Sdim        case '0':
2095314564Sdim        case '1':
2096314564Sdim        case '2':
2097314564Sdim        case '3':
2098314564Sdim        case '4':
2099314564Sdim        case '5':
2100314564Sdim          return false; // v10-v15 are non-volatile
2101314564Sdim        default:
2102314564Sdim          return true;
2103314564Sdim        }
2104314564Sdim      default:
2105314564Sdim        return true;
2106314564Sdim      }
2107275072Semaste    }
2108314564Sdim  }
2109314564Sdim  return true;
2110275072Semaste}
2111275072Semaste
2112314564Sdimstatic bool LoadValueFromConsecutiveGPRRegisters(
2113314564Sdim    ExecutionContext &exe_ctx, RegisterContext *reg_ctx,
2114314564Sdim    const CompilerType &value_type,
2115314564Sdim    bool is_return_value, // false => parameter, true => return value
2116314564Sdim    uint32_t &NGRN,       // NGRN (see ABI documentation)
2117314564Sdim    uint32_t &NSRN,       // NSRN (see ABI documentation)
2118314564Sdim    DataExtractor &data) {
2119314564Sdim  const size_t byte_size = value_type.GetByteSize(nullptr);
2120314564Sdim
2121314564Sdim  if (byte_size == 0)
2122314564Sdim    return false;
2123314564Sdim
2124314564Sdim  std::unique_ptr<DataBufferHeap> heap_data_ap(
2125314564Sdim      new DataBufferHeap(byte_size, 0));
2126314564Sdim  const ByteOrder byte_order = exe_ctx.GetProcessRef().GetByteOrder();
2127321369Sdim  Status error;
2128314564Sdim
2129314564Sdim  CompilerType base_type;
2130314564Sdim  const uint32_t homogeneous_count =
2131314564Sdim      value_type.IsHomogeneousAggregate(&base_type);
2132314564Sdim  if (homogeneous_count > 0 && homogeneous_count <= 8) {
2133314564Sdim    // Make sure we have enough registers
2134314564Sdim    if (NSRN < 8 && (8 - NSRN) >= homogeneous_count) {
2135314564Sdim      if (!base_type)
2136275072Semaste        return false;
2137314564Sdim      const size_t base_byte_size = base_type.GetByteSize(nullptr);
2138314564Sdim      uint32_t data_offset = 0;
2139275072Semaste
2140314564Sdim      for (uint32_t i = 0; i < homogeneous_count; ++i) {
2141314564Sdim        char v_name[8];
2142314564Sdim        ::snprintf(v_name, sizeof(v_name), "v%u", NSRN);
2143314564Sdim        const RegisterInfo *reg_info =
2144314564Sdim            reg_ctx->GetRegisterInfoByName(v_name, 0);
2145314564Sdim        if (reg_info == nullptr)
2146314564Sdim          return false;
2147275072Semaste
2148314564Sdim        if (base_byte_size > reg_info->byte_size)
2149314564Sdim          return false;
2150275072Semaste
2151314564Sdim        RegisterValue reg_value;
2152314564Sdim
2153314564Sdim        if (!reg_ctx->ReadRegister(reg_info, reg_value))
2154314564Sdim          return false;
2155314564Sdim
2156314564Sdim        // Make sure we have enough room in "heap_data_ap"
2157314564Sdim        if ((data_offset + base_byte_size) <= heap_data_ap->GetByteSize()) {
2158314564Sdim          const size_t bytes_copied = reg_value.GetAsMemoryData(
2159314564Sdim              reg_info, heap_data_ap->GetBytes() + data_offset, base_byte_size,
2160314564Sdim              byte_order, error);
2161314564Sdim          if (bytes_copied != base_byte_size)
2162314564Sdim            return false;
2163314564Sdim          data_offset += bytes_copied;
2164314564Sdim          ++NSRN;
2165314564Sdim        } else
2166314564Sdim          return false;
2167314564Sdim      }
2168314564Sdim      data.SetByteOrder(byte_order);
2169314564Sdim      data.SetAddressByteSize(exe_ctx.GetProcessRef().GetAddressByteSize());
2170314564Sdim      data.SetData(DataBufferSP(heap_data_ap.release()));
2171314564Sdim      return true;
2172275072Semaste    }
2173314564Sdim  }
2174275072Semaste
2175314564Sdim  const size_t max_reg_byte_size = 16;
2176314564Sdim  if (byte_size <= max_reg_byte_size) {
2177314564Sdim    size_t bytes_left = byte_size;
2178314564Sdim    uint32_t data_offset = 0;
2179314564Sdim    while (data_offset < byte_size) {
2180314564Sdim      if (NGRN >= 8)
2181314564Sdim        return false;
2182275072Semaste
2183314564Sdim      uint32_t reg_num = reg_ctx->ConvertRegisterKindToRegisterNumber(
2184314564Sdim          eRegisterKindGeneric, LLDB_REGNUM_GENERIC_ARG1 + NGRN);
2185314564Sdim      if (reg_num == LLDB_INVALID_REGNUM)
2186314564Sdim        return false;
2187314564Sdim
2188314564Sdim      const RegisterInfo *reg_info = reg_ctx->GetRegisterInfoAtIndex(reg_num);
2189314564Sdim      if (reg_info == nullptr)
2190314564Sdim        return false;
2191314564Sdim
2192314564Sdim      RegisterValue reg_value;
2193314564Sdim
2194314564Sdim      if (!reg_ctx->ReadRegister(reg_info, reg_value))
2195314564Sdim        return false;
2196314564Sdim
2197314564Sdim      const size_t curr_byte_size = std::min<size_t>(8, bytes_left);
2198314564Sdim      const size_t bytes_copied = reg_value.GetAsMemoryData(
2199314564Sdim          reg_info, heap_data_ap->GetBytes() + data_offset, curr_byte_size,
2200314564Sdim          byte_order, error);
2201314564Sdim      if (bytes_copied == 0)
2202314564Sdim        return false;
2203314564Sdim      if (bytes_copied >= bytes_left)
2204314564Sdim        break;
2205314564Sdim      data_offset += bytes_copied;
2206314564Sdim      bytes_left -= bytes_copied;
2207314564Sdim      ++NGRN;
2208275072Semaste    }
2209314564Sdim  } else {
2210314564Sdim    const RegisterInfo *reg_info = nullptr;
2211314564Sdim    if (is_return_value) {
2212314564Sdim      // We are assuming we are decoding this immediately after returning
2213314564Sdim      // from a function call and that the address of the structure is in x8
2214314564Sdim      reg_info = reg_ctx->GetRegisterInfoByName("x8", 0);
2215314564Sdim    } else {
2216314564Sdim      // We are assuming we are stopped at the first instruction in a function
2217314564Sdim      // and that the ABI is being respected so all parameters appear where they
2218314564Sdim      // should be (functions with no external linkage can legally violate the
2219314564Sdim      // ABI).
2220314564Sdim      if (NGRN >= 8)
2221314564Sdim        return false;
2222275072Semaste
2223314564Sdim      uint32_t reg_num = reg_ctx->ConvertRegisterKindToRegisterNumber(
2224314564Sdim          eRegisterKindGeneric, LLDB_REGNUM_GENERIC_ARG1 + NGRN);
2225314564Sdim      if (reg_num == LLDB_INVALID_REGNUM)
2226314564Sdim        return false;
2227314564Sdim      reg_info = reg_ctx->GetRegisterInfoAtIndex(reg_num);
2228314564Sdim      if (reg_info == nullptr)
2229314564Sdim        return false;
2230314564Sdim      ++NGRN;
2231314564Sdim    }
2232275072Semaste
2233314564Sdim    if (reg_info == nullptr)
2234314564Sdim      return false;
2235275072Semaste
2236314564Sdim    const lldb::addr_t value_addr =
2237314564Sdim        reg_ctx->ReadRegisterAsUnsigned(reg_info, LLDB_INVALID_ADDRESS);
2238275072Semaste
2239314564Sdim    if (value_addr == LLDB_INVALID_ADDRESS)
2240314564Sdim      return false;
2241314564Sdim
2242314564Sdim    if (exe_ctx.GetProcessRef().ReadMemory(
2243314564Sdim            value_addr, heap_data_ap->GetBytes(), heap_data_ap->GetByteSize(),
2244314564Sdim            error) != heap_data_ap->GetByteSize()) {
2245314564Sdim      return false;
2246275072Semaste    }
2247314564Sdim  }
2248275072Semaste
2249314564Sdim  data.SetByteOrder(byte_order);
2250314564Sdim  data.SetAddressByteSize(exe_ctx.GetProcessRef().GetAddressByteSize());
2251314564Sdim  data.SetData(DataBufferSP(heap_data_ap.release()));
2252314564Sdim  return true;
2253275072Semaste}
2254275072Semaste
2255314564SdimValueObjectSP ABIMacOSX_arm64::GetReturnValueObjectImpl(
2256314564Sdim    Thread &thread, CompilerType &return_compiler_type) const {
2257314564Sdim  ValueObjectSP return_valobj_sp;
2258314564Sdim  Value value;
2259275072Semaste
2260314564Sdim  ExecutionContext exe_ctx(thread.shared_from_this());
2261314564Sdim  if (exe_ctx.GetTargetPtr() == nullptr || exe_ctx.GetProcessPtr() == nullptr)
2262314564Sdim    return return_valobj_sp;
2263275072Semaste
2264314564Sdim  // value.SetContext (Value::eContextTypeClangType, return_compiler_type);
2265314564Sdim  value.SetCompilerType(return_compiler_type);
2266314564Sdim
2267314564Sdim  RegisterContext *reg_ctx = thread.GetRegisterContext().get();
2268314564Sdim  if (!reg_ctx)
2269314564Sdim    return return_valobj_sp;
2270314564Sdim
2271314564Sdim  const size_t byte_size = return_compiler_type.GetByteSize(nullptr);
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
2280314564Sdim      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;
2288314564Sdim          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) {
2298314564Sdim                if (byte_size <=
2299314564Sdim                    x0_reg_info->byte_size + x1_reg_info->byte_size) {
2300314564Sdim                  std::unique_ptr<DataBufferHeap> heap_data_ap(
2301314564Sdim                      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(
2310314564Sdim                            x0_reg_info, heap_data_ap->GetBytes() + 0, 8,
2311314564Sdim                            byte_order, error) &&
2312314564Sdim                        x1_reg_value.GetAsMemoryData(
2313314564Sdim                            x1_reg_info, heap_data_ap->GetBytes() + 8, 8,
2314314564Sdim                            byte_order, error)) {
2315314564Sdim                      DataExtractor data(
2316314564Sdim                          DataBufferSP(heap_data_ap.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 {
2366314564Sdim        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;
2374314564Sdim              if (byte_size == sizeof(float)) {
2375314564Sdim                value.GetScalar() = data.GetFloat(&offset);
2376314564Sdim                success = true;
2377314564Sdim              } else if (byte_size == sizeof(double)) {
2378314564Sdim                value.GetScalar() = data.GetDouble(&offset);
2379314564Sdim                success = true;
2380314564Sdim              } 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) {
2394314564Sdim    if (byte_size > 0) {
2395314564Sdim
2396314564Sdim      const RegisterInfo *v0_info = reg_ctx->GetRegisterInfoByName("v0", 0);
2397314564Sdim
2398314564Sdim      if (v0_info) {
2399314564Sdim        if (byte_size <= v0_info->byte_size) {
2400314564Sdim          std::unique_ptr<DataBufferHeap> heap_data_ap(
2401314564Sdim              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;
2406314564Sdim            if (reg_value.GetAsMemoryData(v0_info, heap_data_ap->GetBytes(),
2407314564Sdim                                          heap_data_ap->GetByteSize(),
2408314564Sdim                                          byte_order, error)) {
2409314564Sdim              DataExtractor data(DataBufferSP(heap_data_ap.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//------------------------------------------------------------------
2445275072Semaste// PluginInterface protocol
2446275072Semaste//------------------------------------------------------------------
2447309124Sdim
2448314564SdimConstString ABIMacOSX_arm64::GetPluginNameStatic() {
2449314564Sdim  static ConstString g_plugin_name("ABIMacOSX_arm64");
2450314564Sdim  return g_plugin_name;
2451275072Semaste}
2452275072Semaste
2453314564Sdimuint32_t ABIMacOSX_arm64::GetPluginVersion() { return 1; }
2454