1 //===-- RegisterContextMach_i386.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_i386.h" 14 15 using namespace lldb; 16 using namespace lldb_private; 17 18 RegisterContextMach_i386::RegisterContextMach_i386(Thread &thread, 19 uint32_t concrete_frame_idx) 20 : RegisterContextDarwin_i386(thread, concrete_frame_idx) {} 21 22 RegisterContextMach_i386::~RegisterContextMach_i386() = default; 23 24 int RegisterContextMach_i386::DoReadGPR(lldb::tid_t tid, int flavor, GPR &gpr) { 25 mach_msg_type_number_t count = GPRWordCount; 26 return ::thread_get_state(tid, flavor, (thread_state_t)&gpr, &count); 27 } 28 29 int RegisterContextMach_i386::DoReadFPU(lldb::tid_t tid, int flavor, FPU &fpu) { 30 mach_msg_type_number_t count = FPUWordCount; 31 return ::thread_get_state(tid, flavor, (thread_state_t)&fpu, &count); 32 } 33 34 int RegisterContextMach_i386::DoReadEXC(lldb::tid_t tid, int flavor, EXC &exc) { 35 mach_msg_type_number_t count = EXCWordCount; 36 return ::thread_get_state(tid, flavor, (thread_state_t)&exc, &count); 37 } 38 39 int RegisterContextMach_i386::DoWriteGPR(lldb::tid_t tid, int flavor, 40 const GPR &gpr) { 41 return ::thread_set_state( 42 tid, flavor, reinterpret_cast<thread_state_t>(const_cast<GPR *>(&gpr)), 43 GPRWordCount); 44 } 45 46 int RegisterContextMach_i386::DoWriteFPU(lldb::tid_t tid, int flavor, 47 const FPU &fpu) { 48 return ::thread_set_state( 49 tid, flavor, reinterpret_cast<thread_state_t>(const_cast<FPU *>(&fpu)), 50 FPUWordCount); 51 } 52 53 int RegisterContextMach_i386::DoWriteEXC(lldb::tid_t tid, int flavor, 54 const EXC &exc) { 55 return ::thread_set_state( 56 tid, flavor, reinterpret_cast<thread_state_t>(const_cast<EXC *>(&exc)), 57 EXCWordCount); 58 } 59 60 #endif 61