1#!/usr/bin/env python
2#===-- x86_64_linux_target_definition.py -----------------------------*- C++ -*-===//
3#
4# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5# See https://llvm.org/LICENSE.txt for license information.
6# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7#
8#===----------------------------------------------------------------------===//
9
10#----------------------------------------------------------------------
11# DESCRIPTION
12#
13# This file can be used with the following setting:
14#   plugin.process.gdb-remote.target-definition-file
15# This setting should be used when you are trying to connect to a
16# remote GDB server that doesn't support any of the register discovery
17# packets that LLDB normally uses.
18#
19# Why is this necessary? LLDB doesn't require a new build of LLDB that
20# targets each new architecture you will debug with. Instead, all
21# architectures are supported and LLDB relies on extra GDB server
22# packets to discover the target we are connecting to so that is can
23# show the right registers for each target. This allows the GDB server
24# to change and add new registers without requiring a new LLDB build
25# just so we can see new registers.
26#
27# This file implements the x86_64 registers for the darwin version of
28# GDB and allows you to connect to servers that use this register set.
29#
30# USAGE
31#
32# (lldb) settings set plugin.process.gdb-remote.target-definition-file /path/to/x86_64_linux_target_definition.py
33# (lldb) gdb-remote other.baz.com:1234
34#
35# The target definition file will get used if and only if the
36# qRegisterInfo packets are not supported when connecting to a remote
37# GDB server.
38#----------------------------------------------------------------------
39from lldb import *
40
41# Compiler and DWARF register numbers
42name_to_gcc_dwarf_regnum = {
43    'rax': 0,
44    'rdx': 1,
45    'rcx': 2,
46    'rbx': 3,
47    'rsi': 4,
48    'rdi': 5,
49    'rbp': 6,
50    'rsp': 7,
51    'r8': 8,
52    'r9': 9,
53    'r10': 10,
54    'r11': 11,
55    'r12': 12,
56    'r13': 13,
57    'r14': 14,
58    'r15': 15,
59    'rip': 16,
60    'xmm0': 17,
61    'xmm1': 18,
62    'xmm2': 19,
63    'xmm3': 20,
64    'xmm4': 21,
65    'xmm5': 22,
66    'xmm6': 23,
67    'xmm7': 24,
68    'xmm8': 25,
69    'xmm9': 26,
70    'xmm10': 27,
71    'xmm11': 28,
72    'xmm12': 29,
73    'xmm13': 30,
74    'xmm14': 31,
75    'xmm15': 32,
76    'stmm0': 33,
77    'stmm1': 34,
78    'stmm2': 35,
79    'stmm3': 36,
80    'stmm4': 37,
81    'stmm5': 38,
82    'stmm6': 39,
83    'stmm7': 30,
84    'ymm0': 41,
85    'ymm1': 42,
86    'ymm2': 43,
87    'ymm3': 44,
88    'ymm4': 45,
89    'ymm5': 46,
90    'ymm6': 47,
91    'ymm7': 48,
92    'ymm8': 49,
93    'ymm9': 40,
94    'ymm10': 41,
95    'ymm11': 42,
96    'ymm12': 43,
97    'ymm13': 44,
98    'ymm14': 45,
99    'ymm15': 46
100}
101
102name_to_gdb_regnum = {
103    'rax': 0,
104    'rbx': 1,
105    'rcx': 2,
106    'rdx': 3,
107    'rsi': 4,
108    'rdi': 5,
109    'rbp': 6,
110    'rsp': 7,
111    'r8': 8,
112    'r9': 9,
113    'r10': 10,
114    'r11': 11,
115    'r12': 12,
116    'r13': 13,
117    'r14': 14,
118    'r15': 15,
119    'rip': 16,
120    'rflags': 17,
121    'cs': 18,
122    'ss': 19,
123    'ds': 20,
124    'es': 21,
125    'fs': 22,
126    'gs': 23,
127    'stmm0': 24,
128    'stmm1': 25,
129    'stmm2': 26,
130    'stmm3': 27,
131    'stmm4': 28,
132    'stmm5': 29,
133    'stmm6': 30,
134    'stmm7': 31,
135    'fctrl': 32,
136    'fstat': 33,
137    'ftag': 34,
138    'fiseg': 35,
139    'fioff': 36,
140    'foseg': 37,
141    'fooff': 38,
142    'fop': 39,
143    'xmm0': 40,
144    'xmm1': 41,
145    'xmm2': 42,
146    'xmm3': 43,
147    'xmm4': 44,
148    'xmm5': 45,
149    'xmm6': 46,
150    'xmm7': 47,
151    'xmm8': 48,
152    'xmm9': 49,
153    'xmm10': 50,
154    'xmm11': 51,
155    'xmm12': 52,
156    'xmm13': 53,
157    'xmm14': 54,
158    'xmm15': 55,
159    'mxcsr': 56,
160    'ymm0': 57,
161    'ymm1': 58,
162    'ymm2': 59,
163    'ymm3': 60,
164    'ymm4': 61,
165    'ymm5': 62,
166    'ymm6': 63,
167    'ymm7': 64,
168    'ymm8': 65,
169    'ymm9': 66,
170    'ymm10': 67,
171    'ymm11': 68,
172    'ymm12': 69,
173    'ymm13': 70,
174    'ymm14': 71,
175    'ymm15': 72
176}
177
178name_to_generic_regnum = {
179    'rip': LLDB_REGNUM_GENERIC_PC,
180    'rsp': LLDB_REGNUM_GENERIC_SP,
181    'rbp': LLDB_REGNUM_GENERIC_FP,
182    'rdi': LLDB_REGNUM_GENERIC_ARG1,
183    'rsi': LLDB_REGNUM_GENERIC_ARG2,
184    'rdx': LLDB_REGNUM_GENERIC_ARG3,
185    'rcx': LLDB_REGNUM_GENERIC_ARG4,
186    'r8': LLDB_REGNUM_GENERIC_ARG5,
187    'r9': LLDB_REGNUM_GENERIC_ARG6
188}
189
190
191def get_reg_num(reg_num_dict, reg_name):
192    if reg_name in reg_num_dict:
193        return reg_num_dict[reg_name]
194    return LLDB_INVALID_REGNUM
195
196x86_64_register_infos = [
197    {'name': 'rax',
198     'set': 0,
199     'bitsize': 64,
200     'encoding': eEncodingUint,
201     'format': eFormatAddressInfo},
202    {'name': 'rbx',
203     'set': 0,
204     'bitsize': 64,
205     'encoding': eEncodingUint,
206     'format': eFormatAddressInfo},
207    {'name': 'rcx', 'set': 0, 'bitsize': 64, 'encoding': eEncodingUint,
208        'format': eFormatAddressInfo, 'alt-name': 'arg4'},
209    {'name': 'rdx', 'set': 0, 'bitsize': 64, 'encoding': eEncodingUint,
210        'format': eFormatAddressInfo, 'alt-name': 'arg3'},
211    {'name': 'rsi', 'set': 0, 'bitsize': 64, 'encoding': eEncodingUint,
212        'format': eFormatAddressInfo, 'alt-name': 'arg2'},
213    {'name': 'rdi', 'set': 0, 'bitsize': 64, 'encoding': eEncodingUint,
214        'format': eFormatAddressInfo, 'alt-name': 'arg1'},
215    {'name': 'rbp', 'set': 0, 'bitsize': 64, 'encoding': eEncodingUint,
216        'format': eFormatAddressInfo, 'alt-name': 'fp'},
217    {'name': 'rsp', 'set': 0, 'bitsize': 64, 'encoding': eEncodingUint,
218        'format': eFormatAddressInfo, 'alt-name': 'sp'},
219    {'name': 'r8', 'set': 0, 'bitsize': 64, 'encoding': eEncodingUint,
220        'format': eFormatAddressInfo, 'alt-name': 'arg5'},
221    {'name': 'r9', 'set': 0, 'bitsize': 64, 'encoding': eEncodingUint,
222        'format': eFormatAddressInfo, 'alt-name': 'arg6'},
223    {'name': 'r10',
224     'set': 0,
225     'bitsize': 64,
226     'encoding': eEncodingUint,
227     'format': eFormatAddressInfo},
228    {'name': 'r11',
229     'set': 0,
230     'bitsize': 64,
231     'encoding': eEncodingUint,
232     'format': eFormatAddressInfo},
233    {'name': 'r12',
234     'set': 0,
235     'bitsize': 64,
236     'encoding': eEncodingUint,
237     'format': eFormatAddressInfo},
238    {'name': 'r13',
239     'set': 0,
240     'bitsize': 64,
241     'encoding': eEncodingUint,
242     'format': eFormatAddressInfo},
243    {'name': 'r14',
244     'set': 0,
245     'bitsize': 64,
246     'encoding': eEncodingUint,
247     'format': eFormatAddressInfo},
248    {'name': 'r15',
249     'set': 0,
250     'bitsize': 64,
251     'encoding': eEncodingUint,
252     'format': eFormatAddressInfo},
253    {'name': 'rip', 'set': 0, 'bitsize': 64, 'encoding': eEncodingUint,
254        'format': eFormatAddressInfo, 'alt-name': 'pc'},
255    {'name': 'rflags', 'set': 0, 'bitsize': 32,
256        'encoding': eEncodingUint, 'format': eFormatHex},
257    {'name': 'cs', 'set': 0, 'bitsize': 32,
258        'encoding': eEncodingUint, 'format': eFormatHex},
259    {'name': 'ss', 'set': 0, 'bitsize': 32,
260        'encoding': eEncodingUint, 'format': eFormatHex},
261    {'name': 'ds', 'set': 0, 'bitsize': 32,
262        'encoding': eEncodingUint, 'format': eFormatHex},
263    {'name': 'es', 'set': 0, 'bitsize': 32,
264        'encoding': eEncodingUint, 'format': eFormatHex},
265    {'name': 'fs', 'set': 0, 'bitsize': 32,
266        'encoding': eEncodingUint, 'format': eFormatHex},
267    {'name': 'gs', 'set': 0, 'bitsize': 32,
268        'encoding': eEncodingUint, 'format': eFormatHex},
269    {'name': 'stmm0',
270     'set': 1,
271     'bitsize': 80,
272     'encoding': eEncodingVector,
273     'format': eFormatVectorOfUInt8},
274    {'name': 'stmm1',
275     'set': 1,
276     'bitsize': 80,
277     'encoding': eEncodingVector,
278     'format': eFormatVectorOfUInt8},
279    {'name': 'stmm2',
280     'set': 1,
281     'bitsize': 80,
282     'encoding': eEncodingVector,
283     'format': eFormatVectorOfUInt8},
284    {'name': 'stmm3',
285     'set': 1,
286     'bitsize': 80,
287     'encoding': eEncodingVector,
288     'format': eFormatVectorOfUInt8},
289    {'name': 'stmm4',
290     'set': 1,
291     'bitsize': 80,
292     'encoding': eEncodingVector,
293     'format': eFormatVectorOfUInt8},
294    {'name': 'stmm5',
295     'set': 1,
296     'bitsize': 80,
297     'encoding': eEncodingVector,
298     'format': eFormatVectorOfUInt8},
299    {'name': 'stmm6',
300     'set': 1,
301     'bitsize': 80,
302     'encoding': eEncodingVector,
303     'format': eFormatVectorOfUInt8},
304    {'name': 'stmm7',
305     'set': 1,
306     'bitsize': 80,
307     'encoding': eEncodingVector,
308     'format': eFormatVectorOfUInt8},
309    {'name': 'fctrl', 'set': 1, 'bitsize': 32,
310        'encoding': eEncodingUint, 'format': eFormatHex},
311    {'name': 'fstat', 'set': 1, 'bitsize': 32,
312        'encoding': eEncodingUint, 'format': eFormatHex},
313    {'name': 'ftag', 'set': 1, 'bitsize': 32,
314        'encoding': eEncodingUint, 'format': eFormatHex},
315    {'name': 'fiseg', 'set': 1, 'bitsize': 32,
316        'encoding': eEncodingUint, 'format': eFormatHex},
317    {'name': 'fioff', 'set': 1, 'bitsize': 32,
318        'encoding': eEncodingUint, 'format': eFormatHex},
319    {'name': 'foseg', 'set': 1, 'bitsize': 32,
320        'encoding': eEncodingUint, 'format': eFormatHex},
321    {'name': 'fooff', 'set': 1, 'bitsize': 32,
322        'encoding': eEncodingUint, 'format': eFormatHex},
323    {'name': 'fop', 'set': 1, 'bitsize': 32,
324        'encoding': eEncodingUint, 'format': eFormatHex},
325    {'name': 'xmm0',
326     'set': 1,
327     'bitsize': 128,
328     'encoding': eEncodingVector,
329     'format': eFormatVectorOfUInt8},
330    {'name': 'xmm1',
331     'set': 1,
332     'bitsize': 128,
333     'encoding': eEncodingVector,
334     'format': eFormatVectorOfUInt8},
335    {'name': 'xmm2',
336     'set': 1,
337     'bitsize': 128,
338     'encoding': eEncodingVector,
339     'format': eFormatVectorOfUInt8},
340    {'name': 'xmm3',
341     'set': 1,
342     'bitsize': 128,
343     'encoding': eEncodingVector,
344     'format': eFormatVectorOfUInt8},
345    {'name': 'xmm4',
346     'set': 1,
347     'bitsize': 128,
348     'encoding': eEncodingVector,
349     'format': eFormatVectorOfUInt8},
350    {'name': 'xmm5',
351     'set': 1,
352     'bitsize': 128,
353     'encoding': eEncodingVector,
354     'format': eFormatVectorOfUInt8},
355    {'name': 'xmm6',
356     'set': 1,
357     'bitsize': 128,
358     'encoding': eEncodingVector,
359     'format': eFormatVectorOfUInt8},
360    {'name': 'xmm7',
361     'set': 1,
362     'bitsize': 128,
363     'encoding': eEncodingVector,
364     'format': eFormatVectorOfUInt8},
365    {'name': 'xmm8',
366     'set': 1,
367     'bitsize': 128,
368     'encoding': eEncodingVector,
369     'format': eFormatVectorOfUInt8},
370    {'name': 'xmm9',
371     'set': 1,
372     'bitsize': 128,
373     'encoding': eEncodingVector,
374     'format': eFormatVectorOfUInt8},
375    {'name': 'xmm10',
376     'set': 1,
377     'bitsize': 128,
378     'encoding': eEncodingVector,
379     'format': eFormatVectorOfUInt8},
380    {'name': 'xmm11',
381     'set': 1,
382     'bitsize': 128,
383     'encoding': eEncodingVector,
384     'format': eFormatVectorOfUInt8},
385    {'name': 'xmm12',
386     'set': 1,
387     'bitsize': 128,
388     'encoding': eEncodingVector,
389     'format': eFormatVectorOfUInt8},
390    {'name': 'xmm13',
391     'set': 1,
392     'bitsize': 128,
393     'encoding': eEncodingVector,
394     'format': eFormatVectorOfUInt8},
395    {'name': 'xmm14',
396     'set': 1,
397     'bitsize': 128,
398     'encoding': eEncodingVector,
399     'format': eFormatVectorOfUInt8},
400    {'name': 'xmm15',
401     'set': 1,
402     'bitsize': 128,
403     'encoding': eEncodingVector,
404     'format': eFormatVectorOfUInt8},
405    {'name': 'mxcsr', 'set': 1, 'bitsize': 32,
406        'encoding': eEncodingUint, 'format': eFormatHex},
407    {'name': 'orig_rax', 'set': 1, 'bitsize': 64,
408        'encoding': eEncodingUint, 'format': eFormatHex},
409    # Registers that are contained in or composed of one of more other
410    # registers
411    {'name': 'eax',
412     'set': 0,
413     'bitsize': 32,
414     'encoding': eEncodingUint,
415     'format': eFormatHex,
416     'slice': 'rax[31:0]'},
417    {'name': 'ebx',
418     'set': 0,
419     'bitsize': 32,
420     'encoding': eEncodingUint,
421     'format': eFormatHex,
422     'slice': 'rbx[31:0]'},
423    {'name': 'ecx',
424     'set': 0,
425     'bitsize': 32,
426     'encoding': eEncodingUint,
427     'format': eFormatHex,
428     'slice': 'rcx[31:0]'},
429    {'name': 'edx',
430     'set': 0,
431     'bitsize': 32,
432     'encoding': eEncodingUint,
433     'format': eFormatHex,
434     'slice': 'rdx[31:0]'},
435    {'name': 'edi',
436     'set': 0,
437     'bitsize': 32,
438     'encoding': eEncodingUint,
439     'format': eFormatHex,
440     'slice': 'rdi[31:0]'},
441    {'name': 'esi',
442     'set': 0,
443     'bitsize': 32,
444     'encoding': eEncodingUint,
445     'format': eFormatHex,
446     'slice': 'rsi[31:0]'},
447    {'name': 'ebp',
448     'set': 0,
449     'bitsize': 32,
450     'encoding': eEncodingUint,
451     'format': eFormatHex,
452     'slice': 'rbp[31:0]'},
453    {'name': 'esp',
454     'set': 0,
455     'bitsize': 32,
456     'encoding': eEncodingUint,
457     'format': eFormatHex,
458     'slice': 'rsp[31:0]'},
459    {'name': 'r8d',
460     'set': 0,
461     'bitsize': 32,
462     'encoding': eEncodingUint,
463     'format': eFormatHex,
464     'slice': 'r8[31:0]'},
465    {'name': 'r9d',
466     'set': 0,
467     'bitsize': 32,
468     'encoding': eEncodingUint,
469     'format': eFormatHex,
470     'slice': 'r9[31:0]'},
471    {'name': 'r10d',
472     'set': 0,
473     'bitsize': 32,
474     'encoding': eEncodingUint,
475     'format': eFormatHex,
476     'slice': 'r10[31:0]'},
477    {'name': 'r11d',
478     'set': 0,
479     'bitsize': 32,
480     'encoding': eEncodingUint,
481     'format': eFormatHex,
482     'slice': 'r11[31:0]'},
483    {'name': 'r12d',
484     'set': 0,
485     'bitsize': 32,
486     'encoding': eEncodingUint,
487     'format': eFormatHex,
488     'slice': 'r12[31:0]'},
489    {'name': 'r13d',
490     'set': 0,
491     'bitsize': 32,
492     'encoding': eEncodingUint,
493     'format': eFormatHex,
494     'slice': 'r13[31:0]'},
495    {'name': 'r14d',
496     'set': 0,
497     'bitsize': 32,
498     'encoding': eEncodingUint,
499     'format': eFormatHex,
500     'slice': 'r14[31:0]'},
501    {'name': 'r15d',
502     'set': 0,
503     'bitsize': 32,
504     'encoding': eEncodingUint,
505     'format': eFormatHex,
506     'slice': 'r15[31:0]'},
507
508    {'name': 'ax',
509     'set': 0,
510     'bitsize': 16,
511     'encoding': eEncodingUint,
512     'format': eFormatHex,
513     'slice': 'rax[15:0]'},
514    {'name': 'bx',
515     'set': 0,
516     'bitsize': 16,
517     'encoding': eEncodingUint,
518     'format': eFormatHex,
519     'slice': 'rbx[15:0]'},
520    {'name': 'cx',
521     'set': 0,
522     'bitsize': 16,
523     'encoding': eEncodingUint,
524     'format': eFormatHex,
525     'slice': 'rcx[15:0]'},
526    {'name': 'dx',
527     'set': 0,
528     'bitsize': 16,
529     'encoding': eEncodingUint,
530     'format': eFormatHex,
531     'slice': 'rdx[15:0]'},
532    {'name': 'di',
533     'set': 0,
534     'bitsize': 16,
535     'encoding': eEncodingUint,
536     'format': eFormatHex,
537     'slice': 'rdi[15:0]'},
538    {'name': 'si',
539     'set': 0,
540     'bitsize': 16,
541     'encoding': eEncodingUint,
542     'format': eFormatHex,
543     'slice': 'rsi[15:0]'},
544    {'name': 'bp',
545     'set': 0,
546     'bitsize': 16,
547     'encoding': eEncodingUint,
548     'format': eFormatHex,
549     'slice': 'rbp[15:0]'},
550    {'name': 'sp',
551     'set': 0,
552     'bitsize': 16,
553     'encoding': eEncodingUint,
554     'format': eFormatHex,
555     'slice': 'rsp[15:0]'},
556    {'name': 'r8w',
557     'set': 0,
558     'bitsize': 16,
559     'encoding': eEncodingUint,
560     'format': eFormatHex,
561     'slice': 'r8[15:0]'},
562    {'name': 'r9w',
563     'set': 0,
564     'bitsize': 16,
565     'encoding': eEncodingUint,
566     'format': eFormatHex,
567     'slice': 'r9[15:0]'},
568    {'name': 'r10w',
569     'set': 0,
570     'bitsize': 16,
571     'encoding': eEncodingUint,
572     'format': eFormatHex,
573     'slice': 'r10[15:0]'},
574    {'name': 'r11w',
575     'set': 0,
576     'bitsize': 16,
577     'encoding': eEncodingUint,
578     'format': eFormatHex,
579     'slice': 'r11[15:0]'},
580    {'name': 'r12w',
581     'set': 0,
582     'bitsize': 16,
583     'encoding': eEncodingUint,
584     'format': eFormatHex,
585     'slice': 'r12[15:0]'},
586    {'name': 'r13w',
587     'set': 0,
588     'bitsize': 16,
589     'encoding': eEncodingUint,
590     'format': eFormatHex,
591     'slice': 'r13[15:0]'},
592    {'name': 'r14w',
593     'set': 0,
594     'bitsize': 16,
595     'encoding': eEncodingUint,
596     'format': eFormatHex,
597     'slice': 'r14[15:0]'},
598    {'name': 'r15w',
599     'set': 0,
600     'bitsize': 16,
601     'encoding': eEncodingUint,
602     'format': eFormatHex,
603     'slice': 'r15[15:0]'},
604
605    {'name': 'ah',
606     'set': 0,
607     'bitsize': 8,
608     'encoding': eEncodingUint,
609     'format': eFormatHex,
610     'slice': 'rax[15:8]'},
611    {'name': 'bh',
612     'set': 0,
613     'bitsize': 8,
614     'encoding': eEncodingUint,
615     'format': eFormatHex,
616     'slice': 'rbx[15:8]'},
617    {'name': 'ch',
618     'set': 0,
619     'bitsize': 8,
620     'encoding': eEncodingUint,
621     'format': eFormatHex,
622     'slice': 'rcx[15:8]'},
623    {'name': 'dh',
624     'set': 0,
625     'bitsize': 8,
626     'encoding': eEncodingUint,
627     'format': eFormatHex,
628     'slice': 'rdx[15:8]'},
629
630    {'name': 'al',
631     'set': 0,
632     'bitsize': 8,
633     'encoding': eEncodingUint,
634     'format': eFormatHex,
635     'slice': 'rax[7:0]'},
636    {'name': 'bl',
637     'set': 0,
638     'bitsize': 8,
639     'encoding': eEncodingUint,
640     'format': eFormatHex,
641     'slice': 'rbx[7:0]'},
642    {'name': 'cl',
643     'set': 0,
644     'bitsize': 8,
645     'encoding': eEncodingUint,
646     'format': eFormatHex,
647     'slice': 'rcx[7:0]'},
648    {'name': 'dl',
649     'set': 0,
650     'bitsize': 8,
651     'encoding': eEncodingUint,
652     'format': eFormatHex,
653     'slice': 'rdx[7:0]'},
654    {'name': 'dil',
655     'set': 0,
656     'bitsize': 8,
657     'encoding': eEncodingUint,
658     'format': eFormatHex,
659     'slice': 'rdi[7:0]'},
660    {'name': 'sil',
661     'set': 0,
662     'bitsize': 8,
663     'encoding': eEncodingUint,
664     'format': eFormatHex,
665     'slice': 'rsi[7:0]'},
666    {'name': 'bpl',
667     'set': 0,
668     'bitsize': 8,
669     'encoding': eEncodingUint,
670     'format': eFormatHex,
671     'slice': 'rbp[7:0]'},
672    {'name': 'spl',
673     'set': 0,
674     'bitsize': 8,
675     'encoding': eEncodingUint,
676     'format': eFormatHex,
677     'slice': 'rsp[7:0]'},
678    {'name': 'r8l',
679     'set': 0,
680     'bitsize': 8,
681     'encoding': eEncodingUint,
682     'format': eFormatHex,
683     'slice': 'r8[7:0]'},
684    {'name': 'r9l',
685     'set': 0,
686     'bitsize': 8,
687     'encoding': eEncodingUint,
688     'format': eFormatHex,
689     'slice': 'r9[7:0]'},
690    {'name': 'r10l',
691     'set': 0,
692     'bitsize': 8,
693     'encoding': eEncodingUint,
694     'format': eFormatHex,
695     'slice': 'r10[7:0]'},
696    {'name': 'r11l',
697     'set': 0,
698     'bitsize': 8,
699     'encoding': eEncodingUint,
700     'format': eFormatHex,
701     'slice': 'r11[7:0]'},
702    {'name': 'r12l',
703     'set': 0,
704     'bitsize': 8,
705     'encoding': eEncodingUint,
706     'format': eFormatHex,
707     'slice': 'r12[7:0]'},
708    {'name': 'r13l',
709     'set': 0,
710     'bitsize': 8,
711     'encoding': eEncodingUint,
712     'format': eFormatHex,
713     'slice': 'r13[7:0]'},
714    {'name': 'r14l',
715     'set': 0,
716     'bitsize': 8,
717     'encoding': eEncodingUint,
718     'format': eFormatHex,
719     'slice': 'r14[7:0]'},
720    {'name': 'r15l',
721     'set': 0,
722     'bitsize': 8,
723     'encoding': eEncodingUint,
724     'format': eFormatHex,
725     'slice': 'r15[7:0]'},
726]
727
728g_target_definition = None
729
730
731def get_target_definition():
732    global g_target_definition
733    if g_target_definition is None:
734        g_target_definition = {}
735        offset = 0
736        for reg_info in x86_64_register_infos:
737            reg_name = reg_info['name']
738
739            # Only fill in the offset if there is no 'slice' in the register
740            # info
741            if 'slice' not in reg_info and 'composite' not in reg_info:
742                reg_info['offset'] = offset
743                offset += reg_info['bitsize'] // 8
744
745            # Set the GCC/DWARF register number for this register if it has one
746            reg_num = get_reg_num(name_to_gcc_dwarf_regnum, reg_name)
747            if reg_num != LLDB_INVALID_REGNUM:
748                reg_info['gcc'] = reg_num
749                reg_info['dwarf'] = reg_num
750
751            # Set the generic register number for this register if it has one
752            reg_num = get_reg_num(name_to_generic_regnum, reg_name)
753            if reg_num != LLDB_INVALID_REGNUM:
754                reg_info['generic'] = reg_num
755
756            # Set the GDB register number for this register if it has one
757            reg_num = get_reg_num(name_to_gdb_regnum, reg_name)
758            if reg_num != LLDB_INVALID_REGNUM:
759                reg_info['gdb'] = reg_num
760
761        g_target_definition['sets'] = [
762            'General Purpose Registers',
763            'Floating Point Registers']
764        g_target_definition['registers'] = x86_64_register_infos
765        g_target_definition[
766            'host-info'] = {'triple': 'x86_64-*-linux', 'endian': eByteOrderLittle}
767        g_target_definition['g-packet-size'] = offset
768        g_target_definition['breakpoint-pc-offset'] = -1
769    return g_target_definition
770
771
772def get_dynamic_setting(target, setting_name):
773    if setting_name == 'gdb-server-target-definition':
774        return get_target_definition()
775