1#!/usr/bin/env python 2# ===-- x86_64_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_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 196 197def get_reg_num(reg_num_dict, reg_name): 198 if reg_name in reg_num_dict: 199 return reg_num_dict[reg_name] 200 return LLDB_INVALID_REGNUM 201 202 203x86_64_register_infos = [ 204 { 205 "name": "rax", 206 "set": 0, 207 "bitsize": 64, 208 "encoding": eEncodingUint, 209 "format": eFormatAddressInfo, 210 }, 211 { 212 "name": "rbx", 213 "set": 0, 214 "bitsize": 64, 215 "encoding": eEncodingUint, 216 "format": eFormatAddressInfo, 217 }, 218 { 219 "name": "rcx", 220 "set": 0, 221 "bitsize": 64, 222 "encoding": eEncodingUint, 223 "format": eFormatAddressInfo, 224 "alt-name": "arg4", 225 }, 226 { 227 "name": "rdx", 228 "set": 0, 229 "bitsize": 64, 230 "encoding": eEncodingUint, 231 "format": eFormatAddressInfo, 232 "alt-name": "arg3", 233 }, 234 { 235 "name": "rsi", 236 "set": 0, 237 "bitsize": 64, 238 "encoding": eEncodingUint, 239 "format": eFormatAddressInfo, 240 "alt-name": "arg2", 241 }, 242 { 243 "name": "rdi", 244 "set": 0, 245 "bitsize": 64, 246 "encoding": eEncodingUint, 247 "format": eFormatAddressInfo, 248 "alt-name": "arg1", 249 }, 250 { 251 "name": "rbp", 252 "set": 0, 253 "bitsize": 64, 254 "encoding": eEncodingUint, 255 "format": eFormatAddressInfo, 256 "alt-name": "fp", 257 }, 258 { 259 "name": "rsp", 260 "set": 0, 261 "bitsize": 64, 262 "encoding": eEncodingUint, 263 "format": eFormatAddressInfo, 264 "alt-name": "sp", 265 }, 266 { 267 "name": "r8", 268 "set": 0, 269 "bitsize": 64, 270 "encoding": eEncodingUint, 271 "format": eFormatAddressInfo, 272 "alt-name": "arg5", 273 }, 274 { 275 "name": "r9", 276 "set": 0, 277 "bitsize": 64, 278 "encoding": eEncodingUint, 279 "format": eFormatAddressInfo, 280 "alt-name": "arg6", 281 }, 282 { 283 "name": "r10", 284 "set": 0, 285 "bitsize": 64, 286 "encoding": eEncodingUint, 287 "format": eFormatAddressInfo, 288 }, 289 { 290 "name": "r11", 291 "set": 0, 292 "bitsize": 64, 293 "encoding": eEncodingUint, 294 "format": eFormatAddressInfo, 295 }, 296 { 297 "name": "r12", 298 "set": 0, 299 "bitsize": 64, 300 "encoding": eEncodingUint, 301 "format": eFormatAddressInfo, 302 }, 303 { 304 "name": "r13", 305 "set": 0, 306 "bitsize": 64, 307 "encoding": eEncodingUint, 308 "format": eFormatAddressInfo, 309 }, 310 { 311 "name": "r14", 312 "set": 0, 313 "bitsize": 64, 314 "encoding": eEncodingUint, 315 "format": eFormatAddressInfo, 316 }, 317 { 318 "name": "r15", 319 "set": 0, 320 "bitsize": 64, 321 "encoding": eEncodingUint, 322 "format": eFormatAddressInfo, 323 }, 324 { 325 "name": "rip", 326 "set": 0, 327 "bitsize": 64, 328 "encoding": eEncodingUint, 329 "format": eFormatAddressInfo, 330 "alt-name": "pc", 331 }, 332 { 333 "name": "rflags", 334 "set": 0, 335 "bitsize": 32, 336 "encoding": eEncodingUint, 337 "format": eFormatHex, 338 }, 339 { 340 "name": "cs", 341 "set": 0, 342 "bitsize": 32, 343 "encoding": eEncodingUint, 344 "format": eFormatHex, 345 }, 346 { 347 "name": "ss", 348 "set": 0, 349 "bitsize": 32, 350 "encoding": eEncodingUint, 351 "format": eFormatHex, 352 }, 353 { 354 "name": "ds", 355 "set": 0, 356 "bitsize": 32, 357 "encoding": eEncodingUint, 358 "format": eFormatHex, 359 }, 360 { 361 "name": "es", 362 "set": 0, 363 "bitsize": 32, 364 "encoding": eEncodingUint, 365 "format": eFormatHex, 366 }, 367 { 368 "name": "fs", 369 "set": 0, 370 "bitsize": 32, 371 "encoding": eEncodingUint, 372 "format": eFormatHex, 373 }, 374 { 375 "name": "gs", 376 "set": 0, 377 "bitsize": 32, 378 "encoding": eEncodingUint, 379 "format": eFormatHex, 380 }, 381 { 382 "name": "stmm0", 383 "set": 1, 384 "bitsize": 80, 385 "encoding": eEncodingVector, 386 "format": eFormatVectorOfUInt8, 387 }, 388 { 389 "name": "stmm1", 390 "set": 1, 391 "bitsize": 80, 392 "encoding": eEncodingVector, 393 "format": eFormatVectorOfUInt8, 394 }, 395 { 396 "name": "stmm2", 397 "set": 1, 398 "bitsize": 80, 399 "encoding": eEncodingVector, 400 "format": eFormatVectorOfUInt8, 401 }, 402 { 403 "name": "stmm3", 404 "set": 1, 405 "bitsize": 80, 406 "encoding": eEncodingVector, 407 "format": eFormatVectorOfUInt8, 408 }, 409 { 410 "name": "stmm4", 411 "set": 1, 412 "bitsize": 80, 413 "encoding": eEncodingVector, 414 "format": eFormatVectorOfUInt8, 415 }, 416 { 417 "name": "stmm5", 418 "set": 1, 419 "bitsize": 80, 420 "encoding": eEncodingVector, 421 "format": eFormatVectorOfUInt8, 422 }, 423 { 424 "name": "stmm6", 425 "set": 1, 426 "bitsize": 80, 427 "encoding": eEncodingVector, 428 "format": eFormatVectorOfUInt8, 429 }, 430 { 431 "name": "stmm7", 432 "set": 1, 433 "bitsize": 80, 434 "encoding": eEncodingVector, 435 "format": eFormatVectorOfUInt8, 436 }, 437 { 438 "name": "fctrl", 439 "set": 1, 440 "bitsize": 32, 441 "encoding": eEncodingUint, 442 "format": eFormatHex, 443 }, 444 { 445 "name": "fstat", 446 "set": 1, 447 "bitsize": 32, 448 "encoding": eEncodingUint, 449 "format": eFormatHex, 450 }, 451 { 452 "name": "ftag", 453 "set": 1, 454 "bitsize": 32, 455 "encoding": eEncodingUint, 456 "format": eFormatHex, 457 }, 458 { 459 "name": "fiseg", 460 "set": 1, 461 "bitsize": 32, 462 "encoding": eEncodingUint, 463 "format": eFormatHex, 464 }, 465 { 466 "name": "fioff", 467 "set": 1, 468 "bitsize": 32, 469 "encoding": eEncodingUint, 470 "format": eFormatHex, 471 }, 472 { 473 "name": "foseg", 474 "set": 1, 475 "bitsize": 32, 476 "encoding": eEncodingUint, 477 "format": eFormatHex, 478 }, 479 { 480 "name": "fooff", 481 "set": 1, 482 "bitsize": 32, 483 "encoding": eEncodingUint, 484 "format": eFormatHex, 485 }, 486 { 487 "name": "fop", 488 "set": 1, 489 "bitsize": 32, 490 "encoding": eEncodingUint, 491 "format": eFormatHex, 492 }, 493 { 494 "name": "xmm0", 495 "set": 1, 496 "bitsize": 128, 497 "encoding": eEncodingVector, 498 "format": eFormatVectorOfUInt8, 499 }, 500 { 501 "name": "xmm1", 502 "set": 1, 503 "bitsize": 128, 504 "encoding": eEncodingVector, 505 "format": eFormatVectorOfUInt8, 506 }, 507 { 508 "name": "xmm2", 509 "set": 1, 510 "bitsize": 128, 511 "encoding": eEncodingVector, 512 "format": eFormatVectorOfUInt8, 513 }, 514 { 515 "name": "xmm3", 516 "set": 1, 517 "bitsize": 128, 518 "encoding": eEncodingVector, 519 "format": eFormatVectorOfUInt8, 520 }, 521 { 522 "name": "xmm4", 523 "set": 1, 524 "bitsize": 128, 525 "encoding": eEncodingVector, 526 "format": eFormatVectorOfUInt8, 527 }, 528 { 529 "name": "xmm5", 530 "set": 1, 531 "bitsize": 128, 532 "encoding": eEncodingVector, 533 "format": eFormatVectorOfUInt8, 534 }, 535 { 536 "name": "xmm6", 537 "set": 1, 538 "bitsize": 128, 539 "encoding": eEncodingVector, 540 "format": eFormatVectorOfUInt8, 541 }, 542 { 543 "name": "xmm7", 544 "set": 1, 545 "bitsize": 128, 546 "encoding": eEncodingVector, 547 "format": eFormatVectorOfUInt8, 548 }, 549 { 550 "name": "xmm8", 551 "set": 1, 552 "bitsize": 128, 553 "encoding": eEncodingVector, 554 "format": eFormatVectorOfUInt8, 555 }, 556 { 557 "name": "xmm9", 558 "set": 1, 559 "bitsize": 128, 560 "encoding": eEncodingVector, 561 "format": eFormatVectorOfUInt8, 562 }, 563 { 564 "name": "xmm10", 565 "set": 1, 566 "bitsize": 128, 567 "encoding": eEncodingVector, 568 "format": eFormatVectorOfUInt8, 569 }, 570 { 571 "name": "xmm11", 572 "set": 1, 573 "bitsize": 128, 574 "encoding": eEncodingVector, 575 "format": eFormatVectorOfUInt8, 576 }, 577 { 578 "name": "xmm12", 579 "set": 1, 580 "bitsize": 128, 581 "encoding": eEncodingVector, 582 "format": eFormatVectorOfUInt8, 583 }, 584 { 585 "name": "xmm13", 586 "set": 1, 587 "bitsize": 128, 588 "encoding": eEncodingVector, 589 "format": eFormatVectorOfUInt8, 590 }, 591 { 592 "name": "xmm14", 593 "set": 1, 594 "bitsize": 128, 595 "encoding": eEncodingVector, 596 "format": eFormatVectorOfUInt8, 597 }, 598 { 599 "name": "xmm15", 600 "set": 1, 601 "bitsize": 128, 602 "encoding": eEncodingVector, 603 "format": eFormatVectorOfUInt8, 604 }, 605 { 606 "name": "mxcsr", 607 "set": 1, 608 "bitsize": 32, 609 "encoding": eEncodingUint, 610 "format": eFormatHex, 611 }, 612 # Registers that are contained in or composed of one of more other 613 # registers 614 { 615 "name": "eax", 616 "set": 0, 617 "bitsize": 32, 618 "encoding": eEncodingUint, 619 "format": eFormatHex, 620 "slice": "rax[31:0]", 621 }, 622 { 623 "name": "ebx", 624 "set": 0, 625 "bitsize": 32, 626 "encoding": eEncodingUint, 627 "format": eFormatHex, 628 "slice": "rbx[31:0]", 629 }, 630 { 631 "name": "ecx", 632 "set": 0, 633 "bitsize": 32, 634 "encoding": eEncodingUint, 635 "format": eFormatHex, 636 "slice": "rcx[31:0]", 637 }, 638 { 639 "name": "edx", 640 "set": 0, 641 "bitsize": 32, 642 "encoding": eEncodingUint, 643 "format": eFormatHex, 644 "slice": "rdx[31:0]", 645 }, 646 { 647 "name": "edi", 648 "set": 0, 649 "bitsize": 32, 650 "encoding": eEncodingUint, 651 "format": eFormatHex, 652 "slice": "rdi[31:0]", 653 }, 654 { 655 "name": "esi", 656 "set": 0, 657 "bitsize": 32, 658 "encoding": eEncodingUint, 659 "format": eFormatHex, 660 "slice": "rsi[31:0]", 661 }, 662 { 663 "name": "ebp", 664 "set": 0, 665 "bitsize": 32, 666 "encoding": eEncodingUint, 667 "format": eFormatHex, 668 "slice": "rbp[31:0]", 669 }, 670 { 671 "name": "esp", 672 "set": 0, 673 "bitsize": 32, 674 "encoding": eEncodingUint, 675 "format": eFormatHex, 676 "slice": "rsp[31:0]", 677 }, 678 { 679 "name": "r8d", 680 "set": 0, 681 "bitsize": 32, 682 "encoding": eEncodingUint, 683 "format": eFormatHex, 684 "slice": "r8[31:0]", 685 }, 686 { 687 "name": "r9d", 688 "set": 0, 689 "bitsize": 32, 690 "encoding": eEncodingUint, 691 "format": eFormatHex, 692 "slice": "r9[31:0]", 693 }, 694 { 695 "name": "r10d", 696 "set": 0, 697 "bitsize": 32, 698 "encoding": eEncodingUint, 699 "format": eFormatHex, 700 "slice": "r10[31:0]", 701 }, 702 { 703 "name": "r11d", 704 "set": 0, 705 "bitsize": 32, 706 "encoding": eEncodingUint, 707 "format": eFormatHex, 708 "slice": "r11[31:0]", 709 }, 710 { 711 "name": "r12d", 712 "set": 0, 713 "bitsize": 32, 714 "encoding": eEncodingUint, 715 "format": eFormatHex, 716 "slice": "r12[31:0]", 717 }, 718 { 719 "name": "r13d", 720 "set": 0, 721 "bitsize": 32, 722 "encoding": eEncodingUint, 723 "format": eFormatHex, 724 "slice": "r13[31:0]", 725 }, 726 { 727 "name": "r14d", 728 "set": 0, 729 "bitsize": 32, 730 "encoding": eEncodingUint, 731 "format": eFormatHex, 732 "slice": "r14[31:0]", 733 }, 734 { 735 "name": "r15d", 736 "set": 0, 737 "bitsize": 32, 738 "encoding": eEncodingUint, 739 "format": eFormatHex, 740 "slice": "r15[31:0]", 741 }, 742 { 743 "name": "ax", 744 "set": 0, 745 "bitsize": 16, 746 "encoding": eEncodingUint, 747 "format": eFormatHex, 748 "slice": "rax[15:0]", 749 }, 750 { 751 "name": "bx", 752 "set": 0, 753 "bitsize": 16, 754 "encoding": eEncodingUint, 755 "format": eFormatHex, 756 "slice": "rbx[15:0]", 757 }, 758 { 759 "name": "cx", 760 "set": 0, 761 "bitsize": 16, 762 "encoding": eEncodingUint, 763 "format": eFormatHex, 764 "slice": "rcx[15:0]", 765 }, 766 { 767 "name": "dx", 768 "set": 0, 769 "bitsize": 16, 770 "encoding": eEncodingUint, 771 "format": eFormatHex, 772 "slice": "rdx[15:0]", 773 }, 774 { 775 "name": "di", 776 "set": 0, 777 "bitsize": 16, 778 "encoding": eEncodingUint, 779 "format": eFormatHex, 780 "slice": "rdi[15:0]", 781 }, 782 { 783 "name": "si", 784 "set": 0, 785 "bitsize": 16, 786 "encoding": eEncodingUint, 787 "format": eFormatHex, 788 "slice": "rsi[15:0]", 789 }, 790 { 791 "name": "bp", 792 "set": 0, 793 "bitsize": 16, 794 "encoding": eEncodingUint, 795 "format": eFormatHex, 796 "slice": "rbp[15:0]", 797 }, 798 { 799 "name": "sp", 800 "set": 0, 801 "bitsize": 16, 802 "encoding": eEncodingUint, 803 "format": eFormatHex, 804 "slice": "rsp[15:0]", 805 }, 806 { 807 "name": "r8w", 808 "set": 0, 809 "bitsize": 16, 810 "encoding": eEncodingUint, 811 "format": eFormatHex, 812 "slice": "r8[15:0]", 813 }, 814 { 815 "name": "r9w", 816 "set": 0, 817 "bitsize": 16, 818 "encoding": eEncodingUint, 819 "format": eFormatHex, 820 "slice": "r9[15:0]", 821 }, 822 { 823 "name": "r10w", 824 "set": 0, 825 "bitsize": 16, 826 "encoding": eEncodingUint, 827 "format": eFormatHex, 828 "slice": "r10[15:0]", 829 }, 830 { 831 "name": "r11w", 832 "set": 0, 833 "bitsize": 16, 834 "encoding": eEncodingUint, 835 "format": eFormatHex, 836 "slice": "r11[15:0]", 837 }, 838 { 839 "name": "r12w", 840 "set": 0, 841 "bitsize": 16, 842 "encoding": eEncodingUint, 843 "format": eFormatHex, 844 "slice": "r12[15:0]", 845 }, 846 { 847 "name": "r13w", 848 "set": 0, 849 "bitsize": 16, 850 "encoding": eEncodingUint, 851 "format": eFormatHex, 852 "slice": "r13[15:0]", 853 }, 854 { 855 "name": "r14w", 856 "set": 0, 857 "bitsize": 16, 858 "encoding": eEncodingUint, 859 "format": eFormatHex, 860 "slice": "r14[15:0]", 861 }, 862 { 863 "name": "r15w", 864 "set": 0, 865 "bitsize": 16, 866 "encoding": eEncodingUint, 867 "format": eFormatHex, 868 "slice": "r15[15:0]", 869 }, 870 { 871 "name": "ah", 872 "set": 0, 873 "bitsize": 8, 874 "encoding": eEncodingUint, 875 "format": eFormatHex, 876 "slice": "rax[15:8]", 877 }, 878 { 879 "name": "bh", 880 "set": 0, 881 "bitsize": 8, 882 "encoding": eEncodingUint, 883 "format": eFormatHex, 884 "slice": "rbx[15:8]", 885 }, 886 { 887 "name": "ch", 888 "set": 0, 889 "bitsize": 8, 890 "encoding": eEncodingUint, 891 "format": eFormatHex, 892 "slice": "rcx[15:8]", 893 }, 894 { 895 "name": "dh", 896 "set": 0, 897 "bitsize": 8, 898 "encoding": eEncodingUint, 899 "format": eFormatHex, 900 "slice": "rdx[15:8]", 901 }, 902 { 903 "name": "al", 904 "set": 0, 905 "bitsize": 8, 906 "encoding": eEncodingUint, 907 "format": eFormatHex, 908 "slice": "rax[7:0]", 909 }, 910 { 911 "name": "bl", 912 "set": 0, 913 "bitsize": 8, 914 "encoding": eEncodingUint, 915 "format": eFormatHex, 916 "slice": "rbx[7:0]", 917 }, 918 { 919 "name": "cl", 920 "set": 0, 921 "bitsize": 8, 922 "encoding": eEncodingUint, 923 "format": eFormatHex, 924 "slice": "rcx[7:0]", 925 }, 926 { 927 "name": "dl", 928 "set": 0, 929 "bitsize": 8, 930 "encoding": eEncodingUint, 931 "format": eFormatHex, 932 "slice": "rdx[7:0]", 933 }, 934 { 935 "name": "dil", 936 "set": 0, 937 "bitsize": 8, 938 "encoding": eEncodingUint, 939 "format": eFormatHex, 940 "slice": "rdi[7:0]", 941 }, 942 { 943 "name": "sil", 944 "set": 0, 945 "bitsize": 8, 946 "encoding": eEncodingUint, 947 "format": eFormatHex, 948 "slice": "rsi[7:0]", 949 }, 950 { 951 "name": "bpl", 952 "set": 0, 953 "bitsize": 8, 954 "encoding": eEncodingUint, 955 "format": eFormatHex, 956 "slice": "rbp[7:0]", 957 }, 958 { 959 "name": "spl", 960 "set": 0, 961 "bitsize": 8, 962 "encoding": eEncodingUint, 963 "format": eFormatHex, 964 "slice": "rsp[7:0]", 965 }, 966 { 967 "name": "r8l", 968 "set": 0, 969 "bitsize": 8, 970 "encoding": eEncodingUint, 971 "format": eFormatHex, 972 "slice": "r8[7:0]", 973 }, 974 { 975 "name": "r9l", 976 "set": 0, 977 "bitsize": 8, 978 "encoding": eEncodingUint, 979 "format": eFormatHex, 980 "slice": "r9[7:0]", 981 }, 982 { 983 "name": "r10l", 984 "set": 0, 985 "bitsize": 8, 986 "encoding": eEncodingUint, 987 "format": eFormatHex, 988 "slice": "r10[7:0]", 989 }, 990 { 991 "name": "r11l", 992 "set": 0, 993 "bitsize": 8, 994 "encoding": eEncodingUint, 995 "format": eFormatHex, 996 "slice": "r11[7:0]", 997 }, 998 { 999 "name": "r12l", 1000 "set": 0, 1001 "bitsize": 8, 1002 "encoding": eEncodingUint, 1003 "format": eFormatHex, 1004 "slice": "r12[7:0]", 1005 }, 1006 { 1007 "name": "r13l", 1008 "set": 0, 1009 "bitsize": 8, 1010 "encoding": eEncodingUint, 1011 "format": eFormatHex, 1012 "slice": "r13[7:0]", 1013 }, 1014 { 1015 "name": "r14l", 1016 "set": 0, 1017 "bitsize": 8, 1018 "encoding": eEncodingUint, 1019 "format": eFormatHex, 1020 "slice": "r14[7:0]", 1021 }, 1022 { 1023 "name": "r15l", 1024 "set": 0, 1025 "bitsize": 8, 1026 "encoding": eEncodingUint, 1027 "format": eFormatHex, 1028 "slice": "r15[7:0]", 1029 }, 1030] 1031 1032g_target_definition = None 1033 1034 1035def get_target_definition(): 1036 global g_target_definition 1037 if g_target_definition is None: 1038 g_target_definition = {} 1039 offset = 0 1040 for reg_info in x86_64_register_infos: 1041 reg_name = reg_info["name"] 1042 1043 # Only fill in the offset if there is no 'slice' in the register 1044 # info 1045 if "slice" not in reg_info and "composite" not in reg_info: 1046 reg_info["offset"] = offset 1047 offset += reg_info["bitsize"] // 8 1048 1049 # Set the GCC/DWARF register number for this register if it has one 1050 reg_num = get_reg_num(name_to_gcc_dwarf_regnum, reg_name) 1051 if reg_num != LLDB_INVALID_REGNUM: 1052 reg_info["gcc"] = reg_num 1053 reg_info["dwarf"] = reg_num 1054 1055 # Set the generic register number for this register if it has one 1056 reg_num = get_reg_num(name_to_generic_regnum, reg_name) 1057 if reg_num != LLDB_INVALID_REGNUM: 1058 reg_info["generic"] = reg_num 1059 1060 # Set the GDB register number for this register if it has one 1061 reg_num = get_reg_num(name_to_gdb_regnum, reg_name) 1062 if reg_num != LLDB_INVALID_REGNUM: 1063 reg_info["gdb"] = reg_num 1064 1065 g_target_definition["sets"] = [ 1066 "General Purpose Registers", 1067 "Floating Point Registers", 1068 ] 1069 g_target_definition["registers"] = x86_64_register_infos 1070 g_target_definition["host-info"] = { 1071 "triple": "x86_64-apple-macosx", 1072 "endian": eByteOrderLittle, 1073 } 1074 g_target_definition["g-packet-size"] = offset 1075 return g_target_definition 1076 1077 1078def get_dynamic_setting(target, setting_name): 1079 if setting_name == "gdb-server-target-definition": 1080 return get_target_definition() 1081