mirror of
https://github.com/intel/llvm.git
synced 2026-01-22 23:49:22 +08:00
[lldb] [debugserver] address preprocessor warning, extra arg (#90808)
In DNBArchImplARM64.cpp I'm doing ``` #if __has_feature(ptrauth_calls) && defined(__LP64__) ``` And the preprocessor warns that this is not defined behavior. This checks if ptrauth_calls is available and if this is being compiled 64-bit (i.e. arm64e), and defines a single DEBUGSERVER_IS_ARM64E when those are both true. I did have to duplicate one DNBLogThreaded() call which itself is a macro, and using an ifdef in the middle of macro arguments also got me a warning from the preprocessor. While testing this for all the different targets, I found a DNBError initialization that accepts a c-string but I'm passing in a printf-style formatter c-string and an argument. Create the string before the call and pass in the constructed string. rdar://127129242
This commit is contained in:
@@ -4070,10 +4070,10 @@ pid_t MachProcess::BoardServiceLaunchForDebug(
|
||||
m_flags |= eMachProcessFlagsAttached;
|
||||
DNBLog("[LaunchAttach] successfully attached to pid %d", m_pid);
|
||||
} else {
|
||||
launch_err.SetErrorString(
|
||||
"Failed to attach to pid %d, BoardServiceLaunchForDebug() unable to "
|
||||
"ptrace(PT_ATTACHEXC)",
|
||||
m_pid);
|
||||
std::string errmsg = "Failed to attach to pid ";
|
||||
errmsg += std::to_string(m_pid);
|
||||
errmsg += ", BoardServiceLaunchForDebug() unable to ptrace(PT_ATTACHEXC)";
|
||||
launch_err.SetErrorString(errmsg.c_str());
|
||||
SetState(eStateExited);
|
||||
DNBLog("[LaunchAttach] END (%d) error: failed to attach to pid %d",
|
||||
getpid(), m_pid);
|
||||
|
||||
@@ -26,8 +26,12 @@
|
||||
#include <cinttypes>
|
||||
#include <sys/sysctl.h>
|
||||
|
||||
#undef DEBUGSERVER_IS_ARM64E
|
||||
#if __has_feature(ptrauth_calls)
|
||||
#include <ptrauth.h>
|
||||
#if defined(__LP64__)
|
||||
#define DEBUGSERVER_IS_ARM64E 1
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// Break only in privileged or user mode
|
||||
@@ -115,7 +119,7 @@ static uint64_t clear_pac_bits(uint64_t value) {
|
||||
uint64_t DNBArchMachARM64::GetPC(uint64_t failValue) {
|
||||
// Get program counter
|
||||
if (GetGPRState(false) == KERN_SUCCESS)
|
||||
#if __has_feature(ptrauth_calls) && defined(__LP64__)
|
||||
#if defined(DEBUGSERVER_IS_ARM64E)
|
||||
return clear_pac_bits(
|
||||
reinterpret_cast<uint64_t>(m_state.context.gpr.__opaque_pc));
|
||||
#else
|
||||
@@ -147,7 +151,7 @@ kern_return_t DNBArchMachARM64::SetPC(uint64_t value) {
|
||||
uint64_t DNBArchMachARM64::GetSP(uint64_t failValue) {
|
||||
// Get stack pointer
|
||||
if (GetGPRState(false) == KERN_SUCCESS)
|
||||
#if __has_feature(ptrauth_calls) && defined(__LP64__)
|
||||
#if defined(DEBUGSERVER_IS_ARM64E)
|
||||
return clear_pac_bits(
|
||||
reinterpret_cast<uint64_t>(m_state.context.gpr.__opaque_sp));
|
||||
#else
|
||||
@@ -169,25 +173,24 @@ kern_return_t DNBArchMachARM64::GetGPRState(bool force) {
|
||||
(thread_state_t)&m_state.context.gpr, &count);
|
||||
if (DNBLogEnabledForAny(LOG_THREAD)) {
|
||||
uint64_t *x = &m_state.context.gpr.__x[0];
|
||||
DNBLogThreaded("thread_get_state signed regs "
|
||||
"\n fp=%16.16llx"
|
||||
"\n lr=%16.16llx"
|
||||
"\n sp=%16.16llx"
|
||||
"\n pc=%16.16llx",
|
||||
#if __has_feature(ptrauth_calls) && defined(__LP64__)
|
||||
|
||||
const char *log_str = "thread_get_state signed regs "
|
||||
"\n fp=%16.16llx"
|
||||
"\n lr=%16.16llx"
|
||||
"\n sp=%16.16llx"
|
||||
"\n pc=%16.16llx";
|
||||
#if defined(DEBUGSERVER_IS_ARM64E)
|
||||
DNBLogThreaded(log_str,
|
||||
reinterpret_cast<uint64_t>(m_state.context.gpr.__opaque_fp),
|
||||
reinterpret_cast<uint64_t>(m_state.context.gpr.__opaque_lr),
|
||||
reinterpret_cast<uint64_t>(m_state.context.gpr.__opaque_sp),
|
||||
reinterpret_cast<uint64_t>(m_state.context.gpr.__opaque_pc)
|
||||
reinterpret_cast<uint64_t>(m_state.context.gpr.__opaque_pc));
|
||||
#else
|
||||
m_state.context.gpr.__fp,
|
||||
m_state.context.gpr.__lr,
|
||||
m_state.context.gpr.__sp,
|
||||
m_state.context.gpr.__pc
|
||||
DNBLogThreaded(log_str, m_state.context.gpr.__fp, m_state.context.gpr.__lr,
|
||||
m_state.context.gpr.__sp, m_state.context.gpr.__pc);
|
||||
#endif
|
||||
);
|
||||
|
||||
#if __has_feature(ptrauth_calls) && defined(__LP64__)
|
||||
#if defined(DEBUGSERVER_IS_ARM64E)
|
||||
uint64_t log_fp = clear_pac_bits(
|
||||
reinterpret_cast<uint64_t>(m_state.context.gpr.__opaque_fp));
|
||||
uint64_t log_lr = clear_pac_bits(
|
||||
@@ -661,7 +664,7 @@ kern_return_t DNBArchMachARM64::EnableHardwareSingleStep(bool enable) {
|
||||
return err.Status();
|
||||
}
|
||||
|
||||
#if __has_feature(ptrauth_calls) && defined(__LP64__)
|
||||
#if defined(DEBUGSERVER_IS_ARM64E)
|
||||
uint64_t pc = clear_pac_bits(
|
||||
reinterpret_cast<uint64_t>(m_state.context.gpr.__opaque_pc));
|
||||
#else
|
||||
@@ -2187,7 +2190,7 @@ bool DNBArchMachARM64::GetRegisterValue(uint32_t set, uint32_t reg,
|
||||
case e_regSetGPR:
|
||||
if (reg <= gpr_pc) {
|
||||
switch (reg) {
|
||||
#if __has_feature(ptrauth_calls) && defined(__LP64__)
|
||||
#if defined(DEBUGSERVER_IS_ARM64E)
|
||||
case gpr_pc:
|
||||
value->value.uint64 = clear_pac_bits(
|
||||
reinterpret_cast<uint64_t>(m_state.context.gpr.__opaque_pc));
|
||||
|
||||
Reference in New Issue
Block a user