]>
Commit | Line | Data |
---|---|---|
085e30b7 MS |
1 | /* Implementation header for mudflap runtime library. |
2 | Mudflap: narrow-pointer bounds-checking by tree rewriting. | |
748086b7 | 3 | Copyright (C) 2002, 2003, 2004, 2005, 2009 Free Software Foundation, Inc. |
085e30b7 MS |
4 | Contributed by Frank Ch. Eigler <fche@redhat.com> |
5 | and Graydon Hoare <graydon@redhat.com> | |
6 | ||
7 | This file is part of GCC. | |
8 | ||
9 | GCC is free software; you can redistribute it and/or modify it under | |
10 | the terms of the GNU General Public License as published by the Free | |
748086b7 | 11 | Software Foundation; either version 3, or (at your option) any later |
085e30b7 MS |
12 | version. |
13 | ||
085e30b7 MS |
14 | GCC is distributed in the hope that it will be useful, but WITHOUT ANY |
15 | WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
16 | FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
17 | for more details. | |
18 | ||
748086b7 JJ |
19 | Under Section 7 of GPL version 3, you are granted additional |
20 | permissions described in the GCC Runtime Library Exception, version | |
21 | 3.1, as published by the Free Software Foundation. | |
22 | ||
23 | You should have received a copy of the GNU General Public License and | |
24 | a copy of the GCC Runtime Library Exception along with this program; | |
25 | see the files COPYING3 and COPYING.RUNTIME respectively. If not, see | |
26 | <http://www.gnu.org/licenses/>. */ | |
085e30b7 | 27 | |
6de9cd9a DN |
28 | /* Public libmudflap declarations -*- C -*- */ |
29 | ||
30 | #ifndef MF_RUNTIME_H | |
31 | #define MF_RUNTIME_H | |
32 | ||
1330529e GM |
33 | typedef void *__mf_ptr_t; |
34 | typedef unsigned int __mf_uintptr_t __attribute__ ((__mode__ (__pointer__))); | |
35 | typedef __SIZE_TYPE__ __mf_size_t; | |
6de9cd9a | 36 | |
c31b8e1b ZW |
37 | /* Global declarations used by instrumentation. When _MUDFLAP is |
38 | defined, these have been auto-declared by the compiler and we | |
39 | should not declare them again (ideally we *would* declare them | |
40 | again, to verify that the compiler's declarations match the | |
41 | library's, but the C++ front end has no mechanism for allowing | |
42 | the re-definition of a structure type). */ | |
43 | #ifndef _MUDFLAP | |
1330529e | 44 | struct __mf_cache { __mf_uintptr_t low; __mf_uintptr_t high; }; |
6de9cd9a | 45 | extern struct __mf_cache __mf_lookup_cache []; |
1330529e | 46 | extern __mf_uintptr_t __mf_lc_mask; |
6de9cd9a | 47 | extern unsigned char __mf_lc_shift; |
c31b8e1b | 48 | #endif |
6de9cd9a DN |
49 | |
50 | /* Multithreading support. */ | |
51 | #ifdef _MUDFLAPTH | |
52 | /* extern pthread_mutex_t __mf_biglock; */ | |
89040431 | 53 | #ifndef _REENTRANT |
6de9cd9a | 54 | #define _REENTRANT |
89040431 FCE |
55 | #endif |
56 | #ifndef _THREAD_SAFE | |
6de9cd9a DN |
57 | #define _THREAD_SAFE |
58 | #endif | |
89040431 | 59 | #endif |
6de9cd9a DN |
60 | |
61 | /* Codes to describe the type of access to check: __mf_check arg 3 */ | |
62 | ||
63 | #define __MF_CHECK_READ 0 | |
64 | #define __MF_CHECK_WRITE 1 | |
65 | ||
66 | ||
67 | /* Codes to describe a region of memory being registered: __mf_*register arg 3 */ | |
68 | ||
69 | #define __MF_TYPE_NOACCESS 0 | |
70 | #define __MF_TYPE_HEAP 1 | |
71 | #define __MF_TYPE_HEAP_I 2 | |
72 | #define __MF_TYPE_STACK 3 | |
73 | #define __MF_TYPE_STATIC 4 | |
74 | #define __MF_TYPE_GUESS 5 | |
75 | ||
76 | ||
77 | /* The public mudflap API */ | |
78 | ||
79 | #ifdef __cplusplus | |
80 | extern "C" { | |
81 | #endif | |
82 | ||
1330529e | 83 | extern void __mf_check (void *ptr, __mf_size_t sz, int type, const char *location) |
6de9cd9a | 84 | __attribute((nothrow)); |
fb925a51 | 85 | extern void __mf_register (void *ptr, __mf_size_t sz, int type, const char *name) |
6de9cd9a | 86 | __attribute((nothrow)); |
1330529e | 87 | extern void __mf_unregister (void *ptr, __mf_size_t sz, int type) |
cfbd22d7 | 88 | __attribute((nothrow)); |
1330529e GM |
89 | extern unsigned __mf_watch (void *ptr, __mf_size_t sz); |
90 | extern unsigned __mf_unwatch (void *ptr, __mf_size_t sz); | |
6de9cd9a DN |
91 | extern void __mf_report (); |
92 | extern int __mf_set_options (const char *opts); | |
93 | ||
94 | ||
95 | /* Redirect some standard library functions to libmudflap. These are | |
96 | done by simple #define rather than linker wrapping, since only | |
97 | instrumented modules are meant to be affected. */ | |
98 | ||
fb925a51 MS |
99 | #ifdef _MUDFLAP |
100 | #pragma redefine_extname memcpy __mfwrap_memcpy | |
6de9cd9a | 101 | #pragma redefine_extname memmove __mfwrap_memmove |
fb925a51 MS |
102 | #pragma redefine_extname memset __mfwrap_memset |
103 | #pragma redefine_extname memcmp __mfwrap_memcmp | |
104 | #pragma redefine_extname memchr __mfwrap_memchr | |
6de9cd9a | 105 | #pragma redefine_extname memrchr __mfwrap_memrchr |
fb925a51 MS |
106 | #pragma redefine_extname strcpy __mfwrap_strcpy |
107 | #pragma redefine_extname strncpy __mfwrap_strncpy | |
108 | #pragma redefine_extname strcat __mfwrap_strcat | |
6de9cd9a | 109 | #pragma redefine_extname strncat __mfwrap_strncat |
fb925a51 MS |
110 | #pragma redefine_extname strcmp __mfwrap_strcmp |
111 | #pragma redefine_extname strcasecmp __mfwrap_strcasecmp | |
112 | #pragma redefine_extname strncmp __mfwrap_strncmp | |
6de9cd9a | 113 | #pragma redefine_extname strncasecmp __mfwrap_strncasecmp |
fb925a51 MS |
114 | #pragma redefine_extname strdup __mfwrap_strdup |
115 | #pragma redefine_extname strndup __mfwrap_strndup | |
116 | #pragma redefine_extname strchr __mfwrap_strchr | |
6de9cd9a | 117 | #pragma redefine_extname strrchr __mfwrap_strrchr |
fb925a51 MS |
118 | #pragma redefine_extname strstr __mfwrap_strstr |
119 | #pragma redefine_extname memmem __mfwrap_memmem | |
120 | #pragma redefine_extname strlen __mfwrap_strlen | |
6de9cd9a | 121 | #pragma redefine_extname strnlen __mfwrap_strnlen |
fb925a51 MS |
122 | #pragma redefine_extname bzero __mfwrap_bzero |
123 | #pragma redefine_extname bcopy __mfwrap_bcopy | |
124 | #pragma redefine_extname bcmp __mfwrap_bcmp | |
125 | #pragma redefine_extname index __mfwrap_index | |
6de9cd9a DN |
126 | #pragma redefine_extname rindex __mfwrap_rindex |
127 | #pragma redefine_extname asctime __mfwrap_asctime | |
128 | #pragma redefine_extname ctime __mfwrap_ctime | |
129 | #pragma redefine_extname gmtime __mfwrap_gmtime | |
130 | #pragma redefine_extname localtime __mfwrap_localtime | |
131 | #pragma redefine_extname time __mfwrap_time | |
132 | #pragma redefine_extname strerror __mfwrap_strerror | |
133 | #pragma redefine_extname fopen __mfwrap_fopen | |
ddfabf89 FCE |
134 | #pragma redefine_extname fdopen __mfwrap_fdopen |
135 | #pragma redefine_extname freopen __mfwrap_freopen | |
6de9cd9a DN |
136 | #pragma redefine_extname fclose __mfwrap_fclose |
137 | #pragma redefine_extname fread __mfwrap_fread | |
138 | #pragma redefine_extname fwrite __mfwrap_fwrite | |
139 | #pragma redefine_extname fgetc __mfwrap_fgetc | |
140 | #pragma redefine_extname fgets __mfwrap_fgets | |
141 | #pragma redefine_extname getc __mfwrap_getc | |
142 | #pragma redefine_extname gets __mfwrap_gets | |
143 | #pragma redefine_extname ungetc __mfwrap_ungetc | |
144 | #pragma redefine_extname fputc __mfwrap_fputc | |
145 | #pragma redefine_extname fputs __mfwrap_fputs | |
146 | #pragma redefine_extname putc __mfwrap_putc | |
147 | #pragma redefine_extname puts __mfwrap_puts | |
148 | #pragma redefine_extname clearerr __mfwrap_clearerr | |
149 | #pragma redefine_extname feof __mfwrap_feof | |
150 | #pragma redefine_extname ferror __mfwrap_ferror | |
151 | #pragma redefine_extname fileno __mfwrap_fileno | |
152 | #pragma redefine_extname printf __mfwrap_printf | |
153 | #pragma redefine_extname fprintf __mfwrap_fprintf | |
154 | #pragma redefine_extname sprintf __mfwrap_sprintf | |
155 | #pragma redefine_extname snprintf __mfwrap_snprintf | |
156 | #pragma redefine_extname vprintf __mfwrap_vprintf | |
157 | #pragma redefine_extname vfprintf __mfwrap_vfprintf | |
158 | #pragma redefine_extname vsprintf __mfwrap_vsprintf | |
159 | #pragma redefine_extname vsnprintf __mfwrap_vsnprintf | |
160 | #pragma redefine_extname access __mfwrap_access | |
161 | #pragma redefine_extname remove __mfwrap_remove | |
162 | #pragma redefine_extname fflush __mfwrap_fflush | |
163 | #pragma redefine_extname fseek __mfwrap_fseek | |
164 | #pragma redefine_extname ftell __mfwrap_ftell | |
165 | #pragma redefine_extname rewind __mfwrap_rewind | |
166 | #pragma redefine_extname fgetpos __mfwrap_fgetpos | |
167 | #pragma redefine_extname fsetpos __mfwrap_fsetpos | |
168 | #pragma redefine_extname stat __mfwrap_stat | |
169 | #pragma redefine_extname fstat __mfwrap_fstat | |
170 | #pragma redefine_extname lstat __mfwrap_lstat | |
171 | #pragma redefine_extname mkfifo __mfwrap_mkfifo | |
172 | #pragma redefine_extname setvbuf __mfwrap_setvbuf | |
173 | #pragma redefine_extname setbuf __mfwrap_setbuf | |
ddfabf89 FCE |
174 | #pragma redefine_extname setbuffer __mfwrap_setbuffer |
175 | #pragma redefine_extname setlinebuf __mfwrap_setlinebuf | |
6de9cd9a DN |
176 | #pragma redefine_extname opendir __mfwrap_opendir |
177 | #pragma redefine_extname closedir __mfwrap_closedir | |
178 | #pragma redefine_extname readdir __mfwrap_readdir | |
179 | #pragma redefine_extname recv __mfwrap_recv | |
180 | #pragma redefine_extname recvfrom __mfwrap_recvfrom | |
181 | #pragma redefine_extname recvmsg __mfwrap_recvmsg | |
182 | #pragma redefine_extname send __mfwrap_send | |
183 | #pragma redefine_extname sendto __mfwrap_sendto | |
184 | #pragma redefine_extname sendmsg __mfwrap_sendmsg | |
185 | #pragma redefine_extname setsockopt __mfwrap_setsockopt | |
186 | #pragma redefine_extname getsockopt __mfwrap_getsockopt | |
187 | #pragma redefine_extname accept __mfwrap_accept | |
188 | #pragma redefine_extname bind __mfwrap_bind | |
189 | #pragma redefine_extname connect __mfwrap_connect | |
190 | #pragma redefine_extname gethostname __mfwrap_gethostname | |
191 | #pragma redefine_extname sethostname __mfwrap_sethostname | |
192 | #pragma redefine_extname gethostbyname __mfwrap_gethostbyname | |
193 | #pragma redefine_extname wait __mfwrap_wait | |
194 | #pragma redefine_extname waitpid __mfwrap_waitpid | |
195 | #pragma redefine_extname popen __mfwrap_popen | |
196 | #pragma redefine_extname pclose __mfwrap_pclose | |
197 | #pragma redefine_extname execve __mfwrap_execve | |
198 | #pragma redefine_extname execv __mfwrap_execv | |
199 | #pragma redefine_extname execvp __mfwrap_execvp | |
200 | #pragma redefine_extname system __mfwrap_system | |
201 | #pragma redefine_extname dlopen __mfwrap_dlopen | |
202 | #pragma redefine_extname dlerror __mfwrap_dlerror | |
203 | #pragma redefine_extname dlsym __mfwrap_dlsym | |
204 | #pragma redefine_extname dlclose __mfwrap_dlclose | |
205 | #pragma redefine_extname fopen64 __mfwrap_fopen64 | |
ddfabf89 | 206 | #pragma redefine_extname freopen64 __mfwrap_freopen64 |
6de9cd9a DN |
207 | #pragma redefine_extname stat64 __mfwrap_stat64 |
208 | #pragma redefine_extname fseeko64 __mfwrap_fseeko64 | |
209 | #pragma redefine_extname ftello64 __mfwrap_ftello64 | |
210 | #pragma redefine_extname semop __mfwrap_semop | |
211 | #pragma redefine_extname semctl __mfwrap_semctl | |
212 | #pragma redefine_extname shmctl __mfwrap_shmctl | |
213 | #pragma redefine_extname shmat __mfwrap_shmat | |
214 | #pragma redefine_extname shmdt __mfwrap_shmdt | |
dc88d66f FCE |
215 | #pragma redefine_extname __ctype_b_loc __mfwrap___ctype_b_loc |
216 | #pragma redefine_extname __ctype_toupper_loc __mfwrap___ctype_toupper_loc | |
217 | #pragma redefine_extname __ctype_tolower_loc __mfwrap___ctype_tolower_loc | |
66a5d3b1 FCE |
218 | #pragma redefine_extname getlogin __mfwrap_getlogin |
219 | #pragma redefine_extname cuserid __mfwrap_cuserid | |
220 | #pragma redefine_extname getpwnam __mfwrap_getpwnam | |
221 | #pragma redefine_extname getpwuid __mfwrap_getpwuid | |
222 | #pragma redefine_extname getgrnam __mfwrap_getgrnam | |
223 | #pragma redefine_extname getgrgid __mfwrap_getgrgid | |
224 | #pragma redefine_extname getservent __mfwrap_getservent | |
225 | #pragma redefine_extname getservbyname __mfwrap_getservbyname | |
226 | #pragma redefine_extname getservbyport __mfwrap_getservbyport | |
227 | #pragma redefine_extname gai_strerror __mfwrap_gai_strerror | |
07c2f075 FCE |
228 | #pragma redefine_extname getmntent __mfwrap_getmntent |
229 | #pragma redefine_extname inet_ntoa __mfwrap_inet_ntoa | |
230 | #pragma redefine_extname getprotoent __mfwrap_getprotoent | |
231 | #pragma redefine_extname getprotobyname __mfwrap_getprotobyname | |
232 | #pragma redefine_extname getprotobynumber __mfwrap_getprotobynumber | |
6de9cd9a DN |
233 | |
234 | /* Disable glibc macros. */ | |
235 | #define __NO_STRING_INLINES | |
236 | ||
237 | #endif /* _MUDFLAP */ | |
238 | ||
239 | ||
240 | #ifdef __cplusplus | |
241 | } | |
242 | #endif | |
243 | ||
244 | #endif /* MF_RUNTIME_H */ |