xref: /freebsd-src/contrib/llvm-project/compiler-rt/lib/scudo/standalone/report_linux.cpp (revision 0fca6ea1d4eea4c934cfff25ac9ee8ad6fe95583)
15f757f3fSDimitry Andric //===-- report_linux.cpp ----------------------------------------*- C++ -*-===//
25f757f3fSDimitry Andric //
35f757f3fSDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
45f757f3fSDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
55f757f3fSDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
65f757f3fSDimitry Andric //
75f757f3fSDimitry Andric //===----------------------------------------------------------------------===//
85f757f3fSDimitry Andric 
95f757f3fSDimitry Andric #include "platform.h"
105f757f3fSDimitry Andric 
115f757f3fSDimitry Andric #if SCUDO_LINUX || SCUDO_TRUSTY
125f757f3fSDimitry Andric 
135f757f3fSDimitry Andric #include "common.h"
145f757f3fSDimitry Andric #include "internal_defs.h"
155f757f3fSDimitry Andric #include "report.h"
165f757f3fSDimitry Andric #include "report_linux.h"
175f757f3fSDimitry Andric #include "string_utils.h"
185f757f3fSDimitry Andric 
195f757f3fSDimitry Andric #include <errno.h>
205f757f3fSDimitry Andric #include <stdlib.h>
215f757f3fSDimitry Andric #include <string.h>
225f757f3fSDimitry Andric 
235f757f3fSDimitry Andric namespace scudo {
245f757f3fSDimitry Andric 
255f757f3fSDimitry Andric // Fatal internal map() error (potentially OOM related).
265f757f3fSDimitry Andric void NORETURN reportMapError(uptr SizeIfOOM) {
27*0fca6ea1SDimitry Andric   ScopedString Error;
28*0fca6ea1SDimitry Andric   Error.append("Scudo ERROR: internal map failure (error desc=%s)",
29*0fca6ea1SDimitry Andric                strerror(errno));
30*0fca6ea1SDimitry Andric   if (SizeIfOOM)
31*0fca6ea1SDimitry Andric     Error.append(" requesting %zuKB", SizeIfOOM >> 10);
32*0fca6ea1SDimitry Andric   Error.append("\n");
33*0fca6ea1SDimitry Andric   reportRawError(Error.data());
345f757f3fSDimitry Andric }
355f757f3fSDimitry Andric 
365f757f3fSDimitry Andric void NORETURN reportUnmapError(uptr Addr, uptr Size) {
37*0fca6ea1SDimitry Andric   ScopedString Error;
38*0fca6ea1SDimitry Andric   Error.append("Scudo ERROR: internal unmap failure (error desc=%s) Addr 0x%zx "
395f757f3fSDimitry Andric                "Size %zu\n",
405f757f3fSDimitry Andric                strerror(errno), Addr, Size);
41*0fca6ea1SDimitry Andric   reportRawError(Error.data());
425f757f3fSDimitry Andric }
435f757f3fSDimitry Andric 
445f757f3fSDimitry Andric void NORETURN reportProtectError(uptr Addr, uptr Size, int Prot) {
45*0fca6ea1SDimitry Andric   ScopedString Error;
46*0fca6ea1SDimitry Andric   Error.append(
475f757f3fSDimitry Andric       "Scudo ERROR: internal protect failure (error desc=%s) Addr 0x%zx "
485f757f3fSDimitry Andric       "Size %zu Prot %x\n",
495f757f3fSDimitry Andric       strerror(errno), Addr, Size, Prot);
50*0fca6ea1SDimitry Andric   reportRawError(Error.data());
515f757f3fSDimitry Andric }
525f757f3fSDimitry Andric 
535f757f3fSDimitry Andric } // namespace scudo
545f757f3fSDimitry Andric 
555f757f3fSDimitry Andric #endif // SCUDO_LINUX || SCUDO_TRUSTY
56