15ffd83dbSDimitry Andric //===-- ABISysV_hexagon.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 "ABISysV_hexagon.h"
105ffd83dbSDimitry Andric
115ffd83dbSDimitry Andric #include "llvm/IR/DerivedTypes.h"
12*06c3fb27SDimitry Andric #include "llvm/TargetParser/Triple.h"
135ffd83dbSDimitry Andric
145ffd83dbSDimitry Andric #include "lldb/Core/Module.h"
155ffd83dbSDimitry Andric #include "lldb/Core/PluginManager.h"
165ffd83dbSDimitry Andric #include "lldb/Core/Value.h"
175ffd83dbSDimitry Andric #include "lldb/Core/ValueObjectConstResult.h"
185ffd83dbSDimitry Andric #include "lldb/Core/ValueObjectMemory.h"
195ffd83dbSDimitry Andric #include "lldb/Core/ValueObjectRegister.h"
205ffd83dbSDimitry Andric #include "lldb/Symbol/UnwindPlan.h"
215ffd83dbSDimitry Andric #include "lldb/Target/Process.h"
225ffd83dbSDimitry Andric #include "lldb/Target/RegisterContext.h"
235ffd83dbSDimitry Andric #include "lldb/Target/StackFrame.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/DataExtractor.h"
285ffd83dbSDimitry Andric #include "lldb/Utility/Log.h"
295ffd83dbSDimitry Andric #include "lldb/Utility/RegisterValue.h"
305ffd83dbSDimitry Andric #include "lldb/Utility/Status.h"
315ffd83dbSDimitry Andric
325ffd83dbSDimitry Andric using namespace lldb;
335ffd83dbSDimitry Andric using namespace lldb_private;
345ffd83dbSDimitry Andric
355ffd83dbSDimitry Andric LLDB_PLUGIN_DEFINE_ADV(ABISysV_hexagon, ABIHexagon)
365ffd83dbSDimitry Andric
37e8d8bef9SDimitry Andric static const RegisterInfo g_register_infos[] = {
385ffd83dbSDimitry Andric // hexagon-core.xml
395ffd83dbSDimitry Andric {"r00",
405ffd83dbSDimitry Andric "",
415ffd83dbSDimitry Andric 4,
425ffd83dbSDimitry Andric 0,
435ffd83dbSDimitry Andric eEncodingUint,
445ffd83dbSDimitry Andric eFormatAddressInfo,
455ffd83dbSDimitry Andric {0, 0, LLDB_INVALID_REGNUM, 0, 0},
465ffd83dbSDimitry Andric nullptr,
475ffd83dbSDimitry Andric nullptr,
48*06c3fb27SDimitry Andric nullptr,
49349cc55cSDimitry Andric },
505ffd83dbSDimitry Andric {"r01",
515ffd83dbSDimitry Andric "",
525ffd83dbSDimitry Andric 4,
535ffd83dbSDimitry Andric 0,
545ffd83dbSDimitry Andric eEncodingUint,
555ffd83dbSDimitry Andric eFormatAddressInfo,
565ffd83dbSDimitry Andric {1, 1, LLDB_INVALID_REGNUM, 1, 1},
575ffd83dbSDimitry Andric nullptr,
585ffd83dbSDimitry Andric nullptr,
59*06c3fb27SDimitry Andric nullptr,
60349cc55cSDimitry Andric },
615ffd83dbSDimitry Andric {"r02",
625ffd83dbSDimitry Andric "",
635ffd83dbSDimitry Andric 4,
645ffd83dbSDimitry Andric 0,
655ffd83dbSDimitry Andric eEncodingUint,
665ffd83dbSDimitry Andric eFormatAddressInfo,
675ffd83dbSDimitry Andric {2, 2, LLDB_INVALID_REGNUM, 2, 2},
685ffd83dbSDimitry Andric nullptr,
695ffd83dbSDimitry Andric nullptr,
70*06c3fb27SDimitry Andric nullptr,
71349cc55cSDimitry Andric },
725ffd83dbSDimitry Andric {"r03",
735ffd83dbSDimitry Andric "",
745ffd83dbSDimitry Andric 4,
755ffd83dbSDimitry Andric 0,
765ffd83dbSDimitry Andric eEncodingUint,
775ffd83dbSDimitry Andric eFormatAddressInfo,
785ffd83dbSDimitry Andric {3, 3, LLDB_INVALID_REGNUM, 3, 3},
795ffd83dbSDimitry Andric nullptr,
805ffd83dbSDimitry Andric nullptr,
81*06c3fb27SDimitry Andric nullptr,
82349cc55cSDimitry Andric },
835ffd83dbSDimitry Andric {"r04",
845ffd83dbSDimitry Andric "",
855ffd83dbSDimitry Andric 4,
865ffd83dbSDimitry Andric 0,
875ffd83dbSDimitry Andric eEncodingUint,
885ffd83dbSDimitry Andric eFormatAddressInfo,
895ffd83dbSDimitry Andric {4, 4, LLDB_INVALID_REGNUM, 4, 4},
905ffd83dbSDimitry Andric nullptr,
915ffd83dbSDimitry Andric nullptr,
92*06c3fb27SDimitry Andric nullptr,
93349cc55cSDimitry Andric },
945ffd83dbSDimitry Andric {"r05",
955ffd83dbSDimitry Andric "",
965ffd83dbSDimitry Andric 4,
975ffd83dbSDimitry Andric 0,
985ffd83dbSDimitry Andric eEncodingUint,
995ffd83dbSDimitry Andric eFormatAddressInfo,
1005ffd83dbSDimitry Andric {5, 5, LLDB_INVALID_REGNUM, 5, 5},
1015ffd83dbSDimitry Andric nullptr,
1025ffd83dbSDimitry Andric nullptr,
103*06c3fb27SDimitry Andric nullptr,
104349cc55cSDimitry Andric },
1055ffd83dbSDimitry Andric {"r06",
1065ffd83dbSDimitry Andric "",
1075ffd83dbSDimitry Andric 4,
1085ffd83dbSDimitry Andric 0,
1095ffd83dbSDimitry Andric eEncodingUint,
1105ffd83dbSDimitry Andric eFormatAddressInfo,
1115ffd83dbSDimitry Andric {6, 6, LLDB_INVALID_REGNUM, 6, 6},
1125ffd83dbSDimitry Andric nullptr,
1135ffd83dbSDimitry Andric nullptr,
114*06c3fb27SDimitry Andric nullptr,
115349cc55cSDimitry Andric },
1165ffd83dbSDimitry Andric {"r07",
1175ffd83dbSDimitry Andric "",
1185ffd83dbSDimitry Andric 4,
1195ffd83dbSDimitry Andric 0,
1205ffd83dbSDimitry Andric eEncodingUint,
1215ffd83dbSDimitry Andric eFormatAddressInfo,
1225ffd83dbSDimitry Andric {7, 7, LLDB_INVALID_REGNUM, 7, 7},
1235ffd83dbSDimitry Andric nullptr,
1245ffd83dbSDimitry Andric nullptr,
125*06c3fb27SDimitry Andric nullptr,
126349cc55cSDimitry Andric },
1275ffd83dbSDimitry Andric {"r08",
1285ffd83dbSDimitry Andric "",
1295ffd83dbSDimitry Andric 4,
1305ffd83dbSDimitry Andric 0,
1315ffd83dbSDimitry Andric eEncodingUint,
1325ffd83dbSDimitry Andric eFormatAddressInfo,
1335ffd83dbSDimitry Andric {8, 8, LLDB_INVALID_REGNUM, 8, 8},
1345ffd83dbSDimitry Andric nullptr,
1355ffd83dbSDimitry Andric nullptr,
136*06c3fb27SDimitry Andric nullptr,
137349cc55cSDimitry Andric },
1385ffd83dbSDimitry Andric {"r09",
1395ffd83dbSDimitry Andric "",
1405ffd83dbSDimitry Andric 4,
1415ffd83dbSDimitry Andric 0,
1425ffd83dbSDimitry Andric eEncodingUint,
1435ffd83dbSDimitry Andric eFormatAddressInfo,
1445ffd83dbSDimitry Andric {9, 9, LLDB_INVALID_REGNUM, 9, 9},
1455ffd83dbSDimitry Andric nullptr,
1465ffd83dbSDimitry Andric nullptr,
147*06c3fb27SDimitry Andric nullptr,
148349cc55cSDimitry Andric },
1495ffd83dbSDimitry Andric {"r10",
1505ffd83dbSDimitry Andric "",
1515ffd83dbSDimitry Andric 4,
1525ffd83dbSDimitry Andric 0,
1535ffd83dbSDimitry Andric eEncodingUint,
1545ffd83dbSDimitry Andric eFormatAddressInfo,
1555ffd83dbSDimitry Andric {10, 10, LLDB_INVALID_REGNUM, 10, 10},
1565ffd83dbSDimitry Andric nullptr,
1575ffd83dbSDimitry Andric nullptr,
158*06c3fb27SDimitry Andric nullptr,
159349cc55cSDimitry Andric },
1605ffd83dbSDimitry Andric {"r11",
1615ffd83dbSDimitry Andric "",
1625ffd83dbSDimitry Andric 4,
1635ffd83dbSDimitry Andric 0,
1645ffd83dbSDimitry Andric eEncodingUint,
1655ffd83dbSDimitry Andric eFormatAddressInfo,
1665ffd83dbSDimitry Andric {11, 11, LLDB_INVALID_REGNUM, 11, 11},
1675ffd83dbSDimitry Andric nullptr,
1685ffd83dbSDimitry Andric nullptr,
169*06c3fb27SDimitry Andric nullptr,
170349cc55cSDimitry Andric },
1715ffd83dbSDimitry Andric {"r12",
1725ffd83dbSDimitry Andric "",
1735ffd83dbSDimitry Andric 4,
1745ffd83dbSDimitry Andric 0,
1755ffd83dbSDimitry Andric eEncodingUint,
1765ffd83dbSDimitry Andric eFormatAddressInfo,
1775ffd83dbSDimitry Andric {12, 12, LLDB_INVALID_REGNUM, 12, 12},
1785ffd83dbSDimitry Andric nullptr,
1795ffd83dbSDimitry Andric nullptr,
180*06c3fb27SDimitry Andric nullptr,
181349cc55cSDimitry Andric },
1825ffd83dbSDimitry Andric {"r13",
1835ffd83dbSDimitry Andric "",
1845ffd83dbSDimitry Andric 4,
1855ffd83dbSDimitry Andric 0,
1865ffd83dbSDimitry Andric eEncodingUint,
1875ffd83dbSDimitry Andric eFormatAddressInfo,
1885ffd83dbSDimitry Andric {13, 13, LLDB_INVALID_REGNUM, 13, 13},
1895ffd83dbSDimitry Andric nullptr,
1905ffd83dbSDimitry Andric nullptr,
191*06c3fb27SDimitry Andric nullptr,
192349cc55cSDimitry Andric },
1935ffd83dbSDimitry Andric {"r14",
1945ffd83dbSDimitry Andric "",
1955ffd83dbSDimitry Andric 4,
1965ffd83dbSDimitry Andric 0,
1975ffd83dbSDimitry Andric eEncodingUint,
1985ffd83dbSDimitry Andric eFormatAddressInfo,
1995ffd83dbSDimitry Andric {14, 14, LLDB_INVALID_REGNUM, 14, 14},
2005ffd83dbSDimitry Andric nullptr,
2015ffd83dbSDimitry Andric nullptr,
202*06c3fb27SDimitry Andric nullptr,
203349cc55cSDimitry Andric },
2045ffd83dbSDimitry Andric {"r15",
2055ffd83dbSDimitry Andric "",
2065ffd83dbSDimitry Andric 4,
2075ffd83dbSDimitry Andric 0,
2085ffd83dbSDimitry Andric eEncodingUint,
2095ffd83dbSDimitry Andric eFormatAddressInfo,
2105ffd83dbSDimitry Andric {15, 15, LLDB_INVALID_REGNUM, 15, 15},
2115ffd83dbSDimitry Andric nullptr,
2125ffd83dbSDimitry Andric nullptr,
213*06c3fb27SDimitry Andric nullptr,
214349cc55cSDimitry Andric },
2155ffd83dbSDimitry Andric {"r16",
2165ffd83dbSDimitry Andric "",
2175ffd83dbSDimitry Andric 4,
2185ffd83dbSDimitry Andric 0,
2195ffd83dbSDimitry Andric eEncodingUint,
2205ffd83dbSDimitry Andric eFormatAddressInfo,
2215ffd83dbSDimitry Andric {16, 16, LLDB_INVALID_REGNUM, 16, 16},
2225ffd83dbSDimitry Andric nullptr,
2235ffd83dbSDimitry Andric nullptr,
224*06c3fb27SDimitry Andric nullptr,
225349cc55cSDimitry Andric },
2265ffd83dbSDimitry Andric {"r17",
2275ffd83dbSDimitry Andric "",
2285ffd83dbSDimitry Andric 4,
2295ffd83dbSDimitry Andric 0,
2305ffd83dbSDimitry Andric eEncodingUint,
2315ffd83dbSDimitry Andric eFormatAddressInfo,
2325ffd83dbSDimitry Andric {17, 17, LLDB_INVALID_REGNUM, 17, 17},
2335ffd83dbSDimitry Andric nullptr,
2345ffd83dbSDimitry Andric nullptr,
235*06c3fb27SDimitry Andric nullptr,
236349cc55cSDimitry Andric },
2375ffd83dbSDimitry Andric {"r18",
2385ffd83dbSDimitry Andric "",
2395ffd83dbSDimitry Andric 4,
2405ffd83dbSDimitry Andric 0,
2415ffd83dbSDimitry Andric eEncodingUint,
2425ffd83dbSDimitry Andric eFormatAddressInfo,
2435ffd83dbSDimitry Andric {18, 18, LLDB_INVALID_REGNUM, 18, 18},
2445ffd83dbSDimitry Andric nullptr,
2455ffd83dbSDimitry Andric nullptr,
246*06c3fb27SDimitry Andric nullptr,
247349cc55cSDimitry Andric },
2485ffd83dbSDimitry Andric {"r19",
2495ffd83dbSDimitry Andric "",
2505ffd83dbSDimitry Andric 4,
2515ffd83dbSDimitry Andric 0,
2525ffd83dbSDimitry Andric eEncodingUint,
2535ffd83dbSDimitry Andric eFormatAddressInfo,
2545ffd83dbSDimitry Andric {19, 19, LLDB_INVALID_REGNUM, 19, 19},
2555ffd83dbSDimitry Andric nullptr,
2565ffd83dbSDimitry Andric nullptr,
257*06c3fb27SDimitry Andric nullptr,
258349cc55cSDimitry Andric },
2595ffd83dbSDimitry Andric {"r20",
2605ffd83dbSDimitry Andric "",
2615ffd83dbSDimitry Andric 4,
2625ffd83dbSDimitry Andric 0,
2635ffd83dbSDimitry Andric eEncodingUint,
2645ffd83dbSDimitry Andric eFormatAddressInfo,
2655ffd83dbSDimitry Andric {20, 20, LLDB_INVALID_REGNUM, 20, 20},
2665ffd83dbSDimitry Andric nullptr,
2675ffd83dbSDimitry Andric nullptr,
268*06c3fb27SDimitry Andric nullptr,
269349cc55cSDimitry Andric },
2705ffd83dbSDimitry Andric {"r21",
2715ffd83dbSDimitry Andric "",
2725ffd83dbSDimitry Andric 4,
2735ffd83dbSDimitry Andric 0,
2745ffd83dbSDimitry Andric eEncodingUint,
2755ffd83dbSDimitry Andric eFormatAddressInfo,
2765ffd83dbSDimitry Andric {21, 21, LLDB_INVALID_REGNUM, 21, 21},
2775ffd83dbSDimitry Andric nullptr,
2785ffd83dbSDimitry Andric nullptr,
279*06c3fb27SDimitry Andric nullptr,
280349cc55cSDimitry Andric },
2815ffd83dbSDimitry Andric {"r22",
2825ffd83dbSDimitry Andric "",
2835ffd83dbSDimitry Andric 4,
2845ffd83dbSDimitry Andric 0,
2855ffd83dbSDimitry Andric eEncodingUint,
2865ffd83dbSDimitry Andric eFormatAddressInfo,
2875ffd83dbSDimitry Andric {22, 22, LLDB_INVALID_REGNUM, 22, 22},
2885ffd83dbSDimitry Andric nullptr,
2895ffd83dbSDimitry Andric nullptr,
290*06c3fb27SDimitry Andric nullptr,
291349cc55cSDimitry Andric },
2925ffd83dbSDimitry Andric {"r23",
2935ffd83dbSDimitry Andric "",
2945ffd83dbSDimitry Andric 4,
2955ffd83dbSDimitry Andric 0,
2965ffd83dbSDimitry Andric eEncodingUint,
2975ffd83dbSDimitry Andric eFormatAddressInfo,
2985ffd83dbSDimitry Andric {23, 23, LLDB_INVALID_REGNUM, 23, 23},
2995ffd83dbSDimitry Andric nullptr,
3005ffd83dbSDimitry Andric nullptr,
301*06c3fb27SDimitry Andric nullptr,
302349cc55cSDimitry Andric },
3035ffd83dbSDimitry Andric {"r24",
3045ffd83dbSDimitry Andric "",
3055ffd83dbSDimitry Andric 4,
3065ffd83dbSDimitry Andric 0,
3075ffd83dbSDimitry Andric eEncodingUint,
3085ffd83dbSDimitry Andric eFormatAddressInfo,
3095ffd83dbSDimitry Andric {24, 24, LLDB_INVALID_REGNUM, 24, 24},
3105ffd83dbSDimitry Andric nullptr,
3115ffd83dbSDimitry Andric nullptr,
312*06c3fb27SDimitry Andric nullptr,
313349cc55cSDimitry Andric },
3145ffd83dbSDimitry Andric {"r25",
3155ffd83dbSDimitry Andric "",
3165ffd83dbSDimitry Andric 4,
3175ffd83dbSDimitry Andric 0,
3185ffd83dbSDimitry Andric eEncodingUint,
3195ffd83dbSDimitry Andric eFormatAddressInfo,
3205ffd83dbSDimitry Andric {25, 25, LLDB_INVALID_REGNUM, 25, 25},
3215ffd83dbSDimitry Andric nullptr,
3225ffd83dbSDimitry Andric nullptr,
323*06c3fb27SDimitry Andric nullptr,
324349cc55cSDimitry Andric },
3255ffd83dbSDimitry Andric {"r26",
3265ffd83dbSDimitry Andric "",
3275ffd83dbSDimitry Andric 4,
3285ffd83dbSDimitry Andric 0,
3295ffd83dbSDimitry Andric eEncodingUint,
3305ffd83dbSDimitry Andric eFormatAddressInfo,
3315ffd83dbSDimitry Andric {26, 26, LLDB_INVALID_REGNUM, 26, 26},
3325ffd83dbSDimitry Andric nullptr,
3335ffd83dbSDimitry Andric nullptr,
334*06c3fb27SDimitry Andric nullptr,
335349cc55cSDimitry Andric },
3365ffd83dbSDimitry Andric {"r27",
3375ffd83dbSDimitry Andric "",
3385ffd83dbSDimitry Andric 4,
3395ffd83dbSDimitry Andric 0,
3405ffd83dbSDimitry Andric eEncodingUint,
3415ffd83dbSDimitry Andric eFormatAddressInfo,
3425ffd83dbSDimitry Andric {27, 27, LLDB_INVALID_REGNUM, 27, 27},
3435ffd83dbSDimitry Andric nullptr,
3445ffd83dbSDimitry Andric nullptr,
345*06c3fb27SDimitry Andric nullptr,
346349cc55cSDimitry Andric },
3475ffd83dbSDimitry Andric {"r28",
3485ffd83dbSDimitry Andric "",
3495ffd83dbSDimitry Andric 4,
3505ffd83dbSDimitry Andric 0,
3515ffd83dbSDimitry Andric eEncodingUint,
3525ffd83dbSDimitry Andric eFormatAddressInfo,
3535ffd83dbSDimitry Andric {28, 28, LLDB_INVALID_REGNUM, 28, 28},
3545ffd83dbSDimitry Andric nullptr,
3555ffd83dbSDimitry Andric nullptr,
356*06c3fb27SDimitry Andric nullptr,
357349cc55cSDimitry Andric },
3585ffd83dbSDimitry Andric {"sp",
3595ffd83dbSDimitry Andric "r29",
3605ffd83dbSDimitry Andric 4,
3615ffd83dbSDimitry Andric 0,
3625ffd83dbSDimitry Andric eEncodingUint,
3635ffd83dbSDimitry Andric eFormatAddressInfo,
3645ffd83dbSDimitry Andric {29, 29, LLDB_REGNUM_GENERIC_SP, 29, 29},
3655ffd83dbSDimitry Andric nullptr,
3665ffd83dbSDimitry Andric nullptr,
367*06c3fb27SDimitry Andric nullptr,
368349cc55cSDimitry Andric },
3695ffd83dbSDimitry Andric {"fp",
3705ffd83dbSDimitry Andric "r30",
3715ffd83dbSDimitry Andric 4,
3725ffd83dbSDimitry Andric 0,
3735ffd83dbSDimitry Andric eEncodingUint,
3745ffd83dbSDimitry Andric eFormatAddressInfo,
3755ffd83dbSDimitry Andric {30, 30, LLDB_REGNUM_GENERIC_FP, 30, 30},
3765ffd83dbSDimitry Andric nullptr,
3775ffd83dbSDimitry Andric nullptr,
378*06c3fb27SDimitry Andric nullptr,
379349cc55cSDimitry Andric },
3805ffd83dbSDimitry Andric {"lr",
3815ffd83dbSDimitry Andric "r31",
3825ffd83dbSDimitry Andric 4,
3835ffd83dbSDimitry Andric 0,
3845ffd83dbSDimitry Andric eEncodingUint,
3855ffd83dbSDimitry Andric eFormatAddressInfo,
3865ffd83dbSDimitry Andric {31, 31, LLDB_REGNUM_GENERIC_RA, 31, 31},
3875ffd83dbSDimitry Andric nullptr,
3885ffd83dbSDimitry Andric nullptr,
389*06c3fb27SDimitry Andric nullptr,
390349cc55cSDimitry Andric },
3915ffd83dbSDimitry Andric {"sa0",
3925ffd83dbSDimitry Andric "",
3935ffd83dbSDimitry Andric 4,
3945ffd83dbSDimitry Andric 0,
3955ffd83dbSDimitry Andric eEncodingUint,
3965ffd83dbSDimitry Andric eFormatAddressInfo,
3975ffd83dbSDimitry Andric {32, 32, LLDB_INVALID_REGNUM, 32, 32},
3985ffd83dbSDimitry Andric nullptr,
3995ffd83dbSDimitry Andric nullptr,
400*06c3fb27SDimitry Andric nullptr,
401349cc55cSDimitry Andric },
4025ffd83dbSDimitry Andric {"lc0",
4035ffd83dbSDimitry Andric "",
4045ffd83dbSDimitry Andric 4,
4055ffd83dbSDimitry Andric 0,
4065ffd83dbSDimitry Andric eEncodingUint,
4075ffd83dbSDimitry Andric eFormatAddressInfo,
4085ffd83dbSDimitry Andric {33, 33, LLDB_INVALID_REGNUM, 33, 33},
4095ffd83dbSDimitry Andric nullptr,
4105ffd83dbSDimitry Andric nullptr,
411*06c3fb27SDimitry Andric nullptr,
412349cc55cSDimitry Andric },
4135ffd83dbSDimitry Andric {"sa1",
4145ffd83dbSDimitry Andric "",
4155ffd83dbSDimitry Andric 4,
4165ffd83dbSDimitry Andric 0,
4175ffd83dbSDimitry Andric eEncodingUint,
4185ffd83dbSDimitry Andric eFormatAddressInfo,
4195ffd83dbSDimitry Andric {34, 34, LLDB_INVALID_REGNUM, 34, 34},
4205ffd83dbSDimitry Andric nullptr,
4215ffd83dbSDimitry Andric nullptr,
422*06c3fb27SDimitry Andric nullptr,
423349cc55cSDimitry Andric },
4245ffd83dbSDimitry Andric {"lc1",
4255ffd83dbSDimitry Andric "",
4265ffd83dbSDimitry Andric 4,
4275ffd83dbSDimitry Andric 0,
4285ffd83dbSDimitry Andric eEncodingUint,
4295ffd83dbSDimitry Andric eFormatAddressInfo,
4305ffd83dbSDimitry Andric {35, 35, LLDB_INVALID_REGNUM, 35, 35},
4315ffd83dbSDimitry Andric nullptr,
4325ffd83dbSDimitry Andric nullptr,
433*06c3fb27SDimitry Andric nullptr,
434349cc55cSDimitry Andric },
4355ffd83dbSDimitry Andric // --> hexagon-v4/5/55/56-sim.xml
4365ffd83dbSDimitry Andric {"p3_0",
4375ffd83dbSDimitry Andric "",
4385ffd83dbSDimitry Andric 4,
4395ffd83dbSDimitry Andric 0,
4405ffd83dbSDimitry Andric eEncodingUint,
4415ffd83dbSDimitry Andric eFormatAddressInfo,
4425ffd83dbSDimitry Andric {36, 36, LLDB_INVALID_REGNUM, 36, 36},
4435ffd83dbSDimitry Andric nullptr,
4445ffd83dbSDimitry Andric nullptr,
445*06c3fb27SDimitry Andric nullptr,
446*06c3fb27SDimitry Andric
447349cc55cSDimitry Andric },
4485ffd83dbSDimitry Andric // PADDING {
4495ffd83dbSDimitry Andric {"p00",
4505ffd83dbSDimitry Andric "",
4515ffd83dbSDimitry Andric 4,
4525ffd83dbSDimitry Andric 0,
4535ffd83dbSDimitry Andric eEncodingInvalid,
4545ffd83dbSDimitry Andric eFormatInvalid,
4555ffd83dbSDimitry Andric {37, 37, LLDB_INVALID_REGNUM, 37, 37},
4565ffd83dbSDimitry Andric nullptr,
4575ffd83dbSDimitry Andric nullptr,
458*06c3fb27SDimitry Andric nullptr,
459349cc55cSDimitry Andric },
4605ffd83dbSDimitry Andric // }
4615ffd83dbSDimitry Andric {"m0",
4625ffd83dbSDimitry Andric "",
4635ffd83dbSDimitry Andric 4,
4645ffd83dbSDimitry Andric 0,
4655ffd83dbSDimitry Andric eEncodingUint,
4665ffd83dbSDimitry Andric eFormatAddressInfo,
4675ffd83dbSDimitry Andric {38, 38, LLDB_INVALID_REGNUM, 38, 38},
4685ffd83dbSDimitry Andric nullptr,
4695ffd83dbSDimitry Andric nullptr,
470*06c3fb27SDimitry Andric nullptr,
471349cc55cSDimitry Andric },
4725ffd83dbSDimitry Andric {"m1",
4735ffd83dbSDimitry Andric "",
4745ffd83dbSDimitry Andric 4,
4755ffd83dbSDimitry Andric 0,
4765ffd83dbSDimitry Andric eEncodingUint,
4775ffd83dbSDimitry Andric eFormatAddressInfo,
4785ffd83dbSDimitry Andric {39, 39, LLDB_INVALID_REGNUM, 39, 39},
4795ffd83dbSDimitry Andric nullptr,
4805ffd83dbSDimitry Andric nullptr,
481*06c3fb27SDimitry Andric nullptr,
482349cc55cSDimitry Andric },
4835ffd83dbSDimitry Andric {"usr",
4845ffd83dbSDimitry Andric "",
4855ffd83dbSDimitry Andric 4,
4865ffd83dbSDimitry Andric 0,
4875ffd83dbSDimitry Andric eEncodingUint,
4885ffd83dbSDimitry Andric eFormatAddressInfo,
4895ffd83dbSDimitry Andric {40, 40, LLDB_INVALID_REGNUM, 40, 40},
4905ffd83dbSDimitry Andric nullptr,
4915ffd83dbSDimitry Andric nullptr,
492*06c3fb27SDimitry Andric nullptr,
493349cc55cSDimitry Andric },
4945ffd83dbSDimitry Andric {"pc",
4955ffd83dbSDimitry Andric "",
4965ffd83dbSDimitry Andric 4,
4975ffd83dbSDimitry Andric 0,
4985ffd83dbSDimitry Andric eEncodingUint,
4995ffd83dbSDimitry Andric eFormatAddressInfo,
5005ffd83dbSDimitry Andric {41, 41, LLDB_REGNUM_GENERIC_PC, 41, 41},
5015ffd83dbSDimitry Andric nullptr,
5025ffd83dbSDimitry Andric nullptr,
503*06c3fb27SDimitry Andric nullptr,
504349cc55cSDimitry Andric },
5055ffd83dbSDimitry Andric {"ugp",
5065ffd83dbSDimitry Andric "",
5075ffd83dbSDimitry Andric 4,
5085ffd83dbSDimitry Andric 0,
5095ffd83dbSDimitry Andric eEncodingUint,
5105ffd83dbSDimitry Andric eFormatAddressInfo,
5115ffd83dbSDimitry Andric {42, 42, LLDB_INVALID_REGNUM, 42, 42},
5125ffd83dbSDimitry Andric nullptr,
5135ffd83dbSDimitry Andric nullptr,
514*06c3fb27SDimitry Andric nullptr,
515349cc55cSDimitry Andric },
5165ffd83dbSDimitry Andric {"gp",
5175ffd83dbSDimitry Andric "",
5185ffd83dbSDimitry Andric 4,
5195ffd83dbSDimitry Andric 0,
5205ffd83dbSDimitry Andric eEncodingUint,
5215ffd83dbSDimitry Andric eFormatAddressInfo,
5225ffd83dbSDimitry Andric {43, 43, LLDB_INVALID_REGNUM, 43, 43},
5235ffd83dbSDimitry Andric nullptr,
5245ffd83dbSDimitry Andric nullptr,
525*06c3fb27SDimitry Andric nullptr,
526349cc55cSDimitry Andric },
5275ffd83dbSDimitry Andric {"cs0",
5285ffd83dbSDimitry Andric "",
5295ffd83dbSDimitry Andric 4,
5305ffd83dbSDimitry Andric 0,
5315ffd83dbSDimitry Andric eEncodingUint,
5325ffd83dbSDimitry Andric eFormatAddressInfo,
5335ffd83dbSDimitry Andric {44, 44, LLDB_INVALID_REGNUM, 44, 44},
5345ffd83dbSDimitry Andric nullptr,
5355ffd83dbSDimitry Andric nullptr,
536*06c3fb27SDimitry Andric nullptr,
537349cc55cSDimitry Andric },
5385ffd83dbSDimitry Andric {"cs1",
5395ffd83dbSDimitry Andric "",
5405ffd83dbSDimitry Andric 4,
5415ffd83dbSDimitry Andric 0,
5425ffd83dbSDimitry Andric eEncodingUint,
5435ffd83dbSDimitry Andric eFormatAddressInfo,
5445ffd83dbSDimitry Andric {45, 45, LLDB_INVALID_REGNUM, 45, 45},
5455ffd83dbSDimitry Andric nullptr,
5465ffd83dbSDimitry Andric nullptr,
547*06c3fb27SDimitry Andric nullptr,
548349cc55cSDimitry Andric },
5495ffd83dbSDimitry Andric // PADDING {
5505ffd83dbSDimitry Andric {"p01",
5515ffd83dbSDimitry Andric "",
5525ffd83dbSDimitry Andric 4,
5535ffd83dbSDimitry Andric 0,
5545ffd83dbSDimitry Andric eEncodingInvalid,
5555ffd83dbSDimitry Andric eFormatInvalid,
5565ffd83dbSDimitry Andric {46, 46, LLDB_INVALID_REGNUM, 46, 46},
5575ffd83dbSDimitry Andric nullptr,
5585ffd83dbSDimitry Andric nullptr,
559*06c3fb27SDimitry Andric nullptr,
560349cc55cSDimitry Andric },
5615ffd83dbSDimitry Andric {"p02",
5625ffd83dbSDimitry Andric "",
5635ffd83dbSDimitry Andric 4,
5645ffd83dbSDimitry Andric 0,
5655ffd83dbSDimitry Andric eEncodingInvalid,
5665ffd83dbSDimitry Andric eFormatInvalid,
5675ffd83dbSDimitry Andric {47, 47, LLDB_INVALID_REGNUM, 47, 47},
5685ffd83dbSDimitry Andric nullptr,
5695ffd83dbSDimitry Andric nullptr,
570*06c3fb27SDimitry Andric nullptr,
571349cc55cSDimitry Andric },
5725ffd83dbSDimitry Andric {"p03",
5735ffd83dbSDimitry Andric "",
5745ffd83dbSDimitry Andric 4,
5755ffd83dbSDimitry Andric 0,
5765ffd83dbSDimitry Andric eEncodingInvalid,
5775ffd83dbSDimitry Andric eFormatInvalid,
5785ffd83dbSDimitry Andric {48, 48, LLDB_INVALID_REGNUM, 48, 48},
5795ffd83dbSDimitry Andric nullptr,
5805ffd83dbSDimitry Andric nullptr,
581*06c3fb27SDimitry Andric nullptr,
582349cc55cSDimitry Andric },
5835ffd83dbSDimitry Andric {"p04",
5845ffd83dbSDimitry Andric "",
5855ffd83dbSDimitry Andric 4,
5865ffd83dbSDimitry Andric 0,
5875ffd83dbSDimitry Andric eEncodingInvalid,
5885ffd83dbSDimitry Andric eFormatInvalid,
5895ffd83dbSDimitry Andric {49, 49, LLDB_INVALID_REGNUM, 49, 49},
5905ffd83dbSDimitry Andric nullptr,
5915ffd83dbSDimitry Andric nullptr,
592*06c3fb27SDimitry Andric nullptr,
593349cc55cSDimitry Andric },
5945ffd83dbSDimitry Andric {"p05",
5955ffd83dbSDimitry Andric "",
5965ffd83dbSDimitry Andric 4,
5975ffd83dbSDimitry Andric 0,
5985ffd83dbSDimitry Andric eEncodingInvalid,
5995ffd83dbSDimitry Andric eFormatInvalid,
6005ffd83dbSDimitry Andric {50, 50, LLDB_INVALID_REGNUM, 50, 50},
6015ffd83dbSDimitry Andric nullptr,
6025ffd83dbSDimitry Andric nullptr,
603*06c3fb27SDimitry Andric nullptr,
604349cc55cSDimitry Andric },
6055ffd83dbSDimitry Andric {"p06",
6065ffd83dbSDimitry Andric "",
6075ffd83dbSDimitry Andric 4,
6085ffd83dbSDimitry Andric 0,
6095ffd83dbSDimitry Andric eEncodingInvalid,
6105ffd83dbSDimitry Andric eFormatInvalid,
6115ffd83dbSDimitry Andric {51, 51, LLDB_INVALID_REGNUM, 51, 51},
6125ffd83dbSDimitry Andric nullptr,
6135ffd83dbSDimitry Andric nullptr,
614*06c3fb27SDimitry Andric nullptr,
615349cc55cSDimitry Andric },
6165ffd83dbSDimitry Andric {"p07",
6175ffd83dbSDimitry Andric "",
6185ffd83dbSDimitry Andric 4,
6195ffd83dbSDimitry Andric 0,
6205ffd83dbSDimitry Andric eEncodingInvalid,
6215ffd83dbSDimitry Andric eFormatInvalid,
6225ffd83dbSDimitry Andric {52, 52, LLDB_INVALID_REGNUM, 52, 52},
6235ffd83dbSDimitry Andric nullptr,
6245ffd83dbSDimitry Andric nullptr,
625*06c3fb27SDimitry Andric nullptr,
626349cc55cSDimitry Andric },
6275ffd83dbSDimitry Andric {"p08",
6285ffd83dbSDimitry Andric "",
6295ffd83dbSDimitry Andric 4,
6305ffd83dbSDimitry Andric 0,
6315ffd83dbSDimitry Andric eEncodingInvalid,
6325ffd83dbSDimitry Andric eFormatInvalid,
6335ffd83dbSDimitry Andric {53, 53, LLDB_INVALID_REGNUM, 53, 53},
6345ffd83dbSDimitry Andric nullptr,
6355ffd83dbSDimitry Andric nullptr,
636*06c3fb27SDimitry Andric nullptr,
637349cc55cSDimitry Andric },
6385ffd83dbSDimitry Andric {"p09",
6395ffd83dbSDimitry Andric "",
6405ffd83dbSDimitry Andric 4,
6415ffd83dbSDimitry Andric 0,
6425ffd83dbSDimitry Andric eEncodingInvalid,
6435ffd83dbSDimitry Andric eFormatInvalid,
6445ffd83dbSDimitry Andric {54, 54, LLDB_INVALID_REGNUM, 54, 54},
6455ffd83dbSDimitry Andric nullptr,
6465ffd83dbSDimitry Andric nullptr,
647*06c3fb27SDimitry Andric nullptr,
648349cc55cSDimitry Andric },
6495ffd83dbSDimitry Andric {"p10",
6505ffd83dbSDimitry Andric "",
6515ffd83dbSDimitry Andric 4,
6525ffd83dbSDimitry Andric 0,
6535ffd83dbSDimitry Andric eEncodingInvalid,
6545ffd83dbSDimitry Andric eFormatInvalid,
6555ffd83dbSDimitry Andric {55, 55, LLDB_INVALID_REGNUM, 55, 55},
6565ffd83dbSDimitry Andric nullptr,
6575ffd83dbSDimitry Andric nullptr,
658*06c3fb27SDimitry Andric nullptr,
659349cc55cSDimitry Andric },
6605ffd83dbSDimitry Andric {"p11",
6615ffd83dbSDimitry Andric "",
6625ffd83dbSDimitry Andric 4,
6635ffd83dbSDimitry Andric 0,
6645ffd83dbSDimitry Andric eEncodingInvalid,
6655ffd83dbSDimitry Andric eFormatInvalid,
6665ffd83dbSDimitry Andric {56, 56, LLDB_INVALID_REGNUM, 56, 56},
6675ffd83dbSDimitry Andric nullptr,
6685ffd83dbSDimitry Andric nullptr,
669*06c3fb27SDimitry Andric nullptr,
670349cc55cSDimitry Andric },
6715ffd83dbSDimitry Andric {"p12",
6725ffd83dbSDimitry Andric "",
6735ffd83dbSDimitry Andric 4,
6745ffd83dbSDimitry Andric 0,
6755ffd83dbSDimitry Andric eEncodingInvalid,
6765ffd83dbSDimitry Andric eFormatInvalid,
6775ffd83dbSDimitry Andric {57, 57, LLDB_INVALID_REGNUM, 57, 57},
6785ffd83dbSDimitry Andric nullptr,
6795ffd83dbSDimitry Andric nullptr,
680*06c3fb27SDimitry Andric nullptr,
681349cc55cSDimitry Andric },
6825ffd83dbSDimitry Andric {"p13",
6835ffd83dbSDimitry Andric "",
6845ffd83dbSDimitry Andric 4,
6855ffd83dbSDimitry Andric 0,
6865ffd83dbSDimitry Andric eEncodingInvalid,
6875ffd83dbSDimitry Andric eFormatInvalid,
6885ffd83dbSDimitry Andric {58, 58, LLDB_INVALID_REGNUM, 58, 58},
6895ffd83dbSDimitry Andric nullptr,
6905ffd83dbSDimitry Andric nullptr,
691*06c3fb27SDimitry Andric nullptr,
692349cc55cSDimitry Andric },
6935ffd83dbSDimitry Andric {"p14",
6945ffd83dbSDimitry Andric "",
6955ffd83dbSDimitry Andric 4,
6965ffd83dbSDimitry Andric 0,
6975ffd83dbSDimitry Andric eEncodingInvalid,
6985ffd83dbSDimitry Andric eFormatInvalid,
6995ffd83dbSDimitry Andric {59, 59, LLDB_INVALID_REGNUM, 59, 59},
7005ffd83dbSDimitry Andric nullptr,
7015ffd83dbSDimitry Andric nullptr,
702*06c3fb27SDimitry Andric nullptr,
703349cc55cSDimitry Andric },
7045ffd83dbSDimitry Andric {"p15",
7055ffd83dbSDimitry Andric "",
7065ffd83dbSDimitry Andric 4,
7075ffd83dbSDimitry Andric 0,
7085ffd83dbSDimitry Andric eEncodingInvalid,
7095ffd83dbSDimitry Andric eFormatInvalid,
7105ffd83dbSDimitry Andric {60, 60, LLDB_INVALID_REGNUM, 60, 60},
7115ffd83dbSDimitry Andric nullptr,
7125ffd83dbSDimitry Andric nullptr,
713*06c3fb27SDimitry Andric nullptr,
714349cc55cSDimitry Andric },
7155ffd83dbSDimitry Andric {"p16",
7165ffd83dbSDimitry Andric "",
7175ffd83dbSDimitry Andric 4,
7185ffd83dbSDimitry Andric 0,
7195ffd83dbSDimitry Andric eEncodingInvalid,
7205ffd83dbSDimitry Andric eFormatInvalid,
7215ffd83dbSDimitry Andric {61, 61, LLDB_INVALID_REGNUM, 61, 61},
7225ffd83dbSDimitry Andric nullptr,
7235ffd83dbSDimitry Andric nullptr,
724*06c3fb27SDimitry Andric nullptr,
725349cc55cSDimitry Andric },
7265ffd83dbSDimitry Andric {"p17",
7275ffd83dbSDimitry Andric "",
7285ffd83dbSDimitry Andric 4,
7295ffd83dbSDimitry Andric 0,
7305ffd83dbSDimitry Andric eEncodingInvalid,
7315ffd83dbSDimitry Andric eFormatInvalid,
7325ffd83dbSDimitry Andric {62, 62, LLDB_INVALID_REGNUM, 62, 62},
7335ffd83dbSDimitry Andric nullptr,
7345ffd83dbSDimitry Andric nullptr,
735*06c3fb27SDimitry Andric nullptr,
736349cc55cSDimitry Andric },
7375ffd83dbSDimitry Andric {"p18",
7385ffd83dbSDimitry Andric "",
7395ffd83dbSDimitry Andric 4,
7405ffd83dbSDimitry Andric 0,
7415ffd83dbSDimitry Andric eEncodingInvalid,
7425ffd83dbSDimitry Andric eFormatInvalid,
7435ffd83dbSDimitry Andric {63, 63, LLDB_INVALID_REGNUM, 63, 63},
7445ffd83dbSDimitry Andric nullptr,
7455ffd83dbSDimitry Andric nullptr,
746*06c3fb27SDimitry Andric nullptr,
747349cc55cSDimitry Andric },
7485ffd83dbSDimitry Andric // }
7495ffd83dbSDimitry Andric {"sgp0",
7505ffd83dbSDimitry Andric "",
7515ffd83dbSDimitry Andric 4,
7525ffd83dbSDimitry Andric 0,
7535ffd83dbSDimitry Andric eEncodingUint,
7545ffd83dbSDimitry Andric eFormatAddressInfo,
7555ffd83dbSDimitry Andric {64, 64, LLDB_INVALID_REGNUM, 64, 64},
7565ffd83dbSDimitry Andric nullptr,
7575ffd83dbSDimitry Andric nullptr,
758*06c3fb27SDimitry Andric nullptr,
759349cc55cSDimitry Andric },
7605ffd83dbSDimitry Andric // PADDING {
7615ffd83dbSDimitry Andric {"p19",
7625ffd83dbSDimitry Andric "",
7635ffd83dbSDimitry Andric 4,
7645ffd83dbSDimitry Andric 0,
7655ffd83dbSDimitry Andric eEncodingInvalid,
7665ffd83dbSDimitry Andric eFormatInvalid,
7675ffd83dbSDimitry Andric {65, 65, LLDB_INVALID_REGNUM, 65, 65},
7685ffd83dbSDimitry Andric nullptr,
7695ffd83dbSDimitry Andric nullptr,
770*06c3fb27SDimitry Andric nullptr,
771349cc55cSDimitry Andric },
7725ffd83dbSDimitry Andric // }
7735ffd83dbSDimitry Andric {"stid",
7745ffd83dbSDimitry Andric "",
7755ffd83dbSDimitry Andric 4,
7765ffd83dbSDimitry Andric 0,
7775ffd83dbSDimitry Andric eEncodingUint,
7785ffd83dbSDimitry Andric eFormatAddressInfo,
7795ffd83dbSDimitry Andric {66, 66, LLDB_INVALID_REGNUM, 66, 66},
7805ffd83dbSDimitry Andric nullptr,
7815ffd83dbSDimitry Andric nullptr,
782*06c3fb27SDimitry Andric nullptr,
783349cc55cSDimitry Andric },
7845ffd83dbSDimitry Andric {"elr",
7855ffd83dbSDimitry Andric "",
7865ffd83dbSDimitry Andric 4,
7875ffd83dbSDimitry Andric 0,
7885ffd83dbSDimitry Andric eEncodingUint,
7895ffd83dbSDimitry Andric eFormatAddressInfo,
7905ffd83dbSDimitry Andric {67, 67, LLDB_INVALID_REGNUM, 67, 67},
7915ffd83dbSDimitry Andric nullptr,
7925ffd83dbSDimitry Andric nullptr,
793*06c3fb27SDimitry Andric nullptr,
794349cc55cSDimitry Andric },
7955ffd83dbSDimitry Andric {"badva0",
7965ffd83dbSDimitry Andric "",
7975ffd83dbSDimitry Andric 4,
7985ffd83dbSDimitry Andric 0,
7995ffd83dbSDimitry Andric eEncodingUint,
8005ffd83dbSDimitry Andric eFormatAddressInfo,
8015ffd83dbSDimitry Andric {68, 68, LLDB_INVALID_REGNUM, 68, 68},
8025ffd83dbSDimitry Andric nullptr,
8035ffd83dbSDimitry Andric nullptr,
804*06c3fb27SDimitry Andric nullptr,
805349cc55cSDimitry Andric },
8065ffd83dbSDimitry Andric {"badva1",
8075ffd83dbSDimitry Andric "",
8085ffd83dbSDimitry Andric 4,
8095ffd83dbSDimitry Andric 0,
8105ffd83dbSDimitry Andric eEncodingUint,
8115ffd83dbSDimitry Andric eFormatAddressInfo,
8125ffd83dbSDimitry Andric {69, 69, LLDB_INVALID_REGNUM, 69, 69},
8135ffd83dbSDimitry Andric nullptr,
8145ffd83dbSDimitry Andric nullptr,
815*06c3fb27SDimitry Andric nullptr,
816349cc55cSDimitry Andric },
8175ffd83dbSDimitry Andric {"ssr",
8185ffd83dbSDimitry Andric "",
8195ffd83dbSDimitry Andric 4,
8205ffd83dbSDimitry Andric 0,
8215ffd83dbSDimitry Andric eEncodingUint,
8225ffd83dbSDimitry Andric eFormatAddressInfo,
8235ffd83dbSDimitry Andric {70, 70, LLDB_INVALID_REGNUM, 70, 70},
8245ffd83dbSDimitry Andric nullptr,
8255ffd83dbSDimitry Andric nullptr,
826*06c3fb27SDimitry Andric nullptr,
827349cc55cSDimitry Andric },
8285ffd83dbSDimitry Andric {"ccr",
8295ffd83dbSDimitry Andric "",
8305ffd83dbSDimitry Andric 4,
8315ffd83dbSDimitry Andric 0,
8325ffd83dbSDimitry Andric eEncodingUint,
8335ffd83dbSDimitry Andric eFormatAddressInfo,
8345ffd83dbSDimitry Andric {71, 71, LLDB_INVALID_REGNUM, 71, 71},
8355ffd83dbSDimitry Andric nullptr,
8365ffd83dbSDimitry Andric nullptr,
837*06c3fb27SDimitry Andric nullptr,
838349cc55cSDimitry Andric },
8395ffd83dbSDimitry Andric {"htid",
8405ffd83dbSDimitry Andric "",
8415ffd83dbSDimitry Andric 4,
8425ffd83dbSDimitry Andric 0,
8435ffd83dbSDimitry Andric eEncodingUint,
8445ffd83dbSDimitry Andric eFormatAddressInfo,
8455ffd83dbSDimitry Andric {72, 72, LLDB_INVALID_REGNUM, 72, 72},
8465ffd83dbSDimitry Andric nullptr,
8475ffd83dbSDimitry Andric nullptr,
848*06c3fb27SDimitry Andric nullptr,
849349cc55cSDimitry Andric },
8505ffd83dbSDimitry Andric // PADDING {
8515ffd83dbSDimitry Andric {"p20",
8525ffd83dbSDimitry Andric "",
8535ffd83dbSDimitry Andric 4,
8545ffd83dbSDimitry Andric 0,
8555ffd83dbSDimitry Andric eEncodingInvalid,
8565ffd83dbSDimitry Andric eFormatInvalid,
8575ffd83dbSDimitry Andric {73, 73, LLDB_INVALID_REGNUM, 73, 73},
8585ffd83dbSDimitry Andric nullptr,
8595ffd83dbSDimitry Andric nullptr,
860*06c3fb27SDimitry Andric nullptr,
861349cc55cSDimitry Andric },
8625ffd83dbSDimitry Andric // }
8635ffd83dbSDimitry Andric {"imask",
8645ffd83dbSDimitry Andric "",
8655ffd83dbSDimitry Andric 4,
8665ffd83dbSDimitry Andric 0,
8675ffd83dbSDimitry Andric eEncodingUint,
8685ffd83dbSDimitry Andric eFormatAddressInfo,
8695ffd83dbSDimitry Andric {74, 74, LLDB_INVALID_REGNUM, 74, 74},
8705ffd83dbSDimitry Andric nullptr,
8715ffd83dbSDimitry Andric nullptr,
872*06c3fb27SDimitry Andric nullptr,
873349cc55cSDimitry Andric },
8745ffd83dbSDimitry Andric // PADDING {
8755ffd83dbSDimitry Andric {"p21",
8765ffd83dbSDimitry Andric "",
8775ffd83dbSDimitry Andric 4,
8785ffd83dbSDimitry Andric 0,
8795ffd83dbSDimitry Andric eEncodingInvalid,
8805ffd83dbSDimitry Andric eFormatInvalid,
8815ffd83dbSDimitry Andric {75, 75, LLDB_INVALID_REGNUM, 75, 75},
8825ffd83dbSDimitry Andric nullptr,
8835ffd83dbSDimitry Andric nullptr,
884*06c3fb27SDimitry Andric nullptr,
885349cc55cSDimitry Andric },
8865ffd83dbSDimitry Andric {"p22",
8875ffd83dbSDimitry Andric "",
8885ffd83dbSDimitry Andric 4,
8895ffd83dbSDimitry Andric 0,
8905ffd83dbSDimitry Andric eEncodingInvalid,
8915ffd83dbSDimitry Andric eFormatInvalid,
8925ffd83dbSDimitry Andric {76, 76, LLDB_INVALID_REGNUM, 76, 76},
8935ffd83dbSDimitry Andric nullptr,
8945ffd83dbSDimitry Andric nullptr,
895*06c3fb27SDimitry Andric nullptr,
896349cc55cSDimitry Andric },
8975ffd83dbSDimitry Andric {"p23",
8985ffd83dbSDimitry Andric "",
8995ffd83dbSDimitry Andric 4,
9005ffd83dbSDimitry Andric 0,
9015ffd83dbSDimitry Andric eEncodingInvalid,
9025ffd83dbSDimitry Andric eFormatInvalid,
9035ffd83dbSDimitry Andric {77, 77, LLDB_INVALID_REGNUM, 77, 77},
9045ffd83dbSDimitry Andric nullptr,
9055ffd83dbSDimitry Andric nullptr,
906*06c3fb27SDimitry Andric nullptr,
907349cc55cSDimitry Andric },
9085ffd83dbSDimitry Andric {"p24",
9095ffd83dbSDimitry Andric "",
9105ffd83dbSDimitry Andric 4,
9115ffd83dbSDimitry Andric 0,
9125ffd83dbSDimitry Andric eEncodingInvalid,
9135ffd83dbSDimitry Andric eFormatInvalid,
9145ffd83dbSDimitry Andric {78, 78, LLDB_INVALID_REGNUM, 78, 78},
9155ffd83dbSDimitry Andric nullptr,
9165ffd83dbSDimitry Andric nullptr,
917*06c3fb27SDimitry Andric nullptr,
918349cc55cSDimitry Andric },
9195ffd83dbSDimitry Andric {"p25",
9205ffd83dbSDimitry Andric "",
9215ffd83dbSDimitry Andric 4,
9225ffd83dbSDimitry Andric 0,
9235ffd83dbSDimitry Andric eEncodingInvalid,
9245ffd83dbSDimitry Andric eFormatInvalid,
9255ffd83dbSDimitry Andric {79, 79, LLDB_INVALID_REGNUM, 79, 79},
9265ffd83dbSDimitry Andric nullptr,
9275ffd83dbSDimitry Andric nullptr,
928*06c3fb27SDimitry Andric nullptr,
929349cc55cSDimitry Andric },
9305ffd83dbSDimitry Andric // }
9315ffd83dbSDimitry Andric {"g0",
9325ffd83dbSDimitry Andric "",
9335ffd83dbSDimitry Andric 4,
9345ffd83dbSDimitry Andric 0,
9355ffd83dbSDimitry Andric eEncodingUint,
9365ffd83dbSDimitry Andric eFormatAddressInfo,
9375ffd83dbSDimitry Andric {80, 80, LLDB_INVALID_REGNUM, 80, 80},
9385ffd83dbSDimitry Andric nullptr,
9395ffd83dbSDimitry Andric nullptr,
940*06c3fb27SDimitry Andric nullptr,
941349cc55cSDimitry Andric },
9425ffd83dbSDimitry Andric {"g1",
9435ffd83dbSDimitry Andric "",
9445ffd83dbSDimitry Andric 4,
9455ffd83dbSDimitry Andric 0,
9465ffd83dbSDimitry Andric eEncodingUint,
9475ffd83dbSDimitry Andric eFormatAddressInfo,
9485ffd83dbSDimitry Andric {81, 81, LLDB_INVALID_REGNUM, 81, 81},
9495ffd83dbSDimitry Andric nullptr,
9505ffd83dbSDimitry Andric nullptr,
951*06c3fb27SDimitry Andric nullptr,
952349cc55cSDimitry Andric },
9535ffd83dbSDimitry Andric {"g2",
9545ffd83dbSDimitry Andric "",
9555ffd83dbSDimitry Andric 4,
9565ffd83dbSDimitry Andric 0,
9575ffd83dbSDimitry Andric eEncodingUint,
9585ffd83dbSDimitry Andric eFormatAddressInfo,
9595ffd83dbSDimitry Andric {82, 82, LLDB_INVALID_REGNUM, 82, 82},
9605ffd83dbSDimitry Andric nullptr,
9615ffd83dbSDimitry Andric nullptr,
962*06c3fb27SDimitry Andric nullptr,
963349cc55cSDimitry Andric },
9645ffd83dbSDimitry Andric {"g3",
9655ffd83dbSDimitry Andric "",
9665ffd83dbSDimitry Andric 4,
9675ffd83dbSDimitry Andric 0,
9685ffd83dbSDimitry Andric eEncodingUint,
9695ffd83dbSDimitry Andric eFormatAddressInfo,
9705ffd83dbSDimitry Andric {83, 83, LLDB_INVALID_REGNUM, 83, 83},
9715ffd83dbSDimitry Andric nullptr,
9725ffd83dbSDimitry Andric nullptr,
973*06c3fb27SDimitry Andric nullptr,
974349cc55cSDimitry Andric }};
9755ffd83dbSDimitry Andric
9765ffd83dbSDimitry Andric static const uint32_t k_num_register_infos =
9775ffd83dbSDimitry Andric sizeof(g_register_infos) / sizeof(RegisterInfo);
9785ffd83dbSDimitry Andric
9795ffd83dbSDimitry Andric const lldb_private::RegisterInfo *
GetRegisterInfoArray(uint32_t & count)9805ffd83dbSDimitry Andric ABISysV_hexagon::GetRegisterInfoArray(uint32_t &count) {
9815ffd83dbSDimitry Andric count = k_num_register_infos;
9825ffd83dbSDimitry Andric return g_register_infos;
9835ffd83dbSDimitry Andric }
9845ffd83dbSDimitry Andric
9855ffd83dbSDimitry Andric /*
9865ffd83dbSDimitry Andric http://en.wikipedia.org/wiki/Red_zone_%28computing%29
9875ffd83dbSDimitry Andric
9885ffd83dbSDimitry Andric In computing, a red zone is a fixed size area in memory beyond the stack
9895ffd83dbSDimitry Andric pointer that has not been
9905ffd83dbSDimitry Andric "allocated". This region of memory is not to be modified by
9915ffd83dbSDimitry Andric interrupt/exception/signal handlers.
9925ffd83dbSDimitry Andric This allows the space to be used for temporary data without the extra
9935ffd83dbSDimitry Andric overhead of modifying the
9945ffd83dbSDimitry Andric stack pointer. The x86-64 ABI mandates a 128 byte red zone.[1] The OpenRISC
9955ffd83dbSDimitry Andric toolchain assumes a
9965ffd83dbSDimitry Andric 128 byte red zone though it is not documented.
9975ffd83dbSDimitry Andric */
GetRedZoneSize() const9985ffd83dbSDimitry Andric size_t ABISysV_hexagon::GetRedZoneSize() const { return 0; }
9995ffd83dbSDimitry Andric
10005ffd83dbSDimitry Andric // Static Functions
10015ffd83dbSDimitry Andric
10025ffd83dbSDimitry Andric ABISP
CreateInstance(lldb::ProcessSP process_sp,const ArchSpec & arch)10035ffd83dbSDimitry Andric ABISysV_hexagon::CreateInstance(lldb::ProcessSP process_sp, const ArchSpec &arch) {
10045ffd83dbSDimitry Andric if (arch.GetTriple().getArch() == llvm::Triple::hexagon) {
10055ffd83dbSDimitry Andric return ABISP(
10065ffd83dbSDimitry Andric new ABISysV_hexagon(std::move(process_sp), MakeMCRegisterInfo(arch)));
10075ffd83dbSDimitry Andric }
10085ffd83dbSDimitry Andric return ABISP();
10095ffd83dbSDimitry Andric }
10105ffd83dbSDimitry Andric
PrepareTrivialCall(Thread & thread,lldb::addr_t sp,lldb::addr_t pc,lldb::addr_t ra,llvm::ArrayRef<addr_t> args) const10115ffd83dbSDimitry Andric bool ABISysV_hexagon::PrepareTrivialCall(Thread &thread, lldb::addr_t sp,
10125ffd83dbSDimitry Andric lldb::addr_t pc, lldb::addr_t ra,
10135ffd83dbSDimitry Andric llvm::ArrayRef<addr_t> args) const {
10145ffd83dbSDimitry Andric // we don't use the traditional trivial call specialized for jit
10155ffd83dbSDimitry Andric return false;
10165ffd83dbSDimitry Andric }
10175ffd83dbSDimitry Andric
10185ffd83dbSDimitry Andric /*
10195ffd83dbSDimitry Andric
10205ffd83dbSDimitry Andric // AD:
10215ffd83dbSDimitry Andric // . safeguard the current stack
10225ffd83dbSDimitry Andric // . how can we know that the called function will create its own frame
10235ffd83dbSDimitry Andric properly?
10245ffd83dbSDimitry Andric // . we could manually make a new stack first:
10255ffd83dbSDimitry Andric // 2. push RA
10265ffd83dbSDimitry Andric // 3. push FP
10275ffd83dbSDimitry Andric // 4. FP = SP
10285ffd83dbSDimitry Andric // 5. SP = SP ( since no locals in our temp frame )
10295ffd83dbSDimitry Andric
10305ffd83dbSDimitry Andric // AD 6/05/2014
10315ffd83dbSDimitry Andric // . variable argument list parameters are not passed via registers, they are
10325ffd83dbSDimitry Andric passed on
10335ffd83dbSDimitry Andric // the stack. This presents us with a problem, since we need to know when
10345ffd83dbSDimitry Andric the valist
10355ffd83dbSDimitry Andric // starts. Currently I can find out if a function is varg, but not how many
10365ffd83dbSDimitry Andric // real parameters it takes. Thus I don't know when to start spilling the
10375ffd83dbSDimitry Andric vargs. For
10385ffd83dbSDimitry Andric // the time being, to progress, I will assume that it takes on real parameter
10395ffd83dbSDimitry Andric before
10405ffd83dbSDimitry Andric // the vargs list starts.
10415ffd83dbSDimitry Andric
10425ffd83dbSDimitry Andric // AD 06/05/2014
10435ffd83dbSDimitry Andric // . how do we adhere to the stack alignment requirements
10445ffd83dbSDimitry Andric
10455ffd83dbSDimitry Andric // AD 06/05/2014
10465ffd83dbSDimitry Andric // . handle 64bit values and their register / stack requirements
10475ffd83dbSDimitry Andric
10485ffd83dbSDimitry Andric */
10495ffd83dbSDimitry Andric #define HEX_ABI_DEBUG 0
PrepareTrivialCall(Thread & thread,lldb::addr_t sp,lldb::addr_t pc,lldb::addr_t ra,llvm::Type & prototype,llvm::ArrayRef<ABI::CallArgument> args) const10505ffd83dbSDimitry Andric bool ABISysV_hexagon::PrepareTrivialCall(
10515ffd83dbSDimitry Andric Thread &thread, lldb::addr_t sp, lldb::addr_t pc, lldb::addr_t ra,
10525ffd83dbSDimitry Andric llvm::Type &prototype, llvm::ArrayRef<ABI::CallArgument> args) const {
10535ffd83dbSDimitry Andric // default number of register passed arguments for varg functions
10545ffd83dbSDimitry Andric const int nVArgRegParams = 1;
10555ffd83dbSDimitry Andric Status error;
10565ffd83dbSDimitry Andric
10575ffd83dbSDimitry Andric // grab the process so we have access to the memory for spilling
10585ffd83dbSDimitry Andric lldb::ProcessSP proc = thread.GetProcess();
10595ffd83dbSDimitry Andric
10605ffd83dbSDimitry Andric // get the register context for modifying all of the registers
10615ffd83dbSDimitry Andric RegisterContext *reg_ctx = thread.GetRegisterContext().get();
10625ffd83dbSDimitry Andric if (!reg_ctx)
10635ffd83dbSDimitry Andric return false;
10645ffd83dbSDimitry Andric
10655ffd83dbSDimitry Andric uint32_t pc_reg = reg_ctx->ConvertRegisterKindToRegisterNumber(
10665ffd83dbSDimitry Andric eRegisterKindGeneric, LLDB_REGNUM_GENERIC_PC);
10675ffd83dbSDimitry Andric if (pc_reg == LLDB_INVALID_REGNUM)
10685ffd83dbSDimitry Andric return false;
10695ffd83dbSDimitry Andric
10705ffd83dbSDimitry Andric uint32_t ra_reg = reg_ctx->ConvertRegisterKindToRegisterNumber(
10715ffd83dbSDimitry Andric eRegisterKindGeneric, LLDB_REGNUM_GENERIC_RA);
10725ffd83dbSDimitry Andric if (ra_reg == LLDB_INVALID_REGNUM)
10735ffd83dbSDimitry Andric return false;
10745ffd83dbSDimitry Andric
10755ffd83dbSDimitry Andric uint32_t sp_reg = reg_ctx->ConvertRegisterKindToRegisterNumber(
10765ffd83dbSDimitry Andric eRegisterKindGeneric, LLDB_REGNUM_GENERIC_SP);
10775ffd83dbSDimitry Andric if (sp_reg == LLDB_INVALID_REGNUM)
10785ffd83dbSDimitry Andric return false;
10795ffd83dbSDimitry Andric
10805ffd83dbSDimitry Andric // push host data onto target
10815ffd83dbSDimitry Andric for (size_t i = 0; i < args.size(); i++) {
10825ffd83dbSDimitry Andric const ABI::CallArgument &arg = args[i];
10835ffd83dbSDimitry Andric // skip over target values
10845ffd83dbSDimitry Andric if (arg.type == ABI::CallArgument::TargetValue)
10855ffd83dbSDimitry Andric continue;
10865ffd83dbSDimitry Andric // round up to 8 byte multiple
10875ffd83dbSDimitry Andric size_t argSize = (arg.size | 0x7) + 1;
10885ffd83dbSDimitry Andric
10895ffd83dbSDimitry Andric // create space on the stack for this data
10905ffd83dbSDimitry Andric sp -= argSize;
10915ffd83dbSDimitry Andric
10925ffd83dbSDimitry Andric // write this argument onto the stack of the host process
10935ffd83dbSDimitry Andric proc->WriteMemory(sp, arg.data_up.get(), arg.size, error);
10945ffd83dbSDimitry Andric if (error.Fail())
10955ffd83dbSDimitry Andric return false;
10965ffd83dbSDimitry Andric
10975ffd83dbSDimitry Andric // update the argument with the target pointer
10985ffd83dbSDimitry Andric // XXX: This is a gross hack for getting around the const
10995ffd83dbSDimitry Andric *const_cast<lldb::addr_t *>(&arg.value) = sp;
11005ffd83dbSDimitry Andric }
11015ffd83dbSDimitry Andric
11025ffd83dbSDimitry Andric #if HEX_ABI_DEBUG
11035ffd83dbSDimitry Andric // print the original stack pointer
11045ffd83dbSDimitry Andric printf("sp : %04" PRIx64 " \n", sp);
11055ffd83dbSDimitry Andric #endif
11065ffd83dbSDimitry Andric
11075ffd83dbSDimitry Andric // make sure number of parameters matches prototype
11085ffd83dbSDimitry Andric assert(prototype.getFunctionNumParams() == args.size());
11095ffd83dbSDimitry Andric
11105ffd83dbSDimitry Andric // check if this is a variable argument function
11115ffd83dbSDimitry Andric bool isVArg = prototype.isFunctionVarArg();
11125ffd83dbSDimitry Andric
11135ffd83dbSDimitry Andric // number of arguments passed by register
11145ffd83dbSDimitry Andric int nRegArgs = nVArgRegParams;
11155ffd83dbSDimitry Andric if (!isVArg) {
11165ffd83dbSDimitry Andric // number of arguments is limited by [R0 : R5] space
11175ffd83dbSDimitry Andric nRegArgs = args.size();
11185ffd83dbSDimitry Andric if (nRegArgs > 6)
11195ffd83dbSDimitry Andric nRegArgs = 6;
11205ffd83dbSDimitry Andric }
11215ffd83dbSDimitry Andric
11225ffd83dbSDimitry Andric // pass arguments that are passed via registers
11235ffd83dbSDimitry Andric for (int i = 0; i < nRegArgs; i++) {
11245ffd83dbSDimitry Andric // get the parameter as a u32
11255ffd83dbSDimitry Andric uint32_t param = (uint32_t)args[i].value;
11265ffd83dbSDimitry Andric // write argument into register
11275ffd83dbSDimitry Andric if (!reg_ctx->WriteRegisterFromUnsigned(i, param))
11285ffd83dbSDimitry Andric return false;
11295ffd83dbSDimitry Andric }
11305ffd83dbSDimitry Andric
11315ffd83dbSDimitry Andric // number of arguments to spill onto stack
11325ffd83dbSDimitry Andric int nSpillArgs = args.size() - nRegArgs;
11335ffd83dbSDimitry Andric // make space on the stack for arguments
11345ffd83dbSDimitry Andric sp -= 4 * nSpillArgs;
11355ffd83dbSDimitry Andric // align stack on an 8 byte boundary
11365ffd83dbSDimitry Andric if (sp & 7)
11375ffd83dbSDimitry Andric sp -= 4;
11385ffd83dbSDimitry Andric
11395ffd83dbSDimitry Andric // arguments that are passed on the stack
11405ffd83dbSDimitry Andric for (size_t i = nRegArgs, offs = 0; i < args.size(); i++) {
11415ffd83dbSDimitry Andric // get the parameter as a u32
11425ffd83dbSDimitry Andric uint32_t param = (uint32_t)args[i].value;
11435ffd83dbSDimitry Andric // write argument to stack
11445ffd83dbSDimitry Andric proc->WriteMemory(sp + offs, (void *)¶m, sizeof(param), error);
11455ffd83dbSDimitry Andric if (!error.Success())
11465ffd83dbSDimitry Andric return false;
11475ffd83dbSDimitry Andric //
11485ffd83dbSDimitry Andric offs += 4;
11495ffd83dbSDimitry Andric }
11505ffd83dbSDimitry Andric
11515ffd83dbSDimitry Andric // update registers with current function call state
11525ffd83dbSDimitry Andric reg_ctx->WriteRegisterFromUnsigned(pc_reg, pc);
11535ffd83dbSDimitry Andric reg_ctx->WriteRegisterFromUnsigned(ra_reg, ra);
11545ffd83dbSDimitry Andric reg_ctx->WriteRegisterFromUnsigned(sp_reg, sp);
11555ffd83dbSDimitry Andric
11565ffd83dbSDimitry Andric #if HEX_ABI_DEBUG
11575ffd83dbSDimitry Andric // quick and dirty stack dumper for debugging
11585ffd83dbSDimitry Andric for (int i = -8; i < 8; i++) {
11595ffd83dbSDimitry Andric uint32_t data = 0;
11605ffd83dbSDimitry Andric lldb::addr_t addr = sp + i * 4;
11615ffd83dbSDimitry Andric proc->ReadMemory(addr, (void *)&data, sizeof(data), error);
11625ffd83dbSDimitry Andric printf("\n0x%04" PRIx64 " 0x%08x ", addr, data);
11635ffd83dbSDimitry Andric if (i == 0)
11645ffd83dbSDimitry Andric printf("<<-- sp");
11655ffd83dbSDimitry Andric }
11665ffd83dbSDimitry Andric printf("\n");
11675ffd83dbSDimitry Andric #endif
11685ffd83dbSDimitry Andric
11695ffd83dbSDimitry Andric return true;
11705ffd83dbSDimitry Andric }
11715ffd83dbSDimitry Andric
GetArgumentValues(Thread & thread,ValueList & values) const11725ffd83dbSDimitry Andric bool ABISysV_hexagon::GetArgumentValues(Thread &thread,
11735ffd83dbSDimitry Andric ValueList &values) const {
11745ffd83dbSDimitry Andric return false;
11755ffd83dbSDimitry Andric }
11765ffd83dbSDimitry Andric
11775ffd83dbSDimitry Andric Status
SetReturnValueObject(lldb::StackFrameSP & frame_sp,lldb::ValueObjectSP & new_value_sp)11785ffd83dbSDimitry Andric ABISysV_hexagon::SetReturnValueObject(lldb::StackFrameSP &frame_sp,
11795ffd83dbSDimitry Andric lldb::ValueObjectSP &new_value_sp) {
11805ffd83dbSDimitry Andric Status error;
11815ffd83dbSDimitry Andric return error;
11825ffd83dbSDimitry Andric }
11835ffd83dbSDimitry Andric
GetReturnValueObjectSimple(Thread & thread,CompilerType & return_compiler_type) const11845ffd83dbSDimitry Andric ValueObjectSP ABISysV_hexagon::GetReturnValueObjectSimple(
11855ffd83dbSDimitry Andric Thread &thread, CompilerType &return_compiler_type) const {
11865ffd83dbSDimitry Andric ValueObjectSP return_valobj_sp;
11875ffd83dbSDimitry Andric return return_valobj_sp;
11885ffd83dbSDimitry Andric }
11895ffd83dbSDimitry Andric
GetReturnValueObjectImpl(Thread & thread,CompilerType & return_compiler_type) const11905ffd83dbSDimitry Andric ValueObjectSP ABISysV_hexagon::GetReturnValueObjectImpl(
11915ffd83dbSDimitry Andric Thread &thread, CompilerType &return_compiler_type) const {
11925ffd83dbSDimitry Andric ValueObjectSP return_valobj_sp;
11935ffd83dbSDimitry Andric return return_valobj_sp;
11945ffd83dbSDimitry Andric }
11955ffd83dbSDimitry Andric
11965ffd83dbSDimitry Andric // called when we are on the first instruction of a new function for hexagon
11975ffd83dbSDimitry Andric // the return address is in RA (R31)
CreateFunctionEntryUnwindPlan(UnwindPlan & unwind_plan)11985ffd83dbSDimitry Andric bool ABISysV_hexagon::CreateFunctionEntryUnwindPlan(UnwindPlan &unwind_plan) {
11995ffd83dbSDimitry Andric unwind_plan.Clear();
12005ffd83dbSDimitry Andric unwind_plan.SetRegisterKind(eRegisterKindGeneric);
12015ffd83dbSDimitry Andric unwind_plan.SetReturnAddressRegister(LLDB_REGNUM_GENERIC_RA);
12025ffd83dbSDimitry Andric
12035ffd83dbSDimitry Andric UnwindPlan::RowSP row(new UnwindPlan::Row);
12045ffd83dbSDimitry Andric
12055ffd83dbSDimitry Andric // Our Call Frame Address is the stack pointer value
12065ffd83dbSDimitry Andric row->GetCFAValue().SetIsRegisterPlusOffset(LLDB_REGNUM_GENERIC_SP, 4);
12075ffd83dbSDimitry Andric row->SetOffset(0);
12085ffd83dbSDimitry Andric
12095ffd83dbSDimitry Andric // The previous PC is in the LR
12105ffd83dbSDimitry Andric row->SetRegisterLocationToRegister(LLDB_REGNUM_GENERIC_PC,
12115ffd83dbSDimitry Andric LLDB_REGNUM_GENERIC_RA, true);
12125ffd83dbSDimitry Andric unwind_plan.AppendRow(row);
12135ffd83dbSDimitry Andric
12145ffd83dbSDimitry Andric unwind_plan.SetSourceName("hexagon at-func-entry default");
12155ffd83dbSDimitry Andric unwind_plan.SetSourcedFromCompiler(eLazyBoolNo);
12165ffd83dbSDimitry Andric return true;
12175ffd83dbSDimitry Andric }
12185ffd83dbSDimitry Andric
CreateDefaultUnwindPlan(UnwindPlan & unwind_plan)12195ffd83dbSDimitry Andric bool ABISysV_hexagon::CreateDefaultUnwindPlan(UnwindPlan &unwind_plan) {
12205ffd83dbSDimitry Andric unwind_plan.Clear();
12215ffd83dbSDimitry Andric unwind_plan.SetRegisterKind(eRegisterKindGeneric);
12225ffd83dbSDimitry Andric
12235ffd83dbSDimitry Andric uint32_t fp_reg_num = LLDB_REGNUM_GENERIC_FP;
12245ffd83dbSDimitry Andric uint32_t sp_reg_num = LLDB_REGNUM_GENERIC_SP;
12255ffd83dbSDimitry Andric uint32_t pc_reg_num = LLDB_REGNUM_GENERIC_PC;
12265ffd83dbSDimitry Andric
12275ffd83dbSDimitry Andric UnwindPlan::RowSP row(new UnwindPlan::Row);
12285ffd83dbSDimitry Andric
1229fe6060f1SDimitry Andric row->SetUnspecifiedRegistersAreUndefined(true);
12305ffd83dbSDimitry Andric row->GetCFAValue().SetIsRegisterPlusOffset(LLDB_REGNUM_GENERIC_FP, 8);
12315ffd83dbSDimitry Andric
12325ffd83dbSDimitry Andric row->SetRegisterLocationToAtCFAPlusOffset(fp_reg_num, -8, true);
12335ffd83dbSDimitry Andric row->SetRegisterLocationToAtCFAPlusOffset(pc_reg_num, -4, true);
12345ffd83dbSDimitry Andric row->SetRegisterLocationToIsCFAPlusOffset(sp_reg_num, 0, true);
12355ffd83dbSDimitry Andric
12365ffd83dbSDimitry Andric unwind_plan.AppendRow(row);
12375ffd83dbSDimitry Andric unwind_plan.SetSourceName("hexagon default unwind plan");
12385ffd83dbSDimitry Andric unwind_plan.SetSourcedFromCompiler(eLazyBoolNo);
12395ffd83dbSDimitry Andric unwind_plan.SetUnwindPlanValidAtAllInstructions(eLazyBoolNo);
12405ffd83dbSDimitry Andric unwind_plan.SetUnwindPlanForSignalTrap(eLazyBoolNo);
12415ffd83dbSDimitry Andric return true;
12425ffd83dbSDimitry Andric }
12435ffd83dbSDimitry Andric
12445ffd83dbSDimitry Andric /*
12455ffd83dbSDimitry Andric Register Usage Saved By
12465ffd83dbSDimitry Andric
12475ffd83dbSDimitry Andric R0 - R5 parameters(a) -
12485ffd83dbSDimitry Andric R6 - R15 Scratch(b) Caller
12495ffd83dbSDimitry Andric R16 - R27 Scratch Callee
12505ffd83dbSDimitry Andric R28 Scratch(b) Caller
12515ffd83dbSDimitry Andric R29 - R31 Stack Frames Callee(c)
12525ffd83dbSDimitry Andric P3:0 Processor State Caller
12535ffd83dbSDimitry Andric
12545ffd83dbSDimitry Andric a = the caller can change parameter values
12555ffd83dbSDimitry Andric b = R14 - R15 and R28 are used by the procedure linkage table
12565ffd83dbSDimitry Andric c = R29 - R31 are saved and restored by allocframe() and deallocframe()
12575ffd83dbSDimitry Andric */
RegisterIsVolatile(const RegisterInfo * reg_info)12585ffd83dbSDimitry Andric bool ABISysV_hexagon::RegisterIsVolatile(const RegisterInfo *reg_info) {
12595ffd83dbSDimitry Andric return !RegisterIsCalleeSaved(reg_info);
12605ffd83dbSDimitry Andric }
12615ffd83dbSDimitry Andric
RegisterIsCalleeSaved(const RegisterInfo * reg_info)12625ffd83dbSDimitry Andric bool ABISysV_hexagon::RegisterIsCalleeSaved(const RegisterInfo *reg_info) {
12635ffd83dbSDimitry Andric int reg = ((reg_info->byte_offset) / 4);
12645ffd83dbSDimitry Andric
12655ffd83dbSDimitry Andric bool save = (reg >= 16) && (reg <= 27);
12665ffd83dbSDimitry Andric save |= (reg >= 29) && (reg <= 32);
12675ffd83dbSDimitry Andric
12685ffd83dbSDimitry Andric return save;
12695ffd83dbSDimitry Andric }
12705ffd83dbSDimitry Andric
Initialize()12715ffd83dbSDimitry Andric void ABISysV_hexagon::Initialize() {
12725ffd83dbSDimitry Andric PluginManager::RegisterPlugin(GetPluginNameStatic(),
12735ffd83dbSDimitry Andric "System V ABI for hexagon targets",
12745ffd83dbSDimitry Andric CreateInstance);
12755ffd83dbSDimitry Andric }
12765ffd83dbSDimitry Andric
Terminate()12775ffd83dbSDimitry Andric void ABISysV_hexagon::Terminate() {
12785ffd83dbSDimitry Andric PluginManager::UnregisterPlugin(CreateInstance);
12795ffd83dbSDimitry Andric }
12805ffd83dbSDimitry Andric
12815ffd83dbSDimitry Andric // get value object specialized to work with llvm IR types
12825ffd83dbSDimitry Andric lldb::ValueObjectSP
GetReturnValueObjectImpl(lldb_private::Thread & thread,llvm::Type & retType) const12835ffd83dbSDimitry Andric ABISysV_hexagon::GetReturnValueObjectImpl(lldb_private::Thread &thread,
12845ffd83dbSDimitry Andric llvm::Type &retType) const {
12855ffd83dbSDimitry Andric Value value;
12865ffd83dbSDimitry Andric ValueObjectSP vObjSP;
12875ffd83dbSDimitry Andric
12885ffd83dbSDimitry Andric // get the current register context
12895ffd83dbSDimitry Andric RegisterContext *reg_ctx = thread.GetRegisterContext().get();
12905ffd83dbSDimitry Andric if (!reg_ctx)
12915ffd83dbSDimitry Andric return vObjSP;
12925ffd83dbSDimitry Andric
12935ffd83dbSDimitry Andric // for now just pop R0 to find the return value
12945ffd83dbSDimitry Andric const lldb_private::RegisterInfo *r0_info =
12955ffd83dbSDimitry Andric reg_ctx->GetRegisterInfoAtIndex(0);
12965ffd83dbSDimitry Andric if (r0_info == nullptr)
12975ffd83dbSDimitry Andric return vObjSP;
12985ffd83dbSDimitry Andric
12995ffd83dbSDimitry Andric // void return type
13005ffd83dbSDimitry Andric if (retType.isVoidTy()) {
13015ffd83dbSDimitry Andric value.GetScalar() = 0;
13025ffd83dbSDimitry Andric }
13035ffd83dbSDimitry Andric // integer / pointer return type
13045ffd83dbSDimitry Andric else if (retType.isIntegerTy() || retType.isPointerTy()) {
13055ffd83dbSDimitry Andric // read r0 register value
13065ffd83dbSDimitry Andric lldb_private::RegisterValue r0_value;
13075ffd83dbSDimitry Andric if (!reg_ctx->ReadRegister(r0_info, r0_value))
13085ffd83dbSDimitry Andric return vObjSP;
13095ffd83dbSDimitry Andric
13105ffd83dbSDimitry Andric // push r0 into value
13115ffd83dbSDimitry Andric uint32_t r0_u32 = r0_value.GetAsUInt32();
13125ffd83dbSDimitry Andric
13135ffd83dbSDimitry Andric // account for integer size
13145ffd83dbSDimitry Andric if (retType.isIntegerTy() && retType.isSized()) {
13155ffd83dbSDimitry Andric uint64_t size = retType.getScalarSizeInBits();
13165ffd83dbSDimitry Andric uint64_t mask = (1ull << size) - 1;
13175ffd83dbSDimitry Andric // mask out higher order bits then the type we expect
13185ffd83dbSDimitry Andric r0_u32 &= mask;
13195ffd83dbSDimitry Andric }
13205ffd83dbSDimitry Andric
13215ffd83dbSDimitry Andric value.GetScalar() = r0_u32;
13225ffd83dbSDimitry Andric }
13235ffd83dbSDimitry Andric // unsupported return type
13245ffd83dbSDimitry Andric else
13255ffd83dbSDimitry Andric return vObjSP;
13265ffd83dbSDimitry Andric
13275ffd83dbSDimitry Andric // pack the value into a ValueObjectSP
13285ffd83dbSDimitry Andric vObjSP = ValueObjectConstResult::Create(thread.GetStackFrameAtIndex(0).get(),
13295ffd83dbSDimitry Andric value, ConstString(""));
13305ffd83dbSDimitry Andric return vObjSP;
13315ffd83dbSDimitry Andric }
1332