madimp.h

来自「开放源码的编译器open watcom 1.6.0版的源代码」· C头文件 代码 · 共 328 行 · 第 1/2 页

H
328
字号
/****************************************************************************
*
*                            Open Watcom Project
*
*    Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved.
*
*  ========================================================================
*
*    This file contains Original Code and/or Modifications of Original
*    Code as defined in and that are subject to the Sybase Open Watcom
*    Public License version 1.0 (the 'License'). You may not use this file
*    except in compliance with the License. BY USING THIS FILE YOU AGREE TO
*    ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is
*    provided with the Original Code and Modifications, and is also
*    available at www.sybase.com/developer/opensource.
*
*    The Original Code and all software distributed under the License are
*    distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
*    EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM
*    ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF
*    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR
*    NON-INFRINGEMENT. Please see the License for the specific language
*    governing rights and limitations under the License.
*
*  ========================================================================
*
* Description:  WHEN YOU FIGURE OUT WHAT THIS FILE DOES, PLEASE
*               DESCRIBE IT HERE!
*
****************************************************************************/


#ifndef _MADIMP_H_INCLUDED
#define _MADIMP_H_INCLUDED
#include "digpck.h"
#include "madtypes.h"

typedef struct imp_mad_state_data       imp_mad_state_data;

typedef         walk_result (DIGCLIENT MI_TYPE_WALKER)( mad_type_handle, void * );
typedef         walk_result (DIGCLIENT MI_REG_SET_WALKER)( const mad_reg_set_data *, void * );
typedef         walk_result (DIGCLIENT MI_REG_WALKER)( const mad_reg_info *, int has_sublist, void * );
typedef         walk_result (DIGCLIENT MI_MEMREF_WALKER)( address, mad_type_handle, mad_memref_kind write, void * );

#define MAD_MAJOR       1
#define MAD_MINOR_OLD   0
#define MAD_MINOR       1

typedef struct mad_imp_routines {
    unsigned_8          major;
    unsigned_8          minor;
    unsigned_16         sizeof_struct;

    mad_status          (DIGENTRY *MIInit)(void);
    void                (DIGENTRY *MIFini)(void);
    unsigned            (DIGENTRY *MIStateSize)( void );
    void                (DIGENTRY *MIStateInit)( imp_mad_state_data * );
    void                (DIGENTRY *MIStateSet)( imp_mad_state_data * );
    void                (DIGENTRY *MIStateCopy)( const imp_mad_state_data *src, imp_mad_state_data *dst );

    void                (DIGENTRY *MIAddrAdd)( address *, long, mad_address_format );
    int                 (DIGENTRY *MIAddrComp)( const address *, const address *, mad_address_format );
    long                (DIGENTRY *MIAddrDiff)( const address *, const address *, mad_address_format );
    mad_status          (DIGENTRY *MIAddrMap)( addr_ptr *, const addr_ptr *, const addr_ptr *, const mad_registers * );
    mad_status          (DIGENTRY *MIAddrFlat)( const mad_registers * );
    mad_status          (DIGENTRY *MIAddrInterrupt)( const addr_ptr *, unsigned, const mad_registers * );

    walk_result         (DIGENTRY *MITypeWalk)( mad_type_kind, MI_TYPE_WALKER *, void * );
    mad_string          (DIGENTRY *MITypeName)( mad_type_handle );
    unsigned            (DIGENTRY *MITypePreferredRadix)( mad_type_handle );
    mad_type_handle     (DIGENTRY *MITypeForDIPType)( const type_info * );
    void                (DIGENTRY *MITypeInfo)( mad_type_handle, mad_type_info * );
    mad_type_handle     (DIGENTRY *MITypeDefault)( mad_type_kind, mad_address_format, const mad_registers *, const address * );
    mad_status          (DIGENTRY *MITypeConvert)( const mad_type_info *in_t, const void *in_d, const mad_type_info *out_t, void *out_d, addr_seg );
    mad_status          (DIGENTRY *MITypeToString)( unsigned radix, const mad_type_info *, const void *, unsigned *max, char *buff );

    unsigned            (DIGENTRY *MIRegistersSize)( void );
    mad_status          (DIGENTRY *MIRegistersHost)( mad_registers * );
    mad_status          (DIGENTRY *MIRegistersTarget)( mad_registers * );
    walk_result         (DIGENTRY *MIRegSetWalk)( mad_type_kind, MI_REG_SET_WALKER *, void * );
    mad_string          (DIGENTRY *MIRegSetName)( const mad_reg_set_data * );
    unsigned            (DIGENTRY *MIRegSetLevel)( const mad_reg_set_data *, unsigned max, char *buff );
    unsigned            (DIGENTRY *MIRegSetDisplayGrouping)( const mad_reg_set_data * );
    mad_status          (DIGENTRY *MIRegSetDisplayGetPiece)( const mad_reg_set_data *, mad_registers const *, unsigned piece, char **descript, unsigned *max_descript, const mad_reg_info **reg, mad_type_handle *disp_type, unsigned *max_value );
    mad_status          (DIGENTRY *MIRegSetDisplayModify)( const mad_reg_set_data *, const mad_reg_info *reg, const mad_modify_list **possible, unsigned *num_possible );
    const mad_toggle_strings    *(DIGENTRY *MIRegSetDisplayToggleList)( const mad_reg_set_data * );
    unsigned            (DIGENTRY *MIRegSetDisplayToggle)( const mad_reg_set_data *, unsigned on, unsigned off );
    mad_status          (DIGENTRY *MIRegModified)( const mad_reg_set_data *rsd, const mad_reg_info *ri, const mad_registers *old, const mad_registers *curr );
    mad_status          (DIGENTRY *MIRegInspectAddr)( const mad_reg_info *, mad_registers const *, address * );
    walk_result         (DIGENTRY *MIRegWalk)( const mad_reg_set_data *, const mad_reg_info *, MI_REG_WALKER *, void * );
    void                (DIGENTRY *MIRegSpecialGet)( mad_special_reg, const mad_registers *block, addr_ptr * );
    void                (DIGENTRY *MIRegSpecialSet)( mad_special_reg, mad_registers *block, addr_ptr const * );
    unsigned            (DIGENTRY *MIRegSpecialName)( mad_special_reg, mad_registers const *block, mad_address_format, unsigned max, char *buff );
    const mad_reg_info *(DIGENTRY *MIRegFromContextItem)( context_item );
    void                (DIGENTRY *MIRegUpdateStart)( mad_registers *, unsigned flags, unsigned bit_start, unsigned bit_size );
    void                (DIGENTRY *MIRegUpdateEnd)( mad_registers *, unsigned flags, unsigned bit_start, unsigned bit_size );

    mad_status          (DIGENTRY *MICallStackGrowsUp)( void );
    const mad_string    *(DIGENTRY *MICallTypeList)( void );
    mad_status          (DIGENTRY *MICallBuildFrame)( mad_string, address ret, address rtn, mad_registers const *in, mad_registers *out );
    const mad_reg_info  *(DIGENTRY *MICallReturnReg)( mad_string, address );
    const mad_reg_info  **(DIGENTRY *MICallParmRegList)( mad_string, address );
    mad_status          (DIGENTRY *old_MICallUpStackLevel)( address const *start, unsigned rtn_characteristics, long return_disp, mad_registers const *in, address *execution, address *frame, address *stack, mad_registers **out );

    unsigned            (DIGENTRY *MIDisasmDataSize)( void );
    unsigned            (DIGENTRY *MIDisasmNameMax)( void );
    mad_status          (DIGENTRY *MIDisasm)( mad_disasm_data *, address *, int );
    unsigned            (DIGENTRY *MIDisasmFormat)( mad_disasm_data *, mad_disasm_piece, unsigned radix, unsigned max, char *buff );
    unsigned            (DIGENTRY *MIDisasmInsSize)( mad_disasm_data * );
    mad_status          (DIGENTRY *MIDisasmInsUndoable)( mad_disasm_data * );
    mad_disasm_control  (DIGENTRY *MIDisasmControl)( mad_disasm_data *, mad_registers const * );
    mad_status          (DIGENTRY *MIDisasmInspectAddr)( char *start, unsigned len, unsigned radix, mad_registers const *, address * );
    walk_result         (DIGENTRY *MIDisasmMemRefWalk)( mad_disasm_data *, MI_MEMREF_WALKER *, mad_registers const *, void * );
    const mad_toggle_strings    *(DIGENTRY *MIDisasmToggleList)( void );
    unsigned            (DIGENTRY *MIDisasmToggle)( unsigned on, unsigned off );

    unsigned            (DIGENTRY *MITraceSize)( void );
    void                (DIGENTRY *MITraceInit)( mad_trace_data *, const mad_registers * );
    mad_trace_how       (DIGENTRY *MITraceOne)( mad_trace_data *, mad_disasm_data *, mad_trace_kind, mad_registers const *, address * );
    mad_status          (DIGENTRY *MITraceHaveRecursed)( address, mad_registers const * );
    mad_status          (DIGENTRY *MITraceSimulate)( mad_trace_data *, mad_disasm_data *, mad_registers const *in, mad_registers *out );
    void                (DIGENTRY *MITraceFini)( mad_trace_data * );

    mad_status          (DIGENTRY *MIUnexpectedBreak)( mad_registers *, unsigned *max, char *buff );

    mad_status          (DIGENTRY *MIDisasmInsNext)( mad_disasm_data *, const mad_registers *, address * );

    unsigned            (DIGENTRY *MICallUpStackSize)( void );
    mad_status          (DIGENTRY *MICallUpStackInit)( mad_call_up_data *, const mad_registers * );
    mad_status          (DIGENTRY *MICallUpStackLevel)( mad_call_up_data *, const address *start, unsigned rtn_characteristics, long return_disp, mad_registers const *in, address *execution, address *frame, address *stack, mad_registers **out );
} mad_imp_routines;

/*
 *      Control Routines
 */

mad_status      DIGENTRY MIInit(void);
void            DIGENTRY MIFini(void);
unsigned        DIGENTRY MIStateSize( void );
void            DIGENTRY MIStateInit( imp_mad_state_data * );
void            DIGENTRY MIStateSet( imp_mad_state_data * );
void            DIGENTRY MIStateCopy( const imp_mad_state_data *src, imp_mad_state_data *dst );

/*
 *      Address Arithmetic
 */

void            DIGENTRY MIAddrAdd( address *, long, mad_address_format );
int             DIGENTRY MIAddrComp( const address *, const address *, mad_address_format );
long            DIGENTRY MIAddrDiff( const address *, const address *, mad_address_format );
mad_status      DIGENTRY MIAddrMap( addr_ptr *, const addr_ptr *, const addr_ptr *, const mad_registers * );
mad_status      DIGENTRY MIAddrFlat( const mad_registers * );
mad_status      DIGENTRY MIAddrInterrupt( const addr_ptr *, unsigned, const mad_registers * );

/*
 *      Machine Types
 */

walk_result     DIGENTRY MITypeWalk( mad_type_kind, MI_TYPE_WALKER *, void * );

mad_string      DIGENTRY MITypeName( mad_type_handle );
unsigned        DIGENTRY MITypePreferredRadix( mad_type_handle );
mad_type_handle DIGENTRY MITypeForDIPType( const type_info * );
void            DIGENTRY MITypeInfo( mad_type_handle, mad_type_info * );

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?