mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-18 19:26:45 +00:00
Introduce internal_sysctlbyname in place of sysctlbyname
Summary: This change will allow to install sysctlbyname() interceptors more easily in sanitizers. Reviewers: vitalybuka, joerg Reviewed By: vitalybuka Subscribers: kubamracek, llvm-commits, #sanitizers Tags: #sanitizers Differential Revision: https://reviews.llvm.org/D52793 llvm-svn: 343840
This commit is contained in:
parent
7c65078f04
commit
980b424cbf
@ -591,7 +591,7 @@ static void GetArgsAndEnv(char ***argv, char ***envp) {
|
||||
// this information. See also <sys/exec.h>.
|
||||
ps_strings *pss;
|
||||
size_t sz = sizeof(pss);
|
||||
if (sysctlbyname("kern.ps_strings", &pss, &sz, NULL, 0) == -1) {
|
||||
if (internal_sysctlbyname("kern.ps_strings", &pss, &sz, NULL, 0) == -1) {
|
||||
Printf("sysctl kern.ps_strings failed\n");
|
||||
Die();
|
||||
}
|
||||
@ -796,6 +796,16 @@ int internal_sysctl(const int *name, unsigned int namelen, void *oldp,
|
||||
return sysctl(name, namelen, oldp, (size_t *)oldlenp, newp, (size_t)newlen);
|
||||
#endif
|
||||
}
|
||||
|
||||
int internal_sysctlbyname(const char *sname, void *oldp, uptr *oldlenp,
|
||||
const void *newp, uptr newlen) {
|
||||
#if SANITIZER_OPENBSD
|
||||
return sysctlbyname(sname, oldp, (size_t *)oldlenp, (void *)newp,
|
||||
(size_t)newlen);
|
||||
#else
|
||||
return sysctlbyname(sname, oldp, (size_t *)oldlenp, newp, (size_t)newlen);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
#if SANITIZER_LINUX
|
||||
|
@ -219,6 +219,12 @@ int internal_sysctl(const int *name, unsigned int namelen, void *oldp,
|
||||
const_cast<void *>(newp), (size_t)newlen);
|
||||
}
|
||||
|
||||
int internal_sysctlbyname(const char *sname, void *oldp, uptr *oldlenp,
|
||||
const void *newp, uptr newlen) {
|
||||
return sysctlbyname(sname, oldp, (size_t *)oldlenp, const_cast<void *>(newp),
|
||||
(size_t)newlen);
|
||||
}
|
||||
|
||||
int internal_forkpty(int *amaster) {
|
||||
int master, slave;
|
||||
if (openpty(&master, &slave, nullptr, nullptr, nullptr) == -1) return -1;
|
||||
|
@ -297,6 +297,14 @@ DEFINE_INTERNAL(int, sysctl, const int *name, unsigned int namelen, void *oldp,
|
||||
return __sysctl(name, namelen, oldp, (size_t *)oldlenp, newp, (size_t)newlen);
|
||||
}
|
||||
|
||||
DEFINE_INTERNAL(int, sysctlbyname, const char *sname, void *oldp, uptr *oldlenp,
|
||||
const void *newp, uptr newlen) {
|
||||
DEFINE__REAL(int, sysctlbyname, const char *a, void *b, size_t *c,
|
||||
const void *d, size_t e);
|
||||
return _REAL(sysctlbyname, sname, oldp, (size_t *)oldlenp, newp,
|
||||
(size_t)newlen);
|
||||
}
|
||||
|
||||
DEFINE_INTERNAL(uptr, sigprocmask, int how, __sanitizer_sigset_t *set,
|
||||
__sanitizer_sigset_t *oldset) {
|
||||
CHECK(&_sys___sigprocmask14);
|
||||
|
@ -62,6 +62,8 @@ int internal_forkpty(int *amaster);
|
||||
|
||||
int internal_sysctl(const int *name, unsigned int namelen, void *oldp,
|
||||
uptr *oldlenp, const void *newp, uptr newlen);
|
||||
int internal_sysctlbyname(const char *sname, void *oldp, uptr *oldlenp,
|
||||
const void *newp, uptr newlen);
|
||||
|
||||
// These functions call appropriate pthread_ functions directly, bypassing
|
||||
// the interceptor. They are weak and may not be present in some tools.
|
||||
|
@ -1,5 +1,6 @@
|
||||
#include "cpuid.h"
|
||||
#include "sanitizer_common/sanitizer_common.h"
|
||||
#include "sanitizer_common/sanitizer_posix.h"
|
||||
#include "xray_defs.h"
|
||||
#include "xray_interface_internal.h"
|
||||
|
||||
@ -87,14 +88,14 @@ uint64_t getTSCFrequency() XRAY_NEVER_INSTRUMENT {
|
||||
size_t tscfreqsz = sizeof(TSCFrequency);
|
||||
#if SANITIZER_OPENBSD
|
||||
int Mib[2] = { CTL_MACHDEP, CPU_TSCFREQ };
|
||||
if (sysctl(Mib, 2, &TSCFrequency, &tscfreqsz, NULL, 0) != -1) {
|
||||
if (internal_sysctl(Mib, 2, &TSCFrequency, &tscfreqsz, NULL, 0) != -1) {
|
||||
#elif SANITIZER_MAC
|
||||
if (sysctlbyname("machdep.tsc.frequency", &TSCFrequency, &tscfreqsz,
|
||||
NULL, 0) != -1 ) {
|
||||
if (internal_sysctlbyname("machdep.tsc.frequency", &TSCFrequency,
|
||||
&tscfreqsz, NULL, 0) != -1) {
|
||||
|
||||
#else
|
||||
if (sysctlbyname("machdep.tsc_freq", &TSCFrequency, &tscfreqsz,
|
||||
NULL, 0) != -1) {
|
||||
if (internal_sysctlbyname("machdep.tsc_freq", &TSCFrequency, &tscfreqsz,
|
||||
NULL, 0) != -1) {
|
||||
#endif
|
||||
return static_cast<uint64_t>(TSCFrequency);
|
||||
} else {
|
||||
|
Loading…
x
Reference in New Issue
Block a user