]>
git.proxmox.com Git - rustc.git/blob - src/compiler-rt/lib/asan/asan_report.h
1 //===-- asan_report.h -------------------------------------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file is a part of AddressSanitizer, an address sanity checker.
12 // ASan-private header for error reporting functions.
13 //===----------------------------------------------------------------------===//
15 #include "asan_allocator.h"
16 #include "asan_internal.h"
17 #include "asan_thread.h"
21 struct StackVarDescr
{
28 struct AddressDescription
{
33 const char *region_kind
;
36 // Returns the number of globals close to the provided address and copies
37 // them to "globals" array.
38 int GetGlobalsForAddress(uptr addr
, __asan_global
*globals
, u32
*reg_sites
,
40 bool GetInfoForAddressIfGlobal(uptr addr
, AddressDescription
*descr
);
41 // The following functions prints address description depending
42 // on the memory type (shadow/heap/stack/global).
43 void DescribeHeapAddress(uptr addr
, uptr access_size
);
44 bool DescribeAddressIfShadow(uptr addr
, AddressDescription
*descr
= nullptr,
46 bool ParseFrameDescription(const char *frame_descr
,
47 InternalMmapVector
<StackVarDescr
> *vars
);
48 bool DescribeAddressIfStack(uptr addr
, uptr access_size
);
49 void DescribeThread(AsanThreadContext
*context
);
51 // Different kinds of error reports.
52 void ReportGenericError(uptr pc
, uptr bp
, uptr sp
, uptr addr
, bool is_write
,
53 uptr access_size
, u32 exp
, bool fatal
);
54 void ReportStackOverflow(const SignalContext
&sig
);
55 void ReportDeadlySignal(const char *description
, const SignalContext
&sig
);
56 void ReportNewDeleteSizeMismatch(uptr addr
, uptr alloc_size
, uptr delete_size
,
57 BufferedStackTrace
*free_stack
);
58 void ReportDoubleFree(uptr addr
, BufferedStackTrace
*free_stack
);
59 void ReportFreeNotMalloced(uptr addr
, BufferedStackTrace
*free_stack
);
60 void ReportAllocTypeMismatch(uptr addr
, BufferedStackTrace
*free_stack
,
62 AllocType dealloc_type
);
63 void ReportMallocUsableSizeNotOwned(uptr addr
, BufferedStackTrace
*stack
);
64 void ReportSanitizerGetAllocatedSizeNotOwned(uptr addr
,
65 BufferedStackTrace
*stack
);
66 void ReportStringFunctionMemoryRangesOverlap(const char *function
,
67 const char *offset1
, uptr length1
,
68 const char *offset2
, uptr length2
,
69 BufferedStackTrace
*stack
);
70 void ReportStringFunctionSizeOverflow(uptr offset
, uptr size
,
71 BufferedStackTrace
*stack
);
72 void ReportBadParamsToAnnotateContiguousContainer(uptr beg
, uptr end
,
73 uptr old_mid
, uptr new_mid
,
74 BufferedStackTrace
*stack
);
76 void ReportODRViolation(const __asan_global
*g1
, u32 stack_id1
,
77 const __asan_global
*g2
, u32 stack_id2
);
79 // Mac-specific errors and warnings.
80 void ReportMacMzReallocUnknown(uptr addr
, uptr zone_ptr
,
81 const char *zone_name
,
82 BufferedStackTrace
*stack
);
83 void ReportMacCfReallocUnknown(uptr addr
, uptr zone_ptr
,
84 const char *zone_name
,
85 BufferedStackTrace
*stack
);