mirror of
https://github.com/RPCS3/rpcs3.git
synced 2024-11-25 12:12:50 +01:00
Implement IsDebuggerPresent on BSDs (#7880)
This commit is contained in:
parent
58492ef92d
commit
777f0a7c82
@ -40,6 +40,37 @@
|
||||
#include <sys/timerfd.h>
|
||||
#endif
|
||||
|
||||
#if defined(__APPLE__) || defined(__DragonFly__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)
|
||||
# include <sys/sysctl.h>
|
||||
# include <unistd.h>
|
||||
# if defined(__DragonFly__) || defined(__FreeBSD__)
|
||||
# include <sys/user.h>
|
||||
# endif
|
||||
# if defined(__OpenBSD__)
|
||||
# include <sys/param.h>
|
||||
# include <sys/proc.h>
|
||||
# endif
|
||||
|
||||
# if defined(__NetBSD__)
|
||||
# undef KERN_PROC
|
||||
# define KERN_PROC KERN_PROC2
|
||||
# define kinfo_proc kinfo_proc2
|
||||
# endif
|
||||
|
||||
# if defined(__APPLE__)
|
||||
# define KP_FLAGS kp_proc.p_flag
|
||||
# elif defined(__DragonFly__)
|
||||
# define KP_FLAGS kp_flags
|
||||
# elif defined(__FreeBSD__)
|
||||
# define KP_FLAGS ki_flag
|
||||
# elif defined(__NetBSD__)
|
||||
# define KP_FLAGS p_flag
|
||||
# elif defined(__OpenBSD__)
|
||||
# define KP_FLAGS p_psflags
|
||||
# define P_TRACED PS_TRACED
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#include "sync.h"
|
||||
#include "util/logs.hpp"
|
||||
|
||||
@ -63,6 +94,28 @@ void fmt_class_string<std::thread::id>::format(std::string& out, u64 arg)
|
||||
#ifndef _WIN32
|
||||
bool IsDebuggerPresent()
|
||||
{
|
||||
#if defined(__APPLE__) || defined(__DragonFly__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)
|
||||
int mib[] = {
|
||||
CTL_KERN,
|
||||
KERN_PROC,
|
||||
KERN_PROC_PID,
|
||||
getpid(),
|
||||
# if defined(__NetBSD__) || defined(__OpenBSD__)
|
||||
sizeof(struct kinfo_proc),
|
||||
1,
|
||||
# endif
|
||||
};
|
||||
u_int miblen = std::size(mib);
|
||||
struct kinfo_proc info;
|
||||
size_t size = sizeof(info);
|
||||
|
||||
if (sysctl(mib, miblen, &info, &size, NULL, 0))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return info.KP_FLAGS & P_TRACED;
|
||||
#else
|
||||
char buf[4096];
|
||||
fs::file status_fd("/proc/self/status");
|
||||
if (!status_fd)
|
||||
@ -97,6 +150,7 @@ bool IsDebuggerPresent()
|
||||
}
|
||||
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user