2019-01-18 09:53:37 +08:00
|
|
|
//===-- safestack_util.h --------------------------------------------------===//
|
|
|
|
//
|
2019-01-19 16:50:56 +08:00
|
|
|
// 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
|
2019-01-18 09:53:37 +08:00
|
|
|
//
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
//
|
|
|
|
// 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);
|
|
|
|
}
|
|
|
|
|
|
|
|
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
|