[compiler-rt] [sanitizer_common] Handle ptrace on Linux/sparc64 (PR #109310)

Vitaly Buka via llvm-commits llvm-commits at lists.llvm.org
Mon Sep 23 22:08:25 PDT 2024


================
@@ -2530,18 +2530,26 @@ PRE_SYSCALL(ptrace)(long request, long pid, long addr, long data) {
 #  if !SANITIZER_ANDROID &&                                                   \
       (defined(__i386) || defined(__x86_64) || defined(__mips64) ||           \
        defined(__powerpc64__) || defined(__aarch64__) || defined(__s390__) || \
-       defined(__loongarch__) || SANITIZER_RISCV64)
-  if (data) {
+       defined(__loongarch__) || SANITIZER_RISCV64 || defined(__sparc__))
+  long data_arg = data;
----------------
vitalybuka wrote:

maybe:

 compiler-rt/lib/sanitizer_common/sanitizer_common_ptrace.h

```
long data_arg = ptrace_data_or_arg(data, arg, request);

template<class T>
inline T ptrace_data_or_arg(T data, T arg, request) {
#    if defined(__sparc__)
  // The meanings of addr and data are reversed for a few requests on
  // Linux/sparc64.
  if (request == ptrace_getregs || request == ptrace_getfpregs ||
      request == ptrace_setregs || request == ptrace_setfpregs)
    return addr;
#else
  return data;
#    endif
}
```

https://github.com/llvm/llvm-project/pull/109310


More information about the llvm-commits mailing list