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