0
|
1 /* Implementation header for mudflap runtime library.
|
|
2 Mudflap: narrow-pointer bounds-checking by tree rewriting.
|
|
3 Copyright (C) 2002, 2003, 2004, 2005, 2009 Free Software Foundation, Inc.
|
|
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
|
|
11 Software Foundation; either version 3, or (at your option) any later
|
|
12 version.
|
|
13
|
|
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
|
|
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/>. */
|
|
27
|
|
28 /* Public libmudflap declarations -*- C -*- */
|
|
29
|
|
30 #ifndef MF_RUNTIME_H
|
|
31 #define MF_RUNTIME_H
|
|
32
|
|
33 typedef void *__mf_ptr_t;
|
|
34 typedef unsigned int __mf_uintptr_t __attribute__ ((__mode__ (__pointer__)));
|
|
35 typedef __SIZE_TYPE__ __mf_size_t;
|
|
36
|
|
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
|
|
44 struct __mf_cache { __mf_uintptr_t low; __mf_uintptr_t high; };
|
|
45 extern struct __mf_cache __mf_lookup_cache [];
|
|
46 extern __mf_uintptr_t __mf_lc_mask;
|
|
47 extern unsigned char __mf_lc_shift;
|
|
48 #endif
|
|
49
|
|
50 /* Multithreading support. */
|
|
51 #ifdef _MUDFLAPTH
|
|
52 /* extern pthread_mutex_t __mf_biglock; */
|
|
53 #ifndef _REENTRANT
|
|
54 #define _REENTRANT
|
|
55 #endif
|
|
56 #ifndef _THREAD_SAFE
|
|
57 #define _THREAD_SAFE
|
|
58 #endif
|
|
59 #endif
|
|
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
|
|
83 extern void __mf_check (void *ptr, __mf_size_t sz, int type, const char *location)
|
|
84 __attribute((nothrow));
|
|
85 extern void __mf_register (void *ptr, __mf_size_t sz, int type, const char *name)
|
|
86 __attribute((nothrow));
|
|
87 extern void __mf_unregister (void *ptr, __mf_size_t sz, int type)
|
|
88 __attribute((nothrow));
|
|
89 extern unsigned __mf_watch (void *ptr, __mf_size_t sz);
|
|
90 extern unsigned __mf_unwatch (void *ptr, __mf_size_t sz);
|
|
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
|
|
99 #ifdef _MUDFLAP
|
|
100 #pragma redefine_extname memcpy __mfwrap_memcpy
|
|
101 #pragma redefine_extname memmove __mfwrap_memmove
|
|
102 #pragma redefine_extname memset __mfwrap_memset
|
|
103 #pragma redefine_extname memcmp __mfwrap_memcmp
|
|
104 #pragma redefine_extname memchr __mfwrap_memchr
|
|
105 #pragma redefine_extname memrchr __mfwrap_memrchr
|
|
106 #pragma redefine_extname strcpy __mfwrap_strcpy
|
|
107 #pragma redefine_extname strncpy __mfwrap_strncpy
|
|
108 #pragma redefine_extname strcat __mfwrap_strcat
|
|
109 #pragma redefine_extname strncat __mfwrap_strncat
|
|
110 #pragma redefine_extname strcmp __mfwrap_strcmp
|
|
111 #pragma redefine_extname strcasecmp __mfwrap_strcasecmp
|
|
112 #pragma redefine_extname strncmp __mfwrap_strncmp
|
|
113 #pragma redefine_extname strncasecmp __mfwrap_strncasecmp
|
|
114 #pragma redefine_extname strdup __mfwrap_strdup
|
|
115 #pragma redefine_extname strndup __mfwrap_strndup
|
|
116 #pragma redefine_extname strchr __mfwrap_strchr
|
|
117 #pragma redefine_extname strrchr __mfwrap_strrchr
|
|
118 #pragma redefine_extname strstr __mfwrap_strstr
|
|
119 #pragma redefine_extname memmem __mfwrap_memmem
|
|
120 #pragma redefine_extname strlen __mfwrap_strlen
|
|
121 #pragma redefine_extname strnlen __mfwrap_strnlen
|
|
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
|
|
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
|
|
134 #pragma redefine_extname fdopen __mfwrap_fdopen
|
|
135 #pragma redefine_extname freopen __mfwrap_freopen
|
|
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
|
|
174 #pragma redefine_extname setbuffer __mfwrap_setbuffer
|
|
175 #pragma redefine_extname setlinebuf __mfwrap_setlinebuf
|
|
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
|
|
206 #pragma redefine_extname freopen64 __mfwrap_freopen64
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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 */
|