/contrib/gcclibs/libmudflap/mf-runtime.h

https://bitbucket.org/freebsd/freebsd-head/ · C++ Header · 249 lines · 180 code · 22 blank · 47 comment · 0 complexity · 6c7898b048282e8bc66cb524460e7c8f MD5 · raw file

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