| Index: experimental/linux_debug_server/debugger/nacl-gdb_server/gdb_registers.cc
|
| diff --git a/experimental/linux_debug_server/debugger/nacl-gdb_server/gdb_registers.cc b/experimental/linux_debug_server/debugger/nacl-gdb_server/gdb_registers.cc
|
| deleted file mode 100755
|
| index f909be717d0d2b9890298cc1247c8617d47fa504..0000000000000000000000000000000000000000
|
| --- a/experimental/linux_debug_server/debugger/nacl-gdb_server/gdb_registers.cc
|
| +++ /dev/null
|
| @@ -1,163 +0,0 @@
|
| -// Copyright (c) 2011 The Native Client Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -#include "debugger/nacl-gdb_server/gdb_registers.h"
|
| -#include <string.h>
|
| -
|
| -// Ok, now we have a definite answer on how gdbserver package registers
|
| -// in 'g' command response.
|
| -// You have to download gdb source code, and look there:
|
| -//
|
| -// <gdb_source_root>\gdb\regformats\reg-i32.dat
|
| -// <gdb_source_root>\gdb\regformats\reg-x86-64.dat
|
| -//
|
| -// name:i386
|
| -// expedite:ebp,esp,eip
|
| -// 32:eax
|
| -// 32:ecx
|
| -// 32:edx
|
| -// 32:ebx
|
| -// 32:esp
|
| -// 32:ebp
|
| -// 32:esi
|
| -// 32:edi
|
| -// 32:eip
|
| -// 32:eflags
|
| -// 32:cs
|
| -// 32:ss
|
| -// 32:ds
|
| -// 32:es
|
| -// 32:fs
|
| -// 32:gs
|
| -//
|
| -// name:x86_64
|
| -// expedite:rbp,rsp,rip
|
| -// 64:rax
|
| -// 64:rbx
|
| -// 64:rcx
|
| -// 64:rdx
|
| -// 64:rsi
|
| -// 64:rdi
|
| -// 64:rbp
|
| -// 64:rsp
|
| -// 64:r8
|
| -// 64:r9
|
| -// 64:r10
|
| -// 64:r11
|
| -// 64:r12
|
| -// 64:r13
|
| -// 64:r14
|
| -// 64:r15
|
| -// 64:rip
|
| -// 32:eflags
|
| -// 32:cs
|
| -// 32:ss
|
| -// 32:ds
|
| -// 32:es
|
| -// 32:fs
|
| -// 32:gs
|
| -
|
| -namespace {
|
| -
|
| -#define X86_64_REGS \
|
| - REG(rax);\
|
| - REG(rbx);\
|
| - REG(rcx);\
|
| - REG(rdx);\
|
| - REG(rsi);\
|
| - REG(rdi);\
|
| - REG(rbp);\
|
| - REG(rsp);\
|
| - REG(r8);\
|
| - REG(r9);\
|
| - REG(r10);\
|
| - REG(r11);\
|
| - REG(r12);\
|
| - REG(r13);\
|
| - REG(r14);\
|
| - REG(r15);\
|
| - REG(rip);\
|
| - REG(eflags);\
|
| - REG(cs);\
|
| - REG(ss);\
|
| - REG(ds);\
|
| - REG(es);\
|
| - REG(fs);\
|
| - REG(gs)
|
| -
|
| -// Registers SegCs, SegSs, SegDs, SegEs, SegFs and SegGs are defined as
|
| -// 64-bit in user.h for linux-64, but passed as 32-bit by RSP protocol.
|
| -//
|
| -bool IsSegmentRegisterIsPassedAs32Bit(const char* register_name) {
|
| - const char* kSegmentRegistersPassedAs32Bit[] = {
|
| - "eflags",
|
| - "cs",
|
| - "ss",
|
| - "ds",
|
| - "es",
|
| - "fs",
|
| - "gs"
|
| - };
|
| - size_t num = sizeof(kSegmentRegistersPassedAs32Bit) /
|
| - sizeof(kSegmentRegistersPassedAs32Bit[0]);
|
| - for (size_t i = 0; i < num; i++)
|
| - if (strcmp(kSegmentRegistersPassedAs32Bit[i], register_name) == 0)
|
| - return true;
|
| - return false;
|
| -}
|
| -
|
| -/// Copies content of the register |name| from GDB RSP packaged blob
|
| -/// into thread context.
|
| -/// @param[in] blob blob with GDB RSP packaged registers
|
| -/// @param[in] offset offset of the register data from the beginning of the blob
|
| -/// @param[out] dst destination for the register data (inside CONTEXT structure)
|
| -/// @param[int] reg_size size of the register in bytes
|
| -/// @param[in] name name of the register as defined in the CONTEXT structure
|
| -/// @return number of copied bytes
|
| -size_t CopyRegisterFromBlobToCONTEXT(const debug::Blob& blob,
|
| - size_t offset,
|
| - void* dst,
|
| - int reg_size,
|
| - const char* name) {
|
| - if (IsSegmentRegisterIsPassedAs32Bit(name))
|
| - reg_size = 4;
|
| -
|
| - blob.Peek(offset, dst, reg_size);
|
| - return reg_size;
|
| -}
|
| -
|
| -void CopyRegisterFromCONTEXTToBlob(const void* src,
|
| - int reg_size,
|
| - const char* name,
|
| - debug::Blob* blob) {
|
| - if (IsSegmentRegisterIsPassedAs32Bit(name)) {
|
| - blob->Append(debug::Blob(src, 4));
|
| - } else {
|
| - blob->Append(debug::Blob(src, reg_size));
|
| - }
|
| -}
|
| -} // namespace
|
| -
|
| -namespace rsp {
|
| -void GdbRegistersToCONTEXT(const debug::Blob& gdb_regs, user_regs_struct* ct) {
|
| - size_t offset = 0;
|
| -#define REG(name) ct->name = 0;\
|
| - offset += CopyRegisterFromBlobToCONTEXT(gdb_regs, \
|
| - offset, \
|
| - &ct->name, \
|
| - sizeof(ct->name), \
|
| - #name)
|
| - X86_64_REGS;
|
| -#undef REG
|
| -}
|
| -
|
| -void CONTEXTToGdbRegisters(const user_regs_struct& ct, debug::Blob* gdb_regs) {
|
| -#define REG(name) CopyRegisterFromCONTEXTToBlob(&ct.name, \
|
| - sizeof(ct.name), \
|
| - #name, \
|
| - gdb_regs)
|
| - X86_64_REGS;
|
| -#undef REG
|
| -}
|
| -} // namespace rsp
|
| -
|
|
|