PageRenderTime 46ms CodeModel.GetById 14ms RepoModel.GetById 1ms app.codeStats 0ms

/tags/rel-1-3-26/SWIG/Tools/WAD/Include/wad.h

#
C++ Header | 269 lines | 183 code | 57 blank | 29 comment | 0 complexity | 5c0bb841f0d0bce0f6d09efb26d1b232 MD5 | raw file
Possible License(s): LGPL-2.1, Cube, GPL-3.0, 0BSD, GPL-2.0
  1. /* -----------------------------------------------------------------------------
  2. * wad.h
  3. *
  4. * WAD header file (obviously)
  5. *
  6. * Author(s) : David Beazley (beazley@cs.uchicago.edu)
  7. *
  8. * Copyright (C) 2001. University of Chicago. All rights reserved.
  9. *
  10. * $Header$
  11. * ----------------------------------------------------------------------------- */
  12. #include <stdio.h>
  13. #include <unistd.h>
  14. #include <signal.h>
  15. #include <stdlib.h>
  16. #include <string.h>
  17. #include <fcntl.h>
  18. #include <limits.h>
  19. #include <sys/mman.h>
  20. #include <ctype.h>
  21. #include <sys/ucontext.h>
  22. #ifdef WAD_SOLARIS
  23. #include <procfs.h>
  24. #endif
  25. #ifdef __cplusplus
  26. extern "C" {
  27. #endif
  28. /* Core datatypes */
  29. typedef int int32;
  30. typedef unsigned uint32;
  31. typedef short int16;
  32. typedef unsigned short uint16;
  33. typedef signed char int8;
  34. typedef unsigned char uint8;
  35. #ifndef MAX_PATH
  36. #define MAX_PATH 1024
  37. #endif
  38. #define WAD_SRC_WINDOW 2
  39. /* --- Low level memory management functions --- */
  40. extern int wad_memory_init();
  41. extern void *wad_malloc(int nbytes);
  42. extern char *wad_strdup(const char *c);
  43. extern void wad_memory_debug();
  44. extern void wad_memcpy(void *t, const void *s, unsigned len);
  45. /* --- Low level string handling --- */
  46. extern char *wad_string_lookup(char *s);
  47. extern void wad_string_debug();
  48. extern char *wad_strcpy(char *t, const char *s);
  49. extern char *wad_strcat(char *t, const char *s);
  50. extern int wad_strlen(const char *s);
  51. /* --- I/O, Debugging --- */
  52. extern void wad_printf(const char *fmt, ...);
  53. extern char *wad_format_hex(unsigned long u, int leading);
  54. extern char *wad_format_unsigned(unsigned long u, int width);
  55. extern char *wad_format_signed(long s, int width);
  56. /* --- Memory segments --- */
  57. typedef struct WadSegment {
  58. char *base; /* Base address for symbol lookup */
  59. char *vaddr; /* Virtual address start */
  60. unsigned long size; /* Size of the segment (bytes) */
  61. unsigned long offset; /* Offset into mapped object */
  62. char *mapname; /* Filename mapped to this region */
  63. char *mappath; /* Full path to mapname */
  64. struct WadSegment *next; /* Next segment */
  65. } WadSegment;
  66. extern int wad_segment_read();
  67. extern WadSegment *wad_segment_find(void *vaddr);
  68. extern int wad_segment_valid(void *vaddr);
  69. /* --- Object files --- */
  70. typedef struct WadObjectFile {
  71. void *ptr; /* Pointer to data */
  72. int len; /* Length of data */
  73. int type; /* Type of the object file */
  74. char *path; /* Path name of this object */
  75. struct WadObjectFile *next;
  76. } WadObjectFile;
  77. extern void wad_object_reset();
  78. extern WadObjectFile *wad_object_load(const char *path);
  79. extern int wad_file_check(void *);
  80. #define SYM_LOCAL 1
  81. #define SYM_GLOBAL 2
  82. /* Signal handling */
  83. extern void wad_init();
  84. extern void wad_signalhandler(int, siginfo_t *, void *);
  85. extern void wad_signal_init();
  86. extern void wad_signal_clear();
  87. extern void wad_set_return(const char *name, long value);
  88. extern void wad_set_return_value(long value);
  89. extern void wad_set_return_func(void (*f)(void));
  90. typedef struct WadLocal {
  91. char *name; /* Name of the local */
  92. void *ptr; /* Pointer to the actual data (if known) */
  93. int size; /* Size of the data (if known) */
  94. int type; /* Data type */
  95. /* Debugging information */
  96. int loc; /* Location: register or stack */
  97. int stack; /* location on the stack */
  98. int reg; /* Register number */
  99. int line; /* Line number where defined */
  100. struct WadLocal *next;
  101. } WadLocal;
  102. #define PARM_REGISTER 1
  103. #define PARM_STACK 2
  104. /* Type codes for local variables */
  105. #define WAD_TYPE_UNKNOWN 0
  106. #define WAD_TYPE_INT32 1
  107. #define WAD_TYPE_INT16 2
  108. #define WAD_TYPE_INT8 3
  109. #define WAD_TYPE_INT64 4
  110. #define WAD_TYPE_UINT32 5
  111. #define WAD_TYPE_UINT16 6
  112. #define WAD_TYPE_UINT8 7
  113. #define WAD_TYPE_UINT64 8
  114. #define WAD_TYPE_FLOAT 9
  115. #define WAD_TYPE_DOUBLE 10
  116. #define WAD_TYPE_POINTER 11
  117. #define WAD_TYPE_CHAR 12
  118. extern long wad_local_as_long(WadLocal *loc);
  119. extern double wad_local_as_double(WadLocal *loc);
  120. /* Data structure containing information about each stack frame */
  121. typedef struct WadFrame {
  122. long frameno; /* Frame number */
  123. struct WadFrame *next; /* Next frame up the stack */
  124. struct WadFrame *prev; /* Previous frame down the stack */
  125. /* Stack context information */
  126. long pc; /* Real PC */
  127. long sp; /* Real SP */
  128. long fp; /* Real FP */
  129. char *stack; /* Pointer to where a copy of the stack frame is stored */
  130. int stack_size; /* Stack frame size (fp-sp) */
  131. /* Loading information. Contains information from /proc as well as a pointer to
  132. the executable or shared library in which the PC is located */
  133. WadSegment *segment; /* Memory segment corresponding to PC */
  134. WadObjectFile *object; /* Object file corresponding to PC */
  135. /* Symbol table information for PC */
  136. char *sym_name; /* Symbol name */
  137. int sym_nlen; /* Symbol name length */
  138. char *sym_file; /* Source file (if any) */
  139. unsigned long sym_base; /* Symbol base address */
  140. unsigned long sym_size; /* Symbol size */
  141. int sym_type; /* Symbol type */
  142. int sym_bind; /* Symbol binding */
  143. /* Location information */
  144. char *loc_objfile; /* Object filename */
  145. char *loc_srcfile; /* Source filename */
  146. int loc_line; /* Source line */
  147. /* Debugging information */
  148. int debug_check; /* Checked debugging information */
  149. int debug_nargs; /* Number of arguments */
  150. WadLocal *debug_args; /* Arguments */
  151. WadLocal *debug_lastarg; /* Last argument */
  152. int debug_nlocals; /* Number of locals */
  153. WadLocal *debug_locals; /* Local variables */
  154. WadLocal *debug_lastlocal; /* Last local */
  155. /* Output strings */
  156. char *debug_str; /* Debugging string */
  157. char *debug_srcstr; /* Source string */
  158. int last; /* Last frame flag */
  159. } WadFrame;
  160. extern WadFrame *wad_stack_trace(unsigned long, unsigned long, unsigned long);
  161. extern void wad_stack_debug(WadFrame *f);
  162. extern char *wad_strip_dir(char *);
  163. extern void wad_default_callback(int signo, WadFrame *frame, char *ret);
  164. extern void wad_dump_trace(int fd, int signo, WadFrame *frame, char *ret);
  165. extern void wad_set_callback(void (*h)(int, WadFrame *, char *));
  166. extern char *wad_load_source(char *, int line);
  167. extern void wad_release_source();
  168. extern void wad_release_trace();
  169. extern long wad_steal_arg(WadFrame *f, char *symbol, int argno, int *error);
  170. extern long wad_steal_outarg(WadFrame *f, char *symbol, int argno, int *error);
  171. extern char *wad_arg_string(WadFrame *f);
  172. typedef struct {
  173. char name[128];
  174. long value;
  175. } WadReturnFunc;
  176. extern void wad_set_returns(WadReturnFunc *rf);
  177. extern WadReturnFunc *wad_check_return(const char *name);
  178. extern int wad_search_stab(void *stab, int size, char *stabstr, WadFrame *f);
  179. extern void wad_find_object(WadFrame *f);
  180. extern void wad_find_symbol(WadFrame *f);
  181. extern void wad_find_debug(WadFrame *f);
  182. extern void wad_build_vars(WadFrame *f);
  183. extern char *wad_format_var(WadLocal *l);
  184. extern void wad_debug_make_strings(WadFrame *f);
  185. /* --- Debugging Interface --- */
  186. #define DEBUG_SEGMENT 0x1
  187. #define DEBUG_SYMBOL 0x2
  188. #define DEBUG_STABS 0x4
  189. #define DEBUG_OBJECT 0x8
  190. #define DEBUG_FILE 0x10
  191. #define DEBUG_HOLD 0x20
  192. #define DEBUG_RETURN 0x40
  193. #define DEBUG_SYMBOL_SEARCH 0x80
  194. #define DEBUG_INIT 0x100
  195. #define DEBUG_NOSTACK 0x200
  196. #define DEBUG_ONESHOT 0x400
  197. #define DEBUG_STACK 0x800
  198. #define DEBUG_UNWIND 0x1000
  199. #define DEBUG_SIGNAL 0x2000
  200. #define DEBUG_STRING 0x4000
  201. #define DEBUG_MEMORY 0x8000
  202. extern int wad_debug_mode;
  203. extern int wad_heap_overflow;
  204. #ifdef WAD_LINUX
  205. #define WAD_LITTLE_ENDIAN
  206. #endif
  207. #ifdef WAD_SOLARIS
  208. #define WAD_BIG_ENDIAN
  209. #endif
  210. #ifdef __cplusplus
  211. }
  212. #endif