From 7003f40be9de1e10796578cba9e40ea6a548fc16 Mon Sep 17 00:00:00 2001 From: Paul Floyd Date: Thu, 2 Feb 2023 22:06:38 +0100 Subject: [PATCH] FreeBSD: improve internal syscallbyname Post FreeBSD 12.2 this is a syscall that does everything (rather than needing an undocumented syscall). --- coregrind/m_libcproc.c | 7 ++++++- coregrind/pub_core_libcproc.h | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/coregrind/m_libcproc.c b/coregrind/m_libcproc.c index b94cabcf1f..55bb7cbf97 100644 --- a/coregrind/m_libcproc.c +++ b/coregrind/m_libcproc.c @@ -1194,12 +1194,16 @@ void VG_(do_atfork_child)(ThreadId tid) } /* --------------------------------------------------------------------- - FreeBSD sysctlbyname(), modfind(), etc + FreeBSD sysctlbyname, getosreldate, is32on64 ------------------------------------------------------------------ */ #if defined(VGO_freebsd) Int VG_(sysctlbyname)(const HChar *name, void *oldp, SizeT *oldlenp, const void *newp, SizeT newlen) { +#if (FREEBSD_VERS >= FREEBSD_12_2) + SysRes res = VG_(do_syscall5)(__NR___sysctlbyname, (UWord)name, (UWord)oldp, (UWord)oldlenp, (UWord)newp, (UWord)newlen); + return sr_isError(res) ? -1 : sr_Res(res); +#else Int oid[2]; Int real_oid[10]; SizeT oidlen; @@ -1214,6 +1218,7 @@ Int VG_(sysctlbyname)(const HChar *name, void *oldp, SizeT *oldlenp, const void oidlen /= sizeof(int); error = VG_(sysctl)(real_oid, oidlen, oldp, oldlenp, newp, newlen); return error; + #endif } Int VG_(getosreldate)(void) diff --git a/coregrind/pub_core_libcproc.h b/coregrind/pub_core_libcproc.h index d63a4f7c47..ff056ec408 100644 --- a/coregrind/pub_core_libcproc.h +++ b/coregrind/pub_core_libcproc.h @@ -86,7 +86,7 @@ extern void VG_(do_atfork_parent) ( ThreadId tid ); extern void VG_(do_atfork_child) ( ThreadId tid ); #if defined(VGO_freebsd) -// sysctl, modfind +// sysctlbyname, getosreldate, is32on64 extern Int VG_(sysctlbyname)(const HChar *name, void *oldp, SizeT *oldlenp, const void *newp, SizeT newlen); extern Int VG_(getosreldate)(void); extern Bool VG_(is32on64)(void); -- 2.47.2