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