⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 debuggerstreams.h

📁 一个操作系统源代码 用于嵌入式设备 在Vc++环境下仿真 成功移植到多款处理器上
💻 H
字号:
/*
 * Copyright (c) 1997-2001 Sun Microsystems, Inc. All Rights Reserved.
 * 
 * This software is the confidential and proprietary information of Sun
 * Microsystems, Inc. ("Confidential Information").  You shall not
 * disclose such Confidential Information and shall use it only in
 * accordance with the terms of the license agreement you entered into
 * with Sun.
 * 
 * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE
 * SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
 * PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES
 * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING
 * THIS SOFTWARE OR ITS DERIVATIVES.
 * 
 * 
 */
/*=========================================================================
 * SYSTEM:    KVM
 * SUBSYSTEM: Debugger
 * FILE:      debuggerStreams.h
 * OVERVIEW:  Header file for Java level debugger code that implements a 
 *            subset of the JPDA.  This file defines the input/output
 *            streams that are used to read/write data to/from the user
 *            level Java debugger
 * AUTHOR:    From JPDA sources/modified by Bill Pittore, Sun Labs
 *=======================================================================*/

/*
 * Data structs
 *
 * NOTE! Individual items in the Packet(s) do not need
 * to be adjusted for endianness. Every field *except* for
 * the PacketData.data field is automatically adjusted
 * by the underlying transport. However, there is no way
 * for the transport to know the format of the raw data,
 * so you must handle this. 
 */

#ifndef __STREAM_H__
#define __STREAM_H__

#define FLAGS_None         ((unsigned char)0x0)
#define FLAGS_Reply        ((unsigned char)0x80)

#define REPLY_NoError      ((short)0x0)

typedef struct PacketStream {
    long numPointers;    /* for pointerlist GC */
    struct Packet *packet;
    struct PacketData *segment;
    long left;
    int error;
} PacketStream, PacketInputStream, PacketOutputStream;

typedef PacketInputStream *PACKET_INPUT_STREAM;
typedef PacketInputStream **PACKET_INPUT_STREAM_HANDLE;

typedef PacketOutputStream *PACKET_OUTPUT_STREAM;
typedef PacketOutputStream **PACKET_OUTPUT_STREAM_HANDLE;


typedef struct PacketData {
    long numPointers;    /* for pointerlist GC */
    unsigned char *data;
    struct PacketData *next;
    long length;
    int index;
} PacketData;

typedef struct CmdPacket {
    long numPointers;    /* for pointerlist GC */
    PacketData *data;
    long id;
    unsigned char flags;
    unsigned char cmdSet;
    unsigned char cmd;
} CmdPacket;

typedef struct ReplyPacket {
    long numPointers;    /* for pointerlist GC */
    PacketData *data;
    long id;
    unsigned char flags;
    short errorCode;
} ReplyPacket;

typedef struct Packet {
    union {
        CmdPacket cmd;
        ReplyPacket reply;
    } type;
} Packet;

typedef union Value {
    bool_t z;
    unsigned char    b;
    char    c;
    short   s;
    long     i;
    union {
        unsigned long    j1;
        unsigned long    j2;
    } u;
    OBJECT  l;
} Value;

#if defined(__i386) || defined(x86) || defined(WINDOWS)

#define HOST_TO_JAVA_CHAR(x) (((x & 0xff) << 8) | ((x >> 8) & (0xff)))
#define HOST_TO_JAVA_SHORT(x) (((x & 0xff) << 8) | ((x >> 8) & (0xff)))
#define HOST_TO_JAVA_INT(x)                                             \
                  ((x << 24) |                                          \
                   ((x & 0x0000ff00) << 8) |                            \
                   ((x & 0x00ff0000) >> 8) |                            \
                   (((unsigned int)(x & 0xff000000)) >> 24))
#define HOST_TO_JAVA_LONG(x)                                            \
                  ((x << 56) |                                          \
                   ((x & 0x000000000000ff00) << 40) |                   \
                   ((x & 0x0000000000ff0000) << 24) |                   \
                   ((x & 0x00000000ff000000) << 8) |                    \
                   ((x & 0x000000ff00000000) >> 8) |                    \
                   ((x & 0x0000ff0000000000) >> 24) |                   \
                   ((x & 0x00ff000000000000) >> 40) |                   \
                   (((ulong64)(x & 0xff00000000000000)) >> 56));

#else 

#define HOST_TO_JAVA_CHAR(x)   (x)
#define HOST_TO_JAVA_SHORT(x)  (x)
#define HOST_TO_JAVA_INT(x)    (x)
#define HOST_TO_JAVA_LONG(x)   (x)
#define HOST_TO_JAVA_FLOAT(x)  (x)
#define HOST_TO_JAVA_DOUBLE(x) (x)

#endif /* i386, i86, Windows */
                             
#define JAVA_TO_HOST_CHAR(x)   HOST_TO_JAVA_CHAR(x)  
#define JAVA_TO_HOST_SHORT(x)  HOST_TO_JAVA_SHORT(x) 
#define JAVA_TO_HOST_INT(x)    HOST_TO_JAVA_INT(x)   
#define JAVA_TO_HOST_LONG(x)   HOST_TO_JAVA_LONG(x)  
#define JAVA_TO_HOST_FLOAT(x)  HOST_TO_JAVA_FLOAT(x) 
#define JAVA_TO_HOST_DOUBLE(x) HOST_TO_JAVA_DOUBLE(x)

/*
 * Input stream defines
 */

void inStream_init(PACKET_INPUT_STREAM_HANDLE inH);

long inStream_id(PACKET_INPUT_STREAM_HANDLE inH);
unsigned char inStream_command(PACKET_INPUT_STREAM_HANDLE inH);

unsigned char inStream_readByte(PACKET_INPUT_STREAM_HANDLE inH);
bool_t inStream_readBoolean(PACKET_INPUT_STREAM_HANDLE inH);
char inStream_readChar(PACKET_INPUT_STREAM_HANDLE inH);
short inStream_readShort(PACKET_INPUT_STREAM_HANDLE inH);
int inStream_readInt(PACKET_INPUT_STREAM_HANDLE inH);
long inStream_readLong(PACKET_INPUT_STREAM_HANDLE inH);
void inStream_readLong64(PACKET_INPUT_STREAM_HANDLE inH, 
                         unsigned long *, unsigned long *);
char *inStream_readString(PACKET_INPUT_STREAM_HANDLE inH);
OBJECT inStream_readObject(PACKET_INPUT_STREAM_HANDLE inH);

bool_t inStream_endOfInput(PACKET_INPUT_STREAM_HANDLE inH);
int inStream_error(PACKET_INPUT_STREAM_HANDLE inH);

#define inStream_readClassID(inH)  inStream_readLong(inH)
#define inStream_readObjectID(inH) inStream_readLong(inH)
#define inStream_readThreadID(inH) inStream_readLong(inH)

#define inStream_readClass(inH)  GET_DEBUGGERID_CLASS(inStream_readClassID(inH))

/*
 * Output stream defines
 */

#define INITIAL_SEGMENT_SIZE   256
#define MAX_SEGMENT_SIZE       512
#define SIZEOF_PACKETSTREAM    StructSizeInCells(PacketStream)
#define SIZEOF_PACKETDATA      StructSizeInCells(PacketData)
#define SIZEOF_PACKET          StructSizeInCells(Packet)

PACKET_OUTPUT_STREAM 
outStream_newCommand(unsigned char flags, 
                     unsigned char commandSet, 
                     unsigned char command);
void outStream_initReply(PACKET_OUTPUT_STREAM_HANDLE stream, long id);

#define outStream_id(outH)      unhand(outH)->packet->type.cmd.id
#define outStream_command(outH) unhand(outH)->packet->type.cmd.cmd

#define outStream_writeObjectID(outH, ID) outStream_writeLong(outH, ID)
#define outStream_writeClassID(outH, ID) outStream_writeLong(outH, ID)
#define outStream_writeFrameID(outH, val) outStream_writeLong(outH, (long)val)

#define outStream_writeClass(outH, clazz) \
      outStream_writeClassID(outH, GET_CLASS_DEBUGGERID(clazz))

void outStream_writeBoolean(PACKET_OUTPUT_STREAM_HANDLE outH, bool_t val);
void outStream_writeByte(PACKET_OUTPUT_STREAM_HANDLE outH, unsigned char val);
void outStream_writeChar(PACKET_OUTPUT_STREAM_HANDLE outH, short val);
void outStream_writeShort(PACKET_OUTPUT_STREAM_HANDLE outH, short val);
void outStream_writeInt(PACKET_OUTPUT_STREAM_HANDLE outH, int val);
void outStream_writeLong(PACKET_OUTPUT_STREAM_HANDLE outH, long val);
void outStream_writeObject(PACKET_OUTPUT_STREAM_HANDLE outH, OBJECT val);
void outStream_writeThread(PACKET_OUTPUT_STREAM_HANDLE outH, THREAD val);

void outStream_writeLong64(PACKET_OUTPUT_STREAM_HANDLE outH, unsigned long val);


void outStream_writeLocation(PACKET_OUTPUT_STREAM_HANDLE outH, BYTE tag,
                            long clazzID, long methodID, unsigned long loc);

void outStream_writeString(PACKET_OUTPUT_STREAM_HANDLE outH, 
                          CONST_CHAR_HANDLE string);
void outStream_writeClassName(PACKET_OUTPUT_STREAM_HANDLE outH, CLASS clazz);

int outStream_error(PACKET_OUTPUT_STREAM_HANDLE outH);
void outStream_setError(PACKET_OUTPUT_STREAM_HANDLE outH, int error);

void outStream_sendReply(PACKET_OUTPUT_STREAM_HANDLE outH);
void outStream_sendCommand(PACKET_OUTPUT_STREAM_HANDLE outH);


long uniqueID(void);

#endif /* __STREAM_H__ */

⌨️ 快捷键说明

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