diff --git a/Zend/zend_gdb.c b/Zend/zend_gdb.c index e38e0023095..02afb6bc6f7 100644 --- a/Zend/zend_gdb.c +++ b/Zend/zend_gdb.c @@ -25,6 +25,11 @@ #include #include +#if defined(__FreeBSD__) +# include +# include +#endif + enum { ZEND_GDBJIT_NOACTION, ZEND_GDBJIT_REGISTER, @@ -105,6 +110,7 @@ ZEND_API void zend_gdb_unregister_all(void) ZEND_API bool zend_gdb_present(void) { bool ret = 0; +#if defined(__linux__) /* netbsd while having this procfs part, does not hold the tracer pid */ int fd = open("/proc/self/status", O_RDONLY); if (fd > 0) { @@ -136,6 +142,17 @@ ZEND_API bool zend_gdb_present(void) close(fd); } +#elif defined(__FreeBSD__) + struct kinfo_proc *proc = kinfo_getproc(getpid()); + + if (proc) { + if ((proc->ki_flag & P_TRACED) != 0) { + struct kinfo_proc *dbg = kinfo_getproc(proc->ki_tracer); + + ret = (dbg && strstr(dbg->ki_comm, "gdb")); + } + } +#endif return ret; }