================ @@ -0,0 +1,97 @@ +//===--- rtsan_context.cpp - Realtime Sanitizer -----------------*- C++ -*-===// +// +// 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 +// +//===----------------------------------------------------------------------===// +// +//===----------------------------------------------------------------------===// + +#include <rtsan/rtsan_context.h> + +#include <rtsan/rtsan_stack.h> + +#include <sanitizer_common/sanitizer_allocator_internal.h> +#include <sanitizer_common/sanitizer_stacktrace.h> + +#include <new> +#include <pthread.h> +#include <stdio.h> +#include <stdlib.h> + +static pthread_key_t context_key; +static pthread_once_t key_once = PTHREAD_ONCE_INIT; + +static void internalFree(void *ptr) { __sanitizer::InternalFree(ptr); } + +static __rtsan::Context &GetContextForThisThreadImpl() { + auto make_thread_local_context_key = []() { + CHECK_EQ(pthread_key_create(&context_key, internalFree), 0); + }; + + pthread_once(&key_once, make_thread_local_context_key); + __rtsan::Context *current_thread_context = + static_cast<__rtsan::Context *>(pthread_getspecific(context_key)); + if (current_thread_context == nullptr) { + current_thread_context = static_cast<__rtsan::Context *>( + __sanitizer::InternalAlloc(sizeof(__rtsan::Context))); + new (current_thread_context) __rtsan::Context(); + pthread_setspecific(context_key, current_thread_context); + } + + return *current_thread_context; +} + +/* + This is a placeholder stub for a future feature that will allow + a user to configure RTSan's behaviour when a real-time safety + violation is detected. The RTSan developers intend for the + following choices to be made available, via a RTSAN_OPTIONS + environment variable, in a future PR: + + i) exit, + ii) continue, or + iii) wait for user input from stdin. + + Until then, and to keep the first PRs small, only the exit mode + is available. +*/ +static void InvokeViolationDetectedAction() { exit(EXIT_FAILURE); } + +namespace __rtsan { ---------------- MaskRay wrote:
https://llvm.org/docs/CodingStandards.html#use-namespace-qualifiers-to-implement-previously-declared-functions If `using namespace __rtsan`, `.cpp` files should not need `namespace __rtsan`. https://github.com/llvm/llvm-project/pull/92460 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits