| #!/usr/bin/env python3 | |
| # ===-- x86_64_linux_target_definition.py -----------------------------*- C++ -*-===// | |
| # | |
| # Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | |
| # See https://llvm.org/LICENSE.txt for license information. | |
| # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | |
| # | |
| # ===----------------------------------------------------------------------===// | |
| # ---------------------------------------------------------------------- | |
| # DESCRIPTION | |
| # | |
| # This file can be used with the following setting: | |
| # plugin.process.gdb-remote.target-definition-file | |
| # This setting should be used when you are trying to connect to a | |
| # remote GDB server that doesn't support any of the register discovery | |
| # packets that LLDB normally uses. | |
| # | |
| # Why is this necessary? LLDB doesn't require a new build of LLDB that | |
| # targets each new architecture you will debug with. Instead, all | |
| # architectures are supported and LLDB relies on extra GDB server | |
| # packets to discover the target we are connecting to so that is can | |
| # show the right registers for each target. This allows the GDB server | |
| # to change and add new registers without requiring a new LLDB build | |
| # just so we can see new registers. | |
| # | |
| # This file implements the x86_64 registers for the darwin version of | |
| # GDB and allows you to connect to servers that use this register set. | |
| # | |
| # USAGE | |
| # | |
| # (lldb) settings set plugin.process.gdb-remote.target-definition-file /path/to/x86_64_linux_target_definition.py | |
| # (lldb) gdb-remote other.baz.com:1234 | |
| # | |
| # The target definition file will get used if and only if the | |
| # qRegisterInfo packets are not supported when connecting to a remote | |
| # GDB server. | |
| # ---------------------------------------------------------------------- | |
| from lldb import * | |
| # Compiler and DWARF register numbers | |
| name_to_gcc_dwarf_regnum = { | |
| "rax": 0, | |
| "rdx": 1, | |
| "rcx": 2, | |
| "rbx": 3, | |
| "rsi": 4, | |
| "rdi": 5, | |
| "rbp": 6, | |
| "rsp": 7, | |
| "r8": 8, | |
| "r9": 9, | |
| "r10": 10, | |
| "r11": 11, | |
| "r12": 12, | |
| "r13": 13, | |
| "r14": 14, | |
| "r15": 15, | |
| "rip": 16, | |
| "xmm0": 17, | |
| "xmm1": 18, | |
| "xmm2": 19, | |
| "xmm3": 20, | |
| "xmm4": 21, | |
| "xmm5": 22, | |
| "xmm6": 23, | |
| "xmm7": 24, | |
| "xmm8": 25, | |
| "xmm9": 26, | |
| "xmm10": 27, | |
| "xmm11": 28, | |
| "xmm12": 29, | |
| "xmm13": 30, | |
| "xmm14": 31, | |
| "xmm15": 32, | |
| "stmm0": 33, | |
| "stmm1": 34, | |
| "stmm2": 35, | |
| "stmm3": 36, | |
| "stmm4": 37, | |
| "stmm5": 38, | |
| "stmm6": 39, | |
| "stmm7": 30, | |
| "ymm0": 41, | |
| "ymm1": 42, | |
| "ymm2": 43, | |
| "ymm3": 44, | |
| "ymm4": 45, | |
| "ymm5": 46, | |
| "ymm6": 47, | |
| "ymm7": 48, | |
| "ymm8": 49, | |
| "ymm9": 40, | |
| "ymm10": 41, | |
| "ymm11": 42, | |
| "ymm12": 43, | |
| "ymm13": 44, | |
| "ymm14": 45, | |
| "ymm15": 46, | |
| } | |
| name_to_gdb_regnum = { | |
| "rax": 0, | |
| "rbx": 1, | |
| "rcx": 2, | |
| "rdx": 3, | |
| "rsi": 4, | |
| "rdi": 5, | |
| "rbp": 6, | |
| "rsp": 7, | |
| "r8": 8, | |
| "r9": 9, | |
| "r10": 10, | |
| "r11": 11, | |
| "r12": 12, | |
| "r13": 13, | |
| "r14": 14, | |
| "r15": 15, | |
| "rip": 16, | |
| "rflags": 17, | |
| "cs": 18, | |
| "ss": 19, | |
| "ds": 20, | |
| "es": 21, | |
| "fs": 22, | |
| "gs": 23, | |
| "stmm0": 24, | |
| "stmm1": 25, | |
| "stmm2": 26, | |
| "stmm3": 27, | |
| "stmm4": 28, | |
| "stmm5": 29, | |
| "stmm6": 30, | |
| "stmm7": 31, | |
| "fctrl": 32, | |
| "fstat": 33, | |
| "ftag": 34, | |
| "fiseg": 35, | |
| "fioff": 36, | |
| "foseg": 37, | |
| "fooff": 38, | |
| "fop": 39, | |
| "xmm0": 40, | |
| "xmm1": 41, | |
| "xmm2": 42, | |
| "xmm3": 43, | |
| "xmm4": 44, | |
| "xmm5": 45, | |
| "xmm6": 46, | |
| "xmm7": 47, | |
| "xmm8": 48, | |
| "xmm9": 49, | |
| "xmm10": 50, | |
| "xmm11": 51, | |
| "xmm12": 52, | |
| "xmm13": 53, | |
| "xmm14": 54, | |
| "xmm15": 55, | |
| "mxcsr": 56, | |
| "ymm0": 57, | |
| "ymm1": 58, | |
| "ymm2": 59, | |
| "ymm3": 60, | |
| "ymm4": 61, | |
| "ymm5": 62, | |
| "ymm6": 63, | |
| "ymm7": 64, | |
| "ymm8": 65, | |
| "ymm9": 66, | |
| "ymm10": 67, | |
| "ymm11": 68, | |
| "ymm12": 69, | |
| "ymm13": 70, | |
| "ymm14": 71, | |
| "ymm15": 72, | |
| } | |
| name_to_generic_regnum = { | |
| "rip": LLDB_REGNUM_GENERIC_PC, | |
| "rsp": LLDB_REGNUM_GENERIC_SP, | |
| "rbp": LLDB_REGNUM_GENERIC_FP, | |
| "rdi": LLDB_REGNUM_GENERIC_ARG1, | |
| "rsi": LLDB_REGNUM_GENERIC_ARG2, | |
| "rdx": LLDB_REGNUM_GENERIC_ARG3, | |
| "rcx": LLDB_REGNUM_GENERIC_ARG4, | |
| "r8": LLDB_REGNUM_GENERIC_ARG5, | |
| "r9": LLDB_REGNUM_GENERIC_ARG6, | |
| } | |
| def get_reg_num(reg_num_dict, reg_name): | |
| if reg_name in reg_num_dict: | |
| return reg_num_dict[reg_name] | |
| return LLDB_INVALID_REGNUM | |
| x86_64_register_infos = [ | |
| { | |
| "name": "rax", | |
| "set": 0, | |
| "bitsize": 64, | |
| "encoding": eEncodingUint, | |
| "format": eFormatAddressInfo, | |
| }, | |
| { | |
| "name": "rbx", | |
| "set": 0, | |
| "bitsize": 64, | |
| "encoding": eEncodingUint, | |
| "format": eFormatAddressInfo, | |
| }, | |
| { | |
| "name": "rcx", | |
| "set": 0, | |
| "bitsize": 64, | |
| "encoding": eEncodingUint, | |
| "format": eFormatAddressInfo, | |
| "alt-name": "arg4", | |
| }, | |
| { | |
| "name": "rdx", | |
| "set": 0, | |
| "bitsize": 64, | |
| "encoding": eEncodingUint, | |
| "format": eFormatAddressInfo, | |
| "alt-name": "arg3", | |
| }, | |
| { | |
| "name": "rsi", | |
| "set": 0, | |
| "bitsize": 64, | |
| "encoding": eEncodingUint, | |
| "format": eFormatAddressInfo, | |
| "alt-name": "arg2", | |
| }, | |
| { | |
| "name": "rdi", | |
| "set": 0, | |
| "bitsize": 64, | |
| "encoding": eEncodingUint, | |
| "format": eFormatAddressInfo, | |
| "alt-name": "arg1", | |
| }, | |
| { | |
| "name": "rbp", | |
| "set": 0, | |
| "bitsize": 64, | |
| "encoding": eEncodingUint, | |
| "format": eFormatAddressInfo, | |
| "alt-name": "fp", | |
| }, | |
| { | |
| "name": "rsp", | |
| "set": 0, | |
| "bitsize": 64, | |
| "encoding": eEncodingUint, | |
| "format": eFormatAddressInfo, | |
| "alt-name": "sp", | |
| }, | |
| { | |
| "name": "r8", | |
| "set": 0, | |
| "bitsize": 64, | |
| "encoding": eEncodingUint, | |
| "format": eFormatAddressInfo, | |
| "alt-name": "arg5", | |
| }, | |
| { | |
| "name": "r9", | |
| "set": 0, | |
| "bitsize": 64, | |
| "encoding": eEncodingUint, | |
| "format": eFormatAddressInfo, | |
| "alt-name": "arg6", | |
| }, | |
| { | |
| "name": "r10", | |
| "set": 0, | |
| "bitsize": 64, | |
| "encoding": eEncodingUint, | |
| "format": eFormatAddressInfo, | |
| }, | |
| { | |
| "name": "r11", | |
| "set": 0, | |
| "bitsize": 64, | |
| "encoding": eEncodingUint, | |
| "format": eFormatAddressInfo, | |
| }, | |
| { | |
| "name": "r12", | |
| "set": 0, | |
| "bitsize": 64, | |
| "encoding": eEncodingUint, | |
| "format": eFormatAddressInfo, | |
| }, | |
| { | |
| "name": "r13", | |
| "set": 0, | |
| "bitsize": 64, | |
| "encoding": eEncodingUint, | |
| "format": eFormatAddressInfo, | |
| }, | |
| { | |
| "name": "r14", | |
| "set": 0, | |
| "bitsize": 64, | |
| "encoding": eEncodingUint, | |
| "format": eFormatAddressInfo, | |
| }, | |
| { | |
| "name": "r15", | |
| "set": 0, | |
| "bitsize": 64, | |
| "encoding": eEncodingUint, | |
| "format": eFormatAddressInfo, | |
| }, | |
| { | |
| "name": "rip", | |
| "set": 0, | |
| "bitsize": 64, | |
| "encoding": eEncodingUint, | |
| "format": eFormatAddressInfo, | |
| "alt-name": "pc", | |
| }, | |
| { | |
| "name": "rflags", | |
| "set": 0, | |
| "bitsize": 32, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| }, | |
| { | |
| "name": "cs", | |
| "set": 0, | |
| "bitsize": 32, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| }, | |
| { | |
| "name": "ss", | |
| "set": 0, | |
| "bitsize": 32, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| }, | |
| { | |
| "name": "ds", | |
| "set": 0, | |
| "bitsize": 32, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| }, | |
| { | |
| "name": "es", | |
| "set": 0, | |
| "bitsize": 32, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| }, | |
| { | |
| "name": "fs", | |
| "set": 0, | |
| "bitsize": 32, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| }, | |
| { | |
| "name": "gs", | |
| "set": 0, | |
| "bitsize": 32, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| }, | |
| { | |
| "name": "stmm0", | |
| "set": 1, | |
| "bitsize": 80, | |
| "encoding": eEncodingVector, | |
| "format": eFormatVectorOfUInt8, | |
| }, | |
| { | |
| "name": "stmm1", | |
| "set": 1, | |
| "bitsize": 80, | |
| "encoding": eEncodingVector, | |
| "format": eFormatVectorOfUInt8, | |
| }, | |
| { | |
| "name": "stmm2", | |
| "set": 1, | |
| "bitsize": 80, | |
| "encoding": eEncodingVector, | |
| "format": eFormatVectorOfUInt8, | |
| }, | |
| { | |
| "name": "stmm3", | |
| "set": 1, | |
| "bitsize": 80, | |
| "encoding": eEncodingVector, | |
| "format": eFormatVectorOfUInt8, | |
| }, | |
| { | |
| "name": "stmm4", | |
| "set": 1, | |
| "bitsize": 80, | |
| "encoding": eEncodingVector, | |
| "format": eFormatVectorOfUInt8, | |
| }, | |
| { | |
| "name": "stmm5", | |
| "set": 1, | |
| "bitsize": 80, | |
| "encoding": eEncodingVector, | |
| "format": eFormatVectorOfUInt8, | |
| }, | |
| { | |
| "name": "stmm6", | |
| "set": 1, | |
| "bitsize": 80, | |
| "encoding": eEncodingVector, | |
| "format": eFormatVectorOfUInt8, | |
| }, | |
| { | |
| "name": "stmm7", | |
| "set": 1, | |
| "bitsize": 80, | |
| "encoding": eEncodingVector, | |
| "format": eFormatVectorOfUInt8, | |
| }, | |
| { | |
| "name": "fctrl", | |
| "set": 1, | |
| "bitsize": 32, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| }, | |
| { | |
| "name": "fstat", | |
| "set": 1, | |
| "bitsize": 32, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| }, | |
| { | |
| "name": "ftag", | |
| "set": 1, | |
| "bitsize": 32, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| }, | |
| { | |
| "name": "fiseg", | |
| "set": 1, | |
| "bitsize": 32, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| }, | |
| { | |
| "name": "fioff", | |
| "set": 1, | |
| "bitsize": 32, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| }, | |
| { | |
| "name": "foseg", | |
| "set": 1, | |
| "bitsize": 32, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| }, | |
| { | |
| "name": "fooff", | |
| "set": 1, | |
| "bitsize": 32, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| }, | |
| { | |
| "name": "fop", | |
| "set": 1, | |
| "bitsize": 32, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| }, | |
| { | |
| "name": "xmm0", | |
| "set": 1, | |
| "bitsize": 128, | |
| "encoding": eEncodingVector, | |
| "format": eFormatVectorOfUInt8, | |
| }, | |
| { | |
| "name": "xmm1", | |
| "set": 1, | |
| "bitsize": 128, | |
| "encoding": eEncodingVector, | |
| "format": eFormatVectorOfUInt8, | |
| }, | |
| { | |
| "name": "xmm2", | |
| "set": 1, | |
| "bitsize": 128, | |
| "encoding": eEncodingVector, | |
| "format": eFormatVectorOfUInt8, | |
| }, | |
| { | |
| "name": "xmm3", | |
| "set": 1, | |
| "bitsize": 128, | |
| "encoding": eEncodingVector, | |
| "format": eFormatVectorOfUInt8, | |
| }, | |
| { | |
| "name": "xmm4", | |
| "set": 1, | |
| "bitsize": 128, | |
| "encoding": eEncodingVector, | |
| "format": eFormatVectorOfUInt8, | |
| }, | |
| { | |
| "name": "xmm5", | |
| "set": 1, | |
| "bitsize": 128, | |
| "encoding": eEncodingVector, | |
| "format": eFormatVectorOfUInt8, | |
| }, | |
| { | |
| "name": "xmm6", | |
| "set": 1, | |
| "bitsize": 128, | |
| "encoding": eEncodingVector, | |
| "format": eFormatVectorOfUInt8, | |
| }, | |
| { | |
| "name": "xmm7", | |
| "set": 1, | |
| "bitsize": 128, | |
| "encoding": eEncodingVector, | |
| "format": eFormatVectorOfUInt8, | |
| }, | |
| { | |
| "name": "xmm8", | |
| "set": 1, | |
| "bitsize": 128, | |
| "encoding": eEncodingVector, | |
| "format": eFormatVectorOfUInt8, | |
| }, | |
| { | |
| "name": "xmm9", | |
| "set": 1, | |
| "bitsize": 128, | |
| "encoding": eEncodingVector, | |
| "format": eFormatVectorOfUInt8, | |
| }, | |
| { | |
| "name": "xmm10", | |
| "set": 1, | |
| "bitsize": 128, | |
| "encoding": eEncodingVector, | |
| "format": eFormatVectorOfUInt8, | |
| }, | |
| { | |
| "name": "xmm11", | |
| "set": 1, | |
| "bitsize": 128, | |
| "encoding": eEncodingVector, | |
| "format": eFormatVectorOfUInt8, | |
| }, | |
| { | |
| "name": "xmm12", | |
| "set": 1, | |
| "bitsize": 128, | |
| "encoding": eEncodingVector, | |
| "format": eFormatVectorOfUInt8, | |
| }, | |
| { | |
| "name": "xmm13", | |
| "set": 1, | |
| "bitsize": 128, | |
| "encoding": eEncodingVector, | |
| "format": eFormatVectorOfUInt8, | |
| }, | |
| { | |
| "name": "xmm14", | |
| "set": 1, | |
| "bitsize": 128, | |
| "encoding": eEncodingVector, | |
| "format": eFormatVectorOfUInt8, | |
| }, | |
| { | |
| "name": "xmm15", | |
| "set": 1, | |
| "bitsize": 128, | |
| "encoding": eEncodingVector, | |
| "format": eFormatVectorOfUInt8, | |
| }, | |
| { | |
| "name": "mxcsr", | |
| "set": 1, | |
| "bitsize": 32, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| }, | |
| { | |
| "name": "orig_rax", | |
| "set": 1, | |
| "bitsize": 64, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| }, | |
| # Registers that are contained in or composed of one of more other | |
| # registers | |
| { | |
| "name": "eax", | |
| "set": 0, | |
| "bitsize": 32, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| "slice": "rax[31:0]", | |
| }, | |
| { | |
| "name": "ebx", | |
| "set": 0, | |
| "bitsize": 32, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| "slice": "rbx[31:0]", | |
| }, | |
| { | |
| "name": "ecx", | |
| "set": 0, | |
| "bitsize": 32, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| "slice": "rcx[31:0]", | |
| }, | |
| { | |
| "name": "edx", | |
| "set": 0, | |
| "bitsize": 32, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| "slice": "rdx[31:0]", | |
| }, | |
| { | |
| "name": "edi", | |
| "set": 0, | |
| "bitsize": 32, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| "slice": "rdi[31:0]", | |
| }, | |
| { | |
| "name": "esi", | |
| "set": 0, | |
| "bitsize": 32, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| "slice": "rsi[31:0]", | |
| }, | |
| { | |
| "name": "ebp", | |
| "set": 0, | |
| "bitsize": 32, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| "slice": "rbp[31:0]", | |
| }, | |
| { | |
| "name": "esp", | |
| "set": 0, | |
| "bitsize": 32, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| "slice": "rsp[31:0]", | |
| }, | |
| { | |
| "name": "r8d", | |
| "set": 0, | |
| "bitsize": 32, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| "slice": "r8[31:0]", | |
| }, | |
| { | |
| "name": "r9d", | |
| "set": 0, | |
| "bitsize": 32, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| "slice": "r9[31:0]", | |
| }, | |
| { | |
| "name": "r10d", | |
| "set": 0, | |
| "bitsize": 32, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| "slice": "r10[31:0]", | |
| }, | |
| { | |
| "name": "r11d", | |
| "set": 0, | |
| "bitsize": 32, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| "slice": "r11[31:0]", | |
| }, | |
| { | |
| "name": "r12d", | |
| "set": 0, | |
| "bitsize": 32, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| "slice": "r12[31:0]", | |
| }, | |
| { | |
| "name": "r13d", | |
| "set": 0, | |
| "bitsize": 32, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| "slice": "r13[31:0]", | |
| }, | |
| { | |
| "name": "r14d", | |
| "set": 0, | |
| "bitsize": 32, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| "slice": "r14[31:0]", | |
| }, | |
| { | |
| "name": "r15d", | |
| "set": 0, | |
| "bitsize": 32, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| "slice": "r15[31:0]", | |
| }, | |
| { | |
| "name": "ax", | |
| "set": 0, | |
| "bitsize": 16, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| "slice": "rax[15:0]", | |
| }, | |
| { | |
| "name": "bx", | |
| "set": 0, | |
| "bitsize": 16, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| "slice": "rbx[15:0]", | |
| }, | |
| { | |
| "name": "cx", | |
| "set": 0, | |
| "bitsize": 16, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| "slice": "rcx[15:0]", | |
| }, | |
| { | |
| "name": "dx", | |
| "set": 0, | |
| "bitsize": 16, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| "slice": "rdx[15:0]", | |
| }, | |
| { | |
| "name": "di", | |
| "set": 0, | |
| "bitsize": 16, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| "slice": "rdi[15:0]", | |
| }, | |
| { | |
| "name": "si", | |
| "set": 0, | |
| "bitsize": 16, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| "slice": "rsi[15:0]", | |
| }, | |
| { | |
| "name": "bp", | |
| "set": 0, | |
| "bitsize": 16, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| "slice": "rbp[15:0]", | |
| }, | |
| { | |
| "name": "sp", | |
| "set": 0, | |
| "bitsize": 16, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| "slice": "rsp[15:0]", | |
| }, | |
| { | |
| "name": "r8w", | |
| "set": 0, | |
| "bitsize": 16, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| "slice": "r8[15:0]", | |
| }, | |
| { | |
| "name": "r9w", | |
| "set": 0, | |
| "bitsize": 16, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| "slice": "r9[15:0]", | |
| }, | |
| { | |
| "name": "r10w", | |
| "set": 0, | |
| "bitsize": 16, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| "slice": "r10[15:0]", | |
| }, | |
| { | |
| "name": "r11w", | |
| "set": 0, | |
| "bitsize": 16, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| "slice": "r11[15:0]", | |
| }, | |
| { | |
| "name": "r12w", | |
| "set": 0, | |
| "bitsize": 16, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| "slice": "r12[15:0]", | |
| }, | |
| { | |
| "name": "r13w", | |
| "set": 0, | |
| "bitsize": 16, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| "slice": "r13[15:0]", | |
| }, | |
| { | |
| "name": "r14w", | |
| "set": 0, | |
| "bitsize": 16, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| "slice": "r14[15:0]", | |
| }, | |
| { | |
| "name": "r15w", | |
| "set": 0, | |
| "bitsize": 16, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| "slice": "r15[15:0]", | |
| }, | |
| { | |
| "name": "ah", | |
| "set": 0, | |
| "bitsize": 8, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| "slice": "rax[15:8]", | |
| }, | |
| { | |
| "name": "bh", | |
| "set": 0, | |
| "bitsize": 8, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| "slice": "rbx[15:8]", | |
| }, | |
| { | |
| "name": "ch", | |
| "set": 0, | |
| "bitsize": 8, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| "slice": "rcx[15:8]", | |
| }, | |
| { | |
| "name": "dh", | |
| "set": 0, | |
| "bitsize": 8, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| "slice": "rdx[15:8]", | |
| }, | |
| { | |
| "name": "al", | |
| "set": 0, | |
| "bitsize": 8, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| "slice": "rax[7:0]", | |
| }, | |
| { | |
| "name": "bl", | |
| "set": 0, | |
| "bitsize": 8, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| "slice": "rbx[7:0]", | |
| }, | |
| { | |
| "name": "cl", | |
| "set": 0, | |
| "bitsize": 8, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| "slice": "rcx[7:0]", | |
| }, | |
| { | |
| "name": "dl", | |
| "set": 0, | |
| "bitsize": 8, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| "slice": "rdx[7:0]", | |
| }, | |
| { | |
| "name": "dil", | |
| "set": 0, | |
| "bitsize": 8, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| "slice": "rdi[7:0]", | |
| }, | |
| { | |
| "name": "sil", | |
| "set": 0, | |
| "bitsize": 8, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| "slice": "rsi[7:0]", | |
| }, | |
| { | |
| "name": "bpl", | |
| "set": 0, | |
| "bitsize": 8, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| "slice": "rbp[7:0]", | |
| }, | |
| { | |
| "name": "spl", | |
| "set": 0, | |
| "bitsize": 8, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| "slice": "rsp[7:0]", | |
| }, | |
| { | |
| "name": "r8l", | |
| "set": 0, | |
| "bitsize": 8, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| "slice": "r8[7:0]", | |
| }, | |
| { | |
| "name": "r9l", | |
| "set": 0, | |
| "bitsize": 8, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| "slice": "r9[7:0]", | |
| }, | |
| { | |
| "name": "r10l", | |
| "set": 0, | |
| "bitsize": 8, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| "slice": "r10[7:0]", | |
| }, | |
| { | |
| "name": "r11l", | |
| "set": 0, | |
| "bitsize": 8, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| "slice": "r11[7:0]", | |
| }, | |
| { | |
| "name": "r12l", | |
| "set": 0, | |
| "bitsize": 8, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| "slice": "r12[7:0]", | |
| }, | |
| { | |
| "name": "r13l", | |
| "set": 0, | |
| "bitsize": 8, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| "slice": "r13[7:0]", | |
| }, | |
| { | |
| "name": "r14l", | |
| "set": 0, | |
| "bitsize": 8, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| "slice": "r14[7:0]", | |
| }, | |
| { | |
| "name": "r15l", | |
| "set": 0, | |
| "bitsize": 8, | |
| "encoding": eEncodingUint, | |
| "format": eFormatHex, | |
| "slice": "r15[7:0]", | |
| }, | |
| ] | |
| g_target_definition = None | |
| def get_target_definition(): | |
| global g_target_definition | |
| if g_target_definition is None: | |
| g_target_definition = {} | |
| offset = 0 | |
| for reg_info in x86_64_register_infos: | |
| reg_name = reg_info["name"] | |
| # Only fill in the offset if there is no 'slice' in the register | |
| # info | |
| if "slice" not in reg_info and "composite" not in reg_info: | |
| reg_info["offset"] = offset | |
| offset += reg_info["bitsize"] // 8 | |
| # Set the GCC/DWARF register number for this register if it has one | |
| reg_num = get_reg_num(name_to_gcc_dwarf_regnum, reg_name) | |
| if reg_num != LLDB_INVALID_REGNUM: | |
| reg_info["gcc"] = reg_num | |
| reg_info["dwarf"] = reg_num | |
| # Set the generic register number for this register if it has one | |
| reg_num = get_reg_num(name_to_generic_regnum, reg_name) | |
| if reg_num != LLDB_INVALID_REGNUM: | |
| reg_info["generic"] = reg_num | |
| # Set the GDB register number for this register if it has one | |
| reg_num = get_reg_num(name_to_gdb_regnum, reg_name) | |
| if reg_num != LLDB_INVALID_REGNUM: | |
| reg_info["gdb"] = reg_num | |
| g_target_definition["sets"] = [ | |
| "General Purpose Registers", | |
| "Floating Point Registers", | |
| ] | |
| g_target_definition["registers"] = x86_64_register_infos | |
| g_target_definition["host-info"] = { | |
| "triple": "x86_64-*-linux", | |
| "endian": eByteOrderLittle, | |
| } | |
| g_target_definition["g-packet-size"] = offset | |
| g_target_definition["breakpoint-pc-offset"] = -1 | |
| return g_target_definition | |
| def get_dynamic_setting(target, setting_name): | |
| if setting_name == "gdb-server-target-definition": | |
| return get_target_definition() |