diff options
| author | arcadia-devtools <[email protected]> | 2022-02-25 13:32:34 +0300 | 
|---|---|---|
| committer | arcadia-devtools <[email protected]> | 2022-02-25 13:32:34 +0300 | 
| commit | 5a69c8d3bf97c5729c2f38e3edf38ad072cc8660 (patch) | |
| tree | be60467f93523358c938a3b0e7704db98aca1368 /contrib/libs/cxxsupp/openmp/kmp_debug.cpp | |
| parent | 79b9f78973dff05d368d9cddf75f1f7ea23ae439 (diff) | |
intermediate changes
ref:2c72e25aac316b2b2e56bf74f87d33341e8ce8ba
Diffstat (limited to 'contrib/libs/cxxsupp/openmp/kmp_debug.cpp')
| -rw-r--r-- | contrib/libs/cxxsupp/openmp/kmp_debug.cpp | 131 | 
1 files changed, 131 insertions, 0 deletions
| diff --git a/contrib/libs/cxxsupp/openmp/kmp_debug.cpp b/contrib/libs/cxxsupp/openmp/kmp_debug.cpp new file mode 100644 index 00000000000..6c397c5d8e2 --- /dev/null +++ b/contrib/libs/cxxsupp/openmp/kmp_debug.cpp @@ -0,0 +1,131 @@ +/* + * kmp_debug.cpp -- debug utilities for the Guide library + */ + +//===----------------------------------------------------------------------===// +// +// 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 "kmp.h" +#include "kmp_debug.h" /* really necessary? */ +#include "kmp_i18n.h" +#include "kmp_io.h" + +#ifdef KMP_DEBUG +void __kmp_debug_printf_stdout(char const *format, ...) { +  va_list ap; +  va_start(ap, format); + +  __kmp_vprintf(kmp_out, format, ap); + +  va_end(ap); +} +#endif + +void __kmp_debug_printf(char const *format, ...) { +  va_list ap; +  va_start(ap, format); + +  __kmp_vprintf(kmp_err, format, ap); + +  va_end(ap); +} + +#ifdef KMP_USE_ASSERT +int __kmp_debug_assert(char const *msg, char const *file, int line) { + +  if (file == NULL) { +    file = KMP_I18N_STR(UnknownFile); +  } else { +    // Remove directories from path, leave only file name. File name is enough, +    // there is no need in bothering developers and customers with full paths. +    char const *slash = strrchr(file, '/'); +    if (slash != NULL) { +      file = slash + 1; +    } +  } + +#ifdef KMP_DEBUG +  __kmp_acquire_bootstrap_lock(&__kmp_stdio_lock); +  __kmp_debug_printf("Assertion failure at %s(%d): %s.\n", file, line, msg); +  __kmp_release_bootstrap_lock(&__kmp_stdio_lock); +#ifdef USE_ASSERT_BREAK +#if KMP_OS_WINDOWS +  DebugBreak(); +#endif +#endif // USE_ASSERT_BREAK +#ifdef USE_ASSERT_STALL +  /*    __kmp_infinite_loop(); */ +  for (;;) +    ; +#endif // USE_ASSERT_STALL +#ifdef USE_ASSERT_SEG +  { +    int volatile *ZERO = (int *)0; +    ++(*ZERO); +  } +#endif // USE_ASSERT_SEG +#endif + +  __kmp_fatal(KMP_MSG(AssertionFailure, file, line), KMP_HNT(SubmitBugReport), +              __kmp_msg_null); + +  return 0; + +} // __kmp_debug_assert + +#endif // KMP_USE_ASSERT + +/* Dump debugging buffer to stderr */ +void __kmp_dump_debug_buffer(void) { +  if (__kmp_debug_buffer != NULL) { +    int i; +    int dc = __kmp_debug_count; +    char *db = &__kmp_debug_buffer[(dc % __kmp_debug_buf_lines) * +                                   __kmp_debug_buf_chars]; +    char *db_end = +        &__kmp_debug_buffer[__kmp_debug_buf_lines * __kmp_debug_buf_chars]; +    char *db2; + +    __kmp_acquire_bootstrap_lock(&__kmp_stdio_lock); +    __kmp_printf_no_lock("\nStart dump of debugging buffer (entry=%d):\n", +                         dc % __kmp_debug_buf_lines); + +    for (i = 0; i < __kmp_debug_buf_lines; i++) { + +      if (*db != '\0') { +        /* Fix up where no carriage return before string termination char */ +        for (db2 = db + 1; db2 < db + __kmp_debug_buf_chars - 1; db2++) { +          if (*db2 == '\0') { +            if (*(db2 - 1) != '\n') { +              *db2 = '\n'; +              *(db2 + 1) = '\0'; +            } +            break; +          } +        } +        /* Handle case at end by shortening the printed message by one char if +         * necessary */ +        if (db2 == db + __kmp_debug_buf_chars - 1 && *db2 == '\0' && +            *(db2 - 1) != '\n') { +          *(db2 - 1) = '\n'; +        } + +        __kmp_printf_no_lock("%4d: %.*s", i, __kmp_debug_buf_chars, db); +        *db = '\0'; /* only let it print once! */ +      } + +      db += __kmp_debug_buf_chars; +      if (db >= db_end) +        db = __kmp_debug_buffer; +    } + +    __kmp_printf_no_lock("End dump of debugging buffer (entry=%d).\n\n", +                         (dc + i - 1) % __kmp_debug_buf_lines); +    __kmp_release_bootstrap_lock(&__kmp_stdio_lock); +  } +} | 
