1169695Skan/* Implementation header for mudflap runtime library. 2169695Skan Mudflap: narrow-pointer bounds-checking by tree rewriting. 3169695Skan Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc. 4169695Skan Contributed by Frank Ch. Eigler <fche@redhat.com> 5169695Skan and Graydon Hoare <graydon@redhat.com> 6169695Skan 7169695SkanThis file is part of GCC. 8169695Skan 9169695SkanGCC is free software; you can redistribute it and/or modify it under 10169695Skanthe terms of the GNU General Public License as published by the Free 11169695SkanSoftware Foundation; either version 2, or (at your option) any later 12169695Skanversion. 13169695Skan 14169695SkanIn addition to the permissions in the GNU General Public License, the 15169695SkanFree Software Foundation gives you unlimited permission to link the 16169695Skancompiled version of this file into combinations with other programs, 17169695Skanand to distribute those combinations without any restriction coming 18169695Skanfrom the use of this file. (The General Public License restrictions 19169695Skando apply in other respects; for example, they cover modification of 20169695Skanthe file, and distribution when not linked into a combine 21169695Skanexecutable.) 22169695Skan 23169695SkanGCC is distributed in the hope that it will be useful, but WITHOUT ANY 24169695SkanWARRANTY; without even the implied warranty of MERCHANTABILITY or 25169695SkanFITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 26169695Skanfor more details. 27169695Skan 28169695SkanYou should have received a copy of the GNU General Public License 29169695Skanalong with GCC; see the file COPYING. If not, write to the Free 30169695SkanSoftware Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 31169695Skan02110-1301, USA. */ 32169695Skan 33169695Skan/* Public libmudflap declarations -*- C -*- */ 34169695Skan 35169695Skan#ifndef MF_RUNTIME_H 36169695Skan#define MF_RUNTIME_H 37169695Skan 38169695Skantypedef void *__mf_ptr_t; 39169695Skantypedef unsigned int __mf_uintptr_t __attribute__ ((__mode__ (__pointer__))); 40169695Skantypedef __SIZE_TYPE__ __mf_size_t; 41169695Skan 42169695Skan/* Global declarations used by instrumentation. When _MUDFLAP is 43169695Skan defined, these have been auto-declared by the compiler and we 44169695Skan should not declare them again (ideally we *would* declare them 45169695Skan again, to verify that the compiler's declarations match the 46169695Skan library's, but the C++ front end has no mechanism for allowing 47169695Skan the re-definition of a structure type). */ 48169695Skan#ifndef _MUDFLAP 49169695Skanstruct __mf_cache { __mf_uintptr_t low; __mf_uintptr_t high; }; 50169695Skanextern struct __mf_cache __mf_lookup_cache []; 51169695Skanextern __mf_uintptr_t __mf_lc_mask; 52169695Skanextern unsigned char __mf_lc_shift; 53169695Skan#endif 54169695Skan 55169695Skan/* Multithreading support. */ 56169695Skan#ifdef _MUDFLAPTH 57169695Skan/* extern pthread_mutex_t __mf_biglock; */ 58169695Skan#ifndef _REENTRANT 59169695Skan#define _REENTRANT 60169695Skan#endif 61169695Skan#ifndef _THREAD_SAFE 62169695Skan#define _THREAD_SAFE 63169695Skan#endif 64169695Skan#endif 65169695Skan 66169695Skan/* Codes to describe the type of access to check: __mf_check arg 3 */ 67169695Skan 68169695Skan#define __MF_CHECK_READ 0 69169695Skan#define __MF_CHECK_WRITE 1 70169695Skan 71169695Skan 72169695Skan/* Codes to describe a region of memory being registered: __mf_*register arg 3 */ 73169695Skan 74169695Skan#define __MF_TYPE_NOACCESS 0 75169695Skan#define __MF_TYPE_HEAP 1 76169695Skan#define __MF_TYPE_HEAP_I 2 77169695Skan#define __MF_TYPE_STACK 3 78169695Skan#define __MF_TYPE_STATIC 4 79169695Skan#define __MF_TYPE_GUESS 5 80169695Skan 81169695Skan 82169695Skan/* The public mudflap API */ 83169695Skan 84169695Skan#ifdef __cplusplus 85169695Skanextern "C" { 86169695Skan#endif 87169695Skan 88169695Skanextern void __mf_check (void *ptr, __mf_size_t sz, int type, const char *location) 89169695Skan __attribute((nothrow)); 90169695Skanextern void __mf_register (void *ptr, __mf_size_t sz, int type, const char *name) 91169695Skan __attribute((nothrow)); 92169695Skanextern void __mf_unregister (void *ptr, __mf_size_t sz, int type) 93169695Skan __attribute((nothrow)); 94169695Skanextern unsigned __mf_watch (void *ptr, __mf_size_t sz); 95169695Skanextern unsigned __mf_unwatch (void *ptr, __mf_size_t sz); 96169695Skanextern void __mf_report (); 97169695Skanextern int __mf_set_options (const char *opts); 98169695Skan 99169695Skan 100169695Skan/* Redirect some standard library functions to libmudflap. These are 101169695Skan done by simple #define rather than linker wrapping, since only 102169695Skan instrumented modules are meant to be affected. */ 103169695Skan 104169695Skan#ifdef _MUDFLAP 105169695Skan#pragma redefine_extname memcpy __mfwrap_memcpy 106169695Skan#pragma redefine_extname memmove __mfwrap_memmove 107169695Skan#pragma redefine_extname memset __mfwrap_memset 108169695Skan#pragma redefine_extname memcmp __mfwrap_memcmp 109169695Skan#pragma redefine_extname memchr __mfwrap_memchr 110169695Skan#pragma redefine_extname memrchr __mfwrap_memrchr 111169695Skan#pragma redefine_extname strcpy __mfwrap_strcpy 112169695Skan#pragma redefine_extname strncpy __mfwrap_strncpy 113169695Skan#pragma redefine_extname strcat __mfwrap_strcat 114169695Skan#pragma redefine_extname strncat __mfwrap_strncat 115169695Skan#pragma redefine_extname strcmp __mfwrap_strcmp 116169695Skan#pragma redefine_extname strcasecmp __mfwrap_strcasecmp 117169695Skan#pragma redefine_extname strncmp __mfwrap_strncmp 118169695Skan#pragma redefine_extname strncasecmp __mfwrap_strncasecmp 119169695Skan#pragma redefine_extname strdup __mfwrap_strdup 120169695Skan#pragma redefine_extname strndup __mfwrap_strndup 121169695Skan#pragma redefine_extname strchr __mfwrap_strchr 122169695Skan#pragma redefine_extname strrchr __mfwrap_strrchr 123169695Skan#pragma redefine_extname strstr __mfwrap_strstr 124169695Skan#pragma redefine_extname memmem __mfwrap_memmem 125169695Skan#pragma redefine_extname strlen __mfwrap_strlen 126169695Skan#pragma redefine_extname strnlen __mfwrap_strnlen 127169695Skan#pragma redefine_extname bzero __mfwrap_bzero 128169695Skan#pragma redefine_extname bcopy __mfwrap_bcopy 129169695Skan#pragma redefine_extname bcmp __mfwrap_bcmp 130169695Skan#pragma redefine_extname index __mfwrap_index 131169695Skan#pragma redefine_extname rindex __mfwrap_rindex 132169695Skan#pragma redefine_extname asctime __mfwrap_asctime 133169695Skan#pragma redefine_extname ctime __mfwrap_ctime 134169695Skan#pragma redefine_extname gmtime __mfwrap_gmtime 135169695Skan#pragma redefine_extname localtime __mfwrap_localtime 136169695Skan#pragma redefine_extname time __mfwrap_time 137169695Skan#pragma redefine_extname strerror __mfwrap_strerror 138169695Skan#pragma redefine_extname fopen __mfwrap_fopen 139169695Skan#pragma redefine_extname fdopen __mfwrap_fdopen 140169695Skan#pragma redefine_extname freopen __mfwrap_freopen 141169695Skan#pragma redefine_extname fclose __mfwrap_fclose 142169695Skan#pragma redefine_extname fread __mfwrap_fread 143169695Skan#pragma redefine_extname fwrite __mfwrap_fwrite 144169695Skan#pragma redefine_extname fgetc __mfwrap_fgetc 145169695Skan#pragma redefine_extname fgets __mfwrap_fgets 146169695Skan#pragma redefine_extname getc __mfwrap_getc 147169695Skan#pragma redefine_extname gets __mfwrap_gets 148169695Skan#pragma redefine_extname ungetc __mfwrap_ungetc 149169695Skan#pragma redefine_extname fputc __mfwrap_fputc 150169695Skan#pragma redefine_extname fputs __mfwrap_fputs 151169695Skan#pragma redefine_extname putc __mfwrap_putc 152169695Skan#pragma redefine_extname puts __mfwrap_puts 153169695Skan#pragma redefine_extname clearerr __mfwrap_clearerr 154169695Skan#pragma redefine_extname feof __mfwrap_feof 155169695Skan#pragma redefine_extname ferror __mfwrap_ferror 156169695Skan#pragma redefine_extname fileno __mfwrap_fileno 157169695Skan#pragma redefine_extname printf __mfwrap_printf 158169695Skan#pragma redefine_extname fprintf __mfwrap_fprintf 159169695Skan#pragma redefine_extname sprintf __mfwrap_sprintf 160169695Skan#pragma redefine_extname snprintf __mfwrap_snprintf 161169695Skan#pragma redefine_extname vprintf __mfwrap_vprintf 162169695Skan#pragma redefine_extname vfprintf __mfwrap_vfprintf 163169695Skan#pragma redefine_extname vsprintf __mfwrap_vsprintf 164169695Skan#pragma redefine_extname vsnprintf __mfwrap_vsnprintf 165169695Skan#pragma redefine_extname access __mfwrap_access 166169695Skan#pragma redefine_extname remove __mfwrap_remove 167169695Skan#pragma redefine_extname fflush __mfwrap_fflush 168169695Skan#pragma redefine_extname fseek __mfwrap_fseek 169169695Skan#pragma redefine_extname ftell __mfwrap_ftell 170169695Skan#pragma redefine_extname rewind __mfwrap_rewind 171169695Skan#pragma redefine_extname fgetpos __mfwrap_fgetpos 172169695Skan#pragma redefine_extname fsetpos __mfwrap_fsetpos 173169695Skan#pragma redefine_extname stat __mfwrap_stat 174169695Skan#pragma redefine_extname fstat __mfwrap_fstat 175169695Skan#pragma redefine_extname lstat __mfwrap_lstat 176169695Skan#pragma redefine_extname mkfifo __mfwrap_mkfifo 177169695Skan#pragma redefine_extname setvbuf __mfwrap_setvbuf 178169695Skan#pragma redefine_extname setbuf __mfwrap_setbuf 179169695Skan#pragma redefine_extname setbuffer __mfwrap_setbuffer 180169695Skan#pragma redefine_extname setlinebuf __mfwrap_setlinebuf 181169695Skan#pragma redefine_extname opendir __mfwrap_opendir 182169695Skan#pragma redefine_extname closedir __mfwrap_closedir 183169695Skan#pragma redefine_extname readdir __mfwrap_readdir 184169695Skan#pragma redefine_extname recv __mfwrap_recv 185169695Skan#pragma redefine_extname recvfrom __mfwrap_recvfrom 186169695Skan#pragma redefine_extname recvmsg __mfwrap_recvmsg 187169695Skan#pragma redefine_extname send __mfwrap_send 188169695Skan#pragma redefine_extname sendto __mfwrap_sendto 189169695Skan#pragma redefine_extname sendmsg __mfwrap_sendmsg 190169695Skan#pragma redefine_extname setsockopt __mfwrap_setsockopt 191169695Skan#pragma redefine_extname getsockopt __mfwrap_getsockopt 192169695Skan#pragma redefine_extname accept __mfwrap_accept 193169695Skan#pragma redefine_extname bind __mfwrap_bind 194169695Skan#pragma redefine_extname connect __mfwrap_connect 195169695Skan#pragma redefine_extname gethostname __mfwrap_gethostname 196169695Skan#pragma redefine_extname sethostname __mfwrap_sethostname 197169695Skan#pragma redefine_extname gethostbyname __mfwrap_gethostbyname 198169695Skan#pragma redefine_extname wait __mfwrap_wait 199169695Skan#pragma redefine_extname waitpid __mfwrap_waitpid 200169695Skan#pragma redefine_extname popen __mfwrap_popen 201169695Skan#pragma redefine_extname pclose __mfwrap_pclose 202169695Skan#pragma redefine_extname execve __mfwrap_execve 203169695Skan#pragma redefine_extname execv __mfwrap_execv 204169695Skan#pragma redefine_extname execvp __mfwrap_execvp 205169695Skan#pragma redefine_extname system __mfwrap_system 206169695Skan#pragma redefine_extname dlopen __mfwrap_dlopen 207169695Skan#pragma redefine_extname dlerror __mfwrap_dlerror 208169695Skan#pragma redefine_extname dlsym __mfwrap_dlsym 209169695Skan#pragma redefine_extname dlclose __mfwrap_dlclose 210169695Skan#pragma redefine_extname fopen64 __mfwrap_fopen64 211169695Skan#pragma redefine_extname freopen64 __mfwrap_freopen64 212169695Skan#pragma redefine_extname stat64 __mfwrap_stat64 213169695Skan#pragma redefine_extname fseeko64 __mfwrap_fseeko64 214169695Skan#pragma redefine_extname ftello64 __mfwrap_ftello64 215169695Skan#pragma redefine_extname semop __mfwrap_semop 216169695Skan#pragma redefine_extname semctl __mfwrap_semctl 217169695Skan#pragma redefine_extname shmctl __mfwrap_shmctl 218169695Skan#pragma redefine_extname shmat __mfwrap_shmat 219169695Skan#pragma redefine_extname shmdt __mfwrap_shmdt 220169695Skan#pragma redefine_extname __ctype_b_loc __mfwrap___ctype_b_loc 221169695Skan#pragma redefine_extname __ctype_toupper_loc __mfwrap___ctype_toupper_loc 222169695Skan#pragma redefine_extname __ctype_tolower_loc __mfwrap___ctype_tolower_loc 223169695Skan#pragma redefine_extname getlogin __mfwrap_getlogin 224169695Skan#pragma redefine_extname cuserid __mfwrap_cuserid 225169695Skan#pragma redefine_extname getpwnam __mfwrap_getpwnam 226169695Skan#pragma redefine_extname getpwuid __mfwrap_getpwuid 227169695Skan#pragma redefine_extname getgrnam __mfwrap_getgrnam 228169695Skan#pragma redefine_extname getgrgid __mfwrap_getgrgid 229169695Skan#pragma redefine_extname getservent __mfwrap_getservent 230169695Skan#pragma redefine_extname getservbyname __mfwrap_getservbyname 231169695Skan#pragma redefine_extname getservbyport __mfwrap_getservbyport 232169695Skan#pragma redefine_extname gai_strerror __mfwrap_gai_strerror 233169695Skan#pragma redefine_extname getmntent __mfwrap_getmntent 234169695Skan#pragma redefine_extname inet_ntoa __mfwrap_inet_ntoa 235169695Skan#pragma redefine_extname getprotoent __mfwrap_getprotoent 236169695Skan#pragma redefine_extname getprotobyname __mfwrap_getprotobyname 237169695Skan#pragma redefine_extname getprotobynumber __mfwrap_getprotobynumber 238169695Skan 239169695Skan/* Disable glibc macros. */ 240169695Skan#define __NO_STRING_INLINES 241169695Skan 242169695Skan#endif /* _MUDFLAP */ 243169695Skan 244169695Skan 245169695Skan#ifdef __cplusplus 246169695Skan} 247169695Skan#endif 248169695Skan 249169695Skan#endif /* MF_RUNTIME_H */ 250