1*be691f3bSpatrick#!/usr/bin/env python
2061da546Spatrick#===-- x86_64_target_definition.py -----------------------------*- C++ -*-===//
3061da546Spatrick#
4061da546Spatrick# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5061da546Spatrick# See https://llvm.org/LICENSE.txt for license information.
6061da546Spatrick# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7061da546Spatrick#
8061da546Spatrick#===----------------------------------------------------------------------===//
9061da546Spatrick
10061da546Spatrick#----------------------------------------------------------------------
11061da546Spatrick# DESCRIPTION
12061da546Spatrick#
13061da546Spatrick# This file can be used with the following setting:
14061da546Spatrick#   plugin.process.gdb-remote.target-definition-file
15061da546Spatrick# This setting should be used when you are trying to connect to a
16061da546Spatrick# remote GDB server that doesn't support any of the register discovery
17061da546Spatrick# packets that LLDB normally uses.
18061da546Spatrick#
19061da546Spatrick# Why is this necessary? LLDB doesn't require a new build of LLDB that
20061da546Spatrick# targets each new architecture you will debug with. Instead, all
21061da546Spatrick# architectures are supported and LLDB relies on extra GDB server
22061da546Spatrick# packets to discover the target we are connecting to so that is can
23061da546Spatrick# show the right registers for each target. This allows the GDB server
24061da546Spatrick# to change and add new registers without requiring a new LLDB build
25061da546Spatrick# just so we can see new registers.
26061da546Spatrick#
27061da546Spatrick# This file implements the x86_64 registers for the darwin version of
28061da546Spatrick# GDB and allows you to connect to servers that use this register set.
29061da546Spatrick#
30061da546Spatrick# USAGE
31061da546Spatrick#
32061da546Spatrick# (lldb) settings set plugin.process.gdb-remote.target-definition-file /path/to/x86_64_target_definition.py
33061da546Spatrick# (lldb) gdb-remote other.baz.com:1234
34061da546Spatrick#
35061da546Spatrick# The target definition file will get used if and only if the
36061da546Spatrick# qRegisterInfo packets are not supported when connecting to a remote
37061da546Spatrick# GDB server.
38061da546Spatrick#----------------------------------------------------------------------
39061da546Spatrickfrom lldb import *
40061da546Spatrick
41061da546Spatrick# Compiler and DWARF register numbers
42061da546Spatrickname_to_gcc_dwarf_regnum = {
43061da546Spatrick    'rax': 0,
44061da546Spatrick    'rdx': 1,
45061da546Spatrick    'rcx': 2,
46061da546Spatrick    'rbx': 3,
47061da546Spatrick    'rsi': 4,
48061da546Spatrick    'rdi': 5,
49061da546Spatrick    'rbp': 6,
50061da546Spatrick    'rsp': 7,
51061da546Spatrick    'r8': 8,
52061da546Spatrick    'r9': 9,
53061da546Spatrick    'r10': 10,
54061da546Spatrick    'r11': 11,
55061da546Spatrick    'r12': 12,
56061da546Spatrick    'r13': 13,
57061da546Spatrick    'r14': 14,
58061da546Spatrick    'r15': 15,
59061da546Spatrick    'rip': 16,
60061da546Spatrick    'xmm0': 17,
61061da546Spatrick    'xmm1': 18,
62061da546Spatrick    'xmm2': 19,
63061da546Spatrick    'xmm3': 20,
64061da546Spatrick    'xmm4': 21,
65061da546Spatrick    'xmm5': 22,
66061da546Spatrick    'xmm6': 23,
67061da546Spatrick    'xmm7': 24,
68061da546Spatrick    'xmm8': 25,
69061da546Spatrick    'xmm9': 26,
70061da546Spatrick    'xmm10': 27,
71061da546Spatrick    'xmm11': 28,
72061da546Spatrick    'xmm12': 29,
73061da546Spatrick    'xmm13': 30,
74061da546Spatrick    'xmm14': 31,
75061da546Spatrick    'xmm15': 32,
76061da546Spatrick    'stmm0': 33,
77061da546Spatrick    'stmm1': 34,
78061da546Spatrick    'stmm2': 35,
79061da546Spatrick    'stmm3': 36,
80061da546Spatrick    'stmm4': 37,
81061da546Spatrick    'stmm5': 38,
82061da546Spatrick    'stmm6': 39,
83061da546Spatrick    'stmm7': 30,
84061da546Spatrick    'ymm0': 41,
85061da546Spatrick    'ymm1': 42,
86061da546Spatrick    'ymm2': 43,
87061da546Spatrick    'ymm3': 44,
88061da546Spatrick    'ymm4': 45,
89061da546Spatrick    'ymm5': 46,
90061da546Spatrick    'ymm6': 47,
91061da546Spatrick    'ymm7': 48,
92061da546Spatrick    'ymm8': 49,
93061da546Spatrick    'ymm9': 40,
94061da546Spatrick    'ymm10': 41,
95061da546Spatrick    'ymm11': 42,
96061da546Spatrick    'ymm12': 43,
97061da546Spatrick    'ymm13': 44,
98061da546Spatrick    'ymm14': 45,
99061da546Spatrick    'ymm15': 46
100061da546Spatrick}
101061da546Spatrick
102061da546Spatrickname_to_gdb_regnum = {
103061da546Spatrick    'rax': 0,
104061da546Spatrick    'rbx': 1,
105061da546Spatrick    'rcx': 2,
106061da546Spatrick    'rdx': 3,
107061da546Spatrick    'rsi': 4,
108061da546Spatrick    'rdi': 5,
109061da546Spatrick    'rbp': 6,
110061da546Spatrick    'rsp': 7,
111061da546Spatrick    'r8': 8,
112061da546Spatrick    'r9': 9,
113061da546Spatrick    'r10': 10,
114061da546Spatrick    'r11': 11,
115061da546Spatrick    'r12': 12,
116061da546Spatrick    'r13': 13,
117061da546Spatrick    'r14': 14,
118061da546Spatrick    'r15': 15,
119061da546Spatrick    'rip': 16,
120061da546Spatrick    'rflags': 17,
121061da546Spatrick    'cs': 18,
122061da546Spatrick    'ss': 19,
123061da546Spatrick    'ds': 20,
124061da546Spatrick    'es': 21,
125061da546Spatrick    'fs': 22,
126061da546Spatrick    'gs': 23,
127061da546Spatrick    'stmm0': 24,
128061da546Spatrick    'stmm1': 25,
129061da546Spatrick    'stmm2': 26,
130061da546Spatrick    'stmm3': 27,
131061da546Spatrick    'stmm4': 28,
132061da546Spatrick    'stmm5': 29,
133061da546Spatrick    'stmm6': 30,
134061da546Spatrick    'stmm7': 31,
135061da546Spatrick    'fctrl': 32,
136061da546Spatrick    'fstat': 33,
137061da546Spatrick    'ftag': 34,
138061da546Spatrick    'fiseg': 35,
139061da546Spatrick    'fioff': 36,
140061da546Spatrick    'foseg': 37,
141061da546Spatrick    'fooff': 38,
142061da546Spatrick    'fop': 39,
143061da546Spatrick    'xmm0': 40,
144061da546Spatrick    'xmm1': 41,
145061da546Spatrick    'xmm2': 42,
146061da546Spatrick    'xmm3': 43,
147061da546Spatrick    'xmm4': 44,
148061da546Spatrick    'xmm5': 45,
149061da546Spatrick    'xmm6': 46,
150061da546Spatrick    'xmm7': 47,
151061da546Spatrick    'xmm8': 48,
152061da546Spatrick    'xmm9': 49,
153061da546Spatrick    'xmm10': 50,
154061da546Spatrick    'xmm11': 51,
155061da546Spatrick    'xmm12': 52,
156061da546Spatrick    'xmm13': 53,
157061da546Spatrick    'xmm14': 54,
158061da546Spatrick    'xmm15': 55,
159061da546Spatrick    'mxcsr': 56,
160061da546Spatrick    'ymm0': 57,
161061da546Spatrick    'ymm1': 58,
162061da546Spatrick    'ymm2': 59,
163061da546Spatrick    'ymm3': 60,
164061da546Spatrick    'ymm4': 61,
165061da546Spatrick    'ymm5': 62,
166061da546Spatrick    'ymm6': 63,
167061da546Spatrick    'ymm7': 64,
168061da546Spatrick    'ymm8': 65,
169061da546Spatrick    'ymm9': 66,
170061da546Spatrick    'ymm10': 67,
171061da546Spatrick    'ymm11': 68,
172061da546Spatrick    'ymm12': 69,
173061da546Spatrick    'ymm13': 70,
174061da546Spatrick    'ymm14': 71,
175061da546Spatrick    'ymm15': 72
176061da546Spatrick}
177061da546Spatrick
178061da546Spatrickname_to_generic_regnum = {
179061da546Spatrick    'rip': LLDB_REGNUM_GENERIC_PC,
180061da546Spatrick    'rsp': LLDB_REGNUM_GENERIC_SP,
181061da546Spatrick    'rbp': LLDB_REGNUM_GENERIC_FP,
182061da546Spatrick    'rdi': LLDB_REGNUM_GENERIC_ARG1,
183061da546Spatrick    'rsi': LLDB_REGNUM_GENERIC_ARG2,
184061da546Spatrick    'rdx': LLDB_REGNUM_GENERIC_ARG3,
185061da546Spatrick    'rcx': LLDB_REGNUM_GENERIC_ARG4,
186061da546Spatrick    'r8': LLDB_REGNUM_GENERIC_ARG5,
187061da546Spatrick    'r9': LLDB_REGNUM_GENERIC_ARG6
188061da546Spatrick}
189061da546Spatrick
190061da546Spatrick
191061da546Spatrickdef get_reg_num(reg_num_dict, reg_name):
192061da546Spatrick    if reg_name in reg_num_dict:
193061da546Spatrick        return reg_num_dict[reg_name]
194061da546Spatrick    return LLDB_INVALID_REGNUM
195061da546Spatrick
196061da546Spatrick
197061da546Spatrickdef get_reg_num(reg_num_dict, reg_name):
198061da546Spatrick    if reg_name in reg_num_dict:
199061da546Spatrick        return reg_num_dict[reg_name]
200061da546Spatrick    return LLDB_INVALID_REGNUM
201061da546Spatrick
202061da546Spatrickx86_64_register_infos = [
203061da546Spatrick    {'name': 'rax',
204061da546Spatrick     'set': 0,
205061da546Spatrick     'bitsize': 64,
206061da546Spatrick     'encoding': eEncodingUint,
207061da546Spatrick     'format': eFormatAddressInfo},
208061da546Spatrick    {'name': 'rbx',
209061da546Spatrick     'set': 0,
210061da546Spatrick     'bitsize': 64,
211061da546Spatrick     'encoding': eEncodingUint,
212061da546Spatrick     'format': eFormatAddressInfo},
213061da546Spatrick    {'name': 'rcx', 'set': 0, 'bitsize': 64, 'encoding': eEncodingUint,
214061da546Spatrick        'format': eFormatAddressInfo, 'alt-name': 'arg4'},
215061da546Spatrick    {'name': 'rdx', 'set': 0, 'bitsize': 64, 'encoding': eEncodingUint,
216061da546Spatrick        'format': eFormatAddressInfo, 'alt-name': 'arg3'},
217061da546Spatrick    {'name': 'rsi', 'set': 0, 'bitsize': 64, 'encoding': eEncodingUint,
218061da546Spatrick        'format': eFormatAddressInfo, 'alt-name': 'arg2'},
219061da546Spatrick    {'name': 'rdi', 'set': 0, 'bitsize': 64, 'encoding': eEncodingUint,
220061da546Spatrick        'format': eFormatAddressInfo, 'alt-name': 'arg1'},
221061da546Spatrick    {'name': 'rbp', 'set': 0, 'bitsize': 64, 'encoding': eEncodingUint,
222061da546Spatrick        'format': eFormatAddressInfo, 'alt-name': 'fp'},
223061da546Spatrick    {'name': 'rsp', 'set': 0, 'bitsize': 64, 'encoding': eEncodingUint,
224061da546Spatrick        'format': eFormatAddressInfo, 'alt-name': 'sp'},
225061da546Spatrick    {'name': 'r8', 'set': 0, 'bitsize': 64, 'encoding': eEncodingUint,
226061da546Spatrick        'format': eFormatAddressInfo, 'alt-name': 'arg5'},
227061da546Spatrick    {'name': 'r9', 'set': 0, 'bitsize': 64, 'encoding': eEncodingUint,
228061da546Spatrick        'format': eFormatAddressInfo, 'alt-name': 'arg6'},
229061da546Spatrick    {'name': 'r10',
230061da546Spatrick     'set': 0,
231061da546Spatrick     'bitsize': 64,
232061da546Spatrick     'encoding': eEncodingUint,
233061da546Spatrick     'format': eFormatAddressInfo},
234061da546Spatrick    {'name': 'r11',
235061da546Spatrick     'set': 0,
236061da546Spatrick     'bitsize': 64,
237061da546Spatrick     'encoding': eEncodingUint,
238061da546Spatrick     'format': eFormatAddressInfo},
239061da546Spatrick    {'name': 'r12',
240061da546Spatrick     'set': 0,
241061da546Spatrick     'bitsize': 64,
242061da546Spatrick     'encoding': eEncodingUint,
243061da546Spatrick     'format': eFormatAddressInfo},
244061da546Spatrick    {'name': 'r13',
245061da546Spatrick     'set': 0,
246061da546Spatrick     'bitsize': 64,
247061da546Spatrick     'encoding': eEncodingUint,
248061da546Spatrick     'format': eFormatAddressInfo},
249061da546Spatrick    {'name': 'r14',
250061da546Spatrick     'set': 0,
251061da546Spatrick     'bitsize': 64,
252061da546Spatrick     'encoding': eEncodingUint,
253061da546Spatrick     'format': eFormatAddressInfo},
254061da546Spatrick    {'name': 'r15',
255061da546Spatrick     'set': 0,
256061da546Spatrick     'bitsize': 64,
257061da546Spatrick     'encoding': eEncodingUint,
258061da546Spatrick     'format': eFormatAddressInfo},
259061da546Spatrick    {'name': 'rip', 'set': 0, 'bitsize': 64, 'encoding': eEncodingUint,
260061da546Spatrick        'format': eFormatAddressInfo, 'alt-name': 'pc'},
261061da546Spatrick    {'name': 'rflags', 'set': 0, 'bitsize': 32,
262061da546Spatrick        'encoding': eEncodingUint, 'format': eFormatHex},
263061da546Spatrick    {'name': 'cs', 'set': 0, 'bitsize': 32,
264061da546Spatrick        'encoding': eEncodingUint, 'format': eFormatHex},
265061da546Spatrick    {'name': 'ss', 'set': 0, 'bitsize': 32,
266061da546Spatrick        'encoding': eEncodingUint, 'format': eFormatHex},
267061da546Spatrick    {'name': 'ds', 'set': 0, 'bitsize': 32,
268061da546Spatrick        'encoding': eEncodingUint, 'format': eFormatHex},
269061da546Spatrick    {'name': 'es', 'set': 0, 'bitsize': 32,
270061da546Spatrick        'encoding': eEncodingUint, 'format': eFormatHex},
271061da546Spatrick    {'name': 'fs', 'set': 0, 'bitsize': 32,
272061da546Spatrick        'encoding': eEncodingUint, 'format': eFormatHex},
273061da546Spatrick    {'name': 'gs', 'set': 0, 'bitsize': 32,
274061da546Spatrick        'encoding': eEncodingUint, 'format': eFormatHex},
275061da546Spatrick    {'name': 'stmm0',
276061da546Spatrick     'set': 1,
277061da546Spatrick     'bitsize': 80,
278061da546Spatrick     'encoding': eEncodingVector,
279061da546Spatrick     'format': eFormatVectorOfUInt8},
280061da546Spatrick    {'name': 'stmm1',
281061da546Spatrick     'set': 1,
282061da546Spatrick     'bitsize': 80,
283061da546Spatrick     'encoding': eEncodingVector,
284061da546Spatrick     'format': eFormatVectorOfUInt8},
285061da546Spatrick    {'name': 'stmm2',
286061da546Spatrick     'set': 1,
287061da546Spatrick     'bitsize': 80,
288061da546Spatrick     'encoding': eEncodingVector,
289061da546Spatrick     'format': eFormatVectorOfUInt8},
290061da546Spatrick    {'name': 'stmm3',
291061da546Spatrick     'set': 1,
292061da546Spatrick     'bitsize': 80,
293061da546Spatrick     'encoding': eEncodingVector,
294061da546Spatrick     'format': eFormatVectorOfUInt8},
295061da546Spatrick    {'name': 'stmm4',
296061da546Spatrick     'set': 1,
297061da546Spatrick     'bitsize': 80,
298061da546Spatrick     'encoding': eEncodingVector,
299061da546Spatrick     'format': eFormatVectorOfUInt8},
300061da546Spatrick    {'name': 'stmm5',
301061da546Spatrick     'set': 1,
302061da546Spatrick     'bitsize': 80,
303061da546Spatrick     'encoding': eEncodingVector,
304061da546Spatrick     'format': eFormatVectorOfUInt8},
305061da546Spatrick    {'name': 'stmm6',
306061da546Spatrick     'set': 1,
307061da546Spatrick     'bitsize': 80,
308061da546Spatrick     'encoding': eEncodingVector,
309061da546Spatrick     'format': eFormatVectorOfUInt8},
310061da546Spatrick    {'name': 'stmm7',
311061da546Spatrick     'set': 1,
312061da546Spatrick     'bitsize': 80,
313061da546Spatrick     'encoding': eEncodingVector,
314061da546Spatrick     'format': eFormatVectorOfUInt8},
315061da546Spatrick    {'name': 'fctrl', 'set': 1, 'bitsize': 32,
316061da546Spatrick        'encoding': eEncodingUint, 'format': eFormatHex},
317061da546Spatrick    {'name': 'fstat', 'set': 1, 'bitsize': 32,
318061da546Spatrick        'encoding': eEncodingUint, 'format': eFormatHex},
319061da546Spatrick    {'name': 'ftag', 'set': 1, 'bitsize': 32,
320061da546Spatrick        'encoding': eEncodingUint, 'format': eFormatHex},
321061da546Spatrick    {'name': 'fiseg', 'set': 1, 'bitsize': 32,
322061da546Spatrick        'encoding': eEncodingUint, 'format': eFormatHex},
323061da546Spatrick    {'name': 'fioff', 'set': 1, 'bitsize': 32,
324061da546Spatrick        'encoding': eEncodingUint, 'format': eFormatHex},
325061da546Spatrick    {'name': 'foseg', 'set': 1, 'bitsize': 32,
326061da546Spatrick        'encoding': eEncodingUint, 'format': eFormatHex},
327061da546Spatrick    {'name': 'fooff', 'set': 1, 'bitsize': 32,
328061da546Spatrick        'encoding': eEncodingUint, 'format': eFormatHex},
329061da546Spatrick    {'name': 'fop', 'set': 1, 'bitsize': 32,
330061da546Spatrick        'encoding': eEncodingUint, 'format': eFormatHex},
331061da546Spatrick    {'name': 'xmm0',
332061da546Spatrick     'set': 1,
333061da546Spatrick     'bitsize': 128,
334061da546Spatrick     'encoding': eEncodingVector,
335061da546Spatrick     'format': eFormatVectorOfUInt8},
336061da546Spatrick    {'name': 'xmm1',
337061da546Spatrick     'set': 1,
338061da546Spatrick     'bitsize': 128,
339061da546Spatrick     'encoding': eEncodingVector,
340061da546Spatrick     'format': eFormatVectorOfUInt8},
341061da546Spatrick    {'name': 'xmm2',
342061da546Spatrick     'set': 1,
343061da546Spatrick     'bitsize': 128,
344061da546Spatrick     'encoding': eEncodingVector,
345061da546Spatrick     'format': eFormatVectorOfUInt8},
346061da546Spatrick    {'name': 'xmm3',
347061da546Spatrick     'set': 1,
348061da546Spatrick     'bitsize': 128,
349061da546Spatrick     'encoding': eEncodingVector,
350061da546Spatrick     'format': eFormatVectorOfUInt8},
351061da546Spatrick    {'name': 'xmm4',
352061da546Spatrick     'set': 1,
353061da546Spatrick     'bitsize': 128,
354061da546Spatrick     'encoding': eEncodingVector,
355061da546Spatrick     'format': eFormatVectorOfUInt8},
356061da546Spatrick    {'name': 'xmm5',
357061da546Spatrick     'set': 1,
358061da546Spatrick     'bitsize': 128,
359061da546Spatrick     'encoding': eEncodingVector,
360061da546Spatrick     'format': eFormatVectorOfUInt8},
361061da546Spatrick    {'name': 'xmm6',
362061da546Spatrick     'set': 1,
363061da546Spatrick     'bitsize': 128,
364061da546Spatrick     'encoding': eEncodingVector,
365061da546Spatrick     'format': eFormatVectorOfUInt8},
366061da546Spatrick    {'name': 'xmm7',
367061da546Spatrick     'set': 1,
368061da546Spatrick     'bitsize': 128,
369061da546Spatrick     'encoding': eEncodingVector,
370061da546Spatrick     'format': eFormatVectorOfUInt8},
371061da546Spatrick    {'name': 'xmm8',
372061da546Spatrick     'set': 1,
373061da546Spatrick     'bitsize': 128,
374061da546Spatrick     'encoding': eEncodingVector,
375061da546Spatrick     'format': eFormatVectorOfUInt8},
376061da546Spatrick    {'name': 'xmm9',
377061da546Spatrick     'set': 1,
378061da546Spatrick     'bitsize': 128,
379061da546Spatrick     'encoding': eEncodingVector,
380061da546Spatrick     'format': eFormatVectorOfUInt8},
381061da546Spatrick    {'name': 'xmm10',
382061da546Spatrick     'set': 1,
383061da546Spatrick     'bitsize': 128,
384061da546Spatrick     'encoding': eEncodingVector,
385061da546Spatrick     'format': eFormatVectorOfUInt8},
386061da546Spatrick    {'name': 'xmm11',
387061da546Spatrick     'set': 1,
388061da546Spatrick     'bitsize': 128,
389061da546Spatrick     'encoding': eEncodingVector,
390061da546Spatrick     'format': eFormatVectorOfUInt8},
391061da546Spatrick    {'name': 'xmm12',
392061da546Spatrick     'set': 1,
393061da546Spatrick     'bitsize': 128,
394061da546Spatrick     'encoding': eEncodingVector,
395061da546Spatrick     'format': eFormatVectorOfUInt8},
396061da546Spatrick    {'name': 'xmm13',
397061da546Spatrick     'set': 1,
398061da546Spatrick     'bitsize': 128,
399061da546Spatrick     'encoding': eEncodingVector,
400061da546Spatrick     'format': eFormatVectorOfUInt8},
401061da546Spatrick    {'name': 'xmm14',
402061da546Spatrick     'set': 1,
403061da546Spatrick     'bitsize': 128,
404061da546Spatrick     'encoding': eEncodingVector,
405061da546Spatrick     'format': eFormatVectorOfUInt8},
406061da546Spatrick    {'name': 'xmm15',
407061da546Spatrick     'set': 1,
408061da546Spatrick     'bitsize': 128,
409061da546Spatrick     'encoding': eEncodingVector,
410061da546Spatrick     'format': eFormatVectorOfUInt8},
411061da546Spatrick    {'name': 'mxcsr', 'set': 1, 'bitsize': 32,
412061da546Spatrick        'encoding': eEncodingUint, 'format': eFormatHex},
413061da546Spatrick    # Registers that are contained in or composed of one of more other
414061da546Spatrick    # registers
415061da546Spatrick    {'name': 'eax',
416061da546Spatrick     'set': 0,
417061da546Spatrick     'bitsize': 32,
418061da546Spatrick     'encoding': eEncodingUint,
419061da546Spatrick     'format': eFormatHex,
420061da546Spatrick     'slice': 'rax[31:0]'},
421061da546Spatrick    {'name': 'ebx',
422061da546Spatrick     'set': 0,
423061da546Spatrick     'bitsize': 32,
424061da546Spatrick     'encoding': eEncodingUint,
425061da546Spatrick     'format': eFormatHex,
426061da546Spatrick     'slice': 'rbx[31:0]'},
427061da546Spatrick    {'name': 'ecx',
428061da546Spatrick     'set': 0,
429061da546Spatrick     'bitsize': 32,
430061da546Spatrick     'encoding': eEncodingUint,
431061da546Spatrick     'format': eFormatHex,
432061da546Spatrick     'slice': 'rcx[31:0]'},
433061da546Spatrick    {'name': 'edx',
434061da546Spatrick     'set': 0,
435061da546Spatrick     'bitsize': 32,
436061da546Spatrick     'encoding': eEncodingUint,
437061da546Spatrick     'format': eFormatHex,
438061da546Spatrick     'slice': 'rdx[31:0]'},
439061da546Spatrick    {'name': 'edi',
440061da546Spatrick     'set': 0,
441061da546Spatrick     'bitsize': 32,
442061da546Spatrick     'encoding': eEncodingUint,
443061da546Spatrick     'format': eFormatHex,
444061da546Spatrick     'slice': 'rdi[31:0]'},
445061da546Spatrick    {'name': 'esi',
446061da546Spatrick     'set': 0,
447061da546Spatrick     'bitsize': 32,
448061da546Spatrick     'encoding': eEncodingUint,
449061da546Spatrick     'format': eFormatHex,
450061da546Spatrick     'slice': 'rsi[31:0]'},
451061da546Spatrick    {'name': 'ebp',
452061da546Spatrick     'set': 0,
453061da546Spatrick     'bitsize': 32,
454061da546Spatrick     'encoding': eEncodingUint,
455061da546Spatrick     'format': eFormatHex,
456061da546Spatrick     'slice': 'rbp[31:0]'},
457061da546Spatrick    {'name': 'esp',
458061da546Spatrick     'set': 0,
459061da546Spatrick     'bitsize': 32,
460061da546Spatrick     'encoding': eEncodingUint,
461061da546Spatrick     'format': eFormatHex,
462061da546Spatrick     'slice': 'rsp[31:0]'},
463061da546Spatrick    {'name': 'r8d',
464061da546Spatrick     'set': 0,
465061da546Spatrick     'bitsize': 32,
466061da546Spatrick     'encoding': eEncodingUint,
467061da546Spatrick     'format': eFormatHex,
468061da546Spatrick     'slice': 'r8[31:0]'},
469061da546Spatrick    {'name': 'r9d',
470061da546Spatrick     'set': 0,
471061da546Spatrick     'bitsize': 32,
472061da546Spatrick     'encoding': eEncodingUint,
473061da546Spatrick     'format': eFormatHex,
474061da546Spatrick     'slice': 'r9[31:0]'},
475061da546Spatrick    {'name': 'r10d',
476061da546Spatrick     'set': 0,
477061da546Spatrick     'bitsize': 32,
478061da546Spatrick     'encoding': eEncodingUint,
479061da546Spatrick     'format': eFormatHex,
480061da546Spatrick     'slice': 'r10[31:0]'},
481061da546Spatrick    {'name': 'r11d',
482061da546Spatrick     'set': 0,
483061da546Spatrick     'bitsize': 32,
484061da546Spatrick     'encoding': eEncodingUint,
485061da546Spatrick     'format': eFormatHex,
486061da546Spatrick     'slice': 'r11[31:0]'},
487061da546Spatrick    {'name': 'r12d',
488061da546Spatrick     'set': 0,
489061da546Spatrick     'bitsize': 32,
490061da546Spatrick     'encoding': eEncodingUint,
491061da546Spatrick     'format': eFormatHex,
492061da546Spatrick     'slice': 'r12[31:0]'},
493061da546Spatrick    {'name': 'r13d',
494061da546Spatrick     'set': 0,
495061da546Spatrick     'bitsize': 32,
496061da546Spatrick     'encoding': eEncodingUint,
497061da546Spatrick     'format': eFormatHex,
498061da546Spatrick     'slice': 'r13[31:0]'},
499061da546Spatrick    {'name': 'r14d',
500061da546Spatrick     'set': 0,
501061da546Spatrick     'bitsize': 32,
502061da546Spatrick     'encoding': eEncodingUint,
503061da546Spatrick     'format': eFormatHex,
504061da546Spatrick     'slice': 'r14[31:0]'},
505061da546Spatrick    {'name': 'r15d',
506061da546Spatrick     'set': 0,
507061da546Spatrick     'bitsize': 32,
508061da546Spatrick     'encoding': eEncodingUint,
509061da546Spatrick     'format': eFormatHex,
510061da546Spatrick     'slice': 'r15[31:0]'},
511061da546Spatrick
512061da546Spatrick    {'name': 'ax',
513061da546Spatrick     'set': 0,
514061da546Spatrick     'bitsize': 16,
515061da546Spatrick     'encoding': eEncodingUint,
516061da546Spatrick     'format': eFormatHex,
517061da546Spatrick     'slice': 'rax[15:0]'},
518061da546Spatrick    {'name': 'bx',
519061da546Spatrick     'set': 0,
520061da546Spatrick     'bitsize': 16,
521061da546Spatrick     'encoding': eEncodingUint,
522061da546Spatrick     'format': eFormatHex,
523061da546Spatrick     'slice': 'rbx[15:0]'},
524061da546Spatrick    {'name': 'cx',
525061da546Spatrick     'set': 0,
526061da546Spatrick     'bitsize': 16,
527061da546Spatrick     'encoding': eEncodingUint,
528061da546Spatrick     'format': eFormatHex,
529061da546Spatrick     'slice': 'rcx[15:0]'},
530061da546Spatrick    {'name': 'dx',
531061da546Spatrick     'set': 0,
532061da546Spatrick     'bitsize': 16,
533061da546Spatrick     'encoding': eEncodingUint,
534061da546Spatrick     'format': eFormatHex,
535061da546Spatrick     'slice': 'rdx[15:0]'},
536061da546Spatrick    {'name': 'di',
537061da546Spatrick     'set': 0,
538061da546Spatrick     'bitsize': 16,
539061da546Spatrick     'encoding': eEncodingUint,
540061da546Spatrick     'format': eFormatHex,
541061da546Spatrick     'slice': 'rdi[15:0]'},
542061da546Spatrick    {'name': 'si',
543061da546Spatrick     'set': 0,
544061da546Spatrick     'bitsize': 16,
545061da546Spatrick     'encoding': eEncodingUint,
546061da546Spatrick     'format': eFormatHex,
547061da546Spatrick     'slice': 'rsi[15:0]'},
548061da546Spatrick    {'name': 'bp',
549061da546Spatrick     'set': 0,
550061da546Spatrick     'bitsize': 16,
551061da546Spatrick     'encoding': eEncodingUint,
552061da546Spatrick     'format': eFormatHex,
553061da546Spatrick     'slice': 'rbp[15:0]'},
554061da546Spatrick    {'name': 'sp',
555061da546Spatrick     'set': 0,
556061da546Spatrick     'bitsize': 16,
557061da546Spatrick     'encoding': eEncodingUint,
558061da546Spatrick     'format': eFormatHex,
559061da546Spatrick     'slice': 'rsp[15:0]'},
560061da546Spatrick    {'name': 'r8w',
561061da546Spatrick     'set': 0,
562061da546Spatrick     'bitsize': 16,
563061da546Spatrick     'encoding': eEncodingUint,
564061da546Spatrick     'format': eFormatHex,
565061da546Spatrick     'slice': 'r8[15:0]'},
566061da546Spatrick    {'name': 'r9w',
567061da546Spatrick     'set': 0,
568061da546Spatrick     'bitsize': 16,
569061da546Spatrick     'encoding': eEncodingUint,
570061da546Spatrick     'format': eFormatHex,
571061da546Spatrick     'slice': 'r9[15:0]'},
572061da546Spatrick    {'name': 'r10w',
573061da546Spatrick     'set': 0,
574061da546Spatrick     'bitsize': 16,
575061da546Spatrick     'encoding': eEncodingUint,
576061da546Spatrick     'format': eFormatHex,
577061da546Spatrick     'slice': 'r10[15:0]'},
578061da546Spatrick    {'name': 'r11w',
579061da546Spatrick     'set': 0,
580061da546Spatrick     'bitsize': 16,
581061da546Spatrick     'encoding': eEncodingUint,
582061da546Spatrick     'format': eFormatHex,
583061da546Spatrick     'slice': 'r11[15:0]'},
584061da546Spatrick    {'name': 'r12w',
585061da546Spatrick     'set': 0,
586061da546Spatrick     'bitsize': 16,
587061da546Spatrick     'encoding': eEncodingUint,
588061da546Spatrick     'format': eFormatHex,
589061da546Spatrick     'slice': 'r12[15:0]'},
590061da546Spatrick    {'name': 'r13w',
591061da546Spatrick     'set': 0,
592061da546Spatrick     'bitsize': 16,
593061da546Spatrick     'encoding': eEncodingUint,
594061da546Spatrick     'format': eFormatHex,
595061da546Spatrick     'slice': 'r13[15:0]'},
596061da546Spatrick    {'name': 'r14w',
597061da546Spatrick     'set': 0,
598061da546Spatrick     'bitsize': 16,
599061da546Spatrick     'encoding': eEncodingUint,
600061da546Spatrick     'format': eFormatHex,
601061da546Spatrick     'slice': 'r14[15:0]'},
602061da546Spatrick    {'name': 'r15w',
603061da546Spatrick     'set': 0,
604061da546Spatrick     'bitsize': 16,
605061da546Spatrick     'encoding': eEncodingUint,
606061da546Spatrick     'format': eFormatHex,
607061da546Spatrick     'slice': 'r15[15:0]'},
608061da546Spatrick
609061da546Spatrick    {'name': 'ah',
610061da546Spatrick     'set': 0,
611061da546Spatrick     'bitsize': 8,
612061da546Spatrick     'encoding': eEncodingUint,
613061da546Spatrick     'format': eFormatHex,
614061da546Spatrick     'slice': 'rax[15:8]'},
615061da546Spatrick    {'name': 'bh',
616061da546Spatrick     'set': 0,
617061da546Spatrick     'bitsize': 8,
618061da546Spatrick     'encoding': eEncodingUint,
619061da546Spatrick     'format': eFormatHex,
620061da546Spatrick     'slice': 'rbx[15:8]'},
621061da546Spatrick    {'name': 'ch',
622061da546Spatrick     'set': 0,
623061da546Spatrick     'bitsize': 8,
624061da546Spatrick     'encoding': eEncodingUint,
625061da546Spatrick     'format': eFormatHex,
626061da546Spatrick     'slice': 'rcx[15:8]'},
627061da546Spatrick    {'name': 'dh',
628061da546Spatrick     'set': 0,
629061da546Spatrick     'bitsize': 8,
630061da546Spatrick     'encoding': eEncodingUint,
631061da546Spatrick     'format': eFormatHex,
632061da546Spatrick     'slice': 'rdx[15:8]'},
633061da546Spatrick
634061da546Spatrick    {'name': 'al',
635061da546Spatrick     'set': 0,
636061da546Spatrick     'bitsize': 8,
637061da546Spatrick     'encoding': eEncodingUint,
638061da546Spatrick     'format': eFormatHex,
639061da546Spatrick     'slice': 'rax[7:0]'},
640061da546Spatrick    {'name': 'bl',
641061da546Spatrick     'set': 0,
642061da546Spatrick     'bitsize': 8,
643061da546Spatrick     'encoding': eEncodingUint,
644061da546Spatrick     'format': eFormatHex,
645061da546Spatrick     'slice': 'rbx[7:0]'},
646061da546Spatrick    {'name': 'cl',
647061da546Spatrick     'set': 0,
648061da546Spatrick     'bitsize': 8,
649061da546Spatrick     'encoding': eEncodingUint,
650061da546Spatrick     'format': eFormatHex,
651061da546Spatrick     'slice': 'rcx[7:0]'},
652061da546Spatrick    {'name': 'dl',
653061da546Spatrick     'set': 0,
654061da546Spatrick     'bitsize': 8,
655061da546Spatrick     'encoding': eEncodingUint,
656061da546Spatrick     'format': eFormatHex,
657061da546Spatrick     'slice': 'rdx[7:0]'},
658061da546Spatrick    {'name': 'dil',
659061da546Spatrick     'set': 0,
660061da546Spatrick     'bitsize': 8,
661061da546Spatrick     'encoding': eEncodingUint,
662061da546Spatrick     'format': eFormatHex,
663061da546Spatrick     'slice': 'rdi[7:0]'},
664061da546Spatrick    {'name': 'sil',
665061da546Spatrick     'set': 0,
666061da546Spatrick     'bitsize': 8,
667061da546Spatrick     'encoding': eEncodingUint,
668061da546Spatrick     'format': eFormatHex,
669061da546Spatrick     'slice': 'rsi[7:0]'},
670061da546Spatrick    {'name': 'bpl',
671061da546Spatrick     'set': 0,
672061da546Spatrick     'bitsize': 8,
673061da546Spatrick     'encoding': eEncodingUint,
674061da546Spatrick     'format': eFormatHex,
675061da546Spatrick     'slice': 'rbp[7:0]'},
676061da546Spatrick    {'name': 'spl',
677061da546Spatrick     'set': 0,
678061da546Spatrick     'bitsize': 8,
679061da546Spatrick     'encoding': eEncodingUint,
680061da546Spatrick     'format': eFormatHex,
681061da546Spatrick     'slice': 'rsp[7:0]'},
682061da546Spatrick    {'name': 'r8l',
683061da546Spatrick     'set': 0,
684061da546Spatrick     'bitsize': 8,
685061da546Spatrick     'encoding': eEncodingUint,
686061da546Spatrick     'format': eFormatHex,
687061da546Spatrick     'slice': 'r8[7:0]'},
688061da546Spatrick    {'name': 'r9l',
689061da546Spatrick     'set': 0,
690061da546Spatrick     'bitsize': 8,
691061da546Spatrick     'encoding': eEncodingUint,
692061da546Spatrick     'format': eFormatHex,
693061da546Spatrick     'slice': 'r9[7:0]'},
694061da546Spatrick    {'name': 'r10l',
695061da546Spatrick     'set': 0,
696061da546Spatrick     'bitsize': 8,
697061da546Spatrick     'encoding': eEncodingUint,
698061da546Spatrick     'format': eFormatHex,
699061da546Spatrick     'slice': 'r10[7:0]'},
700061da546Spatrick    {'name': 'r11l',
701061da546Spatrick     'set': 0,
702061da546Spatrick     'bitsize': 8,
703061da546Spatrick     'encoding': eEncodingUint,
704061da546Spatrick     'format': eFormatHex,
705061da546Spatrick     'slice': 'r11[7:0]'},
706061da546Spatrick    {'name': 'r12l',
707061da546Spatrick     'set': 0,
708061da546Spatrick     'bitsize': 8,
709061da546Spatrick     'encoding': eEncodingUint,
710061da546Spatrick     'format': eFormatHex,
711061da546Spatrick     'slice': 'r12[7:0]'},
712061da546Spatrick    {'name': 'r13l',
713061da546Spatrick     'set': 0,
714061da546Spatrick     'bitsize': 8,
715061da546Spatrick     'encoding': eEncodingUint,
716061da546Spatrick     'format': eFormatHex,
717061da546Spatrick     'slice': 'r13[7:0]'},
718061da546Spatrick    {'name': 'r14l',
719061da546Spatrick     'set': 0,
720061da546Spatrick     'bitsize': 8,
721061da546Spatrick     'encoding': eEncodingUint,
722061da546Spatrick     'format': eFormatHex,
723061da546Spatrick     'slice': 'r14[7:0]'},
724061da546Spatrick    {'name': 'r15l',
725061da546Spatrick     'set': 0,
726061da546Spatrick     'bitsize': 8,
727061da546Spatrick     'encoding': eEncodingUint,
728061da546Spatrick     'format': eFormatHex,
729061da546Spatrick     'slice': 'r15[7:0]'},
730061da546Spatrick]
731061da546Spatrick
732061da546Spatrickg_target_definition = None
733061da546Spatrick
734061da546Spatrick
735061da546Spatrickdef get_target_definition():
736061da546Spatrick    global g_target_definition
737061da546Spatrick    if g_target_definition is None:
738061da546Spatrick        g_target_definition = {}
739061da546Spatrick        offset = 0
740061da546Spatrick        for reg_info in x86_64_register_infos:
741061da546Spatrick            reg_name = reg_info['name']
742061da546Spatrick
743061da546Spatrick            # Only fill in the offset if there is no 'slice' in the register
744061da546Spatrick            # info
745061da546Spatrick            if 'slice' not in reg_info and 'composite' not in reg_info:
746061da546Spatrick                reg_info['offset'] = offset
747061da546Spatrick                offset += reg_info['bitsize'] // 8
748061da546Spatrick
749061da546Spatrick            # Set the GCC/DWARF register number for this register if it has one
750061da546Spatrick            reg_num = get_reg_num(name_to_gcc_dwarf_regnum, reg_name)
751061da546Spatrick            if reg_num != LLDB_INVALID_REGNUM:
752061da546Spatrick                reg_info['gcc'] = reg_num
753061da546Spatrick                reg_info['dwarf'] = reg_num
754061da546Spatrick
755061da546Spatrick            # Set the generic register number for this register if it has one
756061da546Spatrick            reg_num = get_reg_num(name_to_generic_regnum, reg_name)
757061da546Spatrick            if reg_num != LLDB_INVALID_REGNUM:
758061da546Spatrick                reg_info['generic'] = reg_num
759061da546Spatrick
760061da546Spatrick            # Set the GDB register number for this register if it has one
761061da546Spatrick            reg_num = get_reg_num(name_to_gdb_regnum, reg_name)
762061da546Spatrick            if reg_num != LLDB_INVALID_REGNUM:
763061da546Spatrick                reg_info['gdb'] = reg_num
764061da546Spatrick
765061da546Spatrick        g_target_definition['sets'] = [
766061da546Spatrick            'General Purpose Registers',
767061da546Spatrick            'Floating Point Registers']
768061da546Spatrick        g_target_definition['registers'] = x86_64_register_infos
769061da546Spatrick        g_target_definition[
770061da546Spatrick            'host-info'] = {'triple': 'x86_64-apple-macosx', 'endian': eByteOrderLittle}
771061da546Spatrick        g_target_definition['g-packet-size'] = offset
772061da546Spatrick    return g_target_definition
773061da546Spatrick
774061da546Spatrick
775061da546Spatrickdef get_dynamic_setting(target, setting_name):
776061da546Spatrick    if setting_name == 'gdb-server-target-definition':
777061da546Spatrick        return get_target_definition()
778