sourcepawn/compiler/amxdbg.h
changeset 1952 b7aa2b626807
child 4149 096fdef5a186
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/sourcepawn/compiler/amxdbg.h	Sun Mar 30 07:00:22 2008 +0000
     1.3 @@ -0,0 +1,173 @@
     1.4 +/*  Abstract Machine for the Pawn compiler, debugger support
     1.5 + *
     1.6 + *  This file contains extra definitions that are convenient for debugger
     1.7 + *  support.
     1.8 + *
     1.9 + *  Copyright (c) ITB CompuPhase, 2005
    1.10 + *
    1.11 + *  This software is provided "as-is", without any express or implied warranty.
    1.12 + *  In no event will the authors be held liable for any damages arising from
    1.13 + *  the use of this software.
    1.14 + *
    1.15 + *  Permission is granted to anyone to use this software for any purpose,
    1.16 + *  including commercial applications, and to alter it and redistribute it
    1.17 + *  freely, subject to the following restrictions:
    1.18 + *
    1.19 + *  1.  The origin of this software must not be misrepresented; you must not
    1.20 + *      claim that you wrote the original software. If you use this software in
    1.21 + *      a product, an acknowledgment in the product documentation would be
    1.22 + *      appreciated but is not required.
    1.23 + *  2.  Altered source versions must be plainly marked as such, and must not be
    1.24 + *      misrepresented as being the original software.
    1.25 + *  3.  This notice may not be removed or altered from any source distribution.
    1.26 + *
    1.27 + *  Version: $Id$
    1.28 + */
    1.29 +
    1.30 +#ifndef AMXDBG_H_INCLUDED
    1.31 +#define AMXDBG_H_INCLUDED
    1.32 +
    1.33 +#ifndef AMX_H_INCLUDED
    1.34 +  #include "amx.h"
    1.35 +#endif
    1.36 +
    1.37 +#ifdef  __cplusplus
    1.38 +extern  "C" {
    1.39 +#endif
    1.40 +
    1.41 +/* Some compilers do not support the #pragma align, which should be fine. Some
    1.42 + * compilers give a warning on unknown #pragmas, which is not so fine...
    1.43 + */
    1.44 +#if defined SN_TARGET_PS2 || defined __GNUC__
    1.45 +  #define AMX_NO_ALIGN
    1.46 +#endif
    1.47 +
    1.48 +#if defined __GNUC__
    1.49 +  #define PACKED        __attribute__((packed))
    1.50 +#else
    1.51 +  #define PACKED
    1.52 +#endif
    1.53 +
    1.54 +#if !defined AMX_NO_ALIGN
    1.55 +  #if defined LINUX || defined __FreeBSD__
    1.56 +    #pragma pack(1)         /* structures must be packed (byte-aligned) */
    1.57 +  #elif defined MACOS && defined __MWERKS__
    1.58 +	#pragma options align=mac68k
    1.59 +  #else
    1.60 +    #pragma pack(push)
    1.61 +    #pragma pack(1)         /* structures must be packed (byte-aligned) */
    1.62 +    #if defined __TURBOC__
    1.63 +      #pragma option -a-    /* "pack" pragma for older Borland compilers */
    1.64 +    #endif
    1.65 +  #endif
    1.66 +#endif
    1.67 +
    1.68 +typedef struct tagAMX_DBG_HDR {
    1.69 +  int32_t size          PACKED; /* size of the debug information chunk */
    1.70 +  uint16_t magic        PACKED; /* signature, must be 0xf1ef */
    1.71 +  char    file_version;         /* file format version */
    1.72 +  char    amx_version;          /* required version of the AMX */
    1.73 +  int16_t flags         PACKED; /* currently unused */
    1.74 +  int16_t files         PACKED; /* number of entries in the "file" table */
    1.75 +  int16_t lines         PACKED; /* number of entries in the "line" table */
    1.76 +  int16_t symbols       PACKED; /* number of entries in the "symbol" table */
    1.77 +  int16_t tags          PACKED; /* number of entries in the "tag" table */
    1.78 +  int16_t automatons    PACKED; /* number of entries in the "automaton" table */
    1.79 +  int16_t states        PACKED; /* number of entries in the "state" table */
    1.80 +} PACKED AMX_DBG_HDR;
    1.81 +#define AMX_DBG_MAGIC   0xf1ef
    1.82 +
    1.83 +typedef struct tagAMX_DBG_FILE {
    1.84 +  ucell   address       PACKED; /* address in the code segment where generated code (for this file) starts */
    1.85 +  const char name[1];           /* ASCII string, zero-terminated */
    1.86 +} PACKED AMX_DBG_FILE;
    1.87 +
    1.88 +typedef struct tagAMX_DBG_LINE {
    1.89 +  ucell   address       PACKED; /* address in the code segment where generated code (for this line) starts */
    1.90 +  int32_t line          PACKED; /* line number */
    1.91 +} PACKED AMX_DBG_LINE;
    1.92 +
    1.93 +typedef struct tagAMX_DBG_SYMBOL {
    1.94 +  ucell   address       PACKED; /* address in the data segment or relative to the frame */
    1.95 +  int16_t tag           PACKED; /* tag for the symbol */
    1.96 +  ucell   codestart     PACKED; /* address in the code segment from which this symbol is valid (in scope) */
    1.97 +  ucell   codeend       PACKED; /* address in the code segment until which this symbol is valid (in scope) */
    1.98 +  char    ident;                /* kind of symbol (function/variable) */
    1.99 +  char    vclass;               /* class of symbol (global/local) */
   1.100 +  int16_t dim           PACKED; /* number of dimensions */
   1.101 +  const char name[1];           /* ASCII string, zero-terminated */
   1.102 +} PACKED AMX_DBG_SYMBOL;
   1.103 +
   1.104 +typedef struct tagAMX_DBG_SYMDIM {
   1.105 +  int16_t tag           PACKED; /* tag for the array dimension */
   1.106 +  ucell   size          PACKED; /* size of the array dimension */
   1.107 +} PACKED AMX_DBG_SYMDIM;
   1.108 +
   1.109 +typedef struct tagAMX_DBG_TAG {
   1.110 +  int16_t tag           PACKED; /* tag id */
   1.111 +  const char name[1];           /* ASCII string, zero-terminated */
   1.112 +} PACKED AMX_DBG_TAG;
   1.113 +
   1.114 +typedef struct tagAMX_DBG_MACHINE {
   1.115 +  int16_t automaton     PACKED; /* automaton id */
   1.116 +  ucell address         PACKED; /* address of state variable */
   1.117 +  const char name[1];           /* ASCII string, zero-terminated */
   1.118 +} PACKED AMX_DBG_MACHINE;
   1.119 +
   1.120 +typedef struct tagAMX_DBG_STATE {
   1.121 +  int16_t state         PACKED; /* state id */
   1.122 +  int16_t automaton     PACKED; /* automaton id */
   1.123 +  const char name[1];           /* ASCII string, zero-terminated */
   1.124 +} PACKED AMX_DBG_STATE;
   1.125 +
   1.126 +typedef struct tagAMX_DBG {
   1.127 +  AMX_DBG_HDR     _FAR *hdr         PACKED; /* points to the AMX_DBG header */
   1.128 +  AMX_DBG_FILE    _FAR **filetbl    PACKED;
   1.129 +  AMX_DBG_LINE    _FAR *linetbl     PACKED;
   1.130 +  AMX_DBG_SYMBOL  _FAR **symboltbl  PACKED;
   1.131 +  AMX_DBG_TAG     _FAR **tagtbl     PACKED;
   1.132 +  AMX_DBG_MACHINE _FAR **automatontbl PACKED;
   1.133 +  AMX_DBG_STATE   _FAR **statetbl   PACKED;
   1.134 +} PACKED AMX_DBG;
   1.135 +
   1.136 +#if !defined iVARIABLE
   1.137 +  #define iVARIABLE  1  /* cell that has an address and that can be fetched directly (lvalue) */
   1.138 +  #define iREFERENCE 2  /* iVARIABLE, but must be dereferenced */
   1.139 +  #define iARRAY     3
   1.140 +  #define iREFARRAY  4  /* an array passed by reference (i.e. a pointer) */
   1.141 +  #define iFUNCTN    9
   1.142 +#endif
   1.143 +
   1.144 +
   1.145 +int AMXAPI dbg_FreeInfo(AMX_DBG *amxdbg);
   1.146 +int AMXAPI dbg_LoadInfo(AMX_DBG *amxdbg, void *dbg_addr);
   1.147 +
   1.148 +int AMXAPI dbg_LookupFile(AMX_DBG *amxdbg, ucell address, const char **filename);
   1.149 +int AMXAPI dbg_LookupFunction(AMX_DBG *amxdbg, ucell address, const char **funcname);
   1.150 +int AMXAPI dbg_LookupLine(AMX_DBG *amxdbg, ucell address, long *line);
   1.151 +
   1.152 +int AMXAPI dbg_GetFunctionAddress(AMX_DBG *amxdbg, const char *funcname, const char *filename, ucell *address);
   1.153 +int AMXAPI dbg_GetLineAddress(AMX_DBG *amxdbg, long line, const char *filename, ucell *address);
   1.154 +int AMXAPI dbg_GetAutomatonName(AMX_DBG *amxdbg, int automaton, const char **name);
   1.155 +int AMXAPI dbg_GetStateName(AMX_DBG *amxdbg, int state, const char **name);
   1.156 +int AMXAPI dbg_GetTagName(AMX_DBG *amxdbg, int tag, const char **name);
   1.157 +int AMXAPI dbg_GetVariable(AMX_DBG *amxdbg, const char *symname, ucell scopeaddr, const AMX_DBG_SYMBOL **sym);
   1.158 +int AMXAPI dbg_GetArrayDim(AMX_DBG *amxdbg, const AMX_DBG_SYMBOL *sym, const AMX_DBG_SYMDIM **symdim);
   1.159 +
   1.160 +
   1.161 +#if !defined AMX_NO_ALIGN
   1.162 +  #if defined LINUX || defined __FreeBSD__
   1.163 +    #pragma pack()    /* reset default packing */
   1.164 +  #elif defined MACOS && defined __MWERKS__
   1.165 +    #pragma options align=reset
   1.166 +  #else
   1.167 +    #pragma pack(pop) /* reset previous packing */
   1.168 +  #endif
   1.169 +#endif
   1.170 +
   1.171 +#ifdef  __cplusplus
   1.172 +}
   1.173 +#endif
   1.174 +
   1.175 +#endif /* AMXDBG_H_INCLUDED */
   1.176 +