diff options
Diffstat (limited to 'lib/safestack/safestack_util.h')
| -rw-r--r-- | lib/safestack/safestack_util.h | 49 | 
1 files changed, 49 insertions, 0 deletions
diff --git a/lib/safestack/safestack_util.h b/lib/safestack/safestack_util.h new file mode 100644 index 0000000000000..da3f11b54cabc --- /dev/null +++ b/lib/safestack/safestack_util.h @@ -0,0 +1,49 @@ +//===-- 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); +} + +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  | 
