GCC Middle and Back End API Reference
Main Page
Namespaces
Data Structures
Files
File List
Globals
asan.h
Go to the documentation of this file.
1
/* AddressSanitizer, a fast memory error detector.
2
Copyright (C) 2011-2013 Free Software Foundation, Inc.
3
Contributed by Kostya Serebryany <kcc@google.com>
4
5
This file is part of GCC.
6
7
GCC is free software; you can redistribute it and/or modify it under
8
the terms of the GNU General Public License as published by the Free
9
Software Foundation; either version 3, or (at your option) any later
10
version.
11
12
GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13
WARRANTY; without even the implied warranty of MERCHANTABILITY or
14
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15
for more details.
16
17
You should have received a copy of the GNU General Public License
18
along with GCC; see the file COPYING3. If not see
19
<http://www.gnu.org/licenses/>. */
20
21
#ifndef TREE_ASAN
22
#define TREE_ASAN
23
24
extern
void
asan_finish_file
(
void
);
25
extern
rtx
asan_emit_stack_protection
(
rtx
,
HOST_WIDE_INT
*,
tree
*,
int
);
26
extern
bool
asan_protect_global
(
tree
);
27
extern
void
initialize_sanitizer_builtins
(
void
);
28
29
/* Alias set for accessing the shadow memory. */
30
extern
alias_set_type
asan_shadow_set
;
31
32
/* Shadow memory is found at
33
(address >> ASAN_SHADOW_SHIFT) + targetm.asan_shadow_offset (). */
34
#define ASAN_SHADOW_SHIFT 3
35
36
/* Red zone size, stack and global variables are padded by ASAN_RED_ZONE_SIZE
37
up to 2 * ASAN_RED_ZONE_SIZE - 1 bytes. */
38
#define ASAN_RED_ZONE_SIZE 32
39
40
/* Shadow memory values for stack protection. Left is below protected vars,
41
the first pointer in stack corresponding to that offset contains
42
ASAN_STACK_FRAME_MAGIC word, the second pointer to a string describing
43
the frame. Middle is for padding in between variables, right is
44
above the last protected variable and partial immediately after variables
45
up to ASAN_RED_ZONE_SIZE alignment. */
46
#define ASAN_STACK_MAGIC_LEFT 0xf1
47
#define ASAN_STACK_MAGIC_MIDDLE 0xf2
48
#define ASAN_STACK_MAGIC_RIGHT 0xf3
49
#define ASAN_STACK_MAGIC_PARTIAL 0xf4
50
51
#define ASAN_STACK_FRAME_MAGIC 0x41b58ab3
52
53
/* Return true if DECL should be guarded on the stack. */
54
55
static
inline
bool
56
asan_protect_stack_decl
(
tree
decl
)
57
{
58
return
DECL_P
(decl) && !
DECL_ARTIFICIAL
(decl);
59
}
60
61
/* Return the size of padding needed to insert after a protected
62
decl of SIZE. */
63
64
static
inline
unsigned
int
65
asan_red_zone_size
(
unsigned
int
size)
66
{
67
unsigned
int
c = size & (
ASAN_RED_ZONE_SIZE
- 1);
68
return
c ? 2 *
ASAN_RED_ZONE_SIZE
- c :
ASAN_RED_ZONE_SIZE
;
69
}
70
71
#endif
/* TREE_ASAN */
gcc
asan.h
Generated by
1.8.1.1