/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
- /* -----------------------------------------------------------------------------
- * wad.h
- *
- * WAD header file (obviously)
- *
- * Author(s) : David Beazley (beazley@cs.uchicago.edu)
- *
- * Copyright (C) 2001. University of Chicago. All rights reserved.
- *
- * $Header$
- * ----------------------------------------------------------------------------- */
- #include <stdio.h>
- #include <unistd.h>
- #include <signal.h>
- #include <stdlib.h>
- #include <string.h>
- #include <fcntl.h>
- #include <limits.h>
- #include <sys/mman.h>
- #include <ctype.h>
- #include <sys/ucontext.h>
- #ifdef WAD_SOLARIS
- #include <procfs.h>
- #endif
- #ifdef __cplusplus
- extern "C" {
- #endif
- /* Core datatypes */
- typedef int int32;
- typedef unsigned uint32;
- typedef short int16;
- typedef unsigned short uint16;
- typedef signed char int8;
- typedef unsigned char uint8;
- #ifndef MAX_PATH
- #define MAX_PATH 1024
- #endif
- #define WAD_SRC_WINDOW 2
- /* --- Low level memory management functions --- */
- extern int wad_memory_init();
- extern void *wad_malloc(int nbytes);
- extern char *wad_strdup(const char *c);
- extern void wad_memory_debug();
- extern void wad_memcpy(void *t, const void *s, unsigned len);
- /* --- Low level string handling --- */
- extern char *wad_string_lookup(char *s);
- extern void wad_string_debug();
- extern char *wad_strcpy(char *t, const char *s);
- extern char *wad_strcat(char *t, const char *s);
- extern int wad_strlen(const char *s);
- /* --- I/O, Debugging --- */
- extern void wad_printf(const char *fmt, ...);
- extern char *wad_format_hex(unsigned long u, int leading);
- extern char *wad_format_unsigned(unsigned long u, int width);
- extern char *wad_format_signed(long s, int width);
- /* --- Memory segments --- */
- typedef struct WadSegment {
- char *base; /* Base address for symbol lookup */
- char *vaddr; /* Virtual address start */
- unsigned long size; /* Size of the segment (bytes) */
- unsigned long offset; /* Offset into mapped object */
- char *mapname; /* Filename mapped to this region */
- char *mappath; /* Full path to mapname */
- struct WadSegment *next; /* Next segment */
- } WadSegment;
- extern int wad_segment_read();
- extern WadSegment *wad_segment_find(void *vaddr);
- extern int wad_segment_valid(void *vaddr);
- /* --- Object files --- */
- typedef struct WadObjectFile {
- void *ptr; /* Pointer to data */
- int len; /* Length of data */
- int type; /* Type of the object file */
- char *path; /* Path name of this object */
- struct WadObjectFile *next;
- } WadObjectFile;
- extern void wad_object_reset();
- extern WadObjectFile *wad_object_load(const char *path);
- extern int wad_file_check(void *);
- #define SYM_LOCAL 1
- #define SYM_GLOBAL 2
- /* Signal handling */
- extern void wad_init();
- extern void wad_signalhandler(int, siginfo_t *, void *);
- extern void wad_signal_init();
- extern void wad_signal_clear();
- extern void wad_set_return(const char *name, long value);
- extern void wad_set_return_value(long value);
- extern void wad_set_return_func(void (*f)(void));
- typedef struct WadLocal {
- char *name; /* Name of the local */
- void *ptr; /* Pointer to the actual data (if known) */
- int size; /* Size of the data (if known) */
- int type; /* Data type */
- /* Debugging information */
- int loc; /* Location: register or stack */
- int stack; /* location on the stack */
- int reg; /* Register number */
- int line; /* Line number where defined */
- struct WadLocal *next;
- } WadLocal;
- #define PARM_REGISTER 1
- #define PARM_STACK 2
- /* Type codes for local variables */
- #define WAD_TYPE_UNKNOWN 0
- #define WAD_TYPE_INT32 1
- #define WAD_TYPE_INT16 2
- #define WAD_TYPE_INT8 3
- #define WAD_TYPE_INT64 4
- #define WAD_TYPE_UINT32 5
- #define WAD_TYPE_UINT16 6
- #define WAD_TYPE_UINT8 7
- #define WAD_TYPE_UINT64 8
- #define WAD_TYPE_FLOAT 9
- #define WAD_TYPE_DOUBLE 10
- #define WAD_TYPE_POINTER 11
- #define WAD_TYPE_CHAR 12
- extern long wad_local_as_long(WadLocal *loc);
- extern double wad_local_as_double(WadLocal *loc);
- /* Data structure containing information about each stack frame */
- typedef struct WadFrame {
- long frameno; /* Frame number */
- struct WadFrame *next; /* Next frame up the stack */
- struct WadFrame *prev; /* Previous frame down the stack */
- /* Stack context information */
- long pc; /* Real PC */
- long sp; /* Real SP */
- long fp; /* Real FP */
- char *stack; /* Pointer to where a copy of the stack frame is stored */
- int stack_size; /* Stack frame size (fp-sp) */
- /* Loading information. Contains information from /proc as well as a pointer to
- the executable or shared library in which the PC is located */
- WadSegment *segment; /* Memory segment corresponding to PC */
- WadObjectFile *object; /* Object file corresponding to PC */
- /* Symbol table information for PC */
- char *sym_name; /* Symbol name */
- int sym_nlen; /* Symbol name length */
- char *sym_file; /* Source file (if any) */
- unsigned long sym_base; /* Symbol base address */
- unsigned long sym_size; /* Symbol size */
- int sym_type; /* Symbol type */
- int sym_bind; /* Symbol binding */
- /* Location information */
- char *loc_objfile; /* Object filename */
- char *loc_srcfile; /* Source filename */
- int loc_line; /* Source line */
- /* Debugging information */
- int debug_check; /* Checked debugging information */
- int debug_nargs; /* Number of arguments */
- WadLocal *debug_args; /* Arguments */
- WadLocal *debug_lastarg; /* Last argument */
- int debug_nlocals; /* Number of locals */
- WadLocal *debug_locals; /* Local variables */
- WadLocal *debug_lastlocal; /* Last local */
- /* Output strings */
- char *debug_str; /* Debugging string */
- char *debug_srcstr; /* Source string */
- int last; /* Last frame flag */
- } WadFrame;
- extern WadFrame *wad_stack_trace(unsigned long, unsigned long, unsigned long);
- extern void wad_stack_debug(WadFrame *f);
- extern char *wad_strip_dir(char *);
- extern void wad_default_callback(int signo, WadFrame *frame, char *ret);
- extern void wad_dump_trace(int fd, int signo, WadFrame *frame, char *ret);
- extern void wad_set_callback(void (*h)(int, WadFrame *, char *));
- extern char *wad_load_source(char *, int line);
- extern void wad_release_source();
- extern void wad_release_trace();
- extern long wad_steal_arg(WadFrame *f, char *symbol, int argno, int *error);
- extern long wad_steal_outarg(WadFrame *f, char *symbol, int argno, int *error);
- extern char *wad_arg_string(WadFrame *f);
- typedef struct {
- char name[128];
- long value;
- } WadReturnFunc;
- extern void wad_set_returns(WadReturnFunc *rf);
- extern WadReturnFunc *wad_check_return(const char *name);
- extern int wad_search_stab(void *stab, int size, char *stabstr, WadFrame *f);
- extern void wad_find_object(WadFrame *f);
- extern void wad_find_symbol(WadFrame *f);
- extern void wad_find_debug(WadFrame *f);
- extern void wad_build_vars(WadFrame *f);
- extern char *wad_format_var(WadLocal *l);
- extern void wad_debug_make_strings(WadFrame *f);
- /* --- Debugging Interface --- */
- #define DEBUG_SEGMENT 0x1
- #define DEBUG_SYMBOL 0x2
- #define DEBUG_STABS 0x4
- #define DEBUG_OBJECT 0x8
- #define DEBUG_FILE 0x10
- #define DEBUG_HOLD 0x20
- #define DEBUG_RETURN 0x40
- #define DEBUG_SYMBOL_SEARCH 0x80
- #define DEBUG_INIT 0x100
- #define DEBUG_NOSTACK 0x200
- #define DEBUG_ONESHOT 0x400
- #define DEBUG_STACK 0x800
- #define DEBUG_UNWIND 0x1000
- #define DEBUG_SIGNAL 0x2000
- #define DEBUG_STRING 0x4000
- #define DEBUG_MEMORY 0x8000
- extern int wad_debug_mode;
- extern int wad_heap_overflow;
- #ifdef WAD_LINUX
- #define WAD_LITTLE_ENDIAN
- #endif
- #ifdef WAD_SOLARIS
- #define WAD_BIG_ENDIAN
- #endif
- #ifdef __cplusplus
- }
- #endif