annotate libvtv/vtv_malloc.h @ 143:76e1cf5455ef

add cbc_gc test
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sun, 23 Dec 2018 19:24:05 +0900
parents 84e7813d76e9
children 1830386684a0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1 // Copyright (C) 2012-2018 Free Software Foundation, Inc.
111
kono
parents:
diff changeset
2 //
kono
parents:
diff changeset
3 // This file is part of GCC.
kono
parents:
diff changeset
4 //
kono
parents:
diff changeset
5 // GCC is free software; you can redistribute it and/or modify
kono
parents:
diff changeset
6 // it under the terms of the GNU General Public License as published by
kono
parents:
diff changeset
7 // the Free Software Foundation; either version 3, or (at your option)
kono
parents:
diff changeset
8 // any later version.
kono
parents:
diff changeset
9
kono
parents:
diff changeset
10 // GCC is distributed in the hope that it will be useful,
kono
parents:
diff changeset
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
kono
parents:
diff changeset
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
kono
parents:
diff changeset
13 // GNU General Public License for more details.
kono
parents:
diff changeset
14
kono
parents:
diff changeset
15 // Under Section 7 of GPL version 3, you are granted additional
kono
parents:
diff changeset
16 // permissions described in the GCC Runtime Library Exception, version
kono
parents:
diff changeset
17 // 3.1, as published by the Free Software Foundation.
kono
parents:
diff changeset
18
kono
parents:
diff changeset
19 // You should have received a copy of the GNU General Public License and
kono
parents:
diff changeset
20 // a copy of the GCC Runtime Library Exception along with this program;
kono
parents:
diff changeset
21 // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
kono
parents:
diff changeset
22 // <http://www.gnu.org/licenses/>.
kono
parents:
diff changeset
23
kono
parents:
diff changeset
24 #ifndef _VTV_MALLOC_H
kono
parents:
diff changeset
25 #define _VTV_MALLOC_H 1
kono
parents:
diff changeset
26
kono
parents:
diff changeset
27 #include <stdlib.h>
kono
parents:
diff changeset
28
kono
parents:
diff changeset
29 /* Alignment mask for any object returned by the VTV memory pool */
kono
parents:
diff changeset
30 #ifdef __LP64__
kono
parents:
diff changeset
31 #define VTV_ALIGNMENT_MASK (0x7)
kono
parents:
diff changeset
32 #else
kono
parents:
diff changeset
33 #define VTV_ALIGNMENT_MASK (0x3)
kono
parents:
diff changeset
34 #endif
kono
parents:
diff changeset
35
kono
parents:
diff changeset
36 /* The following function is used to instrument the compiler and find
kono
parents:
diff changeset
37 out how many cycles are being spent in various vtable verification
kono
parents:
diff changeset
38 runtime library functions. */
kono
parents:
diff changeset
39
kono
parents:
diff changeset
40 #ifdef __x86_64__
kono
parents:
diff changeset
41 static inline unsigned long
kono
parents:
diff changeset
42 rdtsc ()
kono
parents:
diff changeset
43 {
kono
parents:
diff changeset
44 unsigned long long hi, lo;
kono
parents:
diff changeset
45
kono
parents:
diff changeset
46 asm volatile ("rdtsc" : "=a" (lo), "=d" (hi));
kono
parents:
diff changeset
47 return hi << 32 | lo;
kono
parents:
diff changeset
48 }
kono
parents:
diff changeset
49 #elif defined (__i386__)
kono
parents:
diff changeset
50 static inline unsigned long long
kono
parents:
diff changeset
51 rdtsc ()
kono
parents:
diff changeset
52 {
kono
parents:
diff changeset
53 unsigned long long var;
kono
parents:
diff changeset
54
kono
parents:
diff changeset
55 asm volatile ("rdtsc" : "=A" (var));
kono
parents:
diff changeset
56
kono
parents:
diff changeset
57 return var;
kono
parents:
diff changeset
58 }
kono
parents:
diff changeset
59 #else
kono
parents:
diff changeset
60 static inline unsigned long long
kono
parents:
diff changeset
61 rdtsc ()
kono
parents:
diff changeset
62 {
kono
parents:
diff changeset
63 /* Create an empty function for unknown architectures, so that the
kono
parents:
diff changeset
64 calls to this function in vtv_malloc.cc and vtv_rts.cc do not cause
kono
parents:
diff changeset
65 compilation errors. */
kono
parents:
diff changeset
66 return ((unsigned long long) 0);
kono
parents:
diff changeset
67 }
kono
parents:
diff changeset
68 #endif
kono
parents:
diff changeset
69
kono
parents:
diff changeset
70
kono
parents:
diff changeset
71 /* The following variables are used only for debugging and performance tuning
kono
parents:
diff changeset
72 purposes. Therefore they do not need to be "protected". They cannot be used
kono
parents:
diff changeset
73 to attack the vtable verification system and if they become corrupted it will
kono
parents:
diff changeset
74 not affect the correctness or security of any of the rest of the vtable
kono
parents:
diff changeset
75 verification feature. */
kono
parents:
diff changeset
76
kono
parents:
diff changeset
77 extern unsigned int num_calls_to_mprotect;
kono
parents:
diff changeset
78 extern unsigned int num_pages_protected;
kono
parents:
diff changeset
79 extern unsigned int num_calls_to_regset;
kono
parents:
diff changeset
80 extern unsigned int num_calls_to_regpair;
kono
parents:
diff changeset
81 extern unsigned long long mprotect_cycles;
kono
parents:
diff changeset
82 extern unsigned long long regset_cycles;
kono
parents:
diff changeset
83 extern unsigned long long regpair_cycles;
kono
parents:
diff changeset
84
kono
parents:
diff changeset
85
kono
parents:
diff changeset
86 /* Function declarations. */
kono
parents:
diff changeset
87
kono
parents:
diff changeset
88 extern void __vtv_malloc_init (void);
kono
parents:
diff changeset
89 extern void *__vtv_malloc (size_t size) __attribute__ ((malloc));
kono
parents:
diff changeset
90 extern void __vtv_free (void * ptr);
kono
parents:
diff changeset
91 extern void __vtv_malloc_protect (void);
kono
parents:
diff changeset
92 extern void __vtv_malloc_unprotect (void);
kono
parents:
diff changeset
93 extern void __vtv_malloc_stats (void);
kono
parents:
diff changeset
94 extern void __vtv_malloc_dump_stats (void);
kono
parents:
diff changeset
95 extern int __vtv_count_mmapped_pages (void);
kono
parents:
diff changeset
96
kono
parents:
diff changeset
97 #if defined (__CYGWIN__) || defined (__MINGW32__)
kono
parents:
diff changeset
98 extern "C" int mprotect (void *addr, int len, int prot);
kono
parents:
diff changeset
99
kono
parents:
diff changeset
100 #define PROT_READ 0x1
kono
parents:
diff changeset
101 #define PROT_WRITE 0x2
kono
parents:
diff changeset
102 #endif
kono
parents:
diff changeset
103
kono
parents:
diff changeset
104 #endif /* vtv_malloc.h */