1 //===-- RegisterContextMach_x86_64.cpp ------------------------------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #if defined(__APPLE__) 10 11 #include <mach/thread_act.h> 12 13 #include "RegisterContextMach_x86_64.h" 14 15 using namespace lldb; 16 using namespace lldb_private; 17 18 RegisterContextMach_x86_64::RegisterContextMach_x86_64( 19 Thread &thread, uint32_t concrete_frame_idx) 20 : RegisterContextDarwin_x86_64(thread, concrete_frame_idx) {} 21 22 RegisterContextMach_x86_64::~RegisterContextMach_x86_64() = default; 23 24 int RegisterContextMach_x86_64::DoReadGPR(lldb::tid_t tid, int flavor, 25 GPR &gpr) { 26 mach_msg_type_number_t count = GPRWordCount; 27 return ::thread_get_state(tid, flavor, (thread_state_t)&gpr, &count); 28 } 29 30 int RegisterContextMach_x86_64::DoReadFPU(lldb::tid_t tid, int flavor, 31 FPU &fpu) { 32 mach_msg_type_number_t count = FPUWordCount; 33 return ::thread_get_state(tid, flavor, (thread_state_t)&fpu, &count); 34 } 35 36 int RegisterContextMach_x86_64::DoReadEXC(lldb::tid_t tid, int flavor, 37 EXC &exc) { 38 mach_msg_type_number_t count = EXCWordCount; 39 return ::thread_get_state(tid, flavor, (thread_state_t)&exc, &count); 40 } 41 42 int RegisterContextMach_x86_64::DoWriteGPR(lldb::tid_t tid, int flavor, 43 const GPR &gpr) { 44 return ::thread_set_state( 45 tid, flavor, reinterpret_cast<thread_state_t>(const_cast<GPR *>(&gpr)), 46 GPRWordCount); 47 } 48 49 int RegisterContextMach_x86_64::DoWriteFPU(lldb::tid_t tid, int flavor, 50 const FPU &fpu) { 51 return ::thread_set_state( 52 tid, flavor, reinterpret_cast<thread_state_t>(const_cast<FPU *>(&fpu)), 53 FPUWordCount); 54 } 55 56 int RegisterContextMach_x86_64::DoWriteEXC(lldb::tid_t tid, int flavor, 57 const EXC &exc) { 58 return ::thread_set_state( 59 tid, flavor, reinterpret_cast<thread_state_t>(const_cast<EXC *>(&exc)), 60 EXCWordCount); 61 } 62 63 #endif 64