xref: /openbsd-src/gnu/llvm/lldb/examples/python/x86_64_qemu_target_definition.py (revision be691f3bb6417f04a68938fadbcaee2d5795e764)
1*be691f3bSpatrick#!/usr/bin/env python
2061da546Spatrick#===-- x86_64_qemu_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 remote stub
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 user mode qemu on linux.
28061da546Spatrick# The only difference with the Linux file is the absense of orig_rax register.
29061da546Spatrick#
30061da546Spatrick# USAGE
31061da546Spatrick#
32061da546Spatrick# (lldb) settings set plugin.process.gdb-remote.target-definition-file /path/to/x86_64_qemu_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 stub.
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
196061da546Spatrickx86_64_register_infos = [
197061da546Spatrick    {'name': 'rax',
198061da546Spatrick     'set': 0,
199061da546Spatrick     'bitsize': 64,
200061da546Spatrick     'encoding': eEncodingUint,
201061da546Spatrick     'format': eFormatAddressInfo},
202061da546Spatrick    {'name': 'rbx',
203061da546Spatrick     'set': 0,
204061da546Spatrick     'bitsize': 64,
205061da546Spatrick     'encoding': eEncodingUint,
206061da546Spatrick     'format': eFormatAddressInfo},
207061da546Spatrick    {'name': 'rcx', 'set': 0, 'bitsize': 64, 'encoding': eEncodingUint,
208061da546Spatrick        'format': eFormatAddressInfo, 'alt-name': 'arg4'},
209061da546Spatrick    {'name': 'rdx', 'set': 0, 'bitsize': 64, 'encoding': eEncodingUint,
210061da546Spatrick        'format': eFormatAddressInfo, 'alt-name': 'arg3'},
211061da546Spatrick    {'name': 'rsi', 'set': 0, 'bitsize': 64, 'encoding': eEncodingUint,
212061da546Spatrick        'format': eFormatAddressInfo, 'alt-name': 'arg2'},
213061da546Spatrick    {'name': 'rdi', 'set': 0, 'bitsize': 64, 'encoding': eEncodingUint,
214061da546Spatrick        'format': eFormatAddressInfo, 'alt-name': 'arg1'},
215061da546Spatrick    {'name': 'rbp', 'set': 0, 'bitsize': 64, 'encoding': eEncodingUint,
216061da546Spatrick        'format': eFormatAddressInfo, 'alt-name': 'fp'},
217061da546Spatrick    {'name': 'rsp', 'set': 0, 'bitsize': 64, 'encoding': eEncodingUint,
218061da546Spatrick        'format': eFormatAddressInfo, 'alt-name': 'sp'},
219061da546Spatrick    {'name': 'r8', 'set': 0, 'bitsize': 64, 'encoding': eEncodingUint,
220061da546Spatrick        'format': eFormatAddressInfo, 'alt-name': 'arg5'},
221061da546Spatrick    {'name': 'r9', 'set': 0, 'bitsize': 64, 'encoding': eEncodingUint,
222061da546Spatrick        'format': eFormatAddressInfo, 'alt-name': 'arg6'},
223061da546Spatrick    {'name': 'r10',
224061da546Spatrick     'set': 0,
225061da546Spatrick     'bitsize': 64,
226061da546Spatrick     'encoding': eEncodingUint,
227061da546Spatrick     'format': eFormatAddressInfo},
228061da546Spatrick    {'name': 'r11',
229061da546Spatrick     'set': 0,
230061da546Spatrick     'bitsize': 64,
231061da546Spatrick     'encoding': eEncodingUint,
232061da546Spatrick     'format': eFormatAddressInfo},
233061da546Spatrick    {'name': 'r12',
234061da546Spatrick     'set': 0,
235061da546Spatrick     'bitsize': 64,
236061da546Spatrick     'encoding': eEncodingUint,
237061da546Spatrick     'format': eFormatAddressInfo},
238061da546Spatrick    {'name': 'r13',
239061da546Spatrick     'set': 0,
240061da546Spatrick     'bitsize': 64,
241061da546Spatrick     'encoding': eEncodingUint,
242061da546Spatrick     'format': eFormatAddressInfo},
243061da546Spatrick    {'name': 'r14',
244061da546Spatrick     'set': 0,
245061da546Spatrick     'bitsize': 64,
246061da546Spatrick     'encoding': eEncodingUint,
247061da546Spatrick     'format': eFormatAddressInfo},
248061da546Spatrick    {'name': 'r15',
249061da546Spatrick     'set': 0,
250061da546Spatrick     'bitsize': 64,
251061da546Spatrick     'encoding': eEncodingUint,
252061da546Spatrick     'format': eFormatAddressInfo},
253061da546Spatrick    {'name': 'rip', 'set': 0, 'bitsize': 64, 'encoding': eEncodingUint,
254061da546Spatrick        'format': eFormatAddressInfo, 'alt-name': 'pc'},
255061da546Spatrick    {'name': 'rflags', 'set': 0, 'bitsize': 32,
256061da546Spatrick        'encoding': eEncodingUint, 'format': eFormatHex},
257061da546Spatrick    {'name': 'cs', 'set': 0, 'bitsize': 32,
258061da546Spatrick        'encoding': eEncodingUint, 'format': eFormatHex},
259061da546Spatrick    {'name': 'ss', 'set': 0, 'bitsize': 32,
260061da546Spatrick        'encoding': eEncodingUint, 'format': eFormatHex},
261061da546Spatrick    {'name': 'ds', 'set': 0, 'bitsize': 32,
262061da546Spatrick        'encoding': eEncodingUint, 'format': eFormatHex},
263061da546Spatrick    {'name': 'es', 'set': 0, 'bitsize': 32,
264061da546Spatrick        'encoding': eEncodingUint, 'format': eFormatHex},
265061da546Spatrick    {'name': 'fs', 'set': 0, 'bitsize': 32,
266061da546Spatrick        'encoding': eEncodingUint, 'format': eFormatHex},
267061da546Spatrick    {'name': 'gs', 'set': 0, 'bitsize': 32,
268061da546Spatrick        'encoding': eEncodingUint, 'format': eFormatHex},
269061da546Spatrick    {'name': 'stmm0',
270061da546Spatrick     'set': 1,
271061da546Spatrick     'bitsize': 80,
272061da546Spatrick     'encoding': eEncodingVector,
273061da546Spatrick     'format': eFormatVectorOfUInt8},
274061da546Spatrick    {'name': 'stmm1',
275061da546Spatrick     'set': 1,
276061da546Spatrick     'bitsize': 80,
277061da546Spatrick     'encoding': eEncodingVector,
278061da546Spatrick     'format': eFormatVectorOfUInt8},
279061da546Spatrick    {'name': 'stmm2',
280061da546Spatrick     'set': 1,
281061da546Spatrick     'bitsize': 80,
282061da546Spatrick     'encoding': eEncodingVector,
283061da546Spatrick     'format': eFormatVectorOfUInt8},
284061da546Spatrick    {'name': 'stmm3',
285061da546Spatrick     'set': 1,
286061da546Spatrick     'bitsize': 80,
287061da546Spatrick     'encoding': eEncodingVector,
288061da546Spatrick     'format': eFormatVectorOfUInt8},
289061da546Spatrick    {'name': 'stmm4',
290061da546Spatrick     'set': 1,
291061da546Spatrick     'bitsize': 80,
292061da546Spatrick     'encoding': eEncodingVector,
293061da546Spatrick     'format': eFormatVectorOfUInt8},
294061da546Spatrick    {'name': 'stmm5',
295061da546Spatrick     'set': 1,
296061da546Spatrick     'bitsize': 80,
297061da546Spatrick     'encoding': eEncodingVector,
298061da546Spatrick     'format': eFormatVectorOfUInt8},
299061da546Spatrick    {'name': 'stmm6',
300061da546Spatrick     'set': 1,
301061da546Spatrick     'bitsize': 80,
302061da546Spatrick     'encoding': eEncodingVector,
303061da546Spatrick     'format': eFormatVectorOfUInt8},
304061da546Spatrick    {'name': 'stmm7',
305061da546Spatrick     'set': 1,
306061da546Spatrick     'bitsize': 80,
307061da546Spatrick     'encoding': eEncodingVector,
308061da546Spatrick     'format': eFormatVectorOfUInt8},
309061da546Spatrick    {'name': 'fctrl', 'set': 1, 'bitsize': 32,
310061da546Spatrick        'encoding': eEncodingUint, 'format': eFormatHex},
311061da546Spatrick    {'name': 'fstat', 'set': 1, 'bitsize': 32,
312061da546Spatrick        'encoding': eEncodingUint, 'format': eFormatHex},
313061da546Spatrick    {'name': 'ftag', 'set': 1, 'bitsize': 32,
314061da546Spatrick        'encoding': eEncodingUint, 'format': eFormatHex},
315061da546Spatrick    {'name': 'fiseg', 'set': 1, 'bitsize': 32,
316061da546Spatrick        'encoding': eEncodingUint, 'format': eFormatHex},
317061da546Spatrick    {'name': 'fioff', 'set': 1, 'bitsize': 32,
318061da546Spatrick        'encoding': eEncodingUint, 'format': eFormatHex},
319061da546Spatrick    {'name': 'foseg', 'set': 1, 'bitsize': 32,
320061da546Spatrick        'encoding': eEncodingUint, 'format': eFormatHex},
321061da546Spatrick    {'name': 'fooff', 'set': 1, 'bitsize': 32,
322061da546Spatrick        'encoding': eEncodingUint, 'format': eFormatHex},
323061da546Spatrick    {'name': 'fop', 'set': 1, 'bitsize': 32,
324061da546Spatrick        'encoding': eEncodingUint, 'format': eFormatHex},
325061da546Spatrick    {'name': 'xmm0',
326061da546Spatrick     'set': 1,
327061da546Spatrick     'bitsize': 128,
328061da546Spatrick     'encoding': eEncodingVector,
329061da546Spatrick     'format': eFormatVectorOfUInt8},
330061da546Spatrick    {'name': 'xmm1',
331061da546Spatrick     'set': 1,
332061da546Spatrick     'bitsize': 128,
333061da546Spatrick     'encoding': eEncodingVector,
334061da546Spatrick     'format': eFormatVectorOfUInt8},
335061da546Spatrick    {'name': 'xmm2',
336061da546Spatrick     'set': 1,
337061da546Spatrick     'bitsize': 128,
338061da546Spatrick     'encoding': eEncodingVector,
339061da546Spatrick     'format': eFormatVectorOfUInt8},
340061da546Spatrick    {'name': 'xmm3',
341061da546Spatrick     'set': 1,
342061da546Spatrick     'bitsize': 128,
343061da546Spatrick     'encoding': eEncodingVector,
344061da546Spatrick     'format': eFormatVectorOfUInt8},
345061da546Spatrick    {'name': 'xmm4',
346061da546Spatrick     'set': 1,
347061da546Spatrick     'bitsize': 128,
348061da546Spatrick     'encoding': eEncodingVector,
349061da546Spatrick     'format': eFormatVectorOfUInt8},
350061da546Spatrick    {'name': 'xmm5',
351061da546Spatrick     'set': 1,
352061da546Spatrick     'bitsize': 128,
353061da546Spatrick     'encoding': eEncodingVector,
354061da546Spatrick     'format': eFormatVectorOfUInt8},
355061da546Spatrick    {'name': 'xmm6',
356061da546Spatrick     'set': 1,
357061da546Spatrick     'bitsize': 128,
358061da546Spatrick     'encoding': eEncodingVector,
359061da546Spatrick     'format': eFormatVectorOfUInt8},
360061da546Spatrick    {'name': 'xmm7',
361061da546Spatrick     'set': 1,
362061da546Spatrick     'bitsize': 128,
363061da546Spatrick     'encoding': eEncodingVector,
364061da546Spatrick     'format': eFormatVectorOfUInt8},
365061da546Spatrick    {'name': 'xmm8',
366061da546Spatrick     'set': 1,
367061da546Spatrick     'bitsize': 128,
368061da546Spatrick     'encoding': eEncodingVector,
369061da546Spatrick     'format': eFormatVectorOfUInt8},
370061da546Spatrick    {'name': 'xmm9',
371061da546Spatrick     'set': 1,
372061da546Spatrick     'bitsize': 128,
373061da546Spatrick     'encoding': eEncodingVector,
374061da546Spatrick     'format': eFormatVectorOfUInt8},
375061da546Spatrick    {'name': 'xmm10',
376061da546Spatrick     'set': 1,
377061da546Spatrick     'bitsize': 128,
378061da546Spatrick     'encoding': eEncodingVector,
379061da546Spatrick     'format': eFormatVectorOfUInt8},
380061da546Spatrick    {'name': 'xmm11',
381061da546Spatrick     'set': 1,
382061da546Spatrick     'bitsize': 128,
383061da546Spatrick     'encoding': eEncodingVector,
384061da546Spatrick     'format': eFormatVectorOfUInt8},
385061da546Spatrick    {'name': 'xmm12',
386061da546Spatrick     'set': 1,
387061da546Spatrick     'bitsize': 128,
388061da546Spatrick     'encoding': eEncodingVector,
389061da546Spatrick     'format': eFormatVectorOfUInt8},
390061da546Spatrick    {'name': 'xmm13',
391061da546Spatrick     'set': 1,
392061da546Spatrick     'bitsize': 128,
393061da546Spatrick     'encoding': eEncodingVector,
394061da546Spatrick     'format': eFormatVectorOfUInt8},
395061da546Spatrick    {'name': 'xmm14',
396061da546Spatrick     'set': 1,
397061da546Spatrick     'bitsize': 128,
398061da546Spatrick     'encoding': eEncodingVector,
399061da546Spatrick     'format': eFormatVectorOfUInt8},
400061da546Spatrick    {'name': 'xmm15',
401061da546Spatrick     'set': 1,
402061da546Spatrick     'bitsize': 128,
403061da546Spatrick     'encoding': eEncodingVector,
404061da546Spatrick     'format': eFormatVectorOfUInt8},
405061da546Spatrick    {'name': 'mxcsr', 'set': 1, 'bitsize': 32,
406061da546Spatrick        'encoding': eEncodingUint, 'format': eFormatHex},
407061da546Spatrick    # Registers that are contained in or composed of one of more other
408061da546Spatrick    # registers
409061da546Spatrick    {'name': 'eax',
410061da546Spatrick     'set': 0,
411061da546Spatrick     'bitsize': 32,
412061da546Spatrick     'encoding': eEncodingUint,
413061da546Spatrick     'format': eFormatHex,
414061da546Spatrick     'slice': 'rax[31:0]'},
415061da546Spatrick    {'name': 'ebx',
416061da546Spatrick     'set': 0,
417061da546Spatrick     'bitsize': 32,
418061da546Spatrick     'encoding': eEncodingUint,
419061da546Spatrick     'format': eFormatHex,
420061da546Spatrick     'slice': 'rbx[31:0]'},
421061da546Spatrick    {'name': 'ecx',
422061da546Spatrick     'set': 0,
423061da546Spatrick     'bitsize': 32,
424061da546Spatrick     'encoding': eEncodingUint,
425061da546Spatrick     'format': eFormatHex,
426061da546Spatrick     'slice': 'rcx[31:0]'},
427061da546Spatrick    {'name': 'edx',
428061da546Spatrick     'set': 0,
429061da546Spatrick     'bitsize': 32,
430061da546Spatrick     'encoding': eEncodingUint,
431061da546Spatrick     'format': eFormatHex,
432061da546Spatrick     'slice': 'rdx[31:0]'},
433061da546Spatrick    {'name': 'edi',
434061da546Spatrick     'set': 0,
435061da546Spatrick     'bitsize': 32,
436061da546Spatrick     'encoding': eEncodingUint,
437061da546Spatrick     'format': eFormatHex,
438061da546Spatrick     'slice': 'rdi[31:0]'},
439061da546Spatrick    {'name': 'esi',
440061da546Spatrick     'set': 0,
441061da546Spatrick     'bitsize': 32,
442061da546Spatrick     'encoding': eEncodingUint,
443061da546Spatrick     'format': eFormatHex,
444061da546Spatrick     'slice': 'rsi[31:0]'},
445061da546Spatrick    {'name': 'ebp',
446061da546Spatrick     'set': 0,
447061da546Spatrick     'bitsize': 32,
448061da546Spatrick     'encoding': eEncodingUint,
449061da546Spatrick     'format': eFormatHex,
450061da546Spatrick     'slice': 'rbp[31:0]'},
451061da546Spatrick    {'name': 'esp',
452061da546Spatrick     'set': 0,
453061da546Spatrick     'bitsize': 32,
454061da546Spatrick     'encoding': eEncodingUint,
455061da546Spatrick     'format': eFormatHex,
456061da546Spatrick     'slice': 'rsp[31:0]'},
457061da546Spatrick    {'name': 'r8d',
458061da546Spatrick     'set': 0,
459061da546Spatrick     'bitsize': 32,
460061da546Spatrick     'encoding': eEncodingUint,
461061da546Spatrick     'format': eFormatHex,
462061da546Spatrick     'slice': 'r8[31:0]'},
463061da546Spatrick    {'name': 'r9d',
464061da546Spatrick     'set': 0,
465061da546Spatrick     'bitsize': 32,
466061da546Spatrick     'encoding': eEncodingUint,
467061da546Spatrick     'format': eFormatHex,
468061da546Spatrick     'slice': 'r9[31:0]'},
469061da546Spatrick    {'name': 'r10d',
470061da546Spatrick     'set': 0,
471061da546Spatrick     'bitsize': 32,
472061da546Spatrick     'encoding': eEncodingUint,
473061da546Spatrick     'format': eFormatHex,
474061da546Spatrick     'slice': 'r10[31:0]'},
475061da546Spatrick    {'name': 'r11d',
476061da546Spatrick     'set': 0,
477061da546Spatrick     'bitsize': 32,
478061da546Spatrick     'encoding': eEncodingUint,
479061da546Spatrick     'format': eFormatHex,
480061da546Spatrick     'slice': 'r11[31:0]'},
481061da546Spatrick    {'name': 'r12d',
482061da546Spatrick     'set': 0,
483061da546Spatrick     'bitsize': 32,
484061da546Spatrick     'encoding': eEncodingUint,
485061da546Spatrick     'format': eFormatHex,
486061da546Spatrick     'slice': 'r12[31:0]'},
487061da546Spatrick    {'name': 'r13d',
488061da546Spatrick     'set': 0,
489061da546Spatrick     'bitsize': 32,
490061da546Spatrick     'encoding': eEncodingUint,
491061da546Spatrick     'format': eFormatHex,
492061da546Spatrick     'slice': 'r13[31:0]'},
493061da546Spatrick    {'name': 'r14d',
494061da546Spatrick     'set': 0,
495061da546Spatrick     'bitsize': 32,
496061da546Spatrick     'encoding': eEncodingUint,
497061da546Spatrick     'format': eFormatHex,
498061da546Spatrick     'slice': 'r14[31:0]'},
499061da546Spatrick    {'name': 'r15d',
500061da546Spatrick     'set': 0,
501061da546Spatrick     'bitsize': 32,
502061da546Spatrick     'encoding': eEncodingUint,
503061da546Spatrick     'format': eFormatHex,
504061da546Spatrick     'slice': 'r15[31:0]'},
505061da546Spatrick
506061da546Spatrick    {'name': 'ax',
507061da546Spatrick     'set': 0,
508061da546Spatrick     'bitsize': 16,
509061da546Spatrick     'encoding': eEncodingUint,
510061da546Spatrick     'format': eFormatHex,
511061da546Spatrick     'slice': 'rax[15:0]'},
512061da546Spatrick    {'name': 'bx',
513061da546Spatrick     'set': 0,
514061da546Spatrick     'bitsize': 16,
515061da546Spatrick     'encoding': eEncodingUint,
516061da546Spatrick     'format': eFormatHex,
517061da546Spatrick     'slice': 'rbx[15:0]'},
518061da546Spatrick    {'name': 'cx',
519061da546Spatrick     'set': 0,
520061da546Spatrick     'bitsize': 16,
521061da546Spatrick     'encoding': eEncodingUint,
522061da546Spatrick     'format': eFormatHex,
523061da546Spatrick     'slice': 'rcx[15:0]'},
524061da546Spatrick    {'name': 'dx',
525061da546Spatrick     'set': 0,
526061da546Spatrick     'bitsize': 16,
527061da546Spatrick     'encoding': eEncodingUint,
528061da546Spatrick     'format': eFormatHex,
529061da546Spatrick     'slice': 'rdx[15:0]'},
530061da546Spatrick    {'name': 'di',
531061da546Spatrick     'set': 0,
532061da546Spatrick     'bitsize': 16,
533061da546Spatrick     'encoding': eEncodingUint,
534061da546Spatrick     'format': eFormatHex,
535061da546Spatrick     'slice': 'rdi[15:0]'},
536061da546Spatrick    {'name': 'si',
537061da546Spatrick     'set': 0,
538061da546Spatrick     'bitsize': 16,
539061da546Spatrick     'encoding': eEncodingUint,
540061da546Spatrick     'format': eFormatHex,
541061da546Spatrick     'slice': 'rsi[15:0]'},
542061da546Spatrick    {'name': 'bp',
543061da546Spatrick     'set': 0,
544061da546Spatrick     'bitsize': 16,
545061da546Spatrick     'encoding': eEncodingUint,
546061da546Spatrick     'format': eFormatHex,
547061da546Spatrick     'slice': 'rbp[15:0]'},
548061da546Spatrick    {'name': 'sp',
549061da546Spatrick     'set': 0,
550061da546Spatrick     'bitsize': 16,
551061da546Spatrick     'encoding': eEncodingUint,
552061da546Spatrick     'format': eFormatHex,
553061da546Spatrick     'slice': 'rsp[15:0]'},
554061da546Spatrick    {'name': 'r8w',
555061da546Spatrick     'set': 0,
556061da546Spatrick     'bitsize': 16,
557061da546Spatrick     'encoding': eEncodingUint,
558061da546Spatrick     'format': eFormatHex,
559061da546Spatrick     'slice': 'r8[15:0]'},
560061da546Spatrick    {'name': 'r9w',
561061da546Spatrick     'set': 0,
562061da546Spatrick     'bitsize': 16,
563061da546Spatrick     'encoding': eEncodingUint,
564061da546Spatrick     'format': eFormatHex,
565061da546Spatrick     'slice': 'r9[15:0]'},
566061da546Spatrick    {'name': 'r10w',
567061da546Spatrick     'set': 0,
568061da546Spatrick     'bitsize': 16,
569061da546Spatrick     'encoding': eEncodingUint,
570061da546Spatrick     'format': eFormatHex,
571061da546Spatrick     'slice': 'r10[15:0]'},
572061da546Spatrick    {'name': 'r11w',
573061da546Spatrick     'set': 0,
574061da546Spatrick     'bitsize': 16,
575061da546Spatrick     'encoding': eEncodingUint,
576061da546Spatrick     'format': eFormatHex,
577061da546Spatrick     'slice': 'r11[15:0]'},
578061da546Spatrick    {'name': 'r12w',
579061da546Spatrick     'set': 0,
580061da546Spatrick     'bitsize': 16,
581061da546Spatrick     'encoding': eEncodingUint,
582061da546Spatrick     'format': eFormatHex,
583061da546Spatrick     'slice': 'r12[15:0]'},
584061da546Spatrick    {'name': 'r13w',
585061da546Spatrick     'set': 0,
586061da546Spatrick     'bitsize': 16,
587061da546Spatrick     'encoding': eEncodingUint,
588061da546Spatrick     'format': eFormatHex,
589061da546Spatrick     'slice': 'r13[15:0]'},
590061da546Spatrick    {'name': 'r14w',
591061da546Spatrick     'set': 0,
592061da546Spatrick     'bitsize': 16,
593061da546Spatrick     'encoding': eEncodingUint,
594061da546Spatrick     'format': eFormatHex,
595061da546Spatrick     'slice': 'r14[15:0]'},
596061da546Spatrick    {'name': 'r15w',
597061da546Spatrick     'set': 0,
598061da546Spatrick     'bitsize': 16,
599061da546Spatrick     'encoding': eEncodingUint,
600061da546Spatrick     'format': eFormatHex,
601061da546Spatrick     'slice': 'r15[15:0]'},
602061da546Spatrick
603061da546Spatrick    {'name': 'ah',
604061da546Spatrick     'set': 0,
605061da546Spatrick     'bitsize': 8,
606061da546Spatrick     'encoding': eEncodingUint,
607061da546Spatrick     'format': eFormatHex,
608061da546Spatrick     'slice': 'rax[15:8]'},
609061da546Spatrick    {'name': 'bh',
610061da546Spatrick     'set': 0,
611061da546Spatrick     'bitsize': 8,
612061da546Spatrick     'encoding': eEncodingUint,
613061da546Spatrick     'format': eFormatHex,
614061da546Spatrick     'slice': 'rbx[15:8]'},
615061da546Spatrick    {'name': 'ch',
616061da546Spatrick     'set': 0,
617061da546Spatrick     'bitsize': 8,
618061da546Spatrick     'encoding': eEncodingUint,
619061da546Spatrick     'format': eFormatHex,
620061da546Spatrick     'slice': 'rcx[15:8]'},
621061da546Spatrick    {'name': 'dh',
622061da546Spatrick     'set': 0,
623061da546Spatrick     'bitsize': 8,
624061da546Spatrick     'encoding': eEncodingUint,
625061da546Spatrick     'format': eFormatHex,
626061da546Spatrick     'slice': 'rdx[15:8]'},
627061da546Spatrick
628061da546Spatrick    {'name': 'al',
629061da546Spatrick     'set': 0,
630061da546Spatrick     'bitsize': 8,
631061da546Spatrick     'encoding': eEncodingUint,
632061da546Spatrick     'format': eFormatHex,
633061da546Spatrick     'slice': 'rax[7:0]'},
634061da546Spatrick    {'name': 'bl',
635061da546Spatrick     'set': 0,
636061da546Spatrick     'bitsize': 8,
637061da546Spatrick     'encoding': eEncodingUint,
638061da546Spatrick     'format': eFormatHex,
639061da546Spatrick     'slice': 'rbx[7:0]'},
640061da546Spatrick    {'name': 'cl',
641061da546Spatrick     'set': 0,
642061da546Spatrick     'bitsize': 8,
643061da546Spatrick     'encoding': eEncodingUint,
644061da546Spatrick     'format': eFormatHex,
645061da546Spatrick     'slice': 'rcx[7:0]'},
646061da546Spatrick    {'name': 'dl',
647061da546Spatrick     'set': 0,
648061da546Spatrick     'bitsize': 8,
649061da546Spatrick     'encoding': eEncodingUint,
650061da546Spatrick     'format': eFormatHex,
651061da546Spatrick     'slice': 'rdx[7:0]'},
652061da546Spatrick    {'name': 'dil',
653061da546Spatrick     'set': 0,
654061da546Spatrick     'bitsize': 8,
655061da546Spatrick     'encoding': eEncodingUint,
656061da546Spatrick     'format': eFormatHex,
657061da546Spatrick     'slice': 'rdi[7:0]'},
658061da546Spatrick    {'name': 'sil',
659061da546Spatrick     'set': 0,
660061da546Spatrick     'bitsize': 8,
661061da546Spatrick     'encoding': eEncodingUint,
662061da546Spatrick     'format': eFormatHex,
663061da546Spatrick     'slice': 'rsi[7:0]'},
664061da546Spatrick    {'name': 'bpl',
665061da546Spatrick     'set': 0,
666061da546Spatrick     'bitsize': 8,
667061da546Spatrick     'encoding': eEncodingUint,
668061da546Spatrick     'format': eFormatHex,
669061da546Spatrick     'slice': 'rbp[7:0]'},
670061da546Spatrick    {'name': 'spl',
671061da546Spatrick     'set': 0,
672061da546Spatrick     'bitsize': 8,
673061da546Spatrick     'encoding': eEncodingUint,
674061da546Spatrick     'format': eFormatHex,
675061da546Spatrick     'slice': 'rsp[7:0]'},
676061da546Spatrick    {'name': 'r8l',
677061da546Spatrick     'set': 0,
678061da546Spatrick     'bitsize': 8,
679061da546Spatrick     'encoding': eEncodingUint,
680061da546Spatrick     'format': eFormatHex,
681061da546Spatrick     'slice': 'r8[7:0]'},
682061da546Spatrick    {'name': 'r9l',
683061da546Spatrick     'set': 0,
684061da546Spatrick     'bitsize': 8,
685061da546Spatrick     'encoding': eEncodingUint,
686061da546Spatrick     'format': eFormatHex,
687061da546Spatrick     'slice': 'r9[7:0]'},
688061da546Spatrick    {'name': 'r10l',
689061da546Spatrick     'set': 0,
690061da546Spatrick     'bitsize': 8,
691061da546Spatrick     'encoding': eEncodingUint,
692061da546Spatrick     'format': eFormatHex,
693061da546Spatrick     'slice': 'r10[7:0]'},
694061da546Spatrick    {'name': 'r11l',
695061da546Spatrick     'set': 0,
696061da546Spatrick     'bitsize': 8,
697061da546Spatrick     'encoding': eEncodingUint,
698061da546Spatrick     'format': eFormatHex,
699061da546Spatrick     'slice': 'r11[7:0]'},
700061da546Spatrick    {'name': 'r12l',
701061da546Spatrick     'set': 0,
702061da546Spatrick     'bitsize': 8,
703061da546Spatrick     'encoding': eEncodingUint,
704061da546Spatrick     'format': eFormatHex,
705061da546Spatrick     'slice': 'r12[7:0]'},
706061da546Spatrick    {'name': 'r13l',
707061da546Spatrick     'set': 0,
708061da546Spatrick     'bitsize': 8,
709061da546Spatrick     'encoding': eEncodingUint,
710061da546Spatrick     'format': eFormatHex,
711061da546Spatrick     'slice': 'r13[7:0]'},
712061da546Spatrick    {'name': 'r14l',
713061da546Spatrick     'set': 0,
714061da546Spatrick     'bitsize': 8,
715061da546Spatrick     'encoding': eEncodingUint,
716061da546Spatrick     'format': eFormatHex,
717061da546Spatrick     'slice': 'r14[7:0]'},
718061da546Spatrick    {'name': 'r15l',
719061da546Spatrick     'set': 0,
720061da546Spatrick     'bitsize': 8,
721061da546Spatrick     'encoding': eEncodingUint,
722061da546Spatrick     'format': eFormatHex,
723061da546Spatrick     'slice': 'r15[7:0]'},
724061da546Spatrick]
725061da546Spatrick
726061da546Spatrickg_target_definition = None
727061da546Spatrick
728061da546Spatrick
729061da546Spatrickdef get_target_definition():
730061da546Spatrick    global g_target_definition
731061da546Spatrick    if g_target_definition is None:
732061da546Spatrick        g_target_definition = {}
733061da546Spatrick        offset = 0
734061da546Spatrick        for reg_info in x86_64_register_infos:
735061da546Spatrick            reg_name = reg_info['name']
736061da546Spatrick
737061da546Spatrick            # Only fill in the offset if there is no 'slice' in the register
738061da546Spatrick            # info
739061da546Spatrick            if 'slice' not in reg_info and 'composite' not in reg_info:
740061da546Spatrick                reg_info['offset'] = offset
741061da546Spatrick                offset += reg_info['bitsize'] // 8
742061da546Spatrick
743061da546Spatrick            # Set the GCC/DWARF register number for this register if it has one
744061da546Spatrick            reg_num = get_reg_num(name_to_gcc_dwarf_regnum, reg_name)
745061da546Spatrick            if reg_num != LLDB_INVALID_REGNUM:
746061da546Spatrick                reg_info['gcc'] = reg_num
747061da546Spatrick                reg_info['dwarf'] = reg_num
748061da546Spatrick
749061da546Spatrick            # Set the generic register number for this register if it has one
750061da546Spatrick            reg_num = get_reg_num(name_to_generic_regnum, reg_name)
751061da546Spatrick            if reg_num != LLDB_INVALID_REGNUM:
752061da546Spatrick                reg_info['generic'] = reg_num
753061da546Spatrick
754061da546Spatrick            # Set the GDB register number for this register if it has one
755061da546Spatrick            reg_num = get_reg_num(name_to_gdb_regnum, reg_name)
756061da546Spatrick            if reg_num != LLDB_INVALID_REGNUM:
757061da546Spatrick                reg_info['gdb'] = reg_num
758061da546Spatrick
759061da546Spatrick        g_target_definition['sets'] = [
760061da546Spatrick            'General Purpose Registers',
761061da546Spatrick            'Floating Point Registers']
762061da546Spatrick        g_target_definition['registers'] = x86_64_register_infos
763061da546Spatrick        g_target_definition[
764061da546Spatrick            'host-info'] = {'triple': 'x86_64-*-linux', 'endian': eByteOrderLittle}
765061da546Spatrick        g_target_definition['g-packet-size'] = offset
766061da546Spatrick        g_target_definition['breakpoint-pc-offset'] = -1
767061da546Spatrick    return g_target_definition
768061da546Spatrick
769061da546Spatrick
770061da546Spatrickdef get_dynamic_setting(target, setting_name):
771061da546Spatrick    if setting_name == 'gdb-server-target-definition':
772061da546Spatrick        return get_target_definition()
773