mirror of
https://github.com/RPCS3/rpcs3.git
synced 2024-11-22 02:32:36 +01:00
Implement IsDebuggerPresent on BSDs (#7880)
This commit is contained in:
parent
58492ef92d
commit
777f0a7c82
@ -40,6 +40,37 @@
|
|||||||
#include <sys/timerfd.h>
|
#include <sys/timerfd.h>
|
||||||
#endif
|
#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 "sync.h"
|
||||||
#include "util/logs.hpp"
|
#include "util/logs.hpp"
|
||||||
|
|
||||||
@ -63,6 +94,28 @@ void fmt_class_string<std::thread::id>::format(std::string& out, u64 arg)
|
|||||||
#ifndef _WIN32
|
#ifndef _WIN32
|
||||||
bool IsDebuggerPresent()
|
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];
|
char buf[4096];
|
||||||
fs::file status_fd("/proc/self/status");
|
fs::file status_fd("/proc/self/status");
|
||||||
if (!status_fd)
|
if (!status_fd)
|
||||||
@ -97,6 +150,7 @@ bool IsDebuggerPresent()
|
|||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user