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 20 namespace 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 RoundUpTo(size_t size,size_t boundary)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 36 class MutexLock { 37 public: MutexLock(pthread_mutex_t & mutex)38 explicit MutexLock(pthread_mutex_t &mutex) : mutex_(&mutex) { 39 pthread_mutex_lock(mutex_); 40 } ~MutexLock()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