mf-runtime.h revision 256281
150974Swpaul/* Implementation header for mudflap runtime library. 250974Swpaul Mudflap: narrow-pointer bounds-checking by tree rewriting. 350974Swpaul Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc. 450974Swpaul Contributed by Frank Ch. Eigler <fche@redhat.com> 550974Swpaul and Graydon Hoare <graydon@redhat.com> 650974Swpaul 750974SwpaulThis file is part of GCC. 850974Swpaul 950974SwpaulGCC is free software; you can redistribute it and/or modify it under 1050974Swpaulthe terms of the GNU General Public License as published by the Free 1150974SwpaulSoftware Foundation; either version 2, or (at your option) any later 1250974Swpaulversion. 1350974Swpaul 1450974SwpaulIn addition to the permissions in the GNU General Public License, the 1550974SwpaulFree Software Foundation gives you unlimited permission to link the 1650974Swpaulcompiled version of this file into combinations with other programs, 1750974Swpauland to distribute those combinations without any restriction coming 1850974Swpaulfrom the use of this file. (The General Public License restrictions 1950974Swpauldo apply in other respects; for example, they cover modification of 2050974Swpaulthe file, and distribution when not linked into a combine 2150974Swpaulexecutable.) 2250974Swpaul 2350974SwpaulGCC is distributed in the hope that it will be useful, but WITHOUT ANY 2450974SwpaulWARRANTY; without even the implied warranty of MERCHANTABILITY or 2550974SwpaulFITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 2650974Swpaulfor more details. 2750974Swpaul 2850974SwpaulYou should have received a copy of the GNU General Public License 2950974Swpaulalong with GCC; see the file COPYING. If not, write to the Free 3050974SwpaulSoftware Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 3150974Swpaul02110-1301, USA. */ 3250974Swpaul 3350974Swpaul/* Public libmudflap declarations -*- C -*- */ 3450974Swpaul 3550974Swpaul#ifndef MF_RUNTIME_H 3650974Swpaul#define MF_RUNTIME_H 3750974Swpaul 3850974Swpaultypedef void *__mf_ptr_t; 3964963Swpaultypedef unsigned int __mf_uintptr_t __attribute__ ((__mode__ (__pointer__))); 4064963Swpaultypedef __SIZE_TYPE__ __mf_size_t; 4164963Swpaul 4250974Swpaul/* Global declarations used by instrumentation. When _MUDFLAP is 4350974Swpaul defined, these have been auto-declared by the compiler and we 4450974Swpaul should not declare them again (ideally we *would* declare them 4550974Swpaul again, to verify that the compiler's declarations match the 4650974Swpaul library's, but the C++ front end has no mechanism for allowing 4750974Swpaul the re-definition of a structure type). */ 4850974Swpaul#ifndef _MUDFLAP 4950974Swpaulstruct __mf_cache { __mf_uintptr_t low; __mf_uintptr_t high; }; 5050974Swpaulextern struct __mf_cache __mf_lookup_cache []; 5150974Swpaulextern __mf_uintptr_t __mf_lc_mask; 5250974Swpaulextern unsigned char __mf_lc_shift; 5350974Swpaul#endif 5450974Swpaul 5550974Swpaul/* Multithreading support. */ 5650974Swpaul#ifdef _MUDFLAPTH 5750974Swpaul/* extern pthread_mutex_t __mf_biglock; */ 5850974Swpaul#ifndef _REENTRANT 5950974Swpaul#define _REENTRANT 6050974Swpaul#endif 6150974Swpaul#ifndef _THREAD_SAFE 6250974Swpaul#define _THREAD_SAFE 6350974Swpaul#endif 6450974Swpaul#endif 6550974Swpaul 6650974Swpaul/* Codes to describe the type of access to check: __mf_check arg 3 */ 6787059Sluigi 6850974Swpaul#define __MF_CHECK_READ 0 6950974Swpaul#define __MF_CHECK_WRITE 1 7050974Swpaul 7150974Swpaul 7250974Swpaul/* Codes to describe a region of memory being registered: __mf_*register arg 3 */ 7350974Swpaul 7487390Sjhay#define __MF_TYPE_NOACCESS 0 7587390Sjhay#define __MF_TYPE_HEAP 1 7650974Swpaul#define __MF_TYPE_HEAP_I 2 7750974Swpaul#define __MF_TYPE_STACK 3 7850974Swpaul#define __MF_TYPE_STATIC 4 7950974Swpaul#define __MF_TYPE_GUESS 5 8050974Swpaul 8150974Swpaul 8250974Swpaul/* The public mudflap API */ 8350974Swpaul 8450974Swpaul#ifdef __cplusplus 8550974Swpaulextern "C" { 8650974Swpaul#endif 8750974Swpaul 8850974Swpaulextern void __mf_check (void *ptr, __mf_size_t sz, int type, const char *location) 8950974Swpaul __attribute((nothrow)); 9050974Swpaulextern void __mf_register (void *ptr, __mf_size_t sz, int type, const char *name) 9150974Swpaul __attribute((nothrow)); 9250974Swpaulextern void __mf_unregister (void *ptr, __mf_size_t sz, int type) 9350974Swpaul __attribute((nothrow)); 9450974Swpaulextern unsigned __mf_watch (void *ptr, __mf_size_t sz); 9550974Swpaulextern unsigned __mf_unwatch (void *ptr, __mf_size_t sz); 9659758Speterextern void __mf_report (); 9759758Speterextern int __mf_set_options (const char *opts); 9851089Speter 9950974Swpaul 10050974Swpaul/* Redirect some standard library functions to libmudflap. These are 10150974Swpaul done by simple #define rather than linker wrapping, since only 10250974Swpaul instrumented modules are meant to be affected. */ 10350974Swpaul 10450974Swpaul#ifdef _MUDFLAP 10550974Swpaul#pragma redefine_extname memcpy __mfwrap_memcpy 10650974Swpaul#pragma redefine_extname memmove __mfwrap_memmove 10750974Swpaul#pragma redefine_extname memset __mfwrap_memset 10850974Swpaul#pragma redefine_extname memcmp __mfwrap_memcmp 10950974Swpaul#pragma redefine_extname memchr __mfwrap_memchr 11050974Swpaul#pragma redefine_extname memrchr __mfwrap_memrchr 11150974Swpaul#pragma redefine_extname strcpy __mfwrap_strcpy 11262672Swpaul#pragma redefine_extname strncpy __mfwrap_strncpy 11350974Swpaul#pragma redefine_extname strcat __mfwrap_strcat 11450974Swpaul#pragma redefine_extname strncat __mfwrap_strncat 11550974Swpaul#pragma redefine_extname strcmp __mfwrap_strcmp 11692739Salfred#pragma redefine_extname strcasecmp __mfwrap_strcasecmp 11792739Salfred#pragma redefine_extname strncmp __mfwrap_strncmp 11892739Salfred#pragma redefine_extname strncasecmp __mfwrap_strncasecmp 11950974Swpaul#pragma redefine_extname strdup __mfwrap_strdup 12092739Salfred#pragma redefine_extname strndup __mfwrap_strndup 12192739Salfred#pragma redefine_extname strchr __mfwrap_strchr 12292739Salfred#pragma redefine_extname strrchr __mfwrap_strrchr 12392739Salfred#pragma redefine_extname strstr __mfwrap_strstr 12492739Salfred#pragma redefine_extname memmem __mfwrap_memmem 12592739Salfred#pragma redefine_extname strlen __mfwrap_strlen 12692739Salfred#pragma redefine_extname strnlen __mfwrap_strnlen 12792739Salfred#pragma redefine_extname bzero __mfwrap_bzero 12892739Salfred#pragma redefine_extname bcopy __mfwrap_bcopy 12992739Salfred#pragma redefine_extname bcmp __mfwrap_bcmp 13092739Salfred#pragma redefine_extname index __mfwrap_index 13192739Salfred#pragma redefine_extname rindex __mfwrap_rindex 13292739Salfred#pragma redefine_extname asctime __mfwrap_asctime 13392739Salfred#pragma redefine_extname ctime __mfwrap_ctime 13492739Salfred#pragma redefine_extname gmtime __mfwrap_gmtime 13592739Salfred#pragma redefine_extname localtime __mfwrap_localtime 13692739Salfred#pragma redefine_extname time __mfwrap_time 13750974Swpaul#pragma redefine_extname strerror __mfwrap_strerror 13892739Salfred#pragma redefine_extname fopen __mfwrap_fopen 13992739Salfred#pragma redefine_extname fdopen __mfwrap_fdopen 14092739Salfred#pragma redefine_extname freopen __mfwrap_freopen 14192739Salfred#pragma redefine_extname fclose __mfwrap_fclose 14292739Salfred#pragma redefine_extname fread __mfwrap_fread 14392739Salfred#pragma redefine_extname fwrite __mfwrap_fwrite 14472197Swpaul#pragma redefine_extname fgetc __mfwrap_fgetc 14592739Salfred#pragma redefine_extname fgets __mfwrap_fgets 14692739Salfred#pragma redefine_extname getc __mfwrap_getc 14792739Salfred#pragma redefine_extname gets __mfwrap_gets 14892739Salfred#pragma redefine_extname ungetc __mfwrap_ungetc 14972197Swpaul#pragma redefine_extname fputc __mfwrap_fputc 15072197Swpaul#pragma redefine_extname fputs __mfwrap_fputs 15192739Salfred#pragma redefine_extname putc __mfwrap_putc 15292739Salfred#pragma redefine_extname puts __mfwrap_puts 15392739Salfred#pragma redefine_extname clearerr __mfwrap_clearerr 15450974Swpaul#pragma redefine_extname feof __mfwrap_feof 15592739Salfred#pragma redefine_extname ferror __mfwrap_ferror 15692739Salfred#pragma redefine_extname fileno __mfwrap_fileno 15792739Salfred#pragma redefine_extname printf __mfwrap_printf 15892739Salfred#pragma redefine_extname fprintf __mfwrap_fprintf 15992739Salfred#pragma redefine_extname sprintf __mfwrap_sprintf 16092739Salfred#pragma redefine_extname snprintf __mfwrap_snprintf 16150974Swpaul#pragma redefine_extname vprintf __mfwrap_vprintf 16292739Salfred#pragma redefine_extname vfprintf __mfwrap_vfprintf 16392739Salfred#pragma redefine_extname vsprintf __mfwrap_vsprintf 16492739Salfred#pragma redefine_extname vsnprintf __mfwrap_vsnprintf 16550974Swpaul#pragma redefine_extname access __mfwrap_access 16650974Swpaul#pragma redefine_extname remove __mfwrap_remove 16750974Swpaul#pragma redefine_extname fflush __mfwrap_fflush 16850974Swpaul#pragma redefine_extname fseek __mfwrap_fseek 16951030Swpaul#pragma redefine_extname ftell __mfwrap_ftell 17051030Swpaul#pragma redefine_extname rewind __mfwrap_rewind 17150974Swpaul#pragma redefine_extname fgetpos __mfwrap_fgetpos 17250974Swpaul#pragma redefine_extname fsetpos __mfwrap_fsetpos 17350974Swpaul#pragma redefine_extname stat __mfwrap_stat 17450974Swpaul#pragma redefine_extname fstat __mfwrap_fstat 17550974Swpaul#pragma redefine_extname lstat __mfwrap_lstat 17650974Swpaul#pragma redefine_extname mkfifo __mfwrap_mkfifo 17750974Swpaul#pragma redefine_extname setvbuf __mfwrap_setvbuf 17850974Swpaul#pragma redefine_extname setbuf __mfwrap_setbuf 17950974Swpaul#pragma redefine_extname setbuffer __mfwrap_setbuffer 18050974Swpaul#pragma redefine_extname setlinebuf __mfwrap_setlinebuf 18150974Swpaul#pragma redefine_extname opendir __mfwrap_opendir 18250974Swpaul#pragma redefine_extname closedir __mfwrap_closedir 18350974Swpaul#pragma redefine_extname readdir __mfwrap_readdir 18450974Swpaul#pragma redefine_extname recv __mfwrap_recv 18550974Swpaul#pragma redefine_extname recvfrom __mfwrap_recvfrom 18650974Swpaul#pragma redefine_extname recvmsg __mfwrap_recvmsg 18750974Swpaul#pragma redefine_extname send __mfwrap_send 18850974Swpaul#pragma redefine_extname sendto __mfwrap_sendto 18950974Swpaul#pragma redefine_extname sendmsg __mfwrap_sendmsg 19050974Swpaul#pragma redefine_extname setsockopt __mfwrap_setsockopt 19150974Swpaul#pragma redefine_extname getsockopt __mfwrap_getsockopt 19250974Swpaul#pragma redefine_extname accept __mfwrap_accept 19351455Swpaul#pragma redefine_extname bind __mfwrap_bind 19450974Swpaul#pragma redefine_extname connect __mfwrap_connect 19550974Swpaul#pragma redefine_extname gethostname __mfwrap_gethostname 19650974Swpaul#pragma redefine_extname sethostname __mfwrap_sethostname 19750974Swpaul#pragma redefine_extname gethostbyname __mfwrap_gethostbyname 19850974Swpaul#pragma redefine_extname wait __mfwrap_wait 19950974Swpaul#pragma redefine_extname waitpid __mfwrap_waitpid 20051533Swpaul#pragma redefine_extname popen __mfwrap_popen 20151473Swpaul#pragma redefine_extname pclose __mfwrap_pclose 20250974Swpaul#pragma redefine_extname execve __mfwrap_execve 20350974Swpaul#pragma redefine_extname execv __mfwrap_execv 20450974Swpaul#pragma redefine_extname execvp __mfwrap_execvp 20550974Swpaul#pragma redefine_extname system __mfwrap_system 20650974Swpaul#pragma redefine_extname dlopen __mfwrap_dlopen 20750974Swpaul#pragma redefine_extname dlerror __mfwrap_dlerror 20850974Swpaul#pragma redefine_extname dlsym __mfwrap_dlsym 20950974Swpaul#pragma redefine_extname dlclose __mfwrap_dlclose 21050974Swpaul#pragma redefine_extname fopen64 __mfwrap_fopen64 21150974Swpaul#pragma redefine_extname freopen64 __mfwrap_freopen64 21250974Swpaul#pragma redefine_extname stat64 __mfwrap_stat64 21350974Swpaul#pragma redefine_extname fseeko64 __mfwrap_fseeko64 21450974Swpaul#pragma redefine_extname ftello64 __mfwrap_ftello64 21550974Swpaul#pragma redefine_extname semop __mfwrap_semop 21650974Swpaul#pragma redefine_extname semctl __mfwrap_semctl 21781713Swpaul#pragma redefine_extname shmctl __mfwrap_shmctl 21881713Swpaul#pragma redefine_extname shmat __mfwrap_shmat 21981713Swpaul#pragma redefine_extname shmdt __mfwrap_shmdt 22081713Swpaul#pragma redefine_extname __ctype_b_loc __mfwrap___ctype_b_loc 22181713Swpaul#pragma redefine_extname __ctype_toupper_loc __mfwrap___ctype_toupper_loc 22281713Swpaul#pragma redefine_extname __ctype_tolower_loc __mfwrap___ctype_tolower_loc 22381713Swpaul#pragma redefine_extname getlogin __mfwrap_getlogin 22481713Swpaul#pragma redefine_extname cuserid __mfwrap_cuserid 22581713Swpaul#pragma redefine_extname getpwnam __mfwrap_getpwnam 22681713Swpaul#pragma redefine_extname getpwuid __mfwrap_getpwuid 22781713Swpaul#pragma redefine_extname getgrnam __mfwrap_getgrnam 22881713Swpaul#pragma redefine_extname getgrgid __mfwrap_getgrgid 22981713Swpaul#pragma redefine_extname getservent __mfwrap_getservent 23081713Swpaul#pragma redefine_extname getservbyname __mfwrap_getservbyname 23181713Swpaul#pragma redefine_extname getservbyport __mfwrap_getservbyport 23281713Swpaul#pragma redefine_extname gai_strerror __mfwrap_gai_strerror 23381713Swpaul#pragma redefine_extname getmntent __mfwrap_getmntent 23481713Swpaul#pragma redefine_extname inet_ntoa __mfwrap_inet_ntoa 23581713Swpaul#pragma redefine_extname getprotoent __mfwrap_getprotoent 23681713Swpaul#pragma redefine_extname getprotobyname __mfwrap_getprotobyname 23781713Swpaul#pragma redefine_extname getprotobynumber __mfwrap_getprotobynumber 23881713Swpaul 23981713Swpaul/* Disable glibc macros. */ 24081713Swpaul#define __NO_STRING_INLINES 24181713Swpaul 24281713Swpaul#endif /* _MUDFLAP */ 24381713Swpaul 24481713Swpaul 24581713Swpaul#ifdef __cplusplus 24681713Swpaul} 24781713Swpaul#endif 24881713Swpaul 24981713Swpaul#endif /* MF_RUNTIME_H */ 25081713Swpaul