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