From d628096849844a70fdec6776730784287f68d353 Mon Sep 17 00:00:00 2001 From: Saleem Abdulrasool Date: Thu, 13 Jul 2023 20:26:04 -0700 Subject: [PATCH] X86_64: silence some truncation warnings There are a number of places where we truncate to a 32-bit value from a 64-bit value as we may running a 32-bit binary on 64-bits. This silences some of the warnings by explicitly truncating the integers rather than implicitly performing the operation. --- .../Architecture/X86_64/CPUState.h | 19 ++++++++++--------- .../Core/HardwareBreakpointManager.h | 2 +- .../Core/X86/HardwareBreakpointManager.cpp | 12 +++++++----- 3 files changed, 18 insertions(+), 15 deletions(-) diff --git a/Headers/DebugServer2/Architecture/X86_64/CPUState.h b/Headers/DebugServer2/Architecture/X86_64/CPUState.h index c8cdd8cc..dcd9d93b 100644 --- a/Headers/DebugServer2/Architecture/X86_64/CPUState.h +++ b/Headers/DebugServer2/Architecture/X86_64/CPUState.h @@ -238,13 +238,14 @@ struct CPUState64 { gp.r14 = regs[14]; gp.r15 = regs[15]; gp.rip = regs[16]; - gp.eflags = regs[17]; - gp.cs = regs[18]; - gp.ss = regs[19]; - gp.ds = regs[20]; - gp.es = regs[21]; - gp.fs = regs[22]; - gp.gs = regs[23]; + // Truncate the value to 32-bit as these are 32-bit registers. + gp.eflags = static_cast(regs[17]); + gp.cs = static_cast(regs[18]); + gp.ss = static_cast(regs[19]); + gp.ds = static_cast(regs[20]); + gp.es = static_cast(regs[21]); + gp.fs = static_cast(regs[22]); + gp.gs = static_cast(regs[23]); } public: @@ -594,7 +595,7 @@ struct CPUState { } inline void setPC(uint64_t pc) { if (is32) - state32.setPC(pc); + state32.setPC(static_cast(pc)); else state64.setPC(pc); } @@ -604,7 +605,7 @@ struct CPUState { } inline void setSP(uint64_t sp) { if (is32) - state32.setSP(sp); + state32.setSP(static_cast(sp)); else state64.setSP(sp); } diff --git a/Headers/DebugServer2/Core/HardwareBreakpointManager.h b/Headers/DebugServer2/Core/HardwareBreakpointManager.h index 8a7af28b..45ea5f4d 100644 --- a/Headers/DebugServer2/Core/HardwareBreakpointManager.h +++ b/Headers/DebugServer2/Core/HardwareBreakpointManager.h @@ -75,7 +75,7 @@ class HardwareBreakpointManager : public BreakpointManager { protected: virtual ErrorCode disableDebugCtrlReg(uint64_t &ctrlReg, int idx); virtual ErrorCode enableDebugCtrlReg(uint64_t &ctrlReg, int idx, Mode mode, - int size); + size_t size); #endif public: diff --git a/Sources/Core/X86/HardwareBreakpointManager.cpp b/Sources/Core/X86/HardwareBreakpointManager.cpp index 9a36ebb8..72b63c82 100644 --- a/Sources/Core/X86/HardwareBreakpointManager.cpp +++ b/Sources/Core/X86/HardwareBreakpointManager.cpp @@ -90,7 +90,7 @@ ErrorCode HardwareBreakpointManager::disableLocation(int idx, ErrorCode HardwareBreakpointManager::enableDebugCtrlReg(uint64_t &ctrlReg, int idx, Mode mode, - int size) { + size_t size) { int enableIdx = idx * 2; #if !defined(OS_WIN32) enableIdx += 1; @@ -193,7 +193,7 @@ int HardwareBreakpointManager::hit(Target::Thread *thread, Site &site) { if (debugRegs[kStatusRegIdx] & (1ull << i)) { DS2ASSERT(_locations[i] != 0); site = _sites.find(_locations[i])->second; - regIdx = i; + regIdx = static_cast(i); break; } } @@ -277,11 +277,13 @@ ErrorCode HardwareBreakpointManager::writeDebugRegisters( state.dr.dr[i] = (i == 4 || i == 5) ? 0 : regs[i]; } #elif defined(ARCH_X86_64) - for (int i = 0; i < kNumDebugRegisters; ++i) { + for (size_t i = 0; i < kNumDebugRegisters; ++i) { if (state.is32) { - state.state32.dr.dr[i] = (i == 4 || i == 5) ? 0 : regs[i]; + state.state32.dr.dr[i] = + (i == 4 || i == 5) ? 0 : static_cast(regs[i]); } else { - state.state64.dr.dr[i] = (i == 4 || i == 5) ? 0 : regs[i]; + state.state64.dr.dr[i] = + (i == 4 || i == 5) ? 0 : static_cast(regs[i]); } } #else