| #!/usr/bin/env python |
| #===-- x86_64_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_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 |
| |
| |
| 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}, |
| # 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-apple-macosx', 'endian': eByteOrderLittle} |
| g_target_definition['g-packet-size'] = offset |
| return g_target_definition |
| |
| |
| def get_dynamic_setting(target, setting_name): |
| if setting_name == 'gdb-server-target-definition': |
| return get_target_definition() |