xref: /openbsd-src/gnu/llvm/lldb/examples/python/x86_64_linux_target_definition.py (revision be691f3bb6417f04a68938fadbcaee2d5795e764)
1*be691f3bSpatrick#!/usr/bin/env python
2061da546Spatrick#===-- x86_64_linux_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_linux_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
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    {'name': 'orig_rax', 'set': 1, 'bitsize': 64,
408061da546Spatrick        'encoding': eEncodingUint, 'format': eFormatHex},
409061da546Spatrick    # Registers that are contained in or composed of one of more other
410061da546Spatrick    # registers
411061da546Spatrick    {'name': 'eax',
412061da546Spatrick     'set': 0,
413061da546Spatrick     'bitsize': 32,
414061da546Spatrick     'encoding': eEncodingUint,
415061da546Spatrick     'format': eFormatHex,
416061da546Spatrick     'slice': 'rax[31:0]'},
417061da546Spatrick    {'name': 'ebx',
418061da546Spatrick     'set': 0,
419061da546Spatrick     'bitsize': 32,
420061da546Spatrick     'encoding': eEncodingUint,
421061da546Spatrick     'format': eFormatHex,
422061da546Spatrick     'slice': 'rbx[31:0]'},
423061da546Spatrick    {'name': 'ecx',
424061da546Spatrick     'set': 0,
425061da546Spatrick     'bitsize': 32,
426061da546Spatrick     'encoding': eEncodingUint,
427061da546Spatrick     'format': eFormatHex,
428061da546Spatrick     'slice': 'rcx[31:0]'},
429061da546Spatrick    {'name': 'edx',
430061da546Spatrick     'set': 0,
431061da546Spatrick     'bitsize': 32,
432061da546Spatrick     'encoding': eEncodingUint,
433061da546Spatrick     'format': eFormatHex,
434061da546Spatrick     'slice': 'rdx[31:0]'},
435061da546Spatrick    {'name': 'edi',
436061da546Spatrick     'set': 0,
437061da546Spatrick     'bitsize': 32,
438061da546Spatrick     'encoding': eEncodingUint,
439061da546Spatrick     'format': eFormatHex,
440061da546Spatrick     'slice': 'rdi[31:0]'},
441061da546Spatrick    {'name': 'esi',
442061da546Spatrick     'set': 0,
443061da546Spatrick     'bitsize': 32,
444061da546Spatrick     'encoding': eEncodingUint,
445061da546Spatrick     'format': eFormatHex,
446061da546Spatrick     'slice': 'rsi[31:0]'},
447061da546Spatrick    {'name': 'ebp',
448061da546Spatrick     'set': 0,
449061da546Spatrick     'bitsize': 32,
450061da546Spatrick     'encoding': eEncodingUint,
451061da546Spatrick     'format': eFormatHex,
452061da546Spatrick     'slice': 'rbp[31:0]'},
453061da546Spatrick    {'name': 'esp',
454061da546Spatrick     'set': 0,
455061da546Spatrick     'bitsize': 32,
456061da546Spatrick     'encoding': eEncodingUint,
457061da546Spatrick     'format': eFormatHex,
458061da546Spatrick     'slice': 'rsp[31:0]'},
459061da546Spatrick    {'name': 'r8d',
460061da546Spatrick     'set': 0,
461061da546Spatrick     'bitsize': 32,
462061da546Spatrick     'encoding': eEncodingUint,
463061da546Spatrick     'format': eFormatHex,
464061da546Spatrick     'slice': 'r8[31:0]'},
465061da546Spatrick    {'name': 'r9d',
466061da546Spatrick     'set': 0,
467061da546Spatrick     'bitsize': 32,
468061da546Spatrick     'encoding': eEncodingUint,
469061da546Spatrick     'format': eFormatHex,
470061da546Spatrick     'slice': 'r9[31:0]'},
471061da546Spatrick    {'name': 'r10d',
472061da546Spatrick     'set': 0,
473061da546Spatrick     'bitsize': 32,
474061da546Spatrick     'encoding': eEncodingUint,
475061da546Spatrick     'format': eFormatHex,
476061da546Spatrick     'slice': 'r10[31:0]'},
477061da546Spatrick    {'name': 'r11d',
478061da546Spatrick     'set': 0,
479061da546Spatrick     'bitsize': 32,
480061da546Spatrick     'encoding': eEncodingUint,
481061da546Spatrick     'format': eFormatHex,
482061da546Spatrick     'slice': 'r11[31:0]'},
483061da546Spatrick    {'name': 'r12d',
484061da546Spatrick     'set': 0,
485061da546Spatrick     'bitsize': 32,
486061da546Spatrick     'encoding': eEncodingUint,
487061da546Spatrick     'format': eFormatHex,
488061da546Spatrick     'slice': 'r12[31:0]'},
489061da546Spatrick    {'name': 'r13d',
490061da546Spatrick     'set': 0,
491061da546Spatrick     'bitsize': 32,
492061da546Spatrick     'encoding': eEncodingUint,
493061da546Spatrick     'format': eFormatHex,
494061da546Spatrick     'slice': 'r13[31:0]'},
495061da546Spatrick    {'name': 'r14d',
496061da546Spatrick     'set': 0,
497061da546Spatrick     'bitsize': 32,
498061da546Spatrick     'encoding': eEncodingUint,
499061da546Spatrick     'format': eFormatHex,
500061da546Spatrick     'slice': 'r14[31:0]'},
501061da546Spatrick    {'name': 'r15d',
502061da546Spatrick     'set': 0,
503061da546Spatrick     'bitsize': 32,
504061da546Spatrick     'encoding': eEncodingUint,
505061da546Spatrick     'format': eFormatHex,
506061da546Spatrick     'slice': 'r15[31:0]'},
507061da546Spatrick
508061da546Spatrick    {'name': 'ax',
509061da546Spatrick     'set': 0,
510061da546Spatrick     'bitsize': 16,
511061da546Spatrick     'encoding': eEncodingUint,
512061da546Spatrick     'format': eFormatHex,
513061da546Spatrick     'slice': 'rax[15:0]'},
514061da546Spatrick    {'name': 'bx',
515061da546Spatrick     'set': 0,
516061da546Spatrick     'bitsize': 16,
517061da546Spatrick     'encoding': eEncodingUint,
518061da546Spatrick     'format': eFormatHex,
519061da546Spatrick     'slice': 'rbx[15:0]'},
520061da546Spatrick    {'name': 'cx',
521061da546Spatrick     'set': 0,
522061da546Spatrick     'bitsize': 16,
523061da546Spatrick     'encoding': eEncodingUint,
524061da546Spatrick     'format': eFormatHex,
525061da546Spatrick     'slice': 'rcx[15:0]'},
526061da546Spatrick    {'name': 'dx',
527061da546Spatrick     'set': 0,
528061da546Spatrick     'bitsize': 16,
529061da546Spatrick     'encoding': eEncodingUint,
530061da546Spatrick     'format': eFormatHex,
531061da546Spatrick     'slice': 'rdx[15:0]'},
532061da546Spatrick    {'name': 'di',
533061da546Spatrick     'set': 0,
534061da546Spatrick     'bitsize': 16,
535061da546Spatrick     'encoding': eEncodingUint,
536061da546Spatrick     'format': eFormatHex,
537061da546Spatrick     'slice': 'rdi[15:0]'},
538061da546Spatrick    {'name': 'si',
539061da546Spatrick     'set': 0,
540061da546Spatrick     'bitsize': 16,
541061da546Spatrick     'encoding': eEncodingUint,
542061da546Spatrick     'format': eFormatHex,
543061da546Spatrick     'slice': 'rsi[15:0]'},
544061da546Spatrick    {'name': 'bp',
545061da546Spatrick     'set': 0,
546061da546Spatrick     'bitsize': 16,
547061da546Spatrick     'encoding': eEncodingUint,
548061da546Spatrick     'format': eFormatHex,
549061da546Spatrick     'slice': 'rbp[15:0]'},
550061da546Spatrick    {'name': 'sp',
551061da546Spatrick     'set': 0,
552061da546Spatrick     'bitsize': 16,
553061da546Spatrick     'encoding': eEncodingUint,
554061da546Spatrick     'format': eFormatHex,
555061da546Spatrick     'slice': 'rsp[15:0]'},
556061da546Spatrick    {'name': 'r8w',
557061da546Spatrick     'set': 0,
558061da546Spatrick     'bitsize': 16,
559061da546Spatrick     'encoding': eEncodingUint,
560061da546Spatrick     'format': eFormatHex,
561061da546Spatrick     'slice': 'r8[15:0]'},
562061da546Spatrick    {'name': 'r9w',
563061da546Spatrick     'set': 0,
564061da546Spatrick     'bitsize': 16,
565061da546Spatrick     'encoding': eEncodingUint,
566061da546Spatrick     'format': eFormatHex,
567061da546Spatrick     'slice': 'r9[15:0]'},
568061da546Spatrick    {'name': 'r10w',
569061da546Spatrick     'set': 0,
570061da546Spatrick     'bitsize': 16,
571061da546Spatrick     'encoding': eEncodingUint,
572061da546Spatrick     'format': eFormatHex,
573061da546Spatrick     'slice': 'r10[15:0]'},
574061da546Spatrick    {'name': 'r11w',
575061da546Spatrick     'set': 0,
576061da546Spatrick     'bitsize': 16,
577061da546Spatrick     'encoding': eEncodingUint,
578061da546Spatrick     'format': eFormatHex,
579061da546Spatrick     'slice': 'r11[15:0]'},
580061da546Spatrick    {'name': 'r12w',
581061da546Spatrick     'set': 0,
582061da546Spatrick     'bitsize': 16,
583061da546Spatrick     'encoding': eEncodingUint,
584061da546Spatrick     'format': eFormatHex,
585061da546Spatrick     'slice': 'r12[15:0]'},
586061da546Spatrick    {'name': 'r13w',
587061da546Spatrick     'set': 0,
588061da546Spatrick     'bitsize': 16,
589061da546Spatrick     'encoding': eEncodingUint,
590061da546Spatrick     'format': eFormatHex,
591061da546Spatrick     'slice': 'r13[15:0]'},
592061da546Spatrick    {'name': 'r14w',
593061da546Spatrick     'set': 0,
594061da546Spatrick     'bitsize': 16,
595061da546Spatrick     'encoding': eEncodingUint,
596061da546Spatrick     'format': eFormatHex,
597061da546Spatrick     'slice': 'r14[15:0]'},
598061da546Spatrick    {'name': 'r15w',
599061da546Spatrick     'set': 0,
600061da546Spatrick     'bitsize': 16,
601061da546Spatrick     'encoding': eEncodingUint,
602061da546Spatrick     'format': eFormatHex,
603061da546Spatrick     'slice': 'r15[15:0]'},
604061da546Spatrick
605061da546Spatrick    {'name': 'ah',
606061da546Spatrick     'set': 0,
607061da546Spatrick     'bitsize': 8,
608061da546Spatrick     'encoding': eEncodingUint,
609061da546Spatrick     'format': eFormatHex,
610061da546Spatrick     'slice': 'rax[15:8]'},
611061da546Spatrick    {'name': 'bh',
612061da546Spatrick     'set': 0,
613061da546Spatrick     'bitsize': 8,
614061da546Spatrick     'encoding': eEncodingUint,
615061da546Spatrick     'format': eFormatHex,
616061da546Spatrick     'slice': 'rbx[15:8]'},
617061da546Spatrick    {'name': 'ch',
618061da546Spatrick     'set': 0,
619061da546Spatrick     'bitsize': 8,
620061da546Spatrick     'encoding': eEncodingUint,
621061da546Spatrick     'format': eFormatHex,
622061da546Spatrick     'slice': 'rcx[15:8]'},
623061da546Spatrick    {'name': 'dh',
624061da546Spatrick     'set': 0,
625061da546Spatrick     'bitsize': 8,
626061da546Spatrick     'encoding': eEncodingUint,
627061da546Spatrick     'format': eFormatHex,
628061da546Spatrick     'slice': 'rdx[15:8]'},
629061da546Spatrick
630061da546Spatrick    {'name': 'al',
631061da546Spatrick     'set': 0,
632061da546Spatrick     'bitsize': 8,
633061da546Spatrick     'encoding': eEncodingUint,
634061da546Spatrick     'format': eFormatHex,
635061da546Spatrick     'slice': 'rax[7:0]'},
636061da546Spatrick    {'name': 'bl',
637061da546Spatrick     'set': 0,
638061da546Spatrick     'bitsize': 8,
639061da546Spatrick     'encoding': eEncodingUint,
640061da546Spatrick     'format': eFormatHex,
641061da546Spatrick     'slice': 'rbx[7:0]'},
642061da546Spatrick    {'name': 'cl',
643061da546Spatrick     'set': 0,
644061da546Spatrick     'bitsize': 8,
645061da546Spatrick     'encoding': eEncodingUint,
646061da546Spatrick     'format': eFormatHex,
647061da546Spatrick     'slice': 'rcx[7:0]'},
648061da546Spatrick    {'name': 'dl',
649061da546Spatrick     'set': 0,
650061da546Spatrick     'bitsize': 8,
651061da546Spatrick     'encoding': eEncodingUint,
652061da546Spatrick     'format': eFormatHex,
653061da546Spatrick     'slice': 'rdx[7:0]'},
654061da546Spatrick    {'name': 'dil',
655061da546Spatrick     'set': 0,
656061da546Spatrick     'bitsize': 8,
657061da546Spatrick     'encoding': eEncodingUint,
658061da546Spatrick     'format': eFormatHex,
659061da546Spatrick     'slice': 'rdi[7:0]'},
660061da546Spatrick    {'name': 'sil',
661061da546Spatrick     'set': 0,
662061da546Spatrick     'bitsize': 8,
663061da546Spatrick     'encoding': eEncodingUint,
664061da546Spatrick     'format': eFormatHex,
665061da546Spatrick     'slice': 'rsi[7:0]'},
666061da546Spatrick    {'name': 'bpl',
667061da546Spatrick     'set': 0,
668061da546Spatrick     'bitsize': 8,
669061da546Spatrick     'encoding': eEncodingUint,
670061da546Spatrick     'format': eFormatHex,
671061da546Spatrick     'slice': 'rbp[7:0]'},
672061da546Spatrick    {'name': 'spl',
673061da546Spatrick     'set': 0,
674061da546Spatrick     'bitsize': 8,
675061da546Spatrick     'encoding': eEncodingUint,
676061da546Spatrick     'format': eFormatHex,
677061da546Spatrick     'slice': 'rsp[7:0]'},
678061da546Spatrick    {'name': 'r8l',
679061da546Spatrick     'set': 0,
680061da546Spatrick     'bitsize': 8,
681061da546Spatrick     'encoding': eEncodingUint,
682061da546Spatrick     'format': eFormatHex,
683061da546Spatrick     'slice': 'r8[7:0]'},
684061da546Spatrick    {'name': 'r9l',
685061da546Spatrick     'set': 0,
686061da546Spatrick     'bitsize': 8,
687061da546Spatrick     'encoding': eEncodingUint,
688061da546Spatrick     'format': eFormatHex,
689061da546Spatrick     'slice': 'r9[7:0]'},
690061da546Spatrick    {'name': 'r10l',
691061da546Spatrick     'set': 0,
692061da546Spatrick     'bitsize': 8,
693061da546Spatrick     'encoding': eEncodingUint,
694061da546Spatrick     'format': eFormatHex,
695061da546Spatrick     'slice': 'r10[7:0]'},
696061da546Spatrick    {'name': 'r11l',
697061da546Spatrick     'set': 0,
698061da546Spatrick     'bitsize': 8,
699061da546Spatrick     'encoding': eEncodingUint,
700061da546Spatrick     'format': eFormatHex,
701061da546Spatrick     'slice': 'r11[7:0]'},
702061da546Spatrick    {'name': 'r12l',
703061da546Spatrick     'set': 0,
704061da546Spatrick     'bitsize': 8,
705061da546Spatrick     'encoding': eEncodingUint,
706061da546Spatrick     'format': eFormatHex,
707061da546Spatrick     'slice': 'r12[7:0]'},
708061da546Spatrick    {'name': 'r13l',
709061da546Spatrick     'set': 0,
710061da546Spatrick     'bitsize': 8,
711061da546Spatrick     'encoding': eEncodingUint,
712061da546Spatrick     'format': eFormatHex,
713061da546Spatrick     'slice': 'r13[7:0]'},
714061da546Spatrick    {'name': 'r14l',
715061da546Spatrick     'set': 0,
716061da546Spatrick     'bitsize': 8,
717061da546Spatrick     'encoding': eEncodingUint,
718061da546Spatrick     'format': eFormatHex,
719061da546Spatrick     'slice': 'r14[7:0]'},
720061da546Spatrick    {'name': 'r15l',
721061da546Spatrick     'set': 0,
722061da546Spatrick     'bitsize': 8,
723061da546Spatrick     'encoding': eEncodingUint,
724061da546Spatrick     'format': eFormatHex,
725061da546Spatrick     'slice': 'r15[7:0]'},
726061da546Spatrick]
727061da546Spatrick
728061da546Spatrickg_target_definition = None
729061da546Spatrick
730061da546Spatrick
731061da546Spatrickdef get_target_definition():
732061da546Spatrick    global g_target_definition
733061da546Spatrick    if g_target_definition is None:
734061da546Spatrick        g_target_definition = {}
735061da546Spatrick        offset = 0
736061da546Spatrick        for reg_info in x86_64_register_infos:
737061da546Spatrick            reg_name = reg_info['name']
738061da546Spatrick
739061da546Spatrick            # Only fill in the offset if there is no 'slice' in the register
740061da546Spatrick            # info
741061da546Spatrick            if 'slice' not in reg_info and 'composite' not in reg_info:
742061da546Spatrick                reg_info['offset'] = offset
743061da546Spatrick                offset += reg_info['bitsize'] // 8
744061da546Spatrick
745061da546Spatrick            # Set the GCC/DWARF register number for this register if it has one
746061da546Spatrick            reg_num = get_reg_num(name_to_gcc_dwarf_regnum, reg_name)
747061da546Spatrick            if reg_num != LLDB_INVALID_REGNUM:
748061da546Spatrick                reg_info['gcc'] = reg_num
749061da546Spatrick                reg_info['dwarf'] = reg_num
750061da546Spatrick
751061da546Spatrick            # Set the generic register number for this register if it has one
752061da546Spatrick            reg_num = get_reg_num(name_to_generic_regnum, reg_name)
753061da546Spatrick            if reg_num != LLDB_INVALID_REGNUM:
754061da546Spatrick                reg_info['generic'] = reg_num
755061da546Spatrick
756061da546Spatrick            # Set the GDB register number for this register if it has one
757061da546Spatrick            reg_num = get_reg_num(name_to_gdb_regnum, reg_name)
758061da546Spatrick            if reg_num != LLDB_INVALID_REGNUM:
759061da546Spatrick                reg_info['gdb'] = reg_num
760061da546Spatrick
761061da546Spatrick        g_target_definition['sets'] = [
762061da546Spatrick            'General Purpose Registers',
763061da546Spatrick            'Floating Point Registers']
764061da546Spatrick        g_target_definition['registers'] = x86_64_register_infos
765061da546Spatrick        g_target_definition[
766061da546Spatrick            'host-info'] = {'triple': 'x86_64-*-linux', 'endian': eByteOrderLittle}
767061da546Spatrick        g_target_definition['g-packet-size'] = offset
768061da546Spatrick        g_target_definition['breakpoint-pc-offset'] = -1
769061da546Spatrick    return g_target_definition
770061da546Spatrick
771061da546Spatrick
772061da546Spatrickdef get_dynamic_setting(target, setting_name):
773061da546Spatrick    if setting_name == 'gdb-server-target-definition':
774061da546Spatrick        return get_target_definition()
775