[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:
Jason Molenda
2024-05-02 15:52:24 -07:00
committed by GitHub
parent 9dca7dde3f
commit 2d15855adf
2 changed files with 24 additions and 21 deletions

View File

@@ -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);

View File

@@ -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));