xref: /freebsd-src/contrib/llvm-project/compiler-rt/lib/scudo/standalone/common.cpp (revision fe6060f10f634930ff71b7c50291ddc610da2475)
168d75effSDimitry Andric //===-- common.cpp ----------------------------------------------*- C++ -*-===//
268d75effSDimitry Andric //
368d75effSDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
468d75effSDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
568d75effSDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
668d75effSDimitry Andric //
768d75effSDimitry Andric //===----------------------------------------------------------------------===//
868d75effSDimitry Andric 
968d75effSDimitry Andric #include "common.h"
1068d75effSDimitry Andric #include "atomic_helpers.h"
11*fe6060f1SDimitry Andric #include "string_utils.h"
1268d75effSDimitry Andric 
1368d75effSDimitry Andric namespace scudo {
1468d75effSDimitry Andric 
1568d75effSDimitry Andric uptr PageSizeCached;
1668d75effSDimitry Andric uptr getPageSize();
1768d75effSDimitry Andric 
1868d75effSDimitry Andric uptr getPageSizeSlow() {
1968d75effSDimitry Andric   PageSizeCached = getPageSize();
2068d75effSDimitry Andric   CHECK_NE(PageSizeCached, 0);
2168d75effSDimitry Andric   return PageSizeCached;
2268d75effSDimitry Andric }
2368d75effSDimitry Andric 
2468d75effSDimitry Andric // Fatal internal map() or unmap() error (potentially OOM related).
25*fe6060f1SDimitry Andric void NORETURN dieOnMapUnmapError(uptr SizeIfOOM) {
26*fe6060f1SDimitry Andric   char Error[128] = "Scudo ERROR: internal map or unmap failure\n";
27*fe6060f1SDimitry Andric   if (SizeIfOOM) {
28*fe6060f1SDimitry Andric     formatString(
29*fe6060f1SDimitry Andric         Error, sizeof(Error),
30*fe6060f1SDimitry Andric         "Scudo ERROR: internal map failure (NO MEMORY) requesting %zuKB\n",
31*fe6060f1SDimitry Andric         SizeIfOOM >> 10);
32*fe6060f1SDimitry Andric   }
33*fe6060f1SDimitry Andric   outputRaw(Error);
34*fe6060f1SDimitry Andric   setAbortMessage(Error);
3568d75effSDimitry Andric   die();
3668d75effSDimitry Andric }
3768d75effSDimitry Andric 
3868d75effSDimitry Andric } // namespace scudo
39