mirror of
https://github.com/llvm/llvm-project.git
synced 2025-05-05 21:36:05 +00:00

When enabling 32-bit testing on Linux/i386 and Linux/sparc, many tests `FAIL`: - All Linux/i386 tests `FAIL` with ``` safestack CHECK failed: /vol/llvm/src/llvm-project/local/compiler-rt/lib/safestack/safestack.cpp:95 MAP_FAILED != addr ``` because the safestack `mmap` implementation doesn't work there. This patch adjusts it to match the `sanitizer_linux.cpp.c` one. - On 32-bit Linux/sparc, the `pthread*.c` tests `FAIL` because a `tid_t` (`uint64_t`) `tid` arg was passed to `syscall(SYS_tgkill)` while `tid` is actually a `pid_t` (`int`). Fixed by adding a cast. Tested on `x86_64-pc-linux-gnu` (32 and 64-bit) and `sparc64-unknown-linux-gnu` (32 and 64-bit).
54 lines
1.7 KiB
C++
54 lines
1.7 KiB
C++
//===-- safestack_util.h --------------------------------------------------===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This file contains utility code for SafeStack implementation.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef SAFESTACK_UTIL_H
|
|
#define SAFESTACK_UTIL_H
|
|
|
|
#include <pthread.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
|
|
namespace safestack {
|
|
|
|
#define SFS_CHECK(a) \
|
|
do { \
|
|
if (!(a)) { \
|
|
fprintf(stderr, "safestack CHECK failed: %s:%d %s\n", __FILE__, \
|
|
__LINE__, #a); \
|
|
abort(); \
|
|
}; \
|
|
} while (false)
|
|
|
|
inline size_t RoundUpTo(size_t size, size_t boundary) {
|
|
SFS_CHECK((boundary & (boundary - 1)) == 0);
|
|
return (size + boundary - 1) & ~(boundary - 1);
|
|
}
|
|
|
|
inline constexpr bool IsAligned(size_t a, size_t alignment) {
|
|
return (a & (alignment - 1)) == 0;
|
|
}
|
|
|
|
class MutexLock {
|
|
public:
|
|
explicit MutexLock(pthread_mutex_t &mutex) : mutex_(&mutex) {
|
|
pthread_mutex_lock(mutex_);
|
|
}
|
|
~MutexLock() { pthread_mutex_unlock(mutex_); }
|
|
|
|
private:
|
|
pthread_mutex_t *mutex_ = nullptr;
|
|
};
|
|
|
|
} // namespace safestack
|
|
|
|
#endif // SAFESTACK_UTIL_H
|