[sanitizer_common] Apply modernize-use-nullptr, other minor fixes
- Trim spaces. - Use nullptr in place of 0 for pointer variables. - Use '!p' in place of 'p == 0' for null pointer checks. Patch by Eugene Zelenko! Differential Revision: http://reviews.llvm.org/D13310 llvm-svn: 248964
This commit is contained in:
parent
3830d68bc1
commit
552c0111f1
|
@ -11,6 +11,7 @@
|
|||
// run-time libraries.
|
||||
// This allocator is used inside run-times.
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "sanitizer_allocator.h"
|
||||
#include "sanitizer_allocator_internal.h"
|
||||
#include "sanitizer_common.h"
|
||||
|
@ -44,7 +45,7 @@ InternalAllocator *internal_allocator() {
|
|||
return 0;
|
||||
}
|
||||
|
||||
#else // SANITIZER_GO
|
||||
#else // SANITIZER_GO
|
||||
|
||||
static ALIGNED(64) char internal_alloc_placeholder[sizeof(InternalAllocator)];
|
||||
static atomic_uint8_t internal_allocator_initialized;
|
||||
|
@ -77,29 +78,29 @@ static void *RawInternalAlloc(uptr size, InternalAllocatorCache *cache) {
|
|||
}
|
||||
|
||||
static void RawInternalFree(void *ptr, InternalAllocatorCache *cache) {
|
||||
if (cache == 0) {
|
||||
if (!cache) {
|
||||
SpinMutexLock l(&internal_allocator_cache_mu);
|
||||
return internal_allocator()->Deallocate(&internal_allocator_cache, ptr);
|
||||
}
|
||||
internal_allocator()->Deallocate(cache, ptr);
|
||||
}
|
||||
|
||||
#endif // SANITIZER_GO
|
||||
#endif // SANITIZER_GO
|
||||
|
||||
const u64 kBlockMagic = 0x6A6CB03ABCEBC041ull;
|
||||
|
||||
void *InternalAlloc(uptr size, InternalAllocatorCache *cache) {
|
||||
if (size + sizeof(u64) < size)
|
||||
return 0;
|
||||
return nullptr;
|
||||
void *p = RawInternalAlloc(size + sizeof(u64), cache);
|
||||
if (p == 0)
|
||||
return 0;
|
||||
if (!p)
|
||||
return nullptr;
|
||||
((u64*)p)[0] = kBlockMagic;
|
||||
return (char*)p + sizeof(u64);
|
||||
}
|
||||
|
||||
void InternalFree(void *addr, InternalAllocatorCache *cache) {
|
||||
if (addr == 0)
|
||||
if (!addr)
|
||||
return;
|
||||
addr = (char*)addr - sizeof(u64);
|
||||
CHECK_EQ(kBlockMagic, ((u64*)addr)[0]);
|
||||
|
@ -147,4 +148,4 @@ void NORETURN ReportAllocatorCannotReturnNull() {
|
|||
Die();
|
||||
}
|
||||
|
||||
} // namespace __sanitizer
|
||||
} // namespace __sanitizer
|
||||
|
|
|
@ -250,8 +250,8 @@ void *MmapAlignedOrDie(uptr size, uptr alignment, const char *mem_type) {
|
|||
|
||||
const char *StripPathPrefix(const char *filepath,
|
||||
const char *strip_path_prefix) {
|
||||
if (filepath == 0) return 0;
|
||||
if (strip_path_prefix == 0) return filepath;
|
||||
if (!filepath) return nullptr;
|
||||
if (!strip_path_prefix) return filepath;
|
||||
const char *res = filepath;
|
||||
if (const char *pos = internal_strstr(filepath, strip_path_prefix))
|
||||
res = pos + internal_strlen(strip_path_prefix);
|
||||
|
@ -261,8 +261,8 @@ const char *StripPathPrefix(const char *filepath,
|
|||
}
|
||||
|
||||
const char *StripModuleName(const char *module) {
|
||||
if (module == 0)
|
||||
return 0;
|
||||
if (!module)
|
||||
return nullptr;
|
||||
if (SANITIZER_WINDOWS) {
|
||||
// On Windows, both slash and backslash are possible.
|
||||
// Pick the one that goes last.
|
||||
|
@ -343,7 +343,7 @@ void DecreaseTotalMmap(uptr size) {
|
|||
}
|
||||
|
||||
bool TemplateMatch(const char *templ, const char *str) {
|
||||
if (str == 0 || str[0] == 0)
|
||||
if ((!str) || str[0] == 0)
|
||||
return false;
|
||||
bool start = false;
|
||||
if (templ && templ[0] == '^') {
|
||||
|
@ -364,9 +364,9 @@ bool TemplateMatch(const char *templ, const char *str) {
|
|||
return false;
|
||||
char *tpos = (char*)internal_strchr(templ, '*');
|
||||
char *tpos1 = (char*)internal_strchr(templ, '$');
|
||||
if (tpos == 0 || (tpos1 && tpos1 < tpos))
|
||||
if ((!tpos) || (tpos1 && tpos1 < tpos))
|
||||
tpos = tpos1;
|
||||
if (tpos != 0)
|
||||
if (tpos)
|
||||
tpos[0] = 0;
|
||||
const char *str0 = str;
|
||||
const char *spos = internal_strstr(str, templ);
|
||||
|
@ -374,7 +374,7 @@ bool TemplateMatch(const char *templ, const char *str) {
|
|||
templ = tpos;
|
||||
if (tpos)
|
||||
tpos[0] = tpos == tpos1 ? '$' : '*';
|
||||
if (spos == 0)
|
||||
if (!spos)
|
||||
return false;
|
||||
if (start && spos != str0)
|
||||
return false;
|
||||
|
@ -389,7 +389,7 @@ static const char kPathSeparator = SANITIZER_WINDOWS ? ';' : ':';
|
|||
char *FindPathToBinary(const char *name) {
|
||||
const char *path = GetEnv("PATH");
|
||||
if (!path)
|
||||
return 0;
|
||||
return nullptr;
|
||||
uptr name_len = internal_strlen(name);
|
||||
InternalScopedBuffer<char> buffer(kMaxPathLength);
|
||||
const char *beg = path;
|
||||
|
@ -451,7 +451,7 @@ uptr ReadBinaryNameCached(/*out*/char *buf, uptr buf_len) {
|
|||
return name_len;
|
||||
}
|
||||
|
||||
} // namespace __sanitizer
|
||||
} // namespace __sanitizer
|
||||
|
||||
using namespace __sanitizer; // NOLINT
|
||||
|
||||
|
@ -468,4 +468,4 @@ SANITIZER_INTERFACE_ATTRIBUTE
|
|||
void __sanitizer_set_death_callback(void (*callback)(void)) {
|
||||
SetUserDieCallback(callback);
|
||||
}
|
||||
} // extern "C"
|
||||
} // extern "C"
|
||||
|
|
|
@ -813,7 +813,7 @@ void CovPrepareForSandboxing(__sanitizer_sandbox_arguments *args) {
|
|||
} else {
|
||||
InternalScopedString path(kMaxPathLength);
|
||||
// Pre-open the file now. The sandbox won't allow us to do it later.
|
||||
cov_fd = CovOpenFile(&path, true /* packed */, 0);
|
||||
cov_fd = CovOpenFile(&path, true /* packed */, nullptr);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -859,7 +859,7 @@ void CoverageUpdateMapping() {
|
|||
CovUpdateMapping(coverage_dir);
|
||||
}
|
||||
|
||||
} // namespace __sanitizer
|
||||
} // namespace __sanitizer
|
||||
|
||||
extern "C" {
|
||||
SANITIZER_INTERFACE_ATTRIBUTE void __sanitizer_cov(u32 *guard) {
|
||||
|
@ -942,4 +942,4 @@ SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
|
|||
void __sanitizer_cov_trace_cmp() {}
|
||||
SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
|
||||
void __sanitizer_cov_trace_switch() {}
|
||||
} // extern "C"
|
||||
} // extern "C"
|
||||
|
|
|
@ -75,7 +75,7 @@ void CovUpdateMapping(const char *coverage_dir, uptr caller_pc) {
|
|||
InternalScopedBuffer<LoadedModule> modules(kMaxNumberOfModules);
|
||||
CHECK(modules.data());
|
||||
int n_modules = GetListOfModules(modules.data(), kMaxNumberOfModules,
|
||||
/* filter */ 0);
|
||||
/* filter */ nullptr);
|
||||
|
||||
text.append("%d\n", sizeof(uptr) * 8);
|
||||
for (int i = 0; i < n_modules; ++i) {
|
||||
|
@ -124,4 +124,4 @@ void CovUpdateMapping(const char *coverage_dir, uptr caller_pc) {
|
|||
}
|
||||
}
|
||||
|
||||
} // namespace __sanitizer
|
||||
} // namespace __sanitizer
|
||||
|
|
|
@ -71,7 +71,7 @@ DD::DD(const DDFlags *flags)
|
|||
}
|
||||
|
||||
DDPhysicalThread* DD::CreatePhysicalThread() {
|
||||
return 0;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void DD::DestroyPhysicalThread(DDPhysicalThread *pt) {
|
||||
|
@ -181,10 +181,10 @@ void DD::MutexDestroy(DDCallback *cb,
|
|||
|
||||
DDReport *DD::GetReport(DDCallback *cb) {
|
||||
if (!cb->lt->report_pending)
|
||||
return 0;
|
||||
return nullptr;
|
||||
cb->lt->report_pending = false;
|
||||
return &cb->lt->rep;
|
||||
}
|
||||
|
||||
} // namespace __sanitizer
|
||||
#endif // #if SANITIZER_DEADLOCK_DETECTOR_VERSION == 1
|
||||
} // namespace __sanitizer
|
||||
#endif // #if SANITIZER_DEADLOCK_DETECTOR_VERSION == 1
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
// This file describes common flags available in all sanitizers.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#ifndef COMMON_FLAG
|
||||
#error "Define COMMON_FLAG prior to including this file!"
|
||||
#endif
|
||||
|
@ -24,7 +25,7 @@ COMMON_FLAG(
|
|||
"If set, use the online symbolizer from common sanitizer runtime to turn "
|
||||
"virtual addresses to file/line locations.")
|
||||
COMMON_FLAG(
|
||||
const char *, external_symbolizer_path, 0,
|
||||
const char *, external_symbolizer_path, nullptr,
|
||||
"Path to external symbolizer. If empty, the tool will search $PATH for "
|
||||
"the symbolizer.")
|
||||
COMMON_FLAG(
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
// This file is shared between AddressSanitizer and ThreadSanitizer
|
||||
// run-time libraries. See sanitizer_libc.h for details.
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "sanitizer_allocator_internal.h"
|
||||
#include "sanitizer_common.h"
|
||||
#include "sanitizer_libc.h"
|
||||
|
@ -17,7 +18,7 @@
|
|||
namespace __sanitizer {
|
||||
|
||||
s64 internal_atoll(const char *nptr) {
|
||||
return internal_simple_strtoll(nptr, (char**)0, 10);
|
||||
return internal_simple_strtoll(nptr, nullptr, 10);
|
||||
}
|
||||
|
||||
void *internal_memchr(const void *s, int c, uptr n) {
|
||||
|
@ -25,7 +26,7 @@ void *internal_memchr(const void *s, int c, uptr n) {
|
|||
for (uptr i = 0; i < n; ++i, ++t)
|
||||
if (*t == c)
|
||||
return reinterpret_cast<void *>(const_cast<char *>(t));
|
||||
return 0;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void *internal_memrchr(const void *s, int c, uptr n) {
|
||||
|
@ -77,7 +78,7 @@ void internal_bzero_aligned16(void *s, uptr n) {
|
|||
CHECK_EQ((reinterpret_cast<uptr>(s) | n) & 15, 0);
|
||||
for (S16 *p = reinterpret_cast<S16*>(s), *end = p + n / 16; p < end; p++) {
|
||||
p->a = p->b = 0;
|
||||
SanitizerBreakOptimization(0); // Make sure this does not become memset.
|
||||
SanitizerBreakOptimization(nullptr); // Make sure this does not become memset.
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -96,7 +97,7 @@ void *internal_memset(void* s, int c, uptr n) {
|
|||
uptr internal_strcspn(const char *s, const char *reject) {
|
||||
uptr i;
|
||||
for (i = 0; s[i]; i++) {
|
||||
if (internal_strchr(reject, s[i]) != 0)
|
||||
if (internal_strchr(reject, s[i]))
|
||||
return i;
|
||||
}
|
||||
return i;
|
||||
|
@ -147,7 +148,7 @@ char* internal_strchr(const char *s, int c) {
|
|||
if (*s == (char)c)
|
||||
return const_cast<char *>(s);
|
||||
if (*s == 0)
|
||||
return 0;
|
||||
return nullptr;
|
||||
s++;
|
||||
}
|
||||
}
|
||||
|
@ -160,7 +161,7 @@ char *internal_strchrnul(const char *s, int c) {
|
|||
}
|
||||
|
||||
char *internal_strrchr(const char *s, int c) {
|
||||
const char *res = 0;
|
||||
const char *res = nullptr;
|
||||
for (uptr i = 0; s[i]; i++) {
|
||||
if (s[i] == c) res = s + i;
|
||||
}
|
||||
|
@ -200,12 +201,12 @@ char *internal_strstr(const char *haystack, const char *needle) {
|
|||
// This is O(N^2), but we are not using it in hot places.
|
||||
uptr len1 = internal_strlen(haystack);
|
||||
uptr len2 = internal_strlen(needle);
|
||||
if (len1 < len2) return 0;
|
||||
if (len1 < len2) return nullptr;
|
||||
for (uptr pos = 0; pos <= len1 - len2; pos++) {
|
||||
if (internal_memcmp(haystack + pos, needle, len2) == 0)
|
||||
return const_cast<char *>(haystack) + pos;
|
||||
}
|
||||
return 0;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
s64 internal_simple_strtoll(const char *nptr, char **endptr, int base) {
|
||||
|
@ -229,7 +230,7 @@ s64 internal_simple_strtoll(const char *nptr, char **endptr, int base) {
|
|||
have_digits = true;
|
||||
nptr++;
|
||||
}
|
||||
if (endptr != 0) {
|
||||
if (endptr) {
|
||||
*endptr = (have_digits) ? const_cast<char *>(nptr) : old_nptr;
|
||||
}
|
||||
if (sgn > 0) {
|
||||
|
@ -258,4 +259,4 @@ bool mem_is_zero(const char *beg, uptr size) {
|
|||
return all == 0;
|
||||
}
|
||||
|
||||
} // namespace __sanitizer
|
||||
} // namespace __sanitizer
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "sanitizer_platform.h"
|
||||
|
||||
#if SANITIZER_FREEBSD || SANITIZER_LINUX
|
||||
|
||||
#include "sanitizer_libignore.h"
|
||||
|
@ -38,11 +39,11 @@ void LibIgnore::OnLibraryLoaded(const char *name) {
|
|||
BlockingMutexLock lock(&mutex_);
|
||||
// Try to match suppressions with symlink target.
|
||||
InternalScopedString buf(kMaxPathLength);
|
||||
if (name != 0 && internal_readlink(name, buf.data(), buf.size() - 1) > 0 &&
|
||||
if (name && internal_readlink(name, buf.data(), buf.size() - 1) > 0 &&
|
||||
buf[0]) {
|
||||
for (uptr i = 0; i < count_; i++) {
|
||||
Lib *lib = &libs_[i];
|
||||
if (!lib->loaded && lib->real_name == 0 &&
|
||||
if (!lib->loaded && (!lib->real_name) &&
|
||||
TemplateMatch(lib->templ, name))
|
||||
lib->real_name = internal_strdup(buf.data());
|
||||
}
|
||||
|
@ -60,7 +61,7 @@ void LibIgnore::OnLibraryLoaded(const char *name) {
|
|||
if ((prot & MemoryMappingLayout::kProtectionExecute) == 0)
|
||||
continue;
|
||||
if (TemplateMatch(lib->templ, module.data()) ||
|
||||
(lib->real_name != 0 &&
|
||||
(lib->real_name &&
|
||||
internal_strcmp(lib->real_name, module.data()) == 0)) {
|
||||
if (loaded) {
|
||||
Report("%s: called_from_lib suppression '%s' is matched against"
|
||||
|
@ -93,9 +94,9 @@ void LibIgnore::OnLibraryLoaded(const char *name) {
|
|||
}
|
||||
|
||||
void LibIgnore::OnLibraryUnloaded() {
|
||||
OnLibraryLoaded(0);
|
||||
OnLibraryLoaded(nullptr);
|
||||
}
|
||||
|
||||
} // namespace __sanitizer
|
||||
} // namespace __sanitizer
|
||||
|
||||
#endif // #if SANITIZER_FREEBSD || SANITIZER_LINUX
|
||||
#endif // #if SANITIZER_FREEBSD || SANITIZER_LINUX
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "sanitizer_platform.h"
|
||||
|
||||
#if SANITIZER_FREEBSD || SANITIZER_LINUX
|
||||
|
||||
#include "sanitizer_common.h"
|
||||
|
@ -374,20 +375,20 @@ const char *GetEnv(const char *name) {
|
|||
if (!ReadFileToBuffer("/proc/self/environ", &environ, &environ_size, &len))
|
||||
environ = nullptr;
|
||||
}
|
||||
if (!environ || len == 0) return 0;
|
||||
if (!environ || len == 0) return nullptr;
|
||||
uptr namelen = internal_strlen(name);
|
||||
const char *p = environ;
|
||||
while (*p != '\0') { // will happen at the \0\0 that terminates the buffer
|
||||
// proc file has the format NAME=value\0NAME=value\0NAME=value\0...
|
||||
const char* endp =
|
||||
(char*)internal_memchr(p, '\0', len - (p - environ));
|
||||
if (endp == 0) // this entry isn't NUL terminated
|
||||
return 0;
|
||||
if (!endp) // this entry isn't NUL terminated
|
||||
return nullptr;
|
||||
else if (!internal_memcmp(p, name, namelen) && p[namelen] == '=') // Match.
|
||||
return p + namelen + 1; // point after =
|
||||
p = endp + 1;
|
||||
}
|
||||
return 0; // Not found.
|
||||
return nullptr; // Not found.
|
||||
#else
|
||||
#error "Unsupported platform"
|
||||
#endif
|
||||
|
@ -585,8 +586,8 @@ int internal_sigaction_norestorer(int signum, const void *act, void *oldact) {
|
|||
}
|
||||
|
||||
uptr result = internal_syscall(SYSCALL(rt_sigaction), (uptr)signum,
|
||||
(uptr)(u_act ? &k_act : NULL),
|
||||
(uptr)(u_oldact ? &k_oldact : NULL),
|
||||
(uptr)(u_act ? &k_act : nullptr),
|
||||
(uptr)(u_oldact ? &k_oldact : nullptr),
|
||||
(uptr)sizeof(__sanitizer_kernel_sigset_t));
|
||||
|
||||
if ((result == 0) && u_oldact) {
|
||||
|
@ -1053,13 +1054,13 @@ void *internal_start_thread(void(*func)(void *arg), void *arg) {
|
|||
#endif
|
||||
internal_sigprocmask(SIG_SETMASK, &set, &old);
|
||||
void *th;
|
||||
real_pthread_create(&th, 0, (void*(*)(void *arg))func, arg);
|
||||
internal_sigprocmask(SIG_SETMASK, &old, 0);
|
||||
real_pthread_create(&th, nullptr, (void*(*)(void *arg))func, arg);
|
||||
internal_sigprocmask(SIG_SETMASK, &old, nullptr);
|
||||
return th;
|
||||
}
|
||||
|
||||
void internal_join_thread(void *th) {
|
||||
real_pthread_join(th, 0);
|
||||
real_pthread_join(th, nullptr);
|
||||
}
|
||||
#else
|
||||
void *internal_start_thread(void (*func)(void *), void *arg) { return 0; }
|
||||
|
@ -1139,6 +1140,6 @@ void GetPcSpBp(void *context, uptr *pc, uptr *sp, uptr *bp) {
|
|||
#endif
|
||||
}
|
||||
|
||||
} // namespace __sanitizer
|
||||
} // namespace __sanitizer
|
||||
|
||||
#endif // SANITIZER_FREEBSD || SANITIZER_LINUX
|
||||
#endif // SANITIZER_FREEBSD || SANITIZER_LINUX
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "sanitizer_platform.h"
|
||||
|
||||
#if SANITIZER_FREEBSD || SANITIZER_LINUX
|
||||
|
||||
#include "sanitizer_allocator_internal.h"
|
||||
|
@ -65,7 +66,7 @@ namespace __sanitizer {
|
|||
extern "C" {
|
||||
SANITIZER_WEAK_ATTRIBUTE int
|
||||
real_pthread_attr_getstack(void *attr, void **addr, size_t *size);
|
||||
} // extern "C"
|
||||
} // extern "C"
|
||||
|
||||
static int my_pthread_attr_getstack(void *attr, void **addr, size_t *size) {
|
||||
#if !SANITIZER_GO
|
||||
|
@ -100,7 +101,7 @@ void GetThreadStackTopAndBottom(bool at_initialization, uptr *stack_top,
|
|||
MemoryMappingLayout proc_maps(/*cache_enabled*/true);
|
||||
uptr start, end, offset;
|
||||
uptr prev_end = 0;
|
||||
while (proc_maps.Next(&start, &end, &offset, 0, 0, /* protection */0)) {
|
||||
while (proc_maps.Next(&start, &end, &offset, nullptr, 0, /* protection */nullptr)) {
|
||||
if ((uptr)&rl < end)
|
||||
break;
|
||||
prev_end = end;
|
||||
|
@ -125,7 +126,7 @@ void GetThreadStackTopAndBottom(bool at_initialization, uptr *stack_top,
|
|||
pthread_attr_init(&attr);
|
||||
CHECK_EQ(pthread_getattr_np(pthread_self(), &attr), 0);
|
||||
uptr stacksize = 0;
|
||||
void *stackaddr = 0;
|
||||
void *stackaddr = nullptr;
|
||||
my_pthread_attr_getstack(&attr, &stackaddr, (size_t*)&stacksize);
|
||||
pthread_attr_destroy(&attr);
|
||||
|
||||
|
@ -137,7 +138,7 @@ void GetThreadStackTopAndBottom(bool at_initialization, uptr *stack_top,
|
|||
#if !SANITIZER_GO
|
||||
bool SetEnv(const char *name, const char *value) {
|
||||
void *f = dlsym(RTLD_NEXT, "setenv");
|
||||
if (f == 0)
|
||||
if (!f)
|
||||
return false;
|
||||
typedef int(*setenv_ft)(const char *name, const char *value, int overwrite);
|
||||
setenv_ft setenv_f;
|
||||
|
@ -581,8 +582,8 @@ void WriteToSyslog(const char *buffer) {
|
|||
} while (q);
|
||||
InternalFree(copy);
|
||||
}
|
||||
#endif // SANITIZER_LINUX
|
||||
#endif // SANITIZER_LINUX
|
||||
|
||||
} // namespace __sanitizer
|
||||
} // namespace __sanitizer
|
||||
|
||||
#endif // SANITIZER_FREEBSD || SANITIZER_LINUX
|
||||
#endif // SANITIZER_FREEBSD || SANITIZER_LINUX
|
||||
|
|
|
@ -12,8 +12,8 @@
|
|||
// Sizes and layouts of platform-specific POSIX data structures.
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
|
||||
#include "sanitizer_platform.h"
|
||||
|
||||
#if SANITIZER_LINUX || SANITIZER_FREEBSD || SANITIZER_MAC
|
||||
// Tests in this file assume that off_t-dependent data structures match the
|
||||
// libc ABI. For example, struct dirent here is what readdir() function (as
|
||||
|
@ -195,7 +195,7 @@ namespace __sanitizer {
|
|||
unsigned struct_stat_sz = sizeof(struct stat);
|
||||
#if !SANITIZER_IOS && !SANITIZER_FREEBSD
|
||||
unsigned struct_stat64_sz = sizeof(struct stat64);
|
||||
#endif // !SANITIZER_IOS && !SANITIZER_FREEBSD
|
||||
#endif // !SANITIZER_IOS && !SANITIZER_FREEBSD
|
||||
unsigned struct_rusage_sz = sizeof(struct rusage);
|
||||
unsigned struct_tm_sz = sizeof(struct tm);
|
||||
unsigned struct_passwd_sz = sizeof(struct passwd);
|
||||
|
@ -236,27 +236,27 @@ namespace __sanitizer {
|
|||
unsigned struct_new_utsname_sz = sizeof(struct new_utsname);
|
||||
unsigned struct_old_utsname_sz = sizeof(struct old_utsname);
|
||||
unsigned struct_oldold_utsname_sz = sizeof(struct oldold_utsname);
|
||||
#endif // SANITIZER_LINUX
|
||||
#endif // SANITIZER_LINUX
|
||||
|
||||
#if SANITIZER_LINUX || SANITIZER_FREEBSD
|
||||
unsigned struct_rlimit_sz = sizeof(struct rlimit);
|
||||
unsigned struct_timespec_sz = sizeof(struct timespec);
|
||||
unsigned struct_utimbuf_sz = sizeof(struct utimbuf);
|
||||
unsigned struct_itimerspec_sz = sizeof(struct itimerspec);
|
||||
#endif // SANITIZER_LINUX || SANITIZER_FREEBSD
|
||||
#endif // SANITIZER_LINUX || SANITIZER_FREEBSD
|
||||
|
||||
#if SANITIZER_LINUX && !SANITIZER_ANDROID
|
||||
unsigned struct_ustat_sz = sizeof(struct ustat);
|
||||
unsigned struct_rlimit64_sz = sizeof(struct rlimit64);
|
||||
unsigned struct_statvfs64_sz = sizeof(struct statvfs64);
|
||||
#endif // SANITIZER_LINUX && !SANITIZER_ANDROID
|
||||
#endif // SANITIZER_LINUX && !SANITIZER_ANDROID
|
||||
|
||||
#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID
|
||||
unsigned struct_timex_sz = sizeof(struct timex);
|
||||
unsigned struct_msqid_ds_sz = sizeof(struct msqid_ds);
|
||||
unsigned struct_mq_attr_sz = sizeof(struct mq_attr);
|
||||
unsigned struct_statvfs_sz = sizeof(struct statvfs);
|
||||
#endif // (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID
|
||||
#endif // (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID
|
||||
|
||||
uptr sig_ign = (uptr)SIG_IGN;
|
||||
uptr sig_dfl = (uptr)SIG_DFL;
|
||||
|
@ -344,7 +344,7 @@ unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr);
|
|||
#else
|
||||
int ptrace_getfpxregs = -1;
|
||||
int ptrace_setfpxregs = -1;
|
||||
#endif // PTRACE_GETFPXREGS/PTRACE_SETFPXREGS
|
||||
#endif // PTRACE_GETFPXREGS/PTRACE_SETFPXREGS
|
||||
int ptrace_geteventmsg = PTRACE_GETEVENTMSG;
|
||||
#if (defined(PTRACE_GETSIGINFO) && defined(PTRACE_SETSIGINFO)) || \
|
||||
(defined(PT_GETSIGINFO) && defined(PT_SETSIGINFO))
|
||||
|
@ -353,14 +353,14 @@ unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr);
|
|||
#else
|
||||
int ptrace_getsiginfo = -1;
|
||||
int ptrace_setsiginfo = -1;
|
||||
#endif // PTRACE_GETSIGINFO/PTRACE_SETSIGINFO
|
||||
#endif // PTRACE_GETSIGINFO/PTRACE_SETSIGINFO
|
||||
#if defined(PTRACE_GETREGSET) && defined(PTRACE_SETREGSET)
|
||||
int ptrace_getregset = PTRACE_GETREGSET;
|
||||
int ptrace_setregset = PTRACE_SETREGSET;
|
||||
#else
|
||||
int ptrace_getregset = -1;
|
||||
int ptrace_setregset = -1;
|
||||
#endif // PTRACE_GETREGSET/PTRACE_SETREGSET
|
||||
#endif // PTRACE_GETREGSET/PTRACE_SETREGSET
|
||||
#endif
|
||||
|
||||
unsigned path_max = PATH_MAX;
|
||||
|
@ -398,7 +398,7 @@ unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr);
|
|||
unsigned struct_vt_consize_sz = sizeof(struct vt_consize);
|
||||
unsigned struct_vt_sizes_sz = sizeof(struct vt_sizes);
|
||||
unsigned struct_vt_stat_sz = sizeof(struct vt_stat);
|
||||
#endif // SANITIZER_LINUX
|
||||
#endif // SANITIZER_LINUX
|
||||
|
||||
#if SANITIZER_LINUX || SANITIZER_FREEBSD
|
||||
#if SOUND_VERSION >= 0x040000
|
||||
|
@ -418,7 +418,7 @@ unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr);
|
|||
unsigned struct_seq_event_rec_sz = sizeof(struct seq_event_rec);
|
||||
unsigned struct_synth_info_sz = sizeof(struct synth_info);
|
||||
unsigned struct_vt_mode_sz = sizeof(struct vt_mode);
|
||||
#endif // SANITIZER_LINUX || SANITIZER_FREEBSD
|
||||
#endif // SANITIZER_LINUX || SANITIZER_FREEBSD
|
||||
|
||||
#if SANITIZER_LINUX && !SANITIZER_ANDROID
|
||||
unsigned struct_ax25_parms_struct_sz = sizeof(struct ax25_parms_struct);
|
||||
|
@ -443,12 +443,12 @@ unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr);
|
|||
unsigned struct_sockaddr_ax25_sz = sizeof(struct sockaddr_ax25);
|
||||
unsigned struct_unimapdesc_sz = sizeof(struct unimapdesc);
|
||||
unsigned struct_unimapinit_sz = sizeof(struct unimapinit);
|
||||
#endif // SANITIZER_LINUX && !SANITIZER_ANDROID
|
||||
#endif // SANITIZER_LINUX && !SANITIZER_ANDROID
|
||||
|
||||
#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID
|
||||
unsigned struct_audio_buf_info_sz = sizeof(struct audio_buf_info);
|
||||
unsigned struct_ppp_stats_sz = sizeof(struct ppp_stats);
|
||||
#endif // (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID
|
||||
#endif // (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID
|
||||
|
||||
#if !SANITIZER_ANDROID && !SANITIZER_MAC
|
||||
unsigned struct_sioc_sg_req_sz = sizeof(struct sioc_sg_req);
|
||||
|
@ -663,7 +663,7 @@ unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr);
|
|||
unsigned IOCTL_SOUND_PCM_READ_RATE = SOUND_PCM_READ_RATE;
|
||||
unsigned IOCTL_SOUND_PCM_WRITE_CHANNELS = SOUND_PCM_WRITE_CHANNELS;
|
||||
unsigned IOCTL_SOUND_PCM_WRITE_FILTER = SOUND_PCM_WRITE_FILTER;
|
||||
#endif // SOUND_VERSION
|
||||
#endif // SOUND_VERSION
|
||||
unsigned IOCTL_TCFLSH = TCFLSH;
|
||||
unsigned IOCTL_TCGETA = TCGETA;
|
||||
unsigned IOCTL_TCGETS = TCGETS;
|
||||
|
@ -786,7 +786,7 @@ unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr);
|
|||
unsigned IOCTL_VT_RELDISP = VT_RELDISP;
|
||||
unsigned IOCTL_VT_SETMODE = VT_SETMODE;
|
||||
unsigned IOCTL_VT_WAITACTIVE = VT_WAITACTIVE;
|
||||
#endif // SANITIZER_LINUX || SANITIZER_FREEBSD
|
||||
#endif // SANITIZER_LINUX || SANITIZER_FREEBSD
|
||||
|
||||
#if SANITIZER_LINUX && !SANITIZER_ANDROID
|
||||
unsigned IOCTL_CYGETDEFTHRESH = CYGETDEFTHRESH;
|
||||
|
@ -877,7 +877,7 @@ unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr);
|
|||
unsigned IOCTL_TIOCSERGETMULTI = TIOCSERGETMULTI;
|
||||
unsigned IOCTL_TIOCSERSETMULTI = TIOCSERSETMULTI;
|
||||
unsigned IOCTL_TIOCSSERIAL = TIOCSSERIAL;
|
||||
#endif // SANITIZER_LINUX && !SANITIZER_ANDROID
|
||||
#endif // SANITIZER_LINUX && !SANITIZER_ANDROID
|
||||
|
||||
#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID
|
||||
unsigned IOCTL_GIO_SCRNMAP = GIO_SCRNMAP;
|
||||
|
@ -895,7 +895,7 @@ unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr);
|
|||
unsigned IOCTL_PIO_SCRNMAP = PIO_SCRNMAP;
|
||||
unsigned IOCTL_SNDCTL_DSP_GETISPACE = SNDCTL_DSP_GETISPACE;
|
||||
unsigned IOCTL_SNDCTL_DSP_GETOSPACE = SNDCTL_DSP_GETOSPACE;
|
||||
#endif // (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID
|
||||
#endif // (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID
|
||||
|
||||
const int errno_EINVAL = EINVAL;
|
||||
// EOWNERDEAD is not present in some older platforms.
|
||||
|
@ -907,7 +907,7 @@ unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr);
|
|||
|
||||
const int si_SEGV_MAPERR = SEGV_MAPERR;
|
||||
const int si_SEGV_ACCERR = SEGV_ACCERR;
|
||||
} // namespace __sanitizer
|
||||
} // namespace __sanitizer
|
||||
|
||||
COMPILER_CHECK(sizeof(__sanitizer_pthread_attr_t) >= sizeof(pthread_attr_t));
|
||||
|
||||
|
@ -937,7 +937,7 @@ COMPILER_CHECK(IOC_SIZE(0x12345678) == _IOC_SIZE(0x12345678));
|
|||
COMPILER_CHECK(IOC_DIR(0x12345678) == _IOC_DIR(0x12345678));
|
||||
COMPILER_CHECK(IOC_NR(0x12345678) == _IOC_NR(0x12345678));
|
||||
COMPILER_CHECK(IOC_TYPE(0x12345678) == _IOC_TYPE(0x12345678));
|
||||
#endif // SANITIZER_LINUX
|
||||
#endif // SANITIZER_LINUX
|
||||
|
||||
#if SANITIZER_LINUX || SANITIZER_FREEBSD
|
||||
// There are more undocumented fields in dl_phdr_info that we are not interested
|
||||
|
@ -947,7 +947,7 @@ CHECK_SIZE_AND_OFFSET(dl_phdr_info, dlpi_addr);
|
|||
CHECK_SIZE_AND_OFFSET(dl_phdr_info, dlpi_name);
|
||||
CHECK_SIZE_AND_OFFSET(dl_phdr_info, dlpi_phdr);
|
||||
CHECK_SIZE_AND_OFFSET(dl_phdr_info, dlpi_phnum);
|
||||
#endif // SANITIZER_LINUX || SANITIZER_FREEBSD
|
||||
#endif // SANITIZER_LINUX || SANITIZER_FREEBSD
|
||||
|
||||
#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID
|
||||
CHECK_TYPE_SIZE(glob_t);
|
||||
|
@ -1144,14 +1144,14 @@ CHECK_SIZE_AND_OFFSET(ifaddrs, ifa_netmask);
|
|||
# if SANITIZER_FREEBSD
|
||||
CHECK_SIZE_AND_OFFSET(ifaddrs, ifa_dstaddr);
|
||||
# else
|
||||
COMPILER_CHECK(sizeof(((__sanitizer_ifaddrs *)NULL)->ifa_dstaddr) ==
|
||||
sizeof(((ifaddrs *)NULL)->ifa_ifu));
|
||||
COMPILER_CHECK(sizeof(((__sanitizer_ifaddrs *)nullptr)->ifa_dstaddr) ==
|
||||
sizeof(((ifaddrs *)nullptr)->ifa_ifu));
|
||||
COMPILER_CHECK(offsetof(__sanitizer_ifaddrs, ifa_dstaddr) ==
|
||||
offsetof(ifaddrs, ifa_ifu));
|
||||
# endif // SANITIZER_FREEBSD
|
||||
# endif // SANITIZER_FREEBSD
|
||||
#else
|
||||
CHECK_SIZE_AND_OFFSET(ifaddrs, ifa_dstaddr);
|
||||
#endif // SANITIZER_LINUX
|
||||
#endif // SANITIZER_LINUX
|
||||
CHECK_SIZE_AND_OFFSET(ifaddrs, ifa_data);
|
||||
#endif
|
||||
|
||||
|
@ -1241,4 +1241,4 @@ CHECK_SIZE_AND_OFFSET(cookie_io_functions_t, seek);
|
|||
CHECK_SIZE_AND_OFFSET(cookie_io_functions_t, close);
|
||||
#endif
|
||||
|
||||
#endif // SANITIZER_LINUX || SANITIZER_FREEBSD || SANITIZER_MAC
|
||||
#endif // SANITIZER_LINUX || SANITIZER_FREEBSD || SANITIZER_MAC
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "sanitizer_platform.h"
|
||||
|
||||
#if SANITIZER_POSIX
|
||||
|
||||
#include "sanitizer_common.h"
|
||||
|
@ -57,8 +58,8 @@ static uptr GetKernelAreaSize() {
|
|||
// mapped to top gigabyte (e.g. stack).
|
||||
MemoryMappingLayout proc_maps(/*cache_enabled*/true);
|
||||
uptr end, prot;
|
||||
while (proc_maps.Next(/*start*/0, &end,
|
||||
/*offset*/0, /*filename*/0,
|
||||
while (proc_maps.Next(/*start*/nullptr, &end,
|
||||
/*offset*/nullptr, /*filename*/nullptr,
|
||||
/*filename_size*/0, &prot)) {
|
||||
if ((end >= 3 * gbyte)
|
||||
&& (prot & MemoryMappingLayout::kProtectionWrite) != 0)
|
||||
|
@ -113,9 +114,9 @@ uptr GetMaxVirtualAddress() {
|
|||
|
||||
void *MmapOrDie(uptr size, const char *mem_type) {
|
||||
size = RoundUpTo(size, GetPageSizeCached());
|
||||
uptr res = internal_mmap(0, size,
|
||||
PROT_READ | PROT_WRITE,
|
||||
MAP_PRIVATE | MAP_ANON, -1, 0);
|
||||
uptr res = internal_mmap(nullptr, size,
|
||||
PROT_READ | PROT_WRITE,
|
||||
MAP_PRIVATE | MAP_ANON, -1, 0);
|
||||
int reserrno;
|
||||
if (internal_iserror(res, &reserrno))
|
||||
ReportMmapFailureAndDie(size, mem_type, reserrno);
|
||||
|
@ -136,11 +137,11 @@ void UnmapOrDie(void *addr, uptr size) {
|
|||
|
||||
void *MmapNoReserveOrDie(uptr size, const char *mem_type) {
|
||||
uptr PageSize = GetPageSizeCached();
|
||||
uptr p = internal_mmap(0,
|
||||
RoundUpTo(size, PageSize),
|
||||
PROT_READ | PROT_WRITE,
|
||||
MAP_PRIVATE | MAP_ANON | MAP_NORESERVE,
|
||||
-1, 0);
|
||||
uptr p = internal_mmap(nullptr,
|
||||
RoundUpTo(size, PageSize),
|
||||
PROT_READ | PROT_WRITE,
|
||||
MAP_PRIVATE | MAP_ANON | MAP_NORESERVE,
|
||||
-1, 0);
|
||||
int reserrno;
|
||||
if (internal_iserror(p, &reserrno)) {
|
||||
Report("ERROR: %s failed to "
|
||||
|
@ -223,8 +224,8 @@ void *MapFileToMemory(const char *file_name, uptr *buff_size) {
|
|||
CHECK_NE(fsize, (uptr)-1);
|
||||
CHECK_GT(fsize, 0);
|
||||
*buff_size = RoundUpTo(fsize, GetPageSizeCached());
|
||||
uptr map = internal_mmap(0, *buff_size, PROT_READ, MAP_PRIVATE, fd, 0);
|
||||
return internal_iserror(map) ? 0 : (void *)map;
|
||||
uptr map = internal_mmap(nullptr, *buff_size, PROT_READ, MAP_PRIVATE, fd, 0);
|
||||
return internal_iserror(map) ? nullptr : (void *)map;
|
||||
}
|
||||
|
||||
void *MapWritableFileToMemory(void *addr, uptr size, fd_t fd, OFF_T offset) {
|
||||
|
@ -235,7 +236,7 @@ void *MapWritableFileToMemory(void *addr, uptr size, fd_t fd, OFF_T offset) {
|
|||
if (internal_iserror(p, &mmap_errno)) {
|
||||
Printf("could not map writable file (%d, %lld, %zu): %zd, errno: %d\n",
|
||||
fd, (long long)offset, size, p, mmap_errno);
|
||||
return 0;
|
||||
return nullptr;
|
||||
}
|
||||
return (void *)p;
|
||||
}
|
||||
|
@ -255,8 +256,8 @@ bool MemoryRangeIsAvailable(uptr range_start, uptr range_end) {
|
|||
MemoryMappingLayout proc_maps(/*cache_enabled*/true);
|
||||
uptr start, end;
|
||||
while (proc_maps.Next(&start, &end,
|
||||
/*offset*/0, /*filename*/0, /*filename_size*/0,
|
||||
/*protection*/0)) {
|
||||
/*offset*/nullptr, /*filename*/nullptr,
|
||||
/*filename_size*/0, /*protection*/nullptr)) {
|
||||
if (start == end) continue; // Empty range.
|
||||
CHECK_NE(0, end);
|
||||
if (!IntervalsAreSeparate(start, end - 1, range_start, range_end))
|
||||
|
@ -271,8 +272,8 @@ void DumpProcessMap() {
|
|||
const sptr kBufSize = 4095;
|
||||
char *filename = (char*)MmapOrDie(kBufSize, __func__);
|
||||
Report("Process memory map follows:\n");
|
||||
while (proc_maps.Next(&start, &end, /* file_offset */0,
|
||||
filename, kBufSize, /* protection */0)) {
|
||||
while (proc_maps.Next(&start, &end, /* file_offset */nullptr,
|
||||
filename, kBufSize, /* protection */nullptr)) {
|
||||
Printf("\t%p-%p\t%s\n", (void*)start, (void*)end, filename);
|
||||
}
|
||||
Report("End of process memory map.\n");
|
||||
|
@ -340,6 +341,6 @@ void CheckVMASize() {
|
|||
#endif
|
||||
}
|
||||
|
||||
} // namespace __sanitizer
|
||||
} // namespace __sanitizer
|
||||
|
||||
#endif // SANITIZER_POSIX
|
||||
#endif // SANITIZER_POSIX
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
#include "sanitizer_platform.h"
|
||||
|
||||
#if SANITIZER_POSIX
|
||||
|
||||
#include "sanitizer_common.h"
|
||||
#include "sanitizer_flags.h"
|
||||
#include "sanitizer_platform_limits_posix.h"
|
||||
|
@ -141,7 +142,7 @@ static const uptr kAltStackSize = SIGSTKSZ * 4; // SIGSTKSZ is not enough.
|
|||
|
||||
void SetAlternateSignalStack() {
|
||||
stack_t altstack, oldstack;
|
||||
CHECK_EQ(0, sigaltstack(0, &oldstack));
|
||||
CHECK_EQ(0, sigaltstack(nullptr, &oldstack));
|
||||
// If the alternate stack is already in place, do nothing.
|
||||
// Android always sets an alternate stack, but it's too small for us.
|
||||
if (!SANITIZER_ANDROID && !(oldstack.ss_flags & SS_DISABLE)) return;
|
||||
|
@ -152,12 +153,12 @@ void SetAlternateSignalStack() {
|
|||
altstack.ss_sp = (char*) base;
|
||||
altstack.ss_flags = 0;
|
||||
altstack.ss_size = kAltStackSize;
|
||||
CHECK_EQ(0, sigaltstack(&altstack, 0));
|
||||
CHECK_EQ(0, sigaltstack(&altstack, nullptr));
|
||||
}
|
||||
|
||||
void UnsetAlternateSignalStack() {
|
||||
stack_t altstack, oldstack;
|
||||
altstack.ss_sp = 0;
|
||||
altstack.ss_sp = nullptr;
|
||||
altstack.ss_flags = SS_DISABLE;
|
||||
altstack.ss_size = kAltStackSize; // Some sane value required on Darwin.
|
||||
CHECK_EQ(0, sigaltstack(&altstack, &oldstack));
|
||||
|
@ -176,7 +177,7 @@ static void MaybeInstallSigaction(int signum,
|
|||
// Clients are responsible for handling this correctly.
|
||||
sigact.sa_flags = SA_SIGINFO | SA_NODEFER;
|
||||
if (common_flags()->use_sigaltstack) sigact.sa_flags |= SA_ONSTACK;
|
||||
CHECK_EQ(0, internal_sigaction(signum, &sigact, 0));
|
||||
CHECK_EQ(0, internal_sigaction(signum, &sigact, nullptr));
|
||||
VReport(1, "Installed the sigaction for signal %d\n", signum);
|
||||
}
|
||||
|
||||
|
@ -277,4 +278,4 @@ void *MmapNoAccess(uptr fixed_addr, uptr size, const char *name) {
|
|||
}
|
||||
} // namespace __sanitizer
|
||||
|
||||
#endif // SANITIZER_POSIX
|
||||
#endif // SANITIZER_POSIX
|
||||
|
|
|
@ -14,7 +14,6 @@
|
|||
// inside it.
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
|
||||
#include "sanitizer_common.h"
|
||||
#include "sanitizer_flags.h"
|
||||
#include "sanitizer_libc.h"
|
||||
|
@ -98,7 +97,7 @@ static int AppendSignedDecimal(char **buff, const char *buff_end, s64 num,
|
|||
|
||||
static int AppendString(char **buff, const char *buff_end, int precision,
|
||||
const char *s) {
|
||||
if (s == 0)
|
||||
if (!s)
|
||||
s = "<null>";
|
||||
int result = 0;
|
||||
for (; *s; s++) {
|
||||
|
@ -329,4 +328,4 @@ void InternalScopedString::append(const char *format, ...) {
|
|||
CHECK_LT(length_, size());
|
||||
}
|
||||
|
||||
} // namespace __sanitizer
|
||||
} // namespace __sanitizer
|
||||
|
|
|
@ -11,7 +11,9 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "sanitizer_platform.h"
|
||||
|
||||
#if SANITIZER_FREEBSD || SANITIZER_LINUX
|
||||
|
||||
#include "sanitizer_common.h"
|
||||
#include "sanitizer_placement_new.h"
|
||||
#include "sanitizer_procmaps.h"
|
||||
|
@ -151,7 +153,7 @@ uptr MemoryMappingLayout::DumpListOfModules(LoadedModule *modules,
|
|||
}
|
||||
|
||||
void GetMemoryProfile(fill_profile_f cb, uptr *stats, uptr stats_size) {
|
||||
char *smaps = 0;
|
||||
char *smaps = nullptr;
|
||||
uptr smaps_cap = 0;
|
||||
uptr smaps_len = 0;
|
||||
if (!ReadFileToBuffer("/proc/self/smaps", &smaps, &smaps_cap, &smaps_len))
|
||||
|
@ -174,6 +176,6 @@ void GetMemoryProfile(fill_profile_f cb, uptr *stats, uptr stats_size) {
|
|||
UnmapOrDie(smaps, smaps_cap);
|
||||
}
|
||||
|
||||
} // namespace __sanitizer
|
||||
} // namespace __sanitizer
|
||||
|
||||
#endif // SANITIZER_FREEBSD || SANITIZER_LINUX
|
||||
#endif // SANITIZER_FREEBSD || SANITIZER_LINUX
|
||||
|
|
|
@ -152,7 +152,7 @@ StackDepotReverseMap::StackDepotReverseMap()
|
|||
StackTrace StackDepotReverseMap::Get(u32 id) {
|
||||
if (!map_.size())
|
||||
return StackTrace();
|
||||
IdDescPair pair = {id, 0};
|
||||
IdDescPair pair = {id, nullptr};
|
||||
uptr idx = InternalBinarySearch(map_, 0, map_.size(), pair,
|
||||
IdDescPair::IdComparator);
|
||||
if (idx > map_.size())
|
||||
|
@ -160,4 +160,4 @@ StackTrace StackDepotReverseMap::Get(u32 id) {
|
|||
return map_[idx].desc->load();
|
||||
}
|
||||
|
||||
} // namespace __sanitizer
|
||||
} // namespace __sanitizer
|
||||
|
|
|
@ -10,13 +10,14 @@
|
|||
// This file is shared between sanitizers' run-time libraries.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "sanitizer_stacktrace_printer.h"
|
||||
|
||||
namespace __sanitizer {
|
||||
|
||||
static const char *StripFunctionName(const char *function, const char *prefix) {
|
||||
if (function == 0) return 0;
|
||||
if (prefix == 0) return function;
|
||||
if (!function) return nullptr;
|
||||
if (!prefix) return function;
|
||||
uptr prefix_len = internal_strlen(prefix);
|
||||
if (0 == internal_strncmp(function, prefix, prefix_len))
|
||||
return function + prefix_len;
|
||||
|
@ -140,4 +141,4 @@ void RenderModuleLocation(InternalScopedString *buffer, const char *module,
|
|||
offset);
|
||||
}
|
||||
|
||||
} // namespace __sanitizer
|
||||
} // namespace __sanitizer
|
||||
|
|
|
@ -12,8 +12,8 @@
|
|||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
|
||||
#include "sanitizer_platform.h"
|
||||
|
||||
#if SANITIZER_LINUX && (defined(__x86_64__) || defined(__mips__) || \
|
||||
defined(__aarch64__))
|
||||
|
||||
|
@ -119,7 +119,7 @@ bool ThreadSuspender::SuspendThread(SuspendedThreadID tid) {
|
|||
if (suspended_threads_list_.Contains(tid))
|
||||
return false;
|
||||
int pterrno;
|
||||
if (internal_iserror(internal_ptrace(PTRACE_ATTACH, tid, NULL, NULL),
|
||||
if (internal_iserror(internal_ptrace(PTRACE_ATTACH, tid, nullptr, nullptr),
|
||||
&pterrno)) {
|
||||
// Either the thread is dead, or something prevented us from attaching.
|
||||
// Log this event and move on.
|
||||
|
@ -146,11 +146,11 @@ bool ThreadSuspender::SuspendThread(SuspendedThreadID tid) {
|
|||
// doesn't hurt to report it.
|
||||
VReport(1, "Waiting on thread %d failed, detaching (errno %d).\n",
|
||||
tid, wperrno);
|
||||
internal_ptrace(PTRACE_DETACH, tid, NULL, NULL);
|
||||
internal_ptrace(PTRACE_DETACH, tid, nullptr, nullptr);
|
||||
return false;
|
||||
}
|
||||
if (WIFSTOPPED(status) && WSTOPSIG(status) != SIGSTOP) {
|
||||
internal_ptrace(PTRACE_CONT, tid, 0, (void*)(uptr)WSTOPSIG(status));
|
||||
internal_ptrace(PTRACE_CONT, tid, nullptr, (void*)(uptr)WSTOPSIG(status));
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
|
@ -164,7 +164,7 @@ void ThreadSuspender::ResumeAllThreads() {
|
|||
for (uptr i = 0; i < suspended_threads_list_.thread_count(); i++) {
|
||||
pid_t tid = suspended_threads_list_.GetThreadID(i);
|
||||
int pterrno;
|
||||
if (!internal_iserror(internal_ptrace(PTRACE_DETACH, tid, NULL, NULL),
|
||||
if (!internal_iserror(internal_ptrace(PTRACE_DETACH, tid, nullptr, nullptr),
|
||||
&pterrno)) {
|
||||
VReport(2, "Detached from thread %d.\n", tid);
|
||||
} else {
|
||||
|
@ -179,7 +179,7 @@ void ThreadSuspender::ResumeAllThreads() {
|
|||
void ThreadSuspender::KillAllThreads() {
|
||||
for (uptr i = 0; i < suspended_threads_list_.thread_count(); i++)
|
||||
internal_ptrace(PTRACE_KILL, suspended_threads_list_.GetThreadID(i),
|
||||
NULL, NULL);
|
||||
nullptr, nullptr);
|
||||
}
|
||||
|
||||
bool ThreadSuspender::SuspendAllThreads() {
|
||||
|
@ -205,7 +205,7 @@ bool ThreadSuspender::SuspendAllThreads() {
|
|||
}
|
||||
|
||||
// Pointer to the ThreadSuspender instance for use in signal handler.
|
||||
static ThreadSuspender *thread_suspender_instance = NULL;
|
||||
static ThreadSuspender *thread_suspender_instance = nullptr;
|
||||
|
||||
// Synchronous signals that should not be blocked.
|
||||
static const int kSyncSignals[] = { SIGABRT, SIGILL, SIGFPE, SIGSEGV, SIGBUS,
|
||||
|
@ -219,9 +219,9 @@ static void TracerThreadDieCallback() {
|
|||
// not those that happen before or after the callback. Hopefully there aren't
|
||||
// a lot of opportunities for that to happen...
|
||||
ThreadSuspender *inst = thread_suspender_instance;
|
||||
if (inst != NULL && stoptheworld_tracer_pid == internal_getpid()) {
|
||||
if (inst && stoptheworld_tracer_pid == internal_getpid()) {
|
||||
inst->KillAllThreads();
|
||||
thread_suspender_instance = NULL;
|
||||
thread_suspender_instance = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -231,13 +231,13 @@ static void TracerThreadSignalHandler(int signum, void *siginfo, void *uctx) {
|
|||
VPrintf(1, "Tracer caught signal %d: addr=0x%zx pc=0x%zx sp=0x%zx\n",
|
||||
signum, ctx.addr, ctx.pc, ctx.sp);
|
||||
ThreadSuspender *inst = thread_suspender_instance;
|
||||
if (inst != NULL) {
|
||||
if (inst) {
|
||||
if (signum == SIGABRT)
|
||||
inst->KillAllThreads();
|
||||
else
|
||||
inst->ResumeAllThreads();
|
||||
RAW_CHECK(RemoveDieCallback(TracerThreadDieCallback));
|
||||
thread_suspender_instance = NULL;
|
||||
thread_suspender_instance = nullptr;
|
||||
atomic_store(&inst->arg->done, 1, memory_order_relaxed);
|
||||
}
|
||||
internal__exit((signum == SIGABRT) ? 1 : 2);
|
||||
|
@ -272,7 +272,7 @@ static int TracerThread(void* argument) {
|
|||
internal_memset(&handler_stack, 0, sizeof(handler_stack));
|
||||
handler_stack.ss_sp = handler_stack_memory.data();
|
||||
handler_stack.ss_size = kHandlerStackSize;
|
||||
internal_sigaltstack(&handler_stack, NULL);
|
||||
internal_sigaltstack(&handler_stack, nullptr);
|
||||
|
||||
// Install our handler for synchronous signals. Other signals should be
|
||||
// blocked by the mask we inherited from the parent thread.
|
||||
|
@ -295,7 +295,7 @@ static int TracerThread(void* argument) {
|
|||
exit_code = 0;
|
||||
}
|
||||
RAW_CHECK(RemoveDieCallback(TracerThreadDieCallback));
|
||||
thread_suspender_instance = NULL;
|
||||
thread_suspender_instance = nullptr;
|
||||
atomic_store(&tracer_thread_argument->done, 1, memory_order_relaxed);
|
||||
return exit_code;
|
||||
}
|
||||
|
@ -403,8 +403,8 @@ void StopTheWorld(StopTheWorldCallback callback, void *argument) {
|
|||
uptr tracer_pid = internal_clone(
|
||||
TracerThread, tracer_stack.Bottom(),
|
||||
CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_UNTRACED,
|
||||
&tracer_thread_argument, 0 /* parent_tidptr */, 0 /* newtls */, 0
|
||||
/* child_tidptr */);
|
||||
&tracer_thread_argument, nullptr /* parent_tidptr */,
|
||||
nullptr /* newtls */, nullptr /* child_tidptr */);
|
||||
internal_sigprocmask(SIG_SETMASK, &old_sigset, 0);
|
||||
int local_errno = 0;
|
||||
if (internal_iserror(tracer_pid, &local_errno)) {
|
||||
|
@ -431,7 +431,7 @@ void StopTheWorld(StopTheWorldCallback callback, void *argument) {
|
|||
// Now the tracer thread is about to exit and does not touch errno,
|
||||
// wait for it.
|
||||
for (;;) {
|
||||
uptr waitpid_status = internal_waitpid(tracer_pid, NULL, __WALL);
|
||||
uptr waitpid_status = internal_waitpid(tracer_pid, nullptr, __WALL);
|
||||
if (!internal_iserror(waitpid_status, &local_errno))
|
||||
break;
|
||||
if (local_errno == EINTR)
|
||||
|
@ -491,7 +491,7 @@ int SuspendedThreadsList::GetRegistersAndSP(uptr index,
|
|||
(void*)NT_PRSTATUS, (void*)®set_io),
|
||||
&pterrno);
|
||||
#else
|
||||
bool isErr = internal_iserror(internal_ptrace(PTRACE_GETREGS, tid, NULL,
|
||||
bool isErr = internal_iserror(internal_ptrace(PTRACE_GETREGS, tid, nullptr,
|
||||
®s), &pterrno);
|
||||
#endif
|
||||
if (isErr) {
|
||||
|
@ -508,7 +508,7 @@ int SuspendedThreadsList::GetRegistersAndSP(uptr index,
|
|||
uptr SuspendedThreadsList::RegisterCount() {
|
||||
return sizeof(regs_struct) / sizeof(uptr);
|
||||
}
|
||||
} // namespace __sanitizer
|
||||
} // namespace __sanitizer
|
||||
|
||||
#endif // SANITIZER_LINUX && (defined(__x86_64__) || defined(__mips__)
|
||||
// || defined(__aarch64__)
|
||||
#endif // SANITIZER_LINUX && (defined(__x86_64__) || defined(__mips__)
|
||||
// || defined(__aarch64__)
|
||||
|
|
Loading…
Reference in New Issue