15ffd83dbSDimitry Andric //===-- ABIMacOSX_arm.cpp -------------------------------------------------===//
25ffd83dbSDimitry Andric //
35ffd83dbSDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
45ffd83dbSDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
55ffd83dbSDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
65ffd83dbSDimitry Andric //
75ffd83dbSDimitry Andric //===----------------------------------------------------------------------===//
85ffd83dbSDimitry Andric
95ffd83dbSDimitry Andric #include "ABIMacOSX_arm.h"
105ffd83dbSDimitry Andric
11bdd1243dSDimitry Andric #include <optional>
125ffd83dbSDimitry Andric #include <vector>
135ffd83dbSDimitry Andric
145ffd83dbSDimitry Andric #include "llvm/ADT/STLExtras.h"
15*06c3fb27SDimitry Andric #include "llvm/TargetParser/Triple.h"
165ffd83dbSDimitry Andric
175ffd83dbSDimitry Andric #include "lldb/Core/Module.h"
185ffd83dbSDimitry Andric #include "lldb/Core/PluginManager.h"
195ffd83dbSDimitry Andric #include "lldb/Core/Value.h"
205ffd83dbSDimitry Andric #include "lldb/Core/ValueObjectConstResult.h"
215ffd83dbSDimitry Andric #include "lldb/Symbol/UnwindPlan.h"
225ffd83dbSDimitry Andric #include "lldb/Target/Process.h"
235ffd83dbSDimitry Andric #include "lldb/Target/RegisterContext.h"
245ffd83dbSDimitry Andric #include "lldb/Target/Target.h"
255ffd83dbSDimitry Andric #include "lldb/Target/Thread.h"
265ffd83dbSDimitry Andric #include "lldb/Utility/ConstString.h"
275ffd83dbSDimitry Andric #include "lldb/Utility/RegisterValue.h"
285ffd83dbSDimitry Andric #include "lldb/Utility/Scalar.h"
295ffd83dbSDimitry Andric #include "lldb/Utility/Status.h"
305ffd83dbSDimitry Andric
315ffd83dbSDimitry Andric #include "Plugins/Process/Utility/ARMDefines.h"
325ffd83dbSDimitry Andric #include "Utility/ARM_DWARF_Registers.h"
335ffd83dbSDimitry Andric #include "Utility/ARM_ehframe_Registers.h"
345ffd83dbSDimitry Andric
355ffd83dbSDimitry Andric using namespace lldb;
365ffd83dbSDimitry Andric using namespace lldb_private;
375ffd83dbSDimitry Andric
38e8d8bef9SDimitry Andric static const RegisterInfo g_register_infos[] = {
395ffd83dbSDimitry Andric // NAME ALT SZ OFF ENCODING FORMAT EH_FRAME
405ffd83dbSDimitry Andric // DWARF GENERIC PROCESS PLUGIN
415ffd83dbSDimitry Andric // LLDB NATIVE
425ffd83dbSDimitry Andric // ========== ======= == === ============= ============
435ffd83dbSDimitry Andric // ======================= =================== ===========================
445ffd83dbSDimitry Andric // ======================= ======================
455ffd83dbSDimitry Andric {"r0",
46349cc55cSDimitry Andric nullptr,
475ffd83dbSDimitry Andric 4,
485ffd83dbSDimitry Andric 0,
495ffd83dbSDimitry Andric eEncodingUint,
505ffd83dbSDimitry Andric eFormatHex,
515ffd83dbSDimitry Andric {ehframe_r0, dwarf_r0, LLDB_REGNUM_GENERIC_ARG1, LLDB_INVALID_REGNUM,
525ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
535ffd83dbSDimitry Andric nullptr,
545ffd83dbSDimitry Andric nullptr,
55*06c3fb27SDimitry Andric nullptr,
56349cc55cSDimitry Andric },
575ffd83dbSDimitry Andric {"r1",
58349cc55cSDimitry Andric nullptr,
595ffd83dbSDimitry Andric 4,
605ffd83dbSDimitry Andric 0,
615ffd83dbSDimitry Andric eEncodingUint,
625ffd83dbSDimitry Andric eFormatHex,
635ffd83dbSDimitry Andric {ehframe_r1, dwarf_r1, LLDB_REGNUM_GENERIC_ARG2, LLDB_INVALID_REGNUM,
645ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
655ffd83dbSDimitry Andric nullptr,
665ffd83dbSDimitry Andric nullptr,
67*06c3fb27SDimitry Andric nullptr,
68349cc55cSDimitry Andric },
695ffd83dbSDimitry Andric {"r2",
70349cc55cSDimitry Andric nullptr,
715ffd83dbSDimitry Andric 4,
725ffd83dbSDimitry Andric 0,
735ffd83dbSDimitry Andric eEncodingUint,
745ffd83dbSDimitry Andric eFormatHex,
755ffd83dbSDimitry Andric {ehframe_r2, dwarf_r2, LLDB_REGNUM_GENERIC_ARG3, LLDB_INVALID_REGNUM,
765ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
775ffd83dbSDimitry Andric nullptr,
785ffd83dbSDimitry Andric nullptr,
79*06c3fb27SDimitry Andric nullptr,
80349cc55cSDimitry Andric },
815ffd83dbSDimitry Andric {"r3",
82349cc55cSDimitry Andric nullptr,
835ffd83dbSDimitry Andric 4,
845ffd83dbSDimitry Andric 0,
855ffd83dbSDimitry Andric eEncodingUint,
865ffd83dbSDimitry Andric eFormatHex,
875ffd83dbSDimitry Andric {ehframe_r3, dwarf_r3, LLDB_REGNUM_GENERIC_ARG4, LLDB_INVALID_REGNUM,
885ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
895ffd83dbSDimitry Andric nullptr,
905ffd83dbSDimitry Andric nullptr,
91*06c3fb27SDimitry Andric nullptr,
92349cc55cSDimitry Andric },
935ffd83dbSDimitry Andric {"r4",
945ffd83dbSDimitry Andric nullptr,
955ffd83dbSDimitry Andric 4,
965ffd83dbSDimitry Andric 0,
975ffd83dbSDimitry Andric eEncodingUint,
985ffd83dbSDimitry Andric eFormatHex,
995ffd83dbSDimitry Andric {ehframe_r4, dwarf_r4, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1005ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
1015ffd83dbSDimitry Andric nullptr,
1025ffd83dbSDimitry Andric nullptr,
103*06c3fb27SDimitry Andric nullptr,
104349cc55cSDimitry Andric },
1055ffd83dbSDimitry Andric {"r5",
1065ffd83dbSDimitry Andric nullptr,
1075ffd83dbSDimitry Andric 4,
1085ffd83dbSDimitry Andric 0,
1095ffd83dbSDimitry Andric eEncodingUint,
1105ffd83dbSDimitry Andric eFormatHex,
1115ffd83dbSDimitry Andric {ehframe_r5, dwarf_r5, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1125ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
1135ffd83dbSDimitry Andric nullptr,
1145ffd83dbSDimitry Andric nullptr,
115*06c3fb27SDimitry Andric nullptr,
116349cc55cSDimitry Andric },
1175ffd83dbSDimitry Andric {"r6",
1185ffd83dbSDimitry Andric nullptr,
1195ffd83dbSDimitry Andric 4,
1205ffd83dbSDimitry Andric 0,
1215ffd83dbSDimitry Andric eEncodingUint,
1225ffd83dbSDimitry Andric eFormatHex,
1235ffd83dbSDimitry Andric {ehframe_r6, dwarf_r6, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1245ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
1255ffd83dbSDimitry Andric nullptr,
1265ffd83dbSDimitry Andric nullptr,
127*06c3fb27SDimitry Andric nullptr,
128349cc55cSDimitry Andric },
1295ffd83dbSDimitry Andric {"r7",
1305ffd83dbSDimitry Andric nullptr,
1315ffd83dbSDimitry Andric 4,
1325ffd83dbSDimitry Andric 0,
1335ffd83dbSDimitry Andric eEncodingUint,
1345ffd83dbSDimitry Andric eFormatHex,
1355ffd83dbSDimitry Andric {ehframe_r7, dwarf_r7, LLDB_REGNUM_GENERIC_FP, LLDB_INVALID_REGNUM,
1365ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
1375ffd83dbSDimitry Andric nullptr,
1385ffd83dbSDimitry Andric nullptr,
139*06c3fb27SDimitry Andric nullptr,
140349cc55cSDimitry Andric },
1415ffd83dbSDimitry Andric {"r8",
1425ffd83dbSDimitry Andric nullptr,
1435ffd83dbSDimitry Andric 4,
1445ffd83dbSDimitry Andric 0,
1455ffd83dbSDimitry Andric eEncodingUint,
1465ffd83dbSDimitry Andric eFormatHex,
1475ffd83dbSDimitry Andric {ehframe_r8, dwarf_r8, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1485ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
1495ffd83dbSDimitry Andric nullptr,
1505ffd83dbSDimitry Andric nullptr,
151*06c3fb27SDimitry Andric nullptr,
152349cc55cSDimitry Andric },
1535ffd83dbSDimitry Andric {"r9",
1545ffd83dbSDimitry Andric nullptr,
1555ffd83dbSDimitry Andric 4,
1565ffd83dbSDimitry Andric 0,
1575ffd83dbSDimitry Andric eEncodingUint,
1585ffd83dbSDimitry Andric eFormatHex,
1595ffd83dbSDimitry Andric {ehframe_r9, dwarf_r9, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1605ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
1615ffd83dbSDimitry Andric nullptr,
1625ffd83dbSDimitry Andric nullptr,
163*06c3fb27SDimitry Andric nullptr,
164349cc55cSDimitry Andric },
1655ffd83dbSDimitry Andric {"r10",
1665ffd83dbSDimitry Andric nullptr,
1675ffd83dbSDimitry Andric 4,
1685ffd83dbSDimitry Andric 0,
1695ffd83dbSDimitry Andric eEncodingUint,
1705ffd83dbSDimitry Andric eFormatHex,
1715ffd83dbSDimitry Andric {ehframe_r10, dwarf_r10, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1725ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
1735ffd83dbSDimitry Andric nullptr,
1745ffd83dbSDimitry Andric nullptr,
175*06c3fb27SDimitry Andric nullptr,
176349cc55cSDimitry Andric },
1775ffd83dbSDimitry Andric {"r11",
1785ffd83dbSDimitry Andric nullptr,
1795ffd83dbSDimitry Andric 4,
1805ffd83dbSDimitry Andric 0,
1815ffd83dbSDimitry Andric eEncodingUint,
1825ffd83dbSDimitry Andric eFormatHex,
1835ffd83dbSDimitry Andric {ehframe_r11, dwarf_r11, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1845ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
1855ffd83dbSDimitry Andric nullptr,
1865ffd83dbSDimitry Andric nullptr,
187*06c3fb27SDimitry Andric nullptr,
188349cc55cSDimitry Andric },
1895ffd83dbSDimitry Andric {"r12",
1905ffd83dbSDimitry Andric nullptr,
1915ffd83dbSDimitry Andric 4,
1925ffd83dbSDimitry Andric 0,
1935ffd83dbSDimitry Andric eEncodingUint,
1945ffd83dbSDimitry Andric eFormatHex,
1955ffd83dbSDimitry Andric {ehframe_r12, dwarf_r12, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
1965ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
1975ffd83dbSDimitry Andric nullptr,
1985ffd83dbSDimitry Andric nullptr,
199*06c3fb27SDimitry Andric nullptr,
200349cc55cSDimitry Andric },
2015ffd83dbSDimitry Andric {"sp",
2025ffd83dbSDimitry Andric "r13",
2035ffd83dbSDimitry Andric 4,
2045ffd83dbSDimitry Andric 0,
2055ffd83dbSDimitry Andric eEncodingUint,
2065ffd83dbSDimitry Andric eFormatHex,
2075ffd83dbSDimitry Andric {ehframe_sp, dwarf_sp, LLDB_REGNUM_GENERIC_SP, LLDB_INVALID_REGNUM,
2085ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
2095ffd83dbSDimitry Andric nullptr,
2105ffd83dbSDimitry Andric nullptr,
211*06c3fb27SDimitry Andric nullptr,
212349cc55cSDimitry Andric },
2135ffd83dbSDimitry Andric {"lr",
2145ffd83dbSDimitry Andric "r14",
2155ffd83dbSDimitry Andric 4,
2165ffd83dbSDimitry Andric 0,
2175ffd83dbSDimitry Andric eEncodingUint,
2185ffd83dbSDimitry Andric eFormatHex,
2195ffd83dbSDimitry Andric {ehframe_lr, dwarf_lr, LLDB_REGNUM_GENERIC_RA, LLDB_INVALID_REGNUM,
2205ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
2215ffd83dbSDimitry Andric nullptr,
2225ffd83dbSDimitry Andric nullptr,
223*06c3fb27SDimitry Andric nullptr,
224349cc55cSDimitry Andric },
2255ffd83dbSDimitry Andric {"pc",
2265ffd83dbSDimitry Andric "r15",
2275ffd83dbSDimitry Andric 4,
2285ffd83dbSDimitry Andric 0,
2295ffd83dbSDimitry Andric eEncodingUint,
2305ffd83dbSDimitry Andric eFormatHex,
2315ffd83dbSDimitry Andric {ehframe_pc, dwarf_pc, LLDB_REGNUM_GENERIC_PC, LLDB_INVALID_REGNUM,
2325ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
2335ffd83dbSDimitry Andric nullptr,
2345ffd83dbSDimitry Andric nullptr,
235*06c3fb27SDimitry Andric nullptr,
236349cc55cSDimitry Andric },
2375ffd83dbSDimitry Andric {"cpsr",
2385ffd83dbSDimitry Andric "psr",
2395ffd83dbSDimitry Andric 4,
2405ffd83dbSDimitry Andric 0,
2415ffd83dbSDimitry Andric eEncodingUint,
2425ffd83dbSDimitry Andric eFormatHex,
2435ffd83dbSDimitry Andric {ehframe_cpsr, dwarf_cpsr, LLDB_REGNUM_GENERIC_FLAGS, LLDB_INVALID_REGNUM,
2445ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
2455ffd83dbSDimitry Andric nullptr,
2465ffd83dbSDimitry Andric nullptr,
247*06c3fb27SDimitry Andric nullptr,
248349cc55cSDimitry Andric },
2495ffd83dbSDimitry Andric {"s0",
2505ffd83dbSDimitry Andric nullptr,
2515ffd83dbSDimitry Andric 4,
2525ffd83dbSDimitry Andric 0,
2535ffd83dbSDimitry Andric eEncodingIEEE754,
2545ffd83dbSDimitry Andric eFormatFloat,
2555ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_s0, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
2565ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
2575ffd83dbSDimitry Andric nullptr,
2585ffd83dbSDimitry Andric nullptr,
259*06c3fb27SDimitry Andric nullptr,
260349cc55cSDimitry Andric },
2615ffd83dbSDimitry Andric {"s1",
2625ffd83dbSDimitry Andric nullptr,
2635ffd83dbSDimitry Andric 4,
2645ffd83dbSDimitry Andric 0,
2655ffd83dbSDimitry Andric eEncodingIEEE754,
2665ffd83dbSDimitry Andric eFormatFloat,
2675ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_s1, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
2685ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
2695ffd83dbSDimitry Andric nullptr,
2705ffd83dbSDimitry Andric nullptr,
271*06c3fb27SDimitry Andric nullptr,
272349cc55cSDimitry Andric },
2735ffd83dbSDimitry Andric {"s2",
2745ffd83dbSDimitry Andric nullptr,
2755ffd83dbSDimitry Andric 4,
2765ffd83dbSDimitry Andric 0,
2775ffd83dbSDimitry Andric eEncodingIEEE754,
2785ffd83dbSDimitry Andric eFormatFloat,
2795ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_s2, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
2805ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
2815ffd83dbSDimitry Andric nullptr,
2825ffd83dbSDimitry Andric nullptr,
283*06c3fb27SDimitry Andric nullptr,
284349cc55cSDimitry Andric },
2855ffd83dbSDimitry Andric {"s3",
2865ffd83dbSDimitry Andric nullptr,
2875ffd83dbSDimitry Andric 4,
2885ffd83dbSDimitry Andric 0,
2895ffd83dbSDimitry Andric eEncodingIEEE754,
2905ffd83dbSDimitry Andric eFormatFloat,
2915ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_s3, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
2925ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
2935ffd83dbSDimitry Andric nullptr,
2945ffd83dbSDimitry Andric nullptr,
295*06c3fb27SDimitry Andric nullptr,
296349cc55cSDimitry Andric },
2975ffd83dbSDimitry Andric {"s4",
2985ffd83dbSDimitry Andric nullptr,
2995ffd83dbSDimitry Andric 4,
3005ffd83dbSDimitry Andric 0,
3015ffd83dbSDimitry Andric eEncodingIEEE754,
3025ffd83dbSDimitry Andric eFormatFloat,
3035ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_s4, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
3045ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
3055ffd83dbSDimitry Andric nullptr,
3065ffd83dbSDimitry Andric nullptr,
307*06c3fb27SDimitry Andric nullptr,
308349cc55cSDimitry Andric },
3095ffd83dbSDimitry Andric {"s5",
3105ffd83dbSDimitry Andric nullptr,
3115ffd83dbSDimitry Andric 4,
3125ffd83dbSDimitry Andric 0,
3135ffd83dbSDimitry Andric eEncodingIEEE754,
3145ffd83dbSDimitry Andric eFormatFloat,
3155ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_s5, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
3165ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
3175ffd83dbSDimitry Andric nullptr,
3185ffd83dbSDimitry Andric nullptr,
319*06c3fb27SDimitry Andric nullptr,
320349cc55cSDimitry Andric },
3215ffd83dbSDimitry Andric {"s6",
3225ffd83dbSDimitry Andric nullptr,
3235ffd83dbSDimitry Andric 4,
3245ffd83dbSDimitry Andric 0,
3255ffd83dbSDimitry Andric eEncodingIEEE754,
3265ffd83dbSDimitry Andric eFormatFloat,
3275ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_s6, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
3285ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
3295ffd83dbSDimitry Andric nullptr,
3305ffd83dbSDimitry Andric nullptr,
331*06c3fb27SDimitry Andric nullptr,
332349cc55cSDimitry Andric },
3335ffd83dbSDimitry Andric {"s7",
3345ffd83dbSDimitry Andric nullptr,
3355ffd83dbSDimitry Andric 4,
3365ffd83dbSDimitry Andric 0,
3375ffd83dbSDimitry Andric eEncodingIEEE754,
3385ffd83dbSDimitry Andric eFormatFloat,
3395ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_s7, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
3405ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
3415ffd83dbSDimitry Andric nullptr,
3425ffd83dbSDimitry Andric nullptr,
343*06c3fb27SDimitry Andric nullptr,
344349cc55cSDimitry Andric },
3455ffd83dbSDimitry Andric {"s8",
3465ffd83dbSDimitry Andric nullptr,
3475ffd83dbSDimitry Andric 4,
3485ffd83dbSDimitry Andric 0,
3495ffd83dbSDimitry Andric eEncodingIEEE754,
3505ffd83dbSDimitry Andric eFormatFloat,
3515ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_s8, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
3525ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
3535ffd83dbSDimitry Andric nullptr,
3545ffd83dbSDimitry Andric nullptr,
355*06c3fb27SDimitry Andric nullptr,
356349cc55cSDimitry Andric },
3575ffd83dbSDimitry Andric {"s9",
3585ffd83dbSDimitry Andric nullptr,
3595ffd83dbSDimitry Andric 4,
3605ffd83dbSDimitry Andric 0,
3615ffd83dbSDimitry Andric eEncodingIEEE754,
3625ffd83dbSDimitry Andric eFormatFloat,
3635ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_s9, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
3645ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
3655ffd83dbSDimitry Andric nullptr,
3665ffd83dbSDimitry Andric nullptr,
367*06c3fb27SDimitry Andric nullptr,
368349cc55cSDimitry Andric },
3695ffd83dbSDimitry Andric {"s10",
3705ffd83dbSDimitry Andric nullptr,
3715ffd83dbSDimitry Andric 4,
3725ffd83dbSDimitry Andric 0,
3735ffd83dbSDimitry Andric eEncodingIEEE754,
3745ffd83dbSDimitry Andric eFormatFloat,
3755ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_s10, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
3765ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
3775ffd83dbSDimitry Andric nullptr,
3785ffd83dbSDimitry Andric nullptr,
379*06c3fb27SDimitry Andric nullptr,
380349cc55cSDimitry Andric },
3815ffd83dbSDimitry Andric {"s11",
3825ffd83dbSDimitry Andric nullptr,
3835ffd83dbSDimitry Andric 4,
3845ffd83dbSDimitry Andric 0,
3855ffd83dbSDimitry Andric eEncodingIEEE754,
3865ffd83dbSDimitry Andric eFormatFloat,
3875ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_s11, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
3885ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
3895ffd83dbSDimitry Andric nullptr,
3905ffd83dbSDimitry Andric nullptr,
391*06c3fb27SDimitry Andric nullptr,
392349cc55cSDimitry Andric },
3935ffd83dbSDimitry Andric {"s12",
3945ffd83dbSDimitry Andric nullptr,
3955ffd83dbSDimitry Andric 4,
3965ffd83dbSDimitry Andric 0,
3975ffd83dbSDimitry Andric eEncodingIEEE754,
3985ffd83dbSDimitry Andric eFormatFloat,
3995ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_s12, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
4005ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
4015ffd83dbSDimitry Andric nullptr,
4025ffd83dbSDimitry Andric nullptr,
403*06c3fb27SDimitry Andric nullptr,
404349cc55cSDimitry Andric },
4055ffd83dbSDimitry Andric {"s13",
4065ffd83dbSDimitry Andric nullptr,
4075ffd83dbSDimitry Andric 4,
4085ffd83dbSDimitry Andric 0,
4095ffd83dbSDimitry Andric eEncodingIEEE754,
4105ffd83dbSDimitry Andric eFormatFloat,
4115ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_s13, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
4125ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
4135ffd83dbSDimitry Andric nullptr,
4145ffd83dbSDimitry Andric nullptr,
415*06c3fb27SDimitry Andric nullptr,
416349cc55cSDimitry Andric },
4175ffd83dbSDimitry Andric {"s14",
4185ffd83dbSDimitry Andric nullptr,
4195ffd83dbSDimitry Andric 4,
4205ffd83dbSDimitry Andric 0,
4215ffd83dbSDimitry Andric eEncodingIEEE754,
4225ffd83dbSDimitry Andric eFormatFloat,
4235ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_s14, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
4245ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
4255ffd83dbSDimitry Andric nullptr,
4265ffd83dbSDimitry Andric nullptr,
427*06c3fb27SDimitry Andric nullptr,
428349cc55cSDimitry Andric },
4295ffd83dbSDimitry Andric {"s15",
4305ffd83dbSDimitry Andric nullptr,
4315ffd83dbSDimitry Andric 4,
4325ffd83dbSDimitry Andric 0,
4335ffd83dbSDimitry Andric eEncodingIEEE754,
4345ffd83dbSDimitry Andric eFormatFloat,
4355ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_s15, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
4365ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
4375ffd83dbSDimitry Andric nullptr,
4385ffd83dbSDimitry Andric nullptr,
439*06c3fb27SDimitry Andric nullptr,
440349cc55cSDimitry Andric },
4415ffd83dbSDimitry Andric {"s16",
4425ffd83dbSDimitry Andric nullptr,
4435ffd83dbSDimitry Andric 4,
4445ffd83dbSDimitry Andric 0,
4455ffd83dbSDimitry Andric eEncodingIEEE754,
4465ffd83dbSDimitry Andric eFormatFloat,
4475ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_s16, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
4485ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
4495ffd83dbSDimitry Andric nullptr,
4505ffd83dbSDimitry Andric nullptr,
451*06c3fb27SDimitry Andric nullptr,
452349cc55cSDimitry Andric },
4535ffd83dbSDimitry Andric {"s17",
4545ffd83dbSDimitry Andric nullptr,
4555ffd83dbSDimitry Andric 4,
4565ffd83dbSDimitry Andric 0,
4575ffd83dbSDimitry Andric eEncodingIEEE754,
4585ffd83dbSDimitry Andric eFormatFloat,
4595ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_s17, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
4605ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
4615ffd83dbSDimitry Andric nullptr,
4625ffd83dbSDimitry Andric nullptr,
463*06c3fb27SDimitry Andric nullptr,
464349cc55cSDimitry Andric },
4655ffd83dbSDimitry Andric {"s18",
4665ffd83dbSDimitry Andric nullptr,
4675ffd83dbSDimitry Andric 4,
4685ffd83dbSDimitry Andric 0,
4695ffd83dbSDimitry Andric eEncodingIEEE754,
4705ffd83dbSDimitry Andric eFormatFloat,
4715ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_s18, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
4725ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
4735ffd83dbSDimitry Andric nullptr,
4745ffd83dbSDimitry Andric nullptr,
475*06c3fb27SDimitry Andric nullptr,
476349cc55cSDimitry Andric },
4775ffd83dbSDimitry Andric {"s19",
4785ffd83dbSDimitry Andric nullptr,
4795ffd83dbSDimitry Andric 4,
4805ffd83dbSDimitry Andric 0,
4815ffd83dbSDimitry Andric eEncodingIEEE754,
4825ffd83dbSDimitry Andric eFormatFloat,
4835ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_s19, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
4845ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
4855ffd83dbSDimitry Andric nullptr,
4865ffd83dbSDimitry Andric nullptr,
487*06c3fb27SDimitry Andric nullptr,
488349cc55cSDimitry Andric },
4895ffd83dbSDimitry Andric {"s20",
4905ffd83dbSDimitry Andric nullptr,
4915ffd83dbSDimitry Andric 4,
4925ffd83dbSDimitry Andric 0,
4935ffd83dbSDimitry Andric eEncodingIEEE754,
4945ffd83dbSDimitry Andric eFormatFloat,
4955ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_s20, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
4965ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
4975ffd83dbSDimitry Andric nullptr,
4985ffd83dbSDimitry Andric nullptr,
499*06c3fb27SDimitry Andric nullptr,
500349cc55cSDimitry Andric },
5015ffd83dbSDimitry Andric {"s21",
5025ffd83dbSDimitry Andric nullptr,
5035ffd83dbSDimitry Andric 4,
5045ffd83dbSDimitry Andric 0,
5055ffd83dbSDimitry Andric eEncodingIEEE754,
5065ffd83dbSDimitry Andric eFormatFloat,
5075ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_s21, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
5085ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
5095ffd83dbSDimitry Andric nullptr,
5105ffd83dbSDimitry Andric nullptr,
511*06c3fb27SDimitry Andric nullptr,
512349cc55cSDimitry Andric },
5135ffd83dbSDimitry Andric {"s22",
5145ffd83dbSDimitry Andric nullptr,
5155ffd83dbSDimitry Andric 4,
5165ffd83dbSDimitry Andric 0,
5175ffd83dbSDimitry Andric eEncodingIEEE754,
5185ffd83dbSDimitry Andric eFormatFloat,
5195ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_s22, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
5205ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
5215ffd83dbSDimitry Andric nullptr,
5225ffd83dbSDimitry Andric nullptr,
523*06c3fb27SDimitry Andric nullptr,
524349cc55cSDimitry Andric },
5255ffd83dbSDimitry Andric {"s23",
5265ffd83dbSDimitry Andric nullptr,
5275ffd83dbSDimitry Andric 4,
5285ffd83dbSDimitry Andric 0,
5295ffd83dbSDimitry Andric eEncodingIEEE754,
5305ffd83dbSDimitry Andric eFormatFloat,
5315ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_s23, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
5325ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
5335ffd83dbSDimitry Andric nullptr,
5345ffd83dbSDimitry Andric nullptr,
535*06c3fb27SDimitry Andric nullptr,
536349cc55cSDimitry Andric },
5375ffd83dbSDimitry Andric {"s24",
5385ffd83dbSDimitry Andric nullptr,
5395ffd83dbSDimitry Andric 4,
5405ffd83dbSDimitry Andric 0,
5415ffd83dbSDimitry Andric eEncodingIEEE754,
5425ffd83dbSDimitry Andric eFormatFloat,
5435ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_s24, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
5445ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
5455ffd83dbSDimitry Andric nullptr,
5465ffd83dbSDimitry Andric nullptr,
547*06c3fb27SDimitry Andric nullptr,
548349cc55cSDimitry Andric },
5495ffd83dbSDimitry Andric {"s25",
5505ffd83dbSDimitry Andric nullptr,
5515ffd83dbSDimitry Andric 4,
5525ffd83dbSDimitry Andric 0,
5535ffd83dbSDimitry Andric eEncodingIEEE754,
5545ffd83dbSDimitry Andric eFormatFloat,
5555ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_s25, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
5565ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
5575ffd83dbSDimitry Andric nullptr,
5585ffd83dbSDimitry Andric nullptr,
559*06c3fb27SDimitry Andric nullptr,
560349cc55cSDimitry Andric },
5615ffd83dbSDimitry Andric {"s26",
5625ffd83dbSDimitry Andric nullptr,
5635ffd83dbSDimitry Andric 4,
5645ffd83dbSDimitry Andric 0,
5655ffd83dbSDimitry Andric eEncodingIEEE754,
5665ffd83dbSDimitry Andric eFormatFloat,
5675ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_s26, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
5685ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
5695ffd83dbSDimitry Andric nullptr,
5705ffd83dbSDimitry Andric nullptr,
571*06c3fb27SDimitry Andric nullptr,
572349cc55cSDimitry Andric },
5735ffd83dbSDimitry Andric {"s27",
5745ffd83dbSDimitry Andric nullptr,
5755ffd83dbSDimitry Andric 4,
5765ffd83dbSDimitry Andric 0,
5775ffd83dbSDimitry Andric eEncodingIEEE754,
5785ffd83dbSDimitry Andric eFormatFloat,
5795ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_s27, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
5805ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
5815ffd83dbSDimitry Andric nullptr,
5825ffd83dbSDimitry Andric nullptr,
583*06c3fb27SDimitry Andric nullptr,
584349cc55cSDimitry Andric },
5855ffd83dbSDimitry Andric {"s28",
5865ffd83dbSDimitry Andric nullptr,
5875ffd83dbSDimitry Andric 4,
5885ffd83dbSDimitry Andric 0,
5895ffd83dbSDimitry Andric eEncodingIEEE754,
5905ffd83dbSDimitry Andric eFormatFloat,
5915ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_s28, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
5925ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
5935ffd83dbSDimitry Andric nullptr,
5945ffd83dbSDimitry Andric nullptr,
595*06c3fb27SDimitry Andric nullptr,
596349cc55cSDimitry Andric },
5975ffd83dbSDimitry Andric {"s29",
5985ffd83dbSDimitry Andric nullptr,
5995ffd83dbSDimitry Andric 4,
6005ffd83dbSDimitry Andric 0,
6015ffd83dbSDimitry Andric eEncodingIEEE754,
6025ffd83dbSDimitry Andric eFormatFloat,
6035ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_s29, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
6045ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
6055ffd83dbSDimitry Andric nullptr,
6065ffd83dbSDimitry Andric nullptr,
607*06c3fb27SDimitry Andric nullptr,
608349cc55cSDimitry Andric },
6095ffd83dbSDimitry Andric {"s30",
6105ffd83dbSDimitry Andric nullptr,
6115ffd83dbSDimitry Andric 4,
6125ffd83dbSDimitry Andric 0,
6135ffd83dbSDimitry Andric eEncodingIEEE754,
6145ffd83dbSDimitry Andric eFormatFloat,
6155ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_s30, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
6165ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
6175ffd83dbSDimitry Andric nullptr,
6185ffd83dbSDimitry Andric nullptr,
619*06c3fb27SDimitry Andric nullptr,
620349cc55cSDimitry Andric },
6215ffd83dbSDimitry Andric {"s31",
6225ffd83dbSDimitry Andric nullptr,
6235ffd83dbSDimitry Andric 4,
6245ffd83dbSDimitry Andric 0,
6255ffd83dbSDimitry Andric eEncodingIEEE754,
6265ffd83dbSDimitry Andric eFormatFloat,
6275ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_s31, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
6285ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
6295ffd83dbSDimitry Andric nullptr,
6305ffd83dbSDimitry Andric nullptr,
631*06c3fb27SDimitry Andric nullptr,
632349cc55cSDimitry Andric },
6335ffd83dbSDimitry Andric {"fpscr",
6345ffd83dbSDimitry Andric nullptr,
6355ffd83dbSDimitry Andric 4,
6365ffd83dbSDimitry Andric 0,
6375ffd83dbSDimitry Andric eEncodingUint,
6385ffd83dbSDimitry Andric eFormatHex,
6395ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
6405ffd83dbSDimitry Andric LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
6415ffd83dbSDimitry Andric nullptr,
6425ffd83dbSDimitry Andric nullptr,
643*06c3fb27SDimitry Andric nullptr,
644349cc55cSDimitry Andric },
6455ffd83dbSDimitry Andric {"d0",
6465ffd83dbSDimitry Andric nullptr,
6475ffd83dbSDimitry Andric 8,
6485ffd83dbSDimitry Andric 0,
6495ffd83dbSDimitry Andric eEncodingIEEE754,
6505ffd83dbSDimitry Andric eFormatFloat,
6515ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_d0, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
6525ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
6535ffd83dbSDimitry Andric nullptr,
6545ffd83dbSDimitry Andric nullptr,
655*06c3fb27SDimitry Andric nullptr,
656349cc55cSDimitry Andric },
6575ffd83dbSDimitry Andric {"d1",
6585ffd83dbSDimitry Andric nullptr,
6595ffd83dbSDimitry Andric 8,
6605ffd83dbSDimitry Andric 0,
6615ffd83dbSDimitry Andric eEncodingIEEE754,
6625ffd83dbSDimitry Andric eFormatFloat,
6635ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_d1, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
6645ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
6655ffd83dbSDimitry Andric nullptr,
6665ffd83dbSDimitry Andric nullptr,
667*06c3fb27SDimitry Andric nullptr,
668349cc55cSDimitry Andric },
6695ffd83dbSDimitry Andric {"d2",
6705ffd83dbSDimitry Andric nullptr,
6715ffd83dbSDimitry Andric 8,
6725ffd83dbSDimitry Andric 0,
6735ffd83dbSDimitry Andric eEncodingIEEE754,
6745ffd83dbSDimitry Andric eFormatFloat,
6755ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_d2, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
6765ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
6775ffd83dbSDimitry Andric nullptr,
6785ffd83dbSDimitry Andric nullptr,
679*06c3fb27SDimitry Andric nullptr,
680349cc55cSDimitry Andric },
6815ffd83dbSDimitry Andric {"d3",
6825ffd83dbSDimitry Andric nullptr,
6835ffd83dbSDimitry Andric 8,
6845ffd83dbSDimitry Andric 0,
6855ffd83dbSDimitry Andric eEncodingIEEE754,
6865ffd83dbSDimitry Andric eFormatFloat,
6875ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_d3, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
6885ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
6895ffd83dbSDimitry Andric nullptr,
6905ffd83dbSDimitry Andric nullptr,
691*06c3fb27SDimitry Andric nullptr,
692349cc55cSDimitry Andric },
6935ffd83dbSDimitry Andric {"d4",
6945ffd83dbSDimitry Andric nullptr,
6955ffd83dbSDimitry Andric 8,
6965ffd83dbSDimitry Andric 0,
6975ffd83dbSDimitry Andric eEncodingIEEE754,
6985ffd83dbSDimitry Andric eFormatFloat,
6995ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_d4, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
7005ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
7015ffd83dbSDimitry Andric nullptr,
7025ffd83dbSDimitry Andric nullptr,
703*06c3fb27SDimitry Andric nullptr,
704349cc55cSDimitry Andric },
7055ffd83dbSDimitry Andric {"d5",
7065ffd83dbSDimitry Andric nullptr,
7075ffd83dbSDimitry Andric 8,
7085ffd83dbSDimitry Andric 0,
7095ffd83dbSDimitry Andric eEncodingIEEE754,
7105ffd83dbSDimitry Andric eFormatFloat,
7115ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_d5, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
7125ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
7135ffd83dbSDimitry Andric nullptr,
7145ffd83dbSDimitry Andric nullptr,
715*06c3fb27SDimitry Andric nullptr,
716349cc55cSDimitry Andric },
7175ffd83dbSDimitry Andric {"d6",
7185ffd83dbSDimitry Andric nullptr,
7195ffd83dbSDimitry Andric 8,
7205ffd83dbSDimitry Andric 0,
7215ffd83dbSDimitry Andric eEncodingIEEE754,
7225ffd83dbSDimitry Andric eFormatFloat,
7235ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_d6, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
7245ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
7255ffd83dbSDimitry Andric nullptr,
7265ffd83dbSDimitry Andric nullptr,
727*06c3fb27SDimitry Andric nullptr,
728349cc55cSDimitry Andric },
7295ffd83dbSDimitry Andric {"d7",
7305ffd83dbSDimitry Andric nullptr,
7315ffd83dbSDimitry Andric 8,
7325ffd83dbSDimitry Andric 0,
7335ffd83dbSDimitry Andric eEncodingIEEE754,
7345ffd83dbSDimitry Andric eFormatFloat,
7355ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_d7, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
7365ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
7375ffd83dbSDimitry Andric nullptr,
7385ffd83dbSDimitry Andric nullptr,
739*06c3fb27SDimitry Andric nullptr,
740349cc55cSDimitry Andric },
7415ffd83dbSDimitry Andric {"d8",
7425ffd83dbSDimitry Andric nullptr,
7435ffd83dbSDimitry Andric 8,
7445ffd83dbSDimitry Andric 0,
7455ffd83dbSDimitry Andric eEncodingIEEE754,
7465ffd83dbSDimitry Andric eFormatFloat,
7475ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_d8, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
7485ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
7495ffd83dbSDimitry Andric nullptr,
7505ffd83dbSDimitry Andric nullptr,
751*06c3fb27SDimitry Andric nullptr,
752349cc55cSDimitry Andric },
7535ffd83dbSDimitry Andric {"d9",
7545ffd83dbSDimitry Andric nullptr,
7555ffd83dbSDimitry Andric 8,
7565ffd83dbSDimitry Andric 0,
7575ffd83dbSDimitry Andric eEncodingIEEE754,
7585ffd83dbSDimitry Andric eFormatFloat,
7595ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_d9, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
7605ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
7615ffd83dbSDimitry Andric nullptr,
7625ffd83dbSDimitry Andric nullptr,
763*06c3fb27SDimitry Andric nullptr,
764349cc55cSDimitry Andric },
7655ffd83dbSDimitry Andric {"d10",
7665ffd83dbSDimitry Andric nullptr,
7675ffd83dbSDimitry Andric 8,
7685ffd83dbSDimitry Andric 0,
7695ffd83dbSDimitry Andric eEncodingIEEE754,
7705ffd83dbSDimitry Andric eFormatFloat,
7715ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_d10, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
7725ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
7735ffd83dbSDimitry Andric nullptr,
7745ffd83dbSDimitry Andric nullptr,
775*06c3fb27SDimitry Andric nullptr,
776349cc55cSDimitry Andric },
7775ffd83dbSDimitry Andric {"d11",
7785ffd83dbSDimitry Andric nullptr,
7795ffd83dbSDimitry Andric 8,
7805ffd83dbSDimitry Andric 0,
7815ffd83dbSDimitry Andric eEncodingIEEE754,
7825ffd83dbSDimitry Andric eFormatFloat,
7835ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_d11, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
7845ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
7855ffd83dbSDimitry Andric nullptr,
7865ffd83dbSDimitry Andric nullptr,
787*06c3fb27SDimitry Andric nullptr,
788349cc55cSDimitry Andric },
7895ffd83dbSDimitry Andric {"d12",
7905ffd83dbSDimitry Andric nullptr,
7915ffd83dbSDimitry Andric 8,
7925ffd83dbSDimitry Andric 0,
7935ffd83dbSDimitry Andric eEncodingIEEE754,
7945ffd83dbSDimitry Andric eFormatFloat,
7955ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_d12, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
7965ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
7975ffd83dbSDimitry Andric nullptr,
7985ffd83dbSDimitry Andric nullptr,
799*06c3fb27SDimitry Andric nullptr,
800349cc55cSDimitry Andric },
8015ffd83dbSDimitry Andric {"d13",
8025ffd83dbSDimitry Andric nullptr,
8035ffd83dbSDimitry Andric 8,
8045ffd83dbSDimitry Andric 0,
8055ffd83dbSDimitry Andric eEncodingIEEE754,
8065ffd83dbSDimitry Andric eFormatFloat,
8075ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_d13, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
8085ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
8095ffd83dbSDimitry Andric nullptr,
8105ffd83dbSDimitry Andric nullptr,
811*06c3fb27SDimitry Andric nullptr,
812349cc55cSDimitry Andric },
8135ffd83dbSDimitry Andric {"d14",
8145ffd83dbSDimitry Andric nullptr,
8155ffd83dbSDimitry Andric 8,
8165ffd83dbSDimitry Andric 0,
8175ffd83dbSDimitry Andric eEncodingIEEE754,
8185ffd83dbSDimitry Andric eFormatFloat,
8195ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_d14, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
8205ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
8215ffd83dbSDimitry Andric nullptr,
8225ffd83dbSDimitry Andric nullptr,
823*06c3fb27SDimitry Andric nullptr,
824349cc55cSDimitry Andric },
8255ffd83dbSDimitry Andric {"d15",
8265ffd83dbSDimitry Andric nullptr,
8275ffd83dbSDimitry Andric 8,
8285ffd83dbSDimitry Andric 0,
8295ffd83dbSDimitry Andric eEncodingIEEE754,
8305ffd83dbSDimitry Andric eFormatFloat,
8315ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_d15, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
8325ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
8335ffd83dbSDimitry Andric nullptr,
8345ffd83dbSDimitry Andric nullptr,
835*06c3fb27SDimitry Andric nullptr,
836349cc55cSDimitry Andric },
8375ffd83dbSDimitry Andric {"d16",
8385ffd83dbSDimitry Andric nullptr,
8395ffd83dbSDimitry Andric 8,
8405ffd83dbSDimitry Andric 0,
8415ffd83dbSDimitry Andric eEncodingIEEE754,
8425ffd83dbSDimitry Andric eFormatFloat,
8435ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_d16, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
8445ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
8455ffd83dbSDimitry Andric nullptr,
8465ffd83dbSDimitry Andric nullptr,
847*06c3fb27SDimitry Andric nullptr,
848349cc55cSDimitry Andric },
8495ffd83dbSDimitry Andric {"d17",
8505ffd83dbSDimitry Andric nullptr,
8515ffd83dbSDimitry Andric 8,
8525ffd83dbSDimitry Andric 0,
8535ffd83dbSDimitry Andric eEncodingIEEE754,
8545ffd83dbSDimitry Andric eFormatFloat,
8555ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_d17, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
8565ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
8575ffd83dbSDimitry Andric nullptr,
8585ffd83dbSDimitry Andric nullptr,
859*06c3fb27SDimitry Andric nullptr,
860349cc55cSDimitry Andric },
8615ffd83dbSDimitry Andric {"d18",
8625ffd83dbSDimitry Andric nullptr,
8635ffd83dbSDimitry Andric 8,
8645ffd83dbSDimitry Andric 0,
8655ffd83dbSDimitry Andric eEncodingIEEE754,
8665ffd83dbSDimitry Andric eFormatFloat,
8675ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_d18, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
8685ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
8695ffd83dbSDimitry Andric nullptr,
8705ffd83dbSDimitry Andric nullptr,
871*06c3fb27SDimitry Andric nullptr,
872349cc55cSDimitry Andric },
8735ffd83dbSDimitry Andric {"d19",
8745ffd83dbSDimitry Andric nullptr,
8755ffd83dbSDimitry Andric 8,
8765ffd83dbSDimitry Andric 0,
8775ffd83dbSDimitry Andric eEncodingIEEE754,
8785ffd83dbSDimitry Andric eFormatFloat,
8795ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_d19, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
8805ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
8815ffd83dbSDimitry Andric nullptr,
8825ffd83dbSDimitry Andric nullptr,
883*06c3fb27SDimitry Andric nullptr,
884349cc55cSDimitry Andric },
8855ffd83dbSDimitry Andric {"d20",
8865ffd83dbSDimitry Andric nullptr,
8875ffd83dbSDimitry Andric 8,
8885ffd83dbSDimitry Andric 0,
8895ffd83dbSDimitry Andric eEncodingIEEE754,
8905ffd83dbSDimitry Andric eFormatFloat,
8915ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_d20, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
8925ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
8935ffd83dbSDimitry Andric nullptr,
8945ffd83dbSDimitry Andric nullptr,
895*06c3fb27SDimitry Andric nullptr,
896349cc55cSDimitry Andric },
8975ffd83dbSDimitry Andric {"d21",
8985ffd83dbSDimitry Andric nullptr,
8995ffd83dbSDimitry Andric 8,
9005ffd83dbSDimitry Andric 0,
9015ffd83dbSDimitry Andric eEncodingIEEE754,
9025ffd83dbSDimitry Andric eFormatFloat,
9035ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_d21, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
9045ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
9055ffd83dbSDimitry Andric nullptr,
9065ffd83dbSDimitry Andric nullptr,
907*06c3fb27SDimitry Andric nullptr,
908349cc55cSDimitry Andric },
9095ffd83dbSDimitry Andric {"d22",
9105ffd83dbSDimitry Andric nullptr,
9115ffd83dbSDimitry Andric 8,
9125ffd83dbSDimitry Andric 0,
9135ffd83dbSDimitry Andric eEncodingIEEE754,
9145ffd83dbSDimitry Andric eFormatFloat,
9155ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_d22, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
9165ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
9175ffd83dbSDimitry Andric nullptr,
9185ffd83dbSDimitry Andric nullptr,
919*06c3fb27SDimitry Andric nullptr,
920349cc55cSDimitry Andric },
9215ffd83dbSDimitry Andric {"d23",
9225ffd83dbSDimitry Andric nullptr,
9235ffd83dbSDimitry Andric 8,
9245ffd83dbSDimitry Andric 0,
9255ffd83dbSDimitry Andric eEncodingIEEE754,
9265ffd83dbSDimitry Andric eFormatFloat,
9275ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_d23, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
9285ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
9295ffd83dbSDimitry Andric nullptr,
9305ffd83dbSDimitry Andric nullptr,
931*06c3fb27SDimitry Andric nullptr,
932349cc55cSDimitry Andric },
9335ffd83dbSDimitry Andric {"d24",
9345ffd83dbSDimitry Andric nullptr,
9355ffd83dbSDimitry Andric 8,
9365ffd83dbSDimitry Andric 0,
9375ffd83dbSDimitry Andric eEncodingIEEE754,
9385ffd83dbSDimitry Andric eFormatFloat,
9395ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_d24, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
9405ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
9415ffd83dbSDimitry Andric nullptr,
9425ffd83dbSDimitry Andric nullptr,
943*06c3fb27SDimitry Andric nullptr,
944349cc55cSDimitry Andric },
9455ffd83dbSDimitry Andric {"d25",
9465ffd83dbSDimitry Andric nullptr,
9475ffd83dbSDimitry Andric 8,
9485ffd83dbSDimitry Andric 0,
9495ffd83dbSDimitry Andric eEncodingIEEE754,
9505ffd83dbSDimitry Andric eFormatFloat,
9515ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_d25, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
9525ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
9535ffd83dbSDimitry Andric nullptr,
9545ffd83dbSDimitry Andric nullptr,
955*06c3fb27SDimitry Andric nullptr,
956349cc55cSDimitry Andric },
9575ffd83dbSDimitry Andric {"d26",
9585ffd83dbSDimitry Andric nullptr,
9595ffd83dbSDimitry Andric 8,
9605ffd83dbSDimitry Andric 0,
9615ffd83dbSDimitry Andric eEncodingIEEE754,
9625ffd83dbSDimitry Andric eFormatFloat,
9635ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_d26, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
9645ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
9655ffd83dbSDimitry Andric nullptr,
9665ffd83dbSDimitry Andric nullptr,
967*06c3fb27SDimitry Andric nullptr,
968349cc55cSDimitry Andric },
9695ffd83dbSDimitry Andric {"d27",
9705ffd83dbSDimitry Andric nullptr,
9715ffd83dbSDimitry Andric 8,
9725ffd83dbSDimitry Andric 0,
9735ffd83dbSDimitry Andric eEncodingIEEE754,
9745ffd83dbSDimitry Andric eFormatFloat,
9755ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_d27, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
9765ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
9775ffd83dbSDimitry Andric nullptr,
9785ffd83dbSDimitry Andric nullptr,
979*06c3fb27SDimitry Andric nullptr,
980349cc55cSDimitry Andric },
9815ffd83dbSDimitry Andric {"d28",
9825ffd83dbSDimitry Andric nullptr,
9835ffd83dbSDimitry Andric 8,
9845ffd83dbSDimitry Andric 0,
9855ffd83dbSDimitry Andric eEncodingIEEE754,
9865ffd83dbSDimitry Andric eFormatFloat,
9875ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_d28, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
9885ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
9895ffd83dbSDimitry Andric nullptr,
9905ffd83dbSDimitry Andric nullptr,
991*06c3fb27SDimitry Andric nullptr,
992349cc55cSDimitry Andric },
9935ffd83dbSDimitry Andric {"d29",
9945ffd83dbSDimitry Andric nullptr,
9955ffd83dbSDimitry Andric 8,
9965ffd83dbSDimitry Andric 0,
9975ffd83dbSDimitry Andric eEncodingIEEE754,
9985ffd83dbSDimitry Andric eFormatFloat,
9995ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_d29, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
10005ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
10015ffd83dbSDimitry Andric nullptr,
10025ffd83dbSDimitry Andric nullptr,
1003*06c3fb27SDimitry Andric nullptr,
1004349cc55cSDimitry Andric },
10055ffd83dbSDimitry Andric {"d30",
10065ffd83dbSDimitry Andric nullptr,
10075ffd83dbSDimitry Andric 8,
10085ffd83dbSDimitry Andric 0,
10095ffd83dbSDimitry Andric eEncodingIEEE754,
10105ffd83dbSDimitry Andric eFormatFloat,
10115ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_d30, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
10125ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
10135ffd83dbSDimitry Andric nullptr,
10145ffd83dbSDimitry Andric nullptr,
1015*06c3fb27SDimitry Andric nullptr,
1016349cc55cSDimitry Andric },
10175ffd83dbSDimitry Andric {"d31",
10185ffd83dbSDimitry Andric nullptr,
10195ffd83dbSDimitry Andric 8,
10205ffd83dbSDimitry Andric 0,
10215ffd83dbSDimitry Andric eEncodingIEEE754,
10225ffd83dbSDimitry Andric eFormatFloat,
10235ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_d31, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
10245ffd83dbSDimitry Andric LLDB_INVALID_REGNUM},
10255ffd83dbSDimitry Andric nullptr,
10265ffd83dbSDimitry Andric nullptr,
1027*06c3fb27SDimitry Andric nullptr,
1028349cc55cSDimitry Andric },
10295ffd83dbSDimitry Andric {"r8_usr",
10305ffd83dbSDimitry Andric nullptr,
10315ffd83dbSDimitry Andric 4,
10325ffd83dbSDimitry Andric 0,
10335ffd83dbSDimitry Andric eEncodingUint,
10345ffd83dbSDimitry Andric eFormatHex,
10355ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_r8_usr, LLDB_INVALID_REGNUM,
10365ffd83dbSDimitry Andric LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
10375ffd83dbSDimitry Andric nullptr,
10385ffd83dbSDimitry Andric nullptr,
1039*06c3fb27SDimitry Andric nullptr,
1040349cc55cSDimitry Andric },
10415ffd83dbSDimitry Andric {"r9_usr",
10425ffd83dbSDimitry Andric nullptr,
10435ffd83dbSDimitry Andric 4,
10445ffd83dbSDimitry Andric 0,
10455ffd83dbSDimitry Andric eEncodingUint,
10465ffd83dbSDimitry Andric eFormatHex,
10475ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_r9_usr, LLDB_INVALID_REGNUM,
10485ffd83dbSDimitry Andric LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
10495ffd83dbSDimitry Andric nullptr,
10505ffd83dbSDimitry Andric nullptr,
1051*06c3fb27SDimitry Andric nullptr,
1052349cc55cSDimitry Andric },
10535ffd83dbSDimitry Andric {"r10_usr",
10545ffd83dbSDimitry Andric nullptr,
10555ffd83dbSDimitry Andric 4,
10565ffd83dbSDimitry Andric 0,
10575ffd83dbSDimitry Andric eEncodingUint,
10585ffd83dbSDimitry Andric eFormatHex,
10595ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_r10_usr, LLDB_INVALID_REGNUM,
10605ffd83dbSDimitry Andric LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
10615ffd83dbSDimitry Andric nullptr,
10625ffd83dbSDimitry Andric nullptr,
1063*06c3fb27SDimitry Andric nullptr,
1064349cc55cSDimitry Andric },
10655ffd83dbSDimitry Andric {"r11_usr",
10665ffd83dbSDimitry Andric nullptr,
10675ffd83dbSDimitry Andric 4,
10685ffd83dbSDimitry Andric 0,
10695ffd83dbSDimitry Andric eEncodingUint,
10705ffd83dbSDimitry Andric eFormatHex,
10715ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_r11_usr, LLDB_INVALID_REGNUM,
10725ffd83dbSDimitry Andric LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
10735ffd83dbSDimitry Andric nullptr,
10745ffd83dbSDimitry Andric nullptr,
1075*06c3fb27SDimitry Andric nullptr,
1076349cc55cSDimitry Andric },
10775ffd83dbSDimitry Andric {"r12_usr",
10785ffd83dbSDimitry Andric nullptr,
10795ffd83dbSDimitry Andric 4,
10805ffd83dbSDimitry Andric 0,
10815ffd83dbSDimitry Andric eEncodingUint,
10825ffd83dbSDimitry Andric eFormatHex,
10835ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_r12_usr, LLDB_INVALID_REGNUM,
10845ffd83dbSDimitry Andric LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
10855ffd83dbSDimitry Andric nullptr,
10865ffd83dbSDimitry Andric nullptr,
1087*06c3fb27SDimitry Andric nullptr,
1088349cc55cSDimitry Andric },
10895ffd83dbSDimitry Andric {"r13_usr",
10905ffd83dbSDimitry Andric "sp_usr",
10915ffd83dbSDimitry Andric 4,
10925ffd83dbSDimitry Andric 0,
10935ffd83dbSDimitry Andric eEncodingUint,
10945ffd83dbSDimitry Andric eFormatHex,
10955ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_r13_usr, LLDB_INVALID_REGNUM,
10965ffd83dbSDimitry Andric LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
10975ffd83dbSDimitry Andric nullptr,
10985ffd83dbSDimitry Andric nullptr,
1099*06c3fb27SDimitry Andric nullptr,
1100349cc55cSDimitry Andric },
11015ffd83dbSDimitry Andric {"r14_usr",
11025ffd83dbSDimitry Andric "lr_usr",
11035ffd83dbSDimitry Andric 4,
11045ffd83dbSDimitry Andric 0,
11055ffd83dbSDimitry Andric eEncodingUint,
11065ffd83dbSDimitry Andric eFormatHex,
11075ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_r14_usr, LLDB_INVALID_REGNUM,
11085ffd83dbSDimitry Andric LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
11095ffd83dbSDimitry Andric nullptr,
11105ffd83dbSDimitry Andric nullptr,
1111*06c3fb27SDimitry Andric nullptr,
1112349cc55cSDimitry Andric },
11135ffd83dbSDimitry Andric {"r8_fiq",
11145ffd83dbSDimitry Andric nullptr,
11155ffd83dbSDimitry Andric 4,
11165ffd83dbSDimitry Andric 0,
11175ffd83dbSDimitry Andric eEncodingUint,
11185ffd83dbSDimitry Andric eFormatHex,
11195ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_r8_fiq, LLDB_INVALID_REGNUM,
11205ffd83dbSDimitry Andric LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
11215ffd83dbSDimitry Andric nullptr,
11225ffd83dbSDimitry Andric nullptr,
1123*06c3fb27SDimitry Andric nullptr,
1124349cc55cSDimitry Andric },
11255ffd83dbSDimitry Andric {"r9_fiq",
11265ffd83dbSDimitry Andric nullptr,
11275ffd83dbSDimitry Andric 4,
11285ffd83dbSDimitry Andric 0,
11295ffd83dbSDimitry Andric eEncodingUint,
11305ffd83dbSDimitry Andric eFormatHex,
11315ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_r9_fiq, LLDB_INVALID_REGNUM,
11325ffd83dbSDimitry Andric LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
11335ffd83dbSDimitry Andric nullptr,
11345ffd83dbSDimitry Andric nullptr,
1135*06c3fb27SDimitry Andric nullptr,
1136349cc55cSDimitry Andric },
11375ffd83dbSDimitry Andric {"r10_fiq",
11385ffd83dbSDimitry Andric nullptr,
11395ffd83dbSDimitry Andric 4,
11405ffd83dbSDimitry Andric 0,
11415ffd83dbSDimitry Andric eEncodingUint,
11425ffd83dbSDimitry Andric eFormatHex,
11435ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_r10_fiq, LLDB_INVALID_REGNUM,
11445ffd83dbSDimitry Andric LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
11455ffd83dbSDimitry Andric nullptr,
11465ffd83dbSDimitry Andric nullptr,
1147*06c3fb27SDimitry Andric nullptr,
1148349cc55cSDimitry Andric },
11495ffd83dbSDimitry Andric {"r11_fiq",
11505ffd83dbSDimitry Andric nullptr,
11515ffd83dbSDimitry Andric 4,
11525ffd83dbSDimitry Andric 0,
11535ffd83dbSDimitry Andric eEncodingUint,
11545ffd83dbSDimitry Andric eFormatHex,
11555ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_r11_fiq, LLDB_INVALID_REGNUM,
11565ffd83dbSDimitry Andric LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
11575ffd83dbSDimitry Andric nullptr,
11585ffd83dbSDimitry Andric nullptr,
1159*06c3fb27SDimitry Andric nullptr,
1160349cc55cSDimitry Andric },
11615ffd83dbSDimitry Andric {"r12_fiq",
11625ffd83dbSDimitry Andric nullptr,
11635ffd83dbSDimitry Andric 4,
11645ffd83dbSDimitry Andric 0,
11655ffd83dbSDimitry Andric eEncodingUint,
11665ffd83dbSDimitry Andric eFormatHex,
11675ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_r12_fiq, LLDB_INVALID_REGNUM,
11685ffd83dbSDimitry Andric LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
11695ffd83dbSDimitry Andric nullptr,
11705ffd83dbSDimitry Andric nullptr,
1171*06c3fb27SDimitry Andric nullptr,
1172349cc55cSDimitry Andric },
11735ffd83dbSDimitry Andric {"r13_fiq",
11745ffd83dbSDimitry Andric "sp_fiq",
11755ffd83dbSDimitry Andric 4,
11765ffd83dbSDimitry Andric 0,
11775ffd83dbSDimitry Andric eEncodingUint,
11785ffd83dbSDimitry Andric eFormatHex,
11795ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_r13_fiq, LLDB_INVALID_REGNUM,
11805ffd83dbSDimitry Andric LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
11815ffd83dbSDimitry Andric nullptr,
11825ffd83dbSDimitry Andric nullptr,
1183*06c3fb27SDimitry Andric nullptr,
1184349cc55cSDimitry Andric },
11855ffd83dbSDimitry Andric {"r14_fiq",
11865ffd83dbSDimitry Andric "lr_fiq",
11875ffd83dbSDimitry Andric 4,
11885ffd83dbSDimitry Andric 0,
11895ffd83dbSDimitry Andric eEncodingUint,
11905ffd83dbSDimitry Andric eFormatHex,
11915ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_r14_fiq, LLDB_INVALID_REGNUM,
11925ffd83dbSDimitry Andric LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
11935ffd83dbSDimitry Andric nullptr,
11945ffd83dbSDimitry Andric nullptr,
1195*06c3fb27SDimitry Andric nullptr,
1196349cc55cSDimitry Andric },
11975ffd83dbSDimitry Andric {"r13_irq",
11985ffd83dbSDimitry Andric "sp_irq",
11995ffd83dbSDimitry Andric 4,
12005ffd83dbSDimitry Andric 0,
12015ffd83dbSDimitry Andric eEncodingUint,
12025ffd83dbSDimitry Andric eFormatHex,
12035ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_r13_irq, LLDB_INVALID_REGNUM,
12045ffd83dbSDimitry Andric LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
12055ffd83dbSDimitry Andric nullptr,
12065ffd83dbSDimitry Andric nullptr,
1207*06c3fb27SDimitry Andric nullptr,
1208349cc55cSDimitry Andric },
12095ffd83dbSDimitry Andric {"r14_irq",
12105ffd83dbSDimitry Andric "lr_irq",
12115ffd83dbSDimitry Andric 4,
12125ffd83dbSDimitry Andric 0,
12135ffd83dbSDimitry Andric eEncodingUint,
12145ffd83dbSDimitry Andric eFormatHex,
12155ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_r14_irq, LLDB_INVALID_REGNUM,
12165ffd83dbSDimitry Andric LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
12175ffd83dbSDimitry Andric nullptr,
12185ffd83dbSDimitry Andric nullptr,
1219*06c3fb27SDimitry Andric nullptr,
1220349cc55cSDimitry Andric },
12215ffd83dbSDimitry Andric {"r13_abt",
12225ffd83dbSDimitry Andric "sp_abt",
12235ffd83dbSDimitry Andric 4,
12245ffd83dbSDimitry Andric 0,
12255ffd83dbSDimitry Andric eEncodingUint,
12265ffd83dbSDimitry Andric eFormatHex,
12275ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_r13_abt, LLDB_INVALID_REGNUM,
12285ffd83dbSDimitry Andric LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
12295ffd83dbSDimitry Andric nullptr,
12305ffd83dbSDimitry Andric nullptr,
1231*06c3fb27SDimitry Andric nullptr,
1232349cc55cSDimitry Andric },
12335ffd83dbSDimitry Andric {"r14_abt",
12345ffd83dbSDimitry Andric "lr_abt",
12355ffd83dbSDimitry Andric 4,
12365ffd83dbSDimitry Andric 0,
12375ffd83dbSDimitry Andric eEncodingUint,
12385ffd83dbSDimitry Andric eFormatHex,
12395ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_r14_abt, LLDB_INVALID_REGNUM,
12405ffd83dbSDimitry Andric LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
12415ffd83dbSDimitry Andric nullptr,
12425ffd83dbSDimitry Andric nullptr,
1243*06c3fb27SDimitry Andric nullptr,
1244349cc55cSDimitry Andric },
12455ffd83dbSDimitry Andric {"r13_und",
12465ffd83dbSDimitry Andric "sp_und",
12475ffd83dbSDimitry Andric 4,
12485ffd83dbSDimitry Andric 0,
12495ffd83dbSDimitry Andric eEncodingUint,
12505ffd83dbSDimitry Andric eFormatHex,
12515ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_r13_und, LLDB_INVALID_REGNUM,
12525ffd83dbSDimitry Andric LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
12535ffd83dbSDimitry Andric nullptr,
12545ffd83dbSDimitry Andric nullptr,
1255*06c3fb27SDimitry Andric nullptr,
1256349cc55cSDimitry Andric },
12575ffd83dbSDimitry Andric {"r14_und",
12585ffd83dbSDimitry Andric "lr_und",
12595ffd83dbSDimitry Andric 4,
12605ffd83dbSDimitry Andric 0,
12615ffd83dbSDimitry Andric eEncodingUint,
12625ffd83dbSDimitry Andric eFormatHex,
12635ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_r14_und, LLDB_INVALID_REGNUM,
12645ffd83dbSDimitry Andric LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
12655ffd83dbSDimitry Andric nullptr,
12665ffd83dbSDimitry Andric nullptr,
1267*06c3fb27SDimitry Andric nullptr,
1268349cc55cSDimitry Andric },
12695ffd83dbSDimitry Andric {"r13_svc",
12705ffd83dbSDimitry Andric "sp_svc",
12715ffd83dbSDimitry Andric 4,
12725ffd83dbSDimitry Andric 0,
12735ffd83dbSDimitry Andric eEncodingUint,
12745ffd83dbSDimitry Andric eFormatHex,
12755ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_r13_svc, LLDB_INVALID_REGNUM,
12765ffd83dbSDimitry Andric LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
12775ffd83dbSDimitry Andric nullptr,
12785ffd83dbSDimitry Andric nullptr,
1279*06c3fb27SDimitry Andric nullptr,
1280349cc55cSDimitry Andric },
12815ffd83dbSDimitry Andric {"r14_svc",
12825ffd83dbSDimitry Andric "lr_svc",
12835ffd83dbSDimitry Andric 4,
12845ffd83dbSDimitry Andric 0,
12855ffd83dbSDimitry Andric eEncodingUint,
12865ffd83dbSDimitry Andric eFormatHex,
12875ffd83dbSDimitry Andric {LLDB_INVALID_REGNUM, dwarf_r14_svc, LLDB_INVALID_REGNUM,
12885ffd83dbSDimitry Andric LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM},
12895ffd83dbSDimitry Andric nullptr,
12905ffd83dbSDimitry Andric nullptr,
1291*06c3fb27SDimitry Andric nullptr,
1292349cc55cSDimitry Andric }};
12935ffd83dbSDimitry Andric
1294bdd1243dSDimitry Andric static const uint32_t k_num_register_infos = std::size(g_register_infos);
12955ffd83dbSDimitry Andric
12965ffd83dbSDimitry Andric const lldb_private::RegisterInfo *
GetRegisterInfoArray(uint32_t & count)12975ffd83dbSDimitry Andric ABIMacOSX_arm::GetRegisterInfoArray(uint32_t &count) {
12985ffd83dbSDimitry Andric count = k_num_register_infos;
12995ffd83dbSDimitry Andric return g_register_infos;
13005ffd83dbSDimitry Andric }
13015ffd83dbSDimitry Andric
GetRedZoneSize() const13025ffd83dbSDimitry Andric size_t ABIMacOSX_arm::GetRedZoneSize() const { return 0; }
13035ffd83dbSDimitry Andric
13045ffd83dbSDimitry Andric // Static Functions
13055ffd83dbSDimitry Andric
13065ffd83dbSDimitry Andric ABISP
CreateInstance(ProcessSP process_sp,const ArchSpec & arch)13075ffd83dbSDimitry Andric ABIMacOSX_arm::CreateInstance(ProcessSP process_sp, const ArchSpec &arch) {
13085ffd83dbSDimitry Andric const llvm::Triple::ArchType arch_type = arch.GetTriple().getArch();
13095ffd83dbSDimitry Andric const llvm::Triple::VendorType vendor_type = arch.GetTriple().getVendor();
13105ffd83dbSDimitry Andric
13115ffd83dbSDimitry Andric if (vendor_type == llvm::Triple::Apple) {
13125ffd83dbSDimitry Andric if ((arch_type == llvm::Triple::arm) ||
13135ffd83dbSDimitry Andric (arch_type == llvm::Triple::thumb)) {
13145ffd83dbSDimitry Andric return ABISP(
13155ffd83dbSDimitry Andric new ABIMacOSX_arm(std::move(process_sp), MakeMCRegisterInfo(arch)));
13165ffd83dbSDimitry Andric }
13175ffd83dbSDimitry Andric }
13185ffd83dbSDimitry Andric
13195ffd83dbSDimitry Andric return ABISP();
13205ffd83dbSDimitry Andric }
13215ffd83dbSDimitry Andric
PrepareTrivialCall(Thread & thread,addr_t sp,addr_t function_addr,addr_t return_addr,llvm::ArrayRef<addr_t> args) const13225ffd83dbSDimitry Andric bool ABIMacOSX_arm::PrepareTrivialCall(Thread &thread, addr_t sp,
13235ffd83dbSDimitry Andric addr_t function_addr, addr_t return_addr,
13245ffd83dbSDimitry Andric llvm::ArrayRef<addr_t> args) const {
13255ffd83dbSDimitry Andric RegisterContext *reg_ctx = thread.GetRegisterContext().get();
13265ffd83dbSDimitry Andric if (!reg_ctx)
13275ffd83dbSDimitry Andric return false;
13285ffd83dbSDimitry Andric
13295ffd83dbSDimitry Andric const uint32_t pc_reg_num = reg_ctx->ConvertRegisterKindToRegisterNumber(
13305ffd83dbSDimitry Andric eRegisterKindGeneric, LLDB_REGNUM_GENERIC_PC);
13315ffd83dbSDimitry Andric const uint32_t sp_reg_num = reg_ctx->ConvertRegisterKindToRegisterNumber(
13325ffd83dbSDimitry Andric eRegisterKindGeneric, LLDB_REGNUM_GENERIC_SP);
13335ffd83dbSDimitry Andric const uint32_t ra_reg_num = reg_ctx->ConvertRegisterKindToRegisterNumber(
13345ffd83dbSDimitry Andric eRegisterKindGeneric, LLDB_REGNUM_GENERIC_RA);
13355ffd83dbSDimitry Andric
13365ffd83dbSDimitry Andric RegisterValue reg_value;
13375ffd83dbSDimitry Andric
13385ffd83dbSDimitry Andric const char *reg_names[] = {"r0", "r1", "r2", "r3"};
13395ffd83dbSDimitry Andric
13405ffd83dbSDimitry Andric llvm::ArrayRef<addr_t>::iterator ai = args.begin(), ae = args.end();
13415ffd83dbSDimitry Andric
1342bdd1243dSDimitry Andric for (size_t i = 0; i < std::size(reg_names); ++i) {
13435ffd83dbSDimitry Andric if (ai == ae)
13445ffd83dbSDimitry Andric break;
13455ffd83dbSDimitry Andric
13465ffd83dbSDimitry Andric reg_value.SetUInt32(*ai);
13475ffd83dbSDimitry Andric if (!reg_ctx->WriteRegister(reg_ctx->GetRegisterInfoByName(reg_names[i]),
13485ffd83dbSDimitry Andric reg_value))
13495ffd83dbSDimitry Andric return false;
13505ffd83dbSDimitry Andric
13515ffd83dbSDimitry Andric ++ai;
13525ffd83dbSDimitry Andric }
13535ffd83dbSDimitry Andric
13545ffd83dbSDimitry Andric if (ai != ae) {
13555ffd83dbSDimitry Andric // Spill onto the stack
13565ffd83dbSDimitry Andric size_t num_stack_regs = ae - ai;
13575ffd83dbSDimitry Andric
13585ffd83dbSDimitry Andric sp -= (num_stack_regs * 4);
13595ffd83dbSDimitry Andric // Keep the stack 16 byte aligned
13605ffd83dbSDimitry Andric sp &= ~(16ull - 1ull);
13615ffd83dbSDimitry Andric
13625ffd83dbSDimitry Andric // just using arg1 to get the right size
13635ffd83dbSDimitry Andric const RegisterInfo *reg_info = reg_ctx->GetRegisterInfo(
13645ffd83dbSDimitry Andric eRegisterKindGeneric, LLDB_REGNUM_GENERIC_ARG1);
13655ffd83dbSDimitry Andric
13665ffd83dbSDimitry Andric addr_t arg_pos = sp;
13675ffd83dbSDimitry Andric
13685ffd83dbSDimitry Andric for (; ai != ae; ++ai) {
13695ffd83dbSDimitry Andric reg_value.SetUInt32(*ai);
13705ffd83dbSDimitry Andric if (reg_ctx
13715ffd83dbSDimitry Andric ->WriteRegisterValueToMemory(reg_info, arg_pos,
13725ffd83dbSDimitry Andric reg_info->byte_size, reg_value)
13735ffd83dbSDimitry Andric .Fail())
13745ffd83dbSDimitry Andric return false;
13755ffd83dbSDimitry Andric arg_pos += reg_info->byte_size;
13765ffd83dbSDimitry Andric }
13775ffd83dbSDimitry Andric }
13785ffd83dbSDimitry Andric
13795ffd83dbSDimitry Andric TargetSP target_sp(thread.CalculateTarget());
13805ffd83dbSDimitry Andric Address so_addr;
13815ffd83dbSDimitry Andric
13825ffd83dbSDimitry Andric // Figure out if our return address is ARM or Thumb by using the
13835ffd83dbSDimitry Andric // Address::GetCallableLoadAddress(Target*) which will figure out the ARM
13845ffd83dbSDimitry Andric // thumb-ness and set the correct address bits for us.
13855ffd83dbSDimitry Andric so_addr.SetLoadAddress(return_addr, target_sp.get());
13865ffd83dbSDimitry Andric return_addr = so_addr.GetCallableLoadAddress(target_sp.get());
13875ffd83dbSDimitry Andric
13885ffd83dbSDimitry Andric // Set "lr" to the return address
13895ffd83dbSDimitry Andric if (!reg_ctx->WriteRegisterFromUnsigned(ra_reg_num, return_addr))
13905ffd83dbSDimitry Andric return false;
13915ffd83dbSDimitry Andric
13925ffd83dbSDimitry Andric // If bit zero or 1 is set, this must be a thumb function, no need to figure
13935ffd83dbSDimitry Andric // this out from the symbols.
13945ffd83dbSDimitry Andric so_addr.SetLoadAddress(function_addr, target_sp.get());
13955ffd83dbSDimitry Andric function_addr = so_addr.GetCallableLoadAddress(target_sp.get());
13965ffd83dbSDimitry Andric
13975ffd83dbSDimitry Andric const RegisterInfo *cpsr_reg_info = reg_ctx->GetRegisterInfoByName("cpsr");
13985ffd83dbSDimitry Andric const uint32_t curr_cpsr = reg_ctx->ReadRegisterAsUnsigned(cpsr_reg_info, 0);
13995ffd83dbSDimitry Andric
14005ffd83dbSDimitry Andric // Make a new CPSR and mask out any Thumb IT (if/then) bits
14015ffd83dbSDimitry Andric uint32_t new_cpsr = curr_cpsr & ~MASK_CPSR_IT_MASK;
14025ffd83dbSDimitry Andric // If bit zero or 1 is set, this must be thumb...
14035ffd83dbSDimitry Andric if (function_addr & 1ull)
14045ffd83dbSDimitry Andric new_cpsr |= MASK_CPSR_T; // Set T bit in CPSR
14055ffd83dbSDimitry Andric else
14065ffd83dbSDimitry Andric new_cpsr &= ~MASK_CPSR_T; // Clear T bit in CPSR
14075ffd83dbSDimitry Andric
14085ffd83dbSDimitry Andric if (new_cpsr != curr_cpsr) {
14095ffd83dbSDimitry Andric if (!reg_ctx->WriteRegisterFromUnsigned(cpsr_reg_info, new_cpsr))
14105ffd83dbSDimitry Andric return false;
14115ffd83dbSDimitry Andric }
14125ffd83dbSDimitry Andric
14135ffd83dbSDimitry Andric function_addr &=
14145ffd83dbSDimitry Andric ~1ull; // clear bit zero since the CPSR will take care of the mode for us
14155ffd83dbSDimitry Andric
14165ffd83dbSDimitry Andric // Update the sp - stack pointer - to be aligned to 16-bytes
14175ffd83dbSDimitry Andric sp &= ~(0xfull);
14185ffd83dbSDimitry Andric if (!reg_ctx->WriteRegisterFromUnsigned(sp_reg_num, sp))
14195ffd83dbSDimitry Andric return false;
14205ffd83dbSDimitry Andric
14215ffd83dbSDimitry Andric // Set "pc" to the address requested
14225ffd83dbSDimitry Andric if (!reg_ctx->WriteRegisterFromUnsigned(pc_reg_num, function_addr))
14235ffd83dbSDimitry Andric return false;
14245ffd83dbSDimitry Andric
14255ffd83dbSDimitry Andric return true;
14265ffd83dbSDimitry Andric }
14275ffd83dbSDimitry Andric
GetArgumentValues(Thread & thread,ValueList & values) const14285ffd83dbSDimitry Andric bool ABIMacOSX_arm::GetArgumentValues(Thread &thread, ValueList &values) const {
14295ffd83dbSDimitry Andric uint32_t num_values = values.GetSize();
14305ffd83dbSDimitry Andric
14315ffd83dbSDimitry Andric ExecutionContext exe_ctx(thread.shared_from_this());
14325ffd83dbSDimitry Andric // For now, assume that the types in the AST values come from the Target's
14335ffd83dbSDimitry Andric // scratch AST.
14345ffd83dbSDimitry Andric
14355ffd83dbSDimitry Andric // Extract the register context so we can read arguments from registers
14365ffd83dbSDimitry Andric
14375ffd83dbSDimitry Andric RegisterContext *reg_ctx = thread.GetRegisterContext().get();
14385ffd83dbSDimitry Andric
14395ffd83dbSDimitry Andric if (!reg_ctx)
14405ffd83dbSDimitry Andric return false;
14415ffd83dbSDimitry Andric
14425ffd83dbSDimitry Andric addr_t sp = 0;
14435ffd83dbSDimitry Andric
14445ffd83dbSDimitry Andric for (uint32_t value_idx = 0; value_idx < num_values; ++value_idx) {
14455ffd83dbSDimitry Andric // We currently only support extracting values with Clang QualTypes. Do we
14465ffd83dbSDimitry Andric // care about others?
14475ffd83dbSDimitry Andric Value *value = values.GetValueAtIndex(value_idx);
14485ffd83dbSDimitry Andric
14495ffd83dbSDimitry Andric if (!value)
14505ffd83dbSDimitry Andric return false;
14515ffd83dbSDimitry Andric
14525ffd83dbSDimitry Andric CompilerType compiler_type = value->GetCompilerType();
14535ffd83dbSDimitry Andric if (compiler_type) {
14545ffd83dbSDimitry Andric bool is_signed = false;
14555ffd83dbSDimitry Andric size_t bit_width = 0;
1456bdd1243dSDimitry Andric std::optional<uint64_t> bit_size = compiler_type.GetBitSize(&thread);
14575ffd83dbSDimitry Andric if (!bit_size)
14585ffd83dbSDimitry Andric return false;
14595ffd83dbSDimitry Andric if (compiler_type.IsIntegerOrEnumerationType(is_signed))
14605ffd83dbSDimitry Andric bit_width = *bit_size;
14615ffd83dbSDimitry Andric else if (compiler_type.IsPointerOrReferenceType())
14625ffd83dbSDimitry Andric bit_width = *bit_size;
14635ffd83dbSDimitry Andric else
14645ffd83dbSDimitry Andric // We only handle integer, pointer and reference types currently...
14655ffd83dbSDimitry Andric return false;
14665ffd83dbSDimitry Andric
14675ffd83dbSDimitry Andric if (bit_width <= (exe_ctx.GetProcessRef().GetAddressByteSize() * 8)) {
14685ffd83dbSDimitry Andric if (value_idx < 4) {
14695ffd83dbSDimitry Andric // Arguments 1-4 are in r0-r3...
14705ffd83dbSDimitry Andric const RegisterInfo *arg_reg_info = nullptr;
14715ffd83dbSDimitry Andric // Search by generic ID first, then fall back to by name
14725ffd83dbSDimitry Andric uint32_t arg_reg_num = reg_ctx->ConvertRegisterKindToRegisterNumber(
14735ffd83dbSDimitry Andric eRegisterKindGeneric, LLDB_REGNUM_GENERIC_ARG1 + value_idx);
14745ffd83dbSDimitry Andric if (arg_reg_num != LLDB_INVALID_REGNUM) {
14755ffd83dbSDimitry Andric arg_reg_info = reg_ctx->GetRegisterInfoAtIndex(arg_reg_num);
14765ffd83dbSDimitry Andric } else {
14775ffd83dbSDimitry Andric switch (value_idx) {
14785ffd83dbSDimitry Andric case 0:
14795ffd83dbSDimitry Andric arg_reg_info = reg_ctx->GetRegisterInfoByName("r0");
14805ffd83dbSDimitry Andric break;
14815ffd83dbSDimitry Andric case 1:
14825ffd83dbSDimitry Andric arg_reg_info = reg_ctx->GetRegisterInfoByName("r1");
14835ffd83dbSDimitry Andric break;
14845ffd83dbSDimitry Andric case 2:
14855ffd83dbSDimitry Andric arg_reg_info = reg_ctx->GetRegisterInfoByName("r2");
14865ffd83dbSDimitry Andric break;
14875ffd83dbSDimitry Andric case 3:
14885ffd83dbSDimitry Andric arg_reg_info = reg_ctx->GetRegisterInfoByName("r3");
14895ffd83dbSDimitry Andric break;
14905ffd83dbSDimitry Andric }
14915ffd83dbSDimitry Andric }
14925ffd83dbSDimitry Andric
14935ffd83dbSDimitry Andric if (arg_reg_info) {
14945ffd83dbSDimitry Andric RegisterValue reg_value;
14955ffd83dbSDimitry Andric
14965ffd83dbSDimitry Andric if (reg_ctx->ReadRegister(arg_reg_info, reg_value)) {
14975ffd83dbSDimitry Andric if (is_signed)
14985ffd83dbSDimitry Andric reg_value.SignExtend(bit_width);
14995ffd83dbSDimitry Andric if (!reg_value.GetScalarValue(value->GetScalar()))
15005ffd83dbSDimitry Andric return false;
15015ffd83dbSDimitry Andric continue;
15025ffd83dbSDimitry Andric }
15035ffd83dbSDimitry Andric }
15045ffd83dbSDimitry Andric return false;
15055ffd83dbSDimitry Andric } else {
15065ffd83dbSDimitry Andric if (sp == 0) {
15075ffd83dbSDimitry Andric // Read the stack pointer if it already hasn't been read
15085ffd83dbSDimitry Andric sp = reg_ctx->GetSP(0);
15095ffd83dbSDimitry Andric if (sp == 0)
15105ffd83dbSDimitry Andric return false;
15115ffd83dbSDimitry Andric }
15125ffd83dbSDimitry Andric
15135ffd83dbSDimitry Andric // Arguments 5 on up are on the stack
15145ffd83dbSDimitry Andric const uint32_t arg_byte_size = (bit_width + (8 - 1)) / 8;
15155ffd83dbSDimitry Andric Status error;
15165ffd83dbSDimitry Andric if (!exe_ctx.GetProcessRef().ReadScalarIntegerFromMemory(
15175ffd83dbSDimitry Andric sp, arg_byte_size, is_signed, value->GetScalar(), error))
15185ffd83dbSDimitry Andric return false;
15195ffd83dbSDimitry Andric
15205ffd83dbSDimitry Andric sp += arg_byte_size;
15215ffd83dbSDimitry Andric }
15225ffd83dbSDimitry Andric }
15235ffd83dbSDimitry Andric }
15245ffd83dbSDimitry Andric }
15255ffd83dbSDimitry Andric return true;
15265ffd83dbSDimitry Andric }
15275ffd83dbSDimitry Andric
IsArmv7kProcess() const15285ffd83dbSDimitry Andric bool ABIMacOSX_arm::IsArmv7kProcess() const {
15295ffd83dbSDimitry Andric bool is_armv7k = false;
15305ffd83dbSDimitry Andric ProcessSP process_sp(GetProcessSP());
15315ffd83dbSDimitry Andric if (process_sp) {
15325ffd83dbSDimitry Andric const ArchSpec &arch(process_sp->GetTarget().GetArchitecture());
15335ffd83dbSDimitry Andric const ArchSpec::Core system_core = arch.GetCore();
15345ffd83dbSDimitry Andric if (system_core == ArchSpec::eCore_arm_armv7k) {
15355ffd83dbSDimitry Andric is_armv7k = true;
15365ffd83dbSDimitry Andric }
15375ffd83dbSDimitry Andric }
15385ffd83dbSDimitry Andric return is_armv7k;
15395ffd83dbSDimitry Andric }
15405ffd83dbSDimitry Andric
GetReturnValueObjectImpl(Thread & thread,lldb_private::CompilerType & compiler_type) const15415ffd83dbSDimitry Andric ValueObjectSP ABIMacOSX_arm::GetReturnValueObjectImpl(
15425ffd83dbSDimitry Andric Thread &thread, lldb_private::CompilerType &compiler_type) const {
15435ffd83dbSDimitry Andric Value value;
15445ffd83dbSDimitry Andric ValueObjectSP return_valobj_sp;
15455ffd83dbSDimitry Andric
15465ffd83dbSDimitry Andric if (!compiler_type)
15475ffd83dbSDimitry Andric return return_valobj_sp;
15485ffd83dbSDimitry Andric
15495ffd83dbSDimitry Andric value.SetCompilerType(compiler_type);
15505ffd83dbSDimitry Andric
15515ffd83dbSDimitry Andric RegisterContext *reg_ctx = thread.GetRegisterContext().get();
15525ffd83dbSDimitry Andric if (!reg_ctx)
15535ffd83dbSDimitry Andric return return_valobj_sp;
15545ffd83dbSDimitry Andric
15555ffd83dbSDimitry Andric bool is_signed;
15565ffd83dbSDimitry Andric
15575ffd83dbSDimitry Andric // Get the pointer to the first stack argument so we have a place to start
15585ffd83dbSDimitry Andric // when reading data
15595ffd83dbSDimitry Andric
15605ffd83dbSDimitry Andric const RegisterInfo *r0_reg_info = reg_ctx->GetRegisterInfoByName("r0", 0);
15615ffd83dbSDimitry Andric if (compiler_type.IsIntegerOrEnumerationType(is_signed)) {
1562bdd1243dSDimitry Andric std::optional<uint64_t> bit_width = compiler_type.GetBitSize(&thread);
15635ffd83dbSDimitry Andric if (!bit_width)
15645ffd83dbSDimitry Andric return return_valobj_sp;
15655ffd83dbSDimitry Andric
15665ffd83dbSDimitry Andric switch (*bit_width) {
15675ffd83dbSDimitry Andric default:
15685ffd83dbSDimitry Andric return return_valobj_sp;
15695ffd83dbSDimitry Andric case 128:
15705ffd83dbSDimitry Andric if (IsArmv7kProcess()) {
15715ffd83dbSDimitry Andric // "A composite type not larger than 16 bytes is returned in r0-r3. The
15725ffd83dbSDimitry Andric // format is as if the result had been stored in memory at a word-
15735ffd83dbSDimitry Andric // aligned address and then loaded into r0-r3 with an ldm instruction"
15745ffd83dbSDimitry Andric {
15755ffd83dbSDimitry Andric const RegisterInfo *r1_reg_info =
15765ffd83dbSDimitry Andric reg_ctx->GetRegisterInfoByName("r1", 0);
15775ffd83dbSDimitry Andric const RegisterInfo *r2_reg_info =
15785ffd83dbSDimitry Andric reg_ctx->GetRegisterInfoByName("r2", 0);
15795ffd83dbSDimitry Andric const RegisterInfo *r3_reg_info =
15805ffd83dbSDimitry Andric reg_ctx->GetRegisterInfoByName("r3", 0);
15815ffd83dbSDimitry Andric if (r1_reg_info && r2_reg_info && r3_reg_info) {
1582bdd1243dSDimitry Andric std::optional<uint64_t> byte_size =
15835ffd83dbSDimitry Andric compiler_type.GetByteSize(&thread);
15845ffd83dbSDimitry Andric if (!byte_size)
15855ffd83dbSDimitry Andric return return_valobj_sp;
15865ffd83dbSDimitry Andric ProcessSP process_sp(thread.GetProcess());
15875ffd83dbSDimitry Andric if (*byte_size <= r0_reg_info->byte_size + r1_reg_info->byte_size +
15885ffd83dbSDimitry Andric r2_reg_info->byte_size +
15895ffd83dbSDimitry Andric r3_reg_info->byte_size &&
15905ffd83dbSDimitry Andric process_sp) {
15915ffd83dbSDimitry Andric std::unique_ptr<DataBufferHeap> heap_data_up(
15925ffd83dbSDimitry Andric new DataBufferHeap(*byte_size, 0));
15935ffd83dbSDimitry Andric const ByteOrder byte_order = process_sp->GetByteOrder();
15945ffd83dbSDimitry Andric RegisterValue r0_reg_value;
15955ffd83dbSDimitry Andric RegisterValue r1_reg_value;
15965ffd83dbSDimitry Andric RegisterValue r2_reg_value;
15975ffd83dbSDimitry Andric RegisterValue r3_reg_value;
15985ffd83dbSDimitry Andric if (reg_ctx->ReadRegister(r0_reg_info, r0_reg_value) &&
15995ffd83dbSDimitry Andric reg_ctx->ReadRegister(r1_reg_info, r1_reg_value) &&
16005ffd83dbSDimitry Andric reg_ctx->ReadRegister(r2_reg_info, r2_reg_value) &&
16015ffd83dbSDimitry Andric reg_ctx->ReadRegister(r3_reg_info, r3_reg_value)) {
16025ffd83dbSDimitry Andric Status error;
1603bdd1243dSDimitry Andric if (r0_reg_value.GetAsMemoryData(*r0_reg_info,
16045ffd83dbSDimitry Andric heap_data_up->GetBytes() + 0,
16055ffd83dbSDimitry Andric 4, byte_order, error) &&
1606bdd1243dSDimitry Andric r1_reg_value.GetAsMemoryData(*r1_reg_info,
16075ffd83dbSDimitry Andric heap_data_up->GetBytes() + 4,
16085ffd83dbSDimitry Andric 4, byte_order, error) &&
1609bdd1243dSDimitry Andric r2_reg_value.GetAsMemoryData(*r2_reg_info,
16105ffd83dbSDimitry Andric heap_data_up->GetBytes() + 8,
16115ffd83dbSDimitry Andric 4, byte_order, error) &&
1612bdd1243dSDimitry Andric r3_reg_value.GetAsMemoryData(*r3_reg_info,
16135ffd83dbSDimitry Andric heap_data_up->GetBytes() + 12,
16145ffd83dbSDimitry Andric 4, byte_order, error)) {
16155ffd83dbSDimitry Andric DataExtractor data(DataBufferSP(heap_data_up.release()),
16165ffd83dbSDimitry Andric byte_order,
16175ffd83dbSDimitry Andric process_sp->GetAddressByteSize());
16185ffd83dbSDimitry Andric
16195ffd83dbSDimitry Andric return_valobj_sp = ValueObjectConstResult::Create(
16205ffd83dbSDimitry Andric &thread, compiler_type, ConstString(""), data);
16215ffd83dbSDimitry Andric return return_valobj_sp;
16225ffd83dbSDimitry Andric }
16235ffd83dbSDimitry Andric }
16245ffd83dbSDimitry Andric }
16255ffd83dbSDimitry Andric }
16265ffd83dbSDimitry Andric }
16275ffd83dbSDimitry Andric } else {
16285ffd83dbSDimitry Andric return return_valobj_sp;
16295ffd83dbSDimitry Andric }
16305ffd83dbSDimitry Andric break;
16315ffd83dbSDimitry Andric case 64: {
16325ffd83dbSDimitry Andric const RegisterInfo *r1_reg_info = reg_ctx->GetRegisterInfoByName("r1", 0);
16335ffd83dbSDimitry Andric uint64_t raw_value;
16345ffd83dbSDimitry Andric raw_value = reg_ctx->ReadRegisterAsUnsigned(r0_reg_info, 0) & UINT32_MAX;
16355ffd83dbSDimitry Andric raw_value |= ((uint64_t)(reg_ctx->ReadRegisterAsUnsigned(r1_reg_info, 0) &
16365ffd83dbSDimitry Andric UINT32_MAX))
16375ffd83dbSDimitry Andric << 32;
16385ffd83dbSDimitry Andric if (is_signed)
16395ffd83dbSDimitry Andric value.GetScalar() = (int64_t)raw_value;
16405ffd83dbSDimitry Andric else
16415ffd83dbSDimitry Andric value.GetScalar() = (uint64_t)raw_value;
16425ffd83dbSDimitry Andric } break;
16435ffd83dbSDimitry Andric case 32:
16445ffd83dbSDimitry Andric if (is_signed)
16455ffd83dbSDimitry Andric value.GetScalar() = (int32_t)(
16465ffd83dbSDimitry Andric reg_ctx->ReadRegisterAsUnsigned(r0_reg_info, 0) & UINT32_MAX);
16475ffd83dbSDimitry Andric else
16485ffd83dbSDimitry Andric value.GetScalar() = (uint32_t)(
16495ffd83dbSDimitry Andric reg_ctx->ReadRegisterAsUnsigned(r0_reg_info, 0) & UINT32_MAX);
16505ffd83dbSDimitry Andric break;
16515ffd83dbSDimitry Andric case 16:
16525ffd83dbSDimitry Andric if (is_signed)
16535ffd83dbSDimitry Andric value.GetScalar() = (int16_t)(
16545ffd83dbSDimitry Andric reg_ctx->ReadRegisterAsUnsigned(r0_reg_info, 0) & UINT16_MAX);
16555ffd83dbSDimitry Andric else
16565ffd83dbSDimitry Andric value.GetScalar() = (uint16_t)(
16575ffd83dbSDimitry Andric reg_ctx->ReadRegisterAsUnsigned(r0_reg_info, 0) & UINT16_MAX);
16585ffd83dbSDimitry Andric break;
16595ffd83dbSDimitry Andric case 8:
16605ffd83dbSDimitry Andric if (is_signed)
16615ffd83dbSDimitry Andric value.GetScalar() = (int8_t)(
16625ffd83dbSDimitry Andric reg_ctx->ReadRegisterAsUnsigned(r0_reg_info, 0) & UINT8_MAX);
16635ffd83dbSDimitry Andric else
16645ffd83dbSDimitry Andric value.GetScalar() = (uint8_t)(
16655ffd83dbSDimitry Andric reg_ctx->ReadRegisterAsUnsigned(r0_reg_info, 0) & UINT8_MAX);
16665ffd83dbSDimitry Andric break;
16675ffd83dbSDimitry Andric }
16685ffd83dbSDimitry Andric } else if (compiler_type.IsPointerType()) {
16695ffd83dbSDimitry Andric uint32_t ptr =
16705ffd83dbSDimitry Andric thread.GetRegisterContext()->ReadRegisterAsUnsigned(r0_reg_info, 0) &
16715ffd83dbSDimitry Andric UINT32_MAX;
16725ffd83dbSDimitry Andric value.GetScalar() = ptr;
16735ffd83dbSDimitry Andric } else {
16745ffd83dbSDimitry Andric // not handled yet
16755ffd83dbSDimitry Andric return return_valobj_sp;
16765ffd83dbSDimitry Andric }
16775ffd83dbSDimitry Andric
16785ffd83dbSDimitry Andric // If we get here, we have a valid Value, so make our ValueObject out of it:
16795ffd83dbSDimitry Andric
16805ffd83dbSDimitry Andric return_valobj_sp = ValueObjectConstResult::Create(
16815ffd83dbSDimitry Andric thread.GetStackFrameAtIndex(0).get(), value, ConstString(""));
16825ffd83dbSDimitry Andric return return_valobj_sp;
16835ffd83dbSDimitry Andric }
16845ffd83dbSDimitry Andric
SetReturnValueObject(lldb::StackFrameSP & frame_sp,lldb::ValueObjectSP & new_value_sp)16855ffd83dbSDimitry Andric Status ABIMacOSX_arm::SetReturnValueObject(lldb::StackFrameSP &frame_sp,
16865ffd83dbSDimitry Andric lldb::ValueObjectSP &new_value_sp) {
16875ffd83dbSDimitry Andric Status error;
16885ffd83dbSDimitry Andric if (!new_value_sp) {
16895ffd83dbSDimitry Andric error.SetErrorString("Empty value object for return value.");
16905ffd83dbSDimitry Andric return error;
16915ffd83dbSDimitry Andric }
16925ffd83dbSDimitry Andric
16935ffd83dbSDimitry Andric CompilerType compiler_type = new_value_sp->GetCompilerType();
16945ffd83dbSDimitry Andric if (!compiler_type) {
16955ffd83dbSDimitry Andric error.SetErrorString("Null clang type for return value.");
16965ffd83dbSDimitry Andric return error;
16975ffd83dbSDimitry Andric }
16985ffd83dbSDimitry Andric
16995ffd83dbSDimitry Andric Thread *thread = frame_sp->GetThread().get();
17005ffd83dbSDimitry Andric
17015ffd83dbSDimitry Andric bool is_signed;
17025ffd83dbSDimitry Andric uint32_t count;
17035ffd83dbSDimitry Andric bool is_complex;
17045ffd83dbSDimitry Andric
17055ffd83dbSDimitry Andric RegisterContext *reg_ctx = thread->GetRegisterContext().get();
17065ffd83dbSDimitry Andric
17075ffd83dbSDimitry Andric bool set_it_simple = false;
17085ffd83dbSDimitry Andric if (compiler_type.IsIntegerOrEnumerationType(is_signed) ||
17095ffd83dbSDimitry Andric compiler_type.IsPointerType()) {
17105ffd83dbSDimitry Andric DataExtractor data;
17115ffd83dbSDimitry Andric Status data_error;
17125ffd83dbSDimitry Andric size_t num_bytes = new_value_sp->GetData(data, data_error);
17135ffd83dbSDimitry Andric if (data_error.Fail()) {
17145ffd83dbSDimitry Andric error.SetErrorStringWithFormat(
17155ffd83dbSDimitry Andric "Couldn't convert return value to raw data: %s",
17165ffd83dbSDimitry Andric data_error.AsCString());
17175ffd83dbSDimitry Andric return error;
17185ffd83dbSDimitry Andric }
17195ffd83dbSDimitry Andric lldb::offset_t offset = 0;
17205ffd83dbSDimitry Andric if (num_bytes <= 8) {
17215ffd83dbSDimitry Andric const RegisterInfo *r0_info = reg_ctx->GetRegisterInfoByName("r0", 0);
17225ffd83dbSDimitry Andric if (num_bytes <= 4) {
17235ffd83dbSDimitry Andric uint32_t raw_value = data.GetMaxU32(&offset, num_bytes);
17245ffd83dbSDimitry Andric
17255ffd83dbSDimitry Andric if (reg_ctx->WriteRegisterFromUnsigned(r0_info, raw_value))
17265ffd83dbSDimitry Andric set_it_simple = true;
17275ffd83dbSDimitry Andric } else {
17285ffd83dbSDimitry Andric uint32_t raw_value = data.GetMaxU32(&offset, 4);
17295ffd83dbSDimitry Andric
17305ffd83dbSDimitry Andric if (reg_ctx->WriteRegisterFromUnsigned(r0_info, raw_value)) {
17315ffd83dbSDimitry Andric const RegisterInfo *r1_info = reg_ctx->GetRegisterInfoByName("r1", 0);
17325ffd83dbSDimitry Andric uint32_t raw_value = data.GetMaxU32(&offset, num_bytes - offset);
17335ffd83dbSDimitry Andric
17345ffd83dbSDimitry Andric if (reg_ctx->WriteRegisterFromUnsigned(r1_info, raw_value))
17355ffd83dbSDimitry Andric set_it_simple = true;
17365ffd83dbSDimitry Andric }
17375ffd83dbSDimitry Andric }
17385ffd83dbSDimitry Andric } else if (num_bytes <= 16 && IsArmv7kProcess()) {
17395ffd83dbSDimitry Andric // "A composite type not larger than 16 bytes is returned in r0-r3. The
17405ffd83dbSDimitry Andric // format is as if the result had been stored in memory at a word-aligned
17415ffd83dbSDimitry Andric // address and then loaded into r0-r3 with an ldm instruction"
17425ffd83dbSDimitry Andric
17435ffd83dbSDimitry Andric const RegisterInfo *r0_info = reg_ctx->GetRegisterInfoByName("r0", 0);
17445ffd83dbSDimitry Andric const RegisterInfo *r1_info = reg_ctx->GetRegisterInfoByName("r1", 0);
17455ffd83dbSDimitry Andric const RegisterInfo *r2_info = reg_ctx->GetRegisterInfoByName("r2", 0);
17465ffd83dbSDimitry Andric const RegisterInfo *r3_info = reg_ctx->GetRegisterInfoByName("r3", 0);
17475ffd83dbSDimitry Andric lldb::offset_t offset = 0;
17485ffd83dbSDimitry Andric uint32_t bytes_written = 4;
17495ffd83dbSDimitry Andric uint32_t raw_value = data.GetMaxU64(&offset, 4);
17505ffd83dbSDimitry Andric if (reg_ctx->WriteRegisterFromUnsigned(r0_info, raw_value) &&
17515ffd83dbSDimitry Andric bytes_written <= num_bytes) {
17525ffd83dbSDimitry Andric bytes_written += 4;
17535ffd83dbSDimitry Andric raw_value = data.GetMaxU64(&offset, 4);
17545ffd83dbSDimitry Andric if (bytes_written <= num_bytes &&
17555ffd83dbSDimitry Andric reg_ctx->WriteRegisterFromUnsigned(r1_info, raw_value)) {
17565ffd83dbSDimitry Andric bytes_written += 4;
17575ffd83dbSDimitry Andric raw_value = data.GetMaxU64(&offset, 4);
17585ffd83dbSDimitry Andric if (bytes_written <= num_bytes &&
17595ffd83dbSDimitry Andric reg_ctx->WriteRegisterFromUnsigned(r2_info, raw_value)) {
17605ffd83dbSDimitry Andric bytes_written += 4;
17615ffd83dbSDimitry Andric raw_value = data.GetMaxU64(&offset, 4);
17625ffd83dbSDimitry Andric if (bytes_written <= num_bytes &&
17635ffd83dbSDimitry Andric reg_ctx->WriteRegisterFromUnsigned(r3_info, raw_value)) {
17645ffd83dbSDimitry Andric set_it_simple = true;
17655ffd83dbSDimitry Andric }
17665ffd83dbSDimitry Andric }
17675ffd83dbSDimitry Andric }
17685ffd83dbSDimitry Andric }
17695ffd83dbSDimitry Andric } else {
17705ffd83dbSDimitry Andric error.SetErrorString("We don't support returning longer than 64 bit "
17715ffd83dbSDimitry Andric "integer values at present.");
17725ffd83dbSDimitry Andric }
17735ffd83dbSDimitry Andric } else if (compiler_type.IsFloatingPointType(count, is_complex)) {
17745ffd83dbSDimitry Andric if (is_complex)
17755ffd83dbSDimitry Andric error.SetErrorString(
17765ffd83dbSDimitry Andric "We don't support returning complex values at present");
17775ffd83dbSDimitry Andric else
17785ffd83dbSDimitry Andric error.SetErrorString(
17795ffd83dbSDimitry Andric "We don't support returning float values at present");
17805ffd83dbSDimitry Andric }
17815ffd83dbSDimitry Andric
17825ffd83dbSDimitry Andric if (!set_it_simple)
17835ffd83dbSDimitry Andric error.SetErrorString(
17845ffd83dbSDimitry Andric "We only support setting simple integer return types at present.");
17855ffd83dbSDimitry Andric
17865ffd83dbSDimitry Andric return error;
17875ffd83dbSDimitry Andric }
17885ffd83dbSDimitry Andric
CreateFunctionEntryUnwindPlan(UnwindPlan & unwind_plan)17895ffd83dbSDimitry Andric bool ABIMacOSX_arm::CreateFunctionEntryUnwindPlan(UnwindPlan &unwind_plan) {
17905ffd83dbSDimitry Andric unwind_plan.Clear();
17915ffd83dbSDimitry Andric unwind_plan.SetRegisterKind(eRegisterKindDWARF);
17925ffd83dbSDimitry Andric
17935ffd83dbSDimitry Andric uint32_t lr_reg_num = dwarf_lr;
17945ffd83dbSDimitry Andric uint32_t sp_reg_num = dwarf_sp;
17955ffd83dbSDimitry Andric uint32_t pc_reg_num = dwarf_pc;
17965ffd83dbSDimitry Andric
17975ffd83dbSDimitry Andric UnwindPlan::RowSP row(new UnwindPlan::Row);
17985ffd83dbSDimitry Andric
17995ffd83dbSDimitry Andric // Our Call Frame Address is the stack pointer value
18005ffd83dbSDimitry Andric row->GetCFAValue().SetIsRegisterPlusOffset(sp_reg_num, 0);
18015ffd83dbSDimitry Andric
18025ffd83dbSDimitry Andric // The previous PC is in the LR
18035ffd83dbSDimitry Andric row->SetRegisterLocationToRegister(pc_reg_num, lr_reg_num, true);
18045ffd83dbSDimitry Andric unwind_plan.AppendRow(row);
18055ffd83dbSDimitry Andric
18065ffd83dbSDimitry Andric // All other registers are the same.
18075ffd83dbSDimitry Andric
18085ffd83dbSDimitry Andric unwind_plan.SetSourceName("arm at-func-entry default");
18095ffd83dbSDimitry Andric unwind_plan.SetSourcedFromCompiler(eLazyBoolNo);
18105ffd83dbSDimitry Andric
18115ffd83dbSDimitry Andric return true;
18125ffd83dbSDimitry Andric }
18135ffd83dbSDimitry Andric
CreateDefaultUnwindPlan(UnwindPlan & unwind_plan)18145ffd83dbSDimitry Andric bool ABIMacOSX_arm::CreateDefaultUnwindPlan(UnwindPlan &unwind_plan) {
18155ffd83dbSDimitry Andric unwind_plan.Clear();
18165ffd83dbSDimitry Andric unwind_plan.SetRegisterKind(eRegisterKindDWARF);
18175ffd83dbSDimitry Andric
18185ffd83dbSDimitry Andric uint32_t fp_reg_num =
18195ffd83dbSDimitry Andric dwarf_r7; // apple uses r7 for all frames. Normal arm uses r11
18205ffd83dbSDimitry Andric uint32_t pc_reg_num = dwarf_pc;
18215ffd83dbSDimitry Andric
18225ffd83dbSDimitry Andric UnwindPlan::RowSP row(new UnwindPlan::Row);
18235ffd83dbSDimitry Andric const int32_t ptr_size = 4;
18245ffd83dbSDimitry Andric
18255ffd83dbSDimitry Andric row->GetCFAValue().SetIsRegisterPlusOffset(fp_reg_num, 2 * ptr_size);
18265ffd83dbSDimitry Andric row->SetOffset(0);
1827fe6060f1SDimitry Andric row->SetUnspecifiedRegistersAreUndefined(true);
18285ffd83dbSDimitry Andric
18295ffd83dbSDimitry Andric row->SetRegisterLocationToAtCFAPlusOffset(fp_reg_num, ptr_size * -2, true);
18305ffd83dbSDimitry Andric row->SetRegisterLocationToAtCFAPlusOffset(pc_reg_num, ptr_size * -1, true);
18315ffd83dbSDimitry Andric
18325ffd83dbSDimitry Andric unwind_plan.AppendRow(row);
18335ffd83dbSDimitry Andric unwind_plan.SetSourceName("arm-apple-ios default unwind plan");
18345ffd83dbSDimitry Andric unwind_plan.SetSourcedFromCompiler(eLazyBoolNo);
18355ffd83dbSDimitry Andric unwind_plan.SetUnwindPlanValidAtAllInstructions(eLazyBoolNo);
18365ffd83dbSDimitry Andric unwind_plan.SetUnwindPlanForSignalTrap(eLazyBoolNo);
18375ffd83dbSDimitry Andric
18385ffd83dbSDimitry Andric return true;
18395ffd83dbSDimitry Andric }
18405ffd83dbSDimitry Andric
18415ffd83dbSDimitry Andric // cf. "ARMv6 Function Calling Conventions"
18425ffd83dbSDimitry Andric // https://developer.apple.com/library/ios/documentation/Xcode/Conceptual/iPhoneOSABIReference/Articles/ARMv6FunctionCallingConventions.html
18435ffd83dbSDimitry Andric // and "ARMv7 Function Calling Conventions"
18445ffd83dbSDimitry Andric // https://developer.apple.com/library/ios/documentation/Xcode/Conceptual/iPhoneOSABIReference/Articles/ARMv7FunctionCallingConventions.html
18455ffd83dbSDimitry Andric
18465ffd83dbSDimitry Andric // ARMv7 on iOS general purpose reg rules:
18475ffd83dbSDimitry Andric // r0-r3 not preserved (used for argument passing)
18485ffd83dbSDimitry Andric // r4-r6 preserved
18495ffd83dbSDimitry Andric // r7 preserved (frame pointer)
18505ffd83dbSDimitry Andric // r8 preserved
18515ffd83dbSDimitry Andric // r9 not preserved (usable as volatile scratch register with iOS 3.x and
18525ffd83dbSDimitry Andric // later)
18535ffd83dbSDimitry Andric // r10-r11 preserved
18545ffd83dbSDimitry Andric // r12 not presrved
18555ffd83dbSDimitry Andric // r13 preserved (stack pointer)
18565ffd83dbSDimitry Andric // r14 not preserved (link register)
18575ffd83dbSDimitry Andric // r15 preserved (pc)
18585ffd83dbSDimitry Andric // cpsr not preserved (different rules for different bits)
18595ffd83dbSDimitry Andric
18605ffd83dbSDimitry Andric // ARMv7 on iOS floating point rules:
18615ffd83dbSDimitry Andric // d0-d7 not preserved (aka s0-s15, q0-q3)
18625ffd83dbSDimitry Andric // d8-d15 preserved (aka s16-s31, q4-q7)
18635ffd83dbSDimitry Andric // d16-d31 not preserved (aka q8-q15)
18645ffd83dbSDimitry Andric
RegisterIsVolatile(const RegisterInfo * reg_info)18655ffd83dbSDimitry Andric bool ABIMacOSX_arm::RegisterIsVolatile(const RegisterInfo *reg_info) {
18665ffd83dbSDimitry Andric if (reg_info) {
18675ffd83dbSDimitry Andric // Volatile registers are: r0, r1, r2, r3, r9, r12, r13 (aka sp)
18685ffd83dbSDimitry Andric const char *name = reg_info->name;
18695ffd83dbSDimitry Andric if (name[0] == 'r') {
18705ffd83dbSDimitry Andric switch (name[1]) {
18715ffd83dbSDimitry Andric case '0':
18725ffd83dbSDimitry Andric return name[2] == '\0'; // r0
18735ffd83dbSDimitry Andric case '1':
18745ffd83dbSDimitry Andric switch (name[2]) {
18755ffd83dbSDimitry Andric case '\0':
18765ffd83dbSDimitry Andric return true; // r1
18775ffd83dbSDimitry Andric case '2':
18785ffd83dbSDimitry Andric case '3':
18795ffd83dbSDimitry Andric return name[3] == '\0'; // r12, r13 (sp)
18805ffd83dbSDimitry Andric default:
18815ffd83dbSDimitry Andric break;
18825ffd83dbSDimitry Andric }
18835ffd83dbSDimitry Andric break;
18845ffd83dbSDimitry Andric
18855ffd83dbSDimitry Andric case '2':
18865ffd83dbSDimitry Andric return name[2] == '\0'; // r2
18875ffd83dbSDimitry Andric case '3':
18885ffd83dbSDimitry Andric return name[2] == '\0'; // r3
18895ffd83dbSDimitry Andric case '9':
18905ffd83dbSDimitry Andric return name[2] == '\0'; // r9 (apple-ios only...)
18915ffd83dbSDimitry Andric
18925ffd83dbSDimitry Andric break;
18935ffd83dbSDimitry Andric }
18945ffd83dbSDimitry Andric } else if (name[0] == 'd') {
18955ffd83dbSDimitry Andric switch (name[1]) {
18965ffd83dbSDimitry Andric case '0':
18975ffd83dbSDimitry Andric return name[2] == '\0'; // d0 is volatile
18985ffd83dbSDimitry Andric
18995ffd83dbSDimitry Andric case '1':
19005ffd83dbSDimitry Andric switch (name[2]) {
19015ffd83dbSDimitry Andric case '\0':
19025ffd83dbSDimitry Andric return true; // d1 is volatile
19035ffd83dbSDimitry Andric case '6':
19045ffd83dbSDimitry Andric case '7':
19055ffd83dbSDimitry Andric case '8':
19065ffd83dbSDimitry Andric case '9':
19075ffd83dbSDimitry Andric return name[3] == '\0'; // d16 - d19 are volatile
19085ffd83dbSDimitry Andric default:
19095ffd83dbSDimitry Andric break;
19105ffd83dbSDimitry Andric }
19115ffd83dbSDimitry Andric break;
19125ffd83dbSDimitry Andric
19135ffd83dbSDimitry Andric case '2':
19145ffd83dbSDimitry Andric switch (name[2]) {
19155ffd83dbSDimitry Andric case '\0':
19165ffd83dbSDimitry Andric return true; // d2 is volatile
19175ffd83dbSDimitry Andric case '0':
19185ffd83dbSDimitry Andric case '1':
19195ffd83dbSDimitry Andric case '2':
19205ffd83dbSDimitry Andric case '3':
19215ffd83dbSDimitry Andric case '4':
19225ffd83dbSDimitry Andric case '5':
19235ffd83dbSDimitry Andric case '6':
19245ffd83dbSDimitry Andric case '7':
19255ffd83dbSDimitry Andric case '8':
19265ffd83dbSDimitry Andric case '9':
19275ffd83dbSDimitry Andric return name[3] == '\0'; // d20 - d29 are volatile
19285ffd83dbSDimitry Andric default:
19295ffd83dbSDimitry Andric break;
19305ffd83dbSDimitry Andric }
19315ffd83dbSDimitry Andric break;
19325ffd83dbSDimitry Andric
19335ffd83dbSDimitry Andric case '3':
19345ffd83dbSDimitry Andric switch (name[2]) {
19355ffd83dbSDimitry Andric case '\0':
19365ffd83dbSDimitry Andric return true; // d3 is volatile
19375ffd83dbSDimitry Andric case '0':
19385ffd83dbSDimitry Andric case '1':
19395ffd83dbSDimitry Andric return name[3] == '\0'; // d30 - d31 are volatile
19405ffd83dbSDimitry Andric default:
19415ffd83dbSDimitry Andric break;
19425ffd83dbSDimitry Andric }
19435ffd83dbSDimitry Andric break;
19445ffd83dbSDimitry Andric case '4':
19455ffd83dbSDimitry Andric case '5':
19465ffd83dbSDimitry Andric case '6':
19475ffd83dbSDimitry Andric case '7':
19485ffd83dbSDimitry Andric return name[2] == '\0'; // d4 - d7 are volatile
19495ffd83dbSDimitry Andric
19505ffd83dbSDimitry Andric default:
19515ffd83dbSDimitry Andric break;
19525ffd83dbSDimitry Andric }
19535ffd83dbSDimitry Andric } else if (name[0] == 's') {
19545ffd83dbSDimitry Andric switch (name[1]) {
19555ffd83dbSDimitry Andric case '0':
19565ffd83dbSDimitry Andric return name[2] == '\0'; // s0 is volatile
19575ffd83dbSDimitry Andric
19585ffd83dbSDimitry Andric case '1':
19595ffd83dbSDimitry Andric switch (name[2]) {
19605ffd83dbSDimitry Andric case '\0':
19615ffd83dbSDimitry Andric return true; // s1 is volatile
19625ffd83dbSDimitry Andric case '0':
19635ffd83dbSDimitry Andric case '1':
19645ffd83dbSDimitry Andric case '2':
19655ffd83dbSDimitry Andric case '3':
19665ffd83dbSDimitry Andric case '4':
19675ffd83dbSDimitry Andric case '5':
19685ffd83dbSDimitry Andric return name[3] == '\0'; // s10 - s15 are volatile
19695ffd83dbSDimitry Andric default:
19705ffd83dbSDimitry Andric break;
19715ffd83dbSDimitry Andric }
19725ffd83dbSDimitry Andric break;
19735ffd83dbSDimitry Andric
19745ffd83dbSDimitry Andric case '2':
19755ffd83dbSDimitry Andric case '3':
19765ffd83dbSDimitry Andric case '4':
19775ffd83dbSDimitry Andric case '5':
19785ffd83dbSDimitry Andric case '6':
19795ffd83dbSDimitry Andric case '7':
19805ffd83dbSDimitry Andric case '8':
19815ffd83dbSDimitry Andric case '9':
19825ffd83dbSDimitry Andric return name[2] == '\0'; // s2 - s9 are volatile
19835ffd83dbSDimitry Andric
19845ffd83dbSDimitry Andric default:
19855ffd83dbSDimitry Andric break;
19865ffd83dbSDimitry Andric }
19875ffd83dbSDimitry Andric } else if (name[0] == 'q') {
19885ffd83dbSDimitry Andric switch (name[1]) {
19895ffd83dbSDimitry Andric case '1':
19905ffd83dbSDimitry Andric switch (name[2]) {
19915ffd83dbSDimitry Andric case '\0':
19925ffd83dbSDimitry Andric return true; // q1 is volatile
19935ffd83dbSDimitry Andric case '0':
19945ffd83dbSDimitry Andric case '1':
19955ffd83dbSDimitry Andric case '2':
19965ffd83dbSDimitry Andric case '3':
19975ffd83dbSDimitry Andric case '4':
19985ffd83dbSDimitry Andric case '5':
19995ffd83dbSDimitry Andric return true; // q10-q15 are volatile
20005ffd83dbSDimitry Andric default:
20015ffd83dbSDimitry Andric break;
20025ffd83dbSDimitry Andric };
20035ffd83dbSDimitry Andric break;
20045ffd83dbSDimitry Andric case '0':
20055ffd83dbSDimitry Andric case '2':
20065ffd83dbSDimitry Andric case '3':
20075ffd83dbSDimitry Andric return name[2] == '\0'; // q0-q3 are volatile
20085ffd83dbSDimitry Andric case '8':
20095ffd83dbSDimitry Andric case '9':
20105ffd83dbSDimitry Andric return name[2] == '\0'; // q8-q9 are volatile
20115ffd83dbSDimitry Andric default:
20125ffd83dbSDimitry Andric break;
20135ffd83dbSDimitry Andric }
20145ffd83dbSDimitry Andric } else if (name[0] == 's' && name[1] == 'p' && name[2] == '\0')
20155ffd83dbSDimitry Andric return true;
20165ffd83dbSDimitry Andric }
20175ffd83dbSDimitry Andric return false;
20185ffd83dbSDimitry Andric }
20195ffd83dbSDimitry Andric
Initialize()20205ffd83dbSDimitry Andric void ABIMacOSX_arm::Initialize() {
20215ffd83dbSDimitry Andric PluginManager::RegisterPlugin(GetPluginNameStatic(),
20225ffd83dbSDimitry Andric "Mac OS X ABI for arm targets", CreateInstance);
20235ffd83dbSDimitry Andric }
20245ffd83dbSDimitry Andric
Terminate()20255ffd83dbSDimitry Andric void ABIMacOSX_arm::Terminate() {
20265ffd83dbSDimitry Andric PluginManager::UnregisterPlugin(CreateInstance);
20275ffd83dbSDimitry Andric }
2028