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