1//===-- safestack_util.h --------------------------------------------------===// 2// 3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4// See https://llvm.org/LICENSE.txt for license information. 5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6// 7//===----------------------------------------------------------------------===// 8// 9// This file contains utility code for SafeStack implementation. 10// 11//===----------------------------------------------------------------------===// 12 13#ifndef SAFESTACK_UTIL_H 14#define SAFESTACK_UTIL_H 15 16#include <pthread.h> 17#include <stdio.h> 18#include <stdlib.h> 19 20namespace safestack { 21 22#define SFS_CHECK(a) \ 23 do { \ 24 if (!(a)) { \ 25 fprintf(stderr, "safestack CHECK failed: %s:%d %s\n", __FILE__, \ 26 __LINE__, #a); \ 27 abort(); \ 28 }; \ 29 } while (false) 30 31inline size_t RoundUpTo(size_t size, size_t boundary) { 32 SFS_CHECK((boundary & (boundary - 1)) == 0); 33 return (size + boundary - 1) & ~(boundary - 1); 34} 35 36class MutexLock { 37 public: 38 explicit MutexLock(pthread_mutex_t &mutex) : mutex_(&mutex) { 39 pthread_mutex_lock(mutex_); 40 } 41 ~MutexLock() { pthread_mutex_unlock(mutex_); } 42 43 private: 44 pthread_mutex_t *mutex_ = nullptr; 45}; 46 47} // namespace safestack 48 49#endif // SAFESTACK_UTIL_H 50