DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T v

⟦15d04afa9⟧ TextFile

    Length: 2615 (0xa37)
    Types: TextFile
    Names: »vartab.h«

Derivation

└─⟦9ae75bfbd⟧ Bits:30007242 EUUGD3: Starter Kit
    └─⟦3f75c1919⟧ »EurOpenD3/utils/decomp.tar.Z« 
        └─⟦510c4d5ee⟧ 
            └─⟦this⟧ »decomp/vartab.h« 

TextFile

/*
 * Module: vartab.h
 *
 * Author: J. Reuter
 *
 * This file contains data structures and constants used by vartab.c,
 * responsible for all decompiler internal symbol management.
 */

/*
 * types
 *
 * These types attributes are attached to all internal variable
 * information.  The type is used to generate suffexes for generated
 * names, and to infer type conversions.
 *
 * The TYP* constants are defined in ops.h.  Sources files including
 * this file must first include ops.h.
 */
#define T_CHAR TYPB
#define T_SHORT TYPW
#define T_LONG TYPL
#define T_FLOAT TYPF
#define T_DOUBLE TYPD
#define T_FUNC TYPS

/*
 * the following constants must be powers of two (bits) and must be
 * distinct from the above type values
 */

/* type modifiers */
#define T_UNSIGNED 1
#define T_POINTER 16

/*
 * classes
 *
 * These are the storage classes of static information.  They are used
 * to determine variable scoping (residence).
 */
#define C_TEXT 0
#define C_DATA 8
#define C_BSS 16

/*
 * class modifiers
 *
 * C_WRITTEN is set for variables that are written.  It is or'ed with
 * T_UNSIGNED in the flag part of the tables, so the bits used must not
 * conflict.
 * C_STATIC is set for variables that have no global symbol table entry.
 */
#define C_WRITTEN 2
#define C_STATIC 4

/*
 * variable table structures
 *
 * The following structures store variable information in chains kept
 * sorted by 'address'.
 */

/*
 * regtype is used to store register, local, and argument information.
 */
struct regtype {
    int v_address;		/* register number */
    int type;			/* variable type */
    int flag;			/* C_WRITTEN, T_UNSIGNED */
    struct regtype *next;	/* pointer to next regtype entry */
};

/*
 * inttype stores private (static global) variables
 */
struct inttype {
    address v_address;		/* address of variable */
    int type;			/* variable type */
    int flag;			/* C_WRITTEN, T_UNSIGNED */
    int class;			/* variable class and modifiers */
    int symbolnum;		/* symbolnum from symbol table */
    char *value_ptr;		/* internal address of initialized value */
    struct inttype *next;	/* pointer to next entry */
};

/*
 * exttype stores public (external) variables.
 */
struct exttype {
    unsigned int symnum;	/* symbol number from symbol table */
    int type;			/* variable type */
    int offset;			/* operand displacement value */
    int flag;			/* C_WRITTEN, T_UNSIGNED */
    struct exttype *next;	/* pointer to next entry */
};

/*
 * declare the function types
 */
extern char *reg_sym();
extern char *loc_sym();
extern char *arg_sym();
extern char *int_sym();
extern char *ext_sym();