iconv_tm.h revision 7c478bd95313f5f23a4c958a745db2134aa03244
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright (c) 1999 by Sun Microsystems, Inc.
* All rights reserved.
*/
#ifndef _ICONV_TM_H
#define _ICONV_TM_H
#pragma ident "%Z%%M% %I% %E% SMI"
#ifdef __cplusplus
extern "C" {
#endif
#include <inttypes.h>
#include <sys/isa_defs.h>
#if !defined(DEBUG)
#define NDEBUG /* for assert() */
#endif /* DEBUG */
#if defined(DEBUG)
#define ENABLE_TRACE
#endif /* DEBUG */
#define MAXSEQUENCE (128)
#define MAXREGID (256)
#define MAXNAMELENGTH (255)
/*
* ITM Identifier
*/
#define ITM_IDENT_LEN (4)
#define ITM_IDENT_0 (0x49)
#define ITM_IDENT_1 (0x54)
#define ITM_IDENT_2 (0x4d)
#define ITM_IDENT_3 (0x00)
/*
* ITM Platform Specification
*/
#define ITM_SPEC_LEN (4)
#define ITM_SPEC_0 (0)
#define ITM_SPEC_1 (0)
#define ITM_SPEC_2 (0)
#define ITM_SPEC_3_UNSPECIFIED (0)
#define ITM_SPEC_3_32_BIG_ENDIAN (1)
#define ITM_SPEC_3_32_LITTLE_ENDIAN (2)
#define ITM_SPEC_3_64_BIG_ENDIAN (3)
#define ITM_SPEC_3_64_LITTLE_ENDIAN (4)
/*
* ITM Version
*/
#define ITM_VER_LEN (4)
#define ITM_VER_0 (0)
#define ITM_VER_1 (0)
#define ITM_VER_2 (0)
#define ITM_VER_3 (1)
/*
* PADDING
*/
#define ITM_PAD_LEN (4)
/*
*/
typedef ulong_t itm_type_t;
typedef size_t itm_size_t;
typedef long itm_num_t;
typedef union itm_place_union {
struct {
#if !defined(_LP64) && !defined(_LITTLE_ENDIAN)
#endif
#if !defined(_LP64) && defined(_LITTLE_ENDIAN)
#endif
char itm_c[8];
} itm_place_t;
typedef struct {
#if !defined(_LP64) && !defined(_LITTLE_ENDIAN)
#endif
#if !defined(_LP64) && defined(_LITTLE_ENDIAN)
#endif
} itm_data_t;
/*
* Generic place table information
*/
typedef struct {
#if !defined(_LP64) && !defined(_LITTLE_ENDIAN)
#endif
#if !defined(_LP64) && defined(_LITTLE_ENDIAN)
#endif
#if !defined(_LP64) && !defined(_LITTLE_ENDIAN)
#endif
#if !defined(_LP64) && defined(_LITTLE_ENDIAN)
#endif
/*
* Generic place table section
*/
typedef struct {
#if !defined(_LP64) && !defined(_LITTLE_ENDIAN)
#endif
#if !defined(_LP64) && defined(_LITTLE_ENDIAN)
#endif
#if !defined(_LP64) && !defined(_LITTLE_ENDIAN)
#endif
#if !defined(_LP64) && defined(_LITTLE_ENDIAN)
#endif
/*
* Generic table header
*/
#define ITM_TBL_MASK (0x000000ffUL)
#define ITM_TBL_NONE (0x00000000UL)
#define ITM_TBL_ITM (0x00000001UL)
#define ITM_TBL_DIREC (0x00000002UL)
#define ITM_TBL_COND (0x00000003UL)
#define ITM_TBL_MAP (0x00000004UL)
#define ITM_TBL_OP (0x00000005UL)
#define ITM_TBL_RANGE (0x00000006UL)
#define ITM_TBL_ESCAPESEQ (0x00000007UL)
typedef struct {
#if !defined(_LP64) && !defined(_LITTLE_ENDIAN)
#endif
#if !defined(_LP64) && defined(_LITTLE_ENDIAN)
#endif
#if !defined(_LP64) && !defined(_LITTLE_ENDIAN)
#endif
#if !defined(_LP64) && defined(_LITTLE_ENDIAN)
#endif
#if !defined(_LP64) && !defined(_LITTLE_ENDIAN)
#endif
#if !defined(_LP64) && defined(_LITTLE_ENDIAN)
#endif
/*
* Iconv Code Set Translation Module (ITM) header
*/
typedef struct {
unsigned char ident[ITM_IDENT_LEN]; /* identifier */
#if !defined(_LP64) && !defined(_LITTLE_ENDIAN)
#endif
#if !defined(_LP64) && defined(_LITTLE_ENDIAN)
#endif
#if !defined(_LP64) && !defined(_LITTLE_ENDIAN)
#endif
#if !defined(_LP64) && defined(_LITTLE_ENDIAN)
#endif
} itm_hdr_t;
/*
* ITM Info header
*/
typedef struct {
/*
* Direction
*/
typedef enum {
ITM_ACTION_NONE, /* not used */
ITM_ACTION_DIRECTION, /* direction */
ITM_ACTION_MAP, /* map */
ITM_ACTION_OPERATION /* operation */
typedef struct {
} itm_direc_t;
/*
* Condition
*/
typedef enum {
ITM_COND_NONE = 0, /* not used */
typedef struct {
union {
} operand;
} itm_cond_t;
typedef struct {
#if !defined(_LP64) && !defined(_LITTLE_ENDIAN)
#endif
#if !defined(_LP64) && defined(_LITTLE_ENDIAN)
#endif
typedef struct {
#if !defined(_LP64) && !defined(_LITTLE_ENDIAN)
#endif
#if !defined(_LP64) && defined(_LITTLE_ENDIAN)
#endif
#if !defined(_LP64) && !defined(_LITTLE_ENDIAN)
#endif
#if !defined(_LP64) && defined(_LITTLE_ENDIAN)
#endif
/*
* Map table: octet-sequence to octet-sequence: index
*/
typedef struct {
#if !defined(_LP64) && !defined(_LITTLE_ENDIAN)
#endif
#if !defined(_LP64) && defined(_LITTLE_ENDIAN)
#endif
#if !defined(_LP64) && !defined(_LITTLE_ENDIAN)
#endif
#if !defined(_LP64) && defined(_LITTLE_ENDIAN)
#endif
#if !defined(_LP64) && !defined(_LITTLE_ENDIAN)
#endif
/*
* -1:path through
* 0:with default value
* 1:with error table
* 2:without error table
*/
#if !defined(_LP64) && defined(_LITTLE_ENDIAN)
#endif
#if !defined(_LP64) && !defined(_LITTLE_ENDIAN)
#endif
#if !defined(_LP64) && defined(_LITTLE_ENDIAN)
#endif
/*
* Map table: octet-sequence to octet-sequence: lookup
*/
typedef struct {
#if !defined(_LP64) && !defined(_LITTLE_ENDIAN)
#endif
#if !defined(_LP64) && defined(_LITTLE_ENDIAN)
#endif
#if !defined(_LP64) && !defined(_LITTLE_ENDIAN)
#endif
#if !defined(_LP64) && defined(_LITTLE_ENDIAN)
#endif
#if !defined(_LP64) && !defined(_LITTLE_ENDIAN)
#endif
/*
* -1:path through
* 0:with default value
* 1:with error table
* 2:without error table
*/
#if !defined(_LP64) && defined(_LITTLE_ENDIAN)
#endif
#if !defined(_LP64) && !defined(_LITTLE_ENDIAN)
#endif
#if !defined(_LP64) && defined(_LITTLE_ENDIAN)
#endif
/*
* Map table: octet-sequence to octet-sequence: hash
*/
typedef struct {
#if !defined(_LP64) && !defined(_LITTLE_ENDIAN)
#endif
#if !defined(_LP64) && defined(_LITTLE_ENDIAN)
#endif
#if !defined(_LP64) && !defined(_LITTLE_ENDIAN)
#endif
#if !defined(_LP64) && defined(_LITTLE_ENDIAN)
#endif
#if !defined(_LP64) && !defined(_LITTLE_ENDIAN)
#endif
#if !defined(_LP64) && defined(_LITTLE_ENDIAN)
#endif
#if !defined(_LP64) && !defined(_LITTLE_ENDIAN)
#endif
#if !defined(_LP64) && defined(_LITTLE_ENDIAN)
#endif
#if !defined(_LP64) && !defined(_LITTLE_ENDIAN)
#endif
#if !defined(_LP64) && defined(_LITTLE_ENDIAN)
#endif
#if !defined(_LP64) && !defined(_LITTLE_ENDIAN)
#endif
#if !defined(_LP64) && defined(_LITTLE_ENDIAN)
#endif
#if !defined(_LP64) && !defined(_LITTLE_ENDIAN)
#endif
/*
* -1:path through
* 0:with default value
* 1:with error table
* 2:without error table
*/
#if !defined(_LP64) && defined(_LITTLE_ENDIAN)
#endif
#if !defined(_LP64) && !defined(_LITTLE_ENDIAN)
#endif
#if !defined(_LP64) && defined(_LITTLE_ENDIAN)
#endif
/*
* Map table: octet-sequence to octet-sequence: dense encoding
*/
typedef struct {
#if !defined(_LP64) && !defined(_LITTLE_ENDIAN)
#endif
#if !defined(_LP64) && defined(_LITTLE_ENDIAN)
#endif
#if !defined(_LP64) && !defined(_LITTLE_ENDIAN)
#endif
#if !defined(_LP64) && defined(_LITTLE_ENDIAN)
#endif
#if !defined(_LP64) && !defined(_LITTLE_ENDIAN)
#endif
/*
* -1:path through
* 0:with default value
* 1:with error table
* 2:without error table
*/
#if !defined(_LP64) && defined(_LITTLE_ENDIAN)
#endif
#if !defined(_LP64) && !defined(_LITTLE_ENDIAN)
#endif
#if !defined(_LP64) && defined(_LITTLE_ENDIAN)
#endif
/*
* Operation
*/
typedef enum { /* Operation Type */
ITM_OP_NONE, /* not used */
ITM_OP_ERROR, /* error */
ITM_OP_ERROR_D, /* error */
ITM_OP_OUT, /* output */
ITM_OP_OUT_D, /* output */
ITM_OP_OUT_S, /* output */
ITM_OP_OUT_R, /* output */
ITM_OP_OUT_INVD, /* output */
ITM_OP_DISCARD, /* discard */
ITM_OP_DISCARD_D, /* discard */
ITM_OP_EXPR, /* expression */
ITM_OP_IF, /* if */
ITM_OP_IF_ELSE, /* if_else */
ITM_OP_DIRECTION, /* switch direction */
ITM_OP_MAP, /* use map */
ITM_OP_OPERATION, /* invoke operation */
ITM_OP_INIT, /* invoke init operation */
ITM_OP_RESET, /* invoke reset operation */
ITM_OP_BREAK, /* break */
ITM_OP_RETURN, /* return */
ITM_OP_PRINTCHR, /* print out argument as character */
ITM_OP_PRINTHD, /* print out argument as hexadecimal */
ITM_OP_PRINTINT /* print out argument as integer */
typedef struct {
union {
struct {
#if !defined(_LP64) && !defined(_LITTLE_ENDIAN)
#endif
#if !defined(_LP64) && defined(_LITTLE_ENDIAN)
#endif
} itm_op_num;
} data;
} itm_op_t;
/*
* Expression
*/
#define ITM_EXPR_BIN(type) \
ITM_EXPR_PROTO(type, E, E), \
ITM_EXPR_PROTO(type, E, D), \
ITM_EXPR_PROTO(type, E, R), \
ITM_EXPR_PROTO(type, D, E), \
ITM_EXPR_PROTO(type, D, D), \
ITM_EXPR_PROTO(type, D, R), \
ITM_EXPR_PROTO(type, R, E), \
ITM_EXPR_PROTO(type, R, D), \
ITM_EXPR_PROTO(type, R, R), \
#define ITM_EXPR_PLUS ITM_EXPR_PLUS_E_E
#define ITM_EXPR_MINUS ITM_EXPR_MINUS_E_E
#define ITM_EXPR_MUL ITM_EXPR_MUL_E_E
#define ITM_EXPR_DIV ITM_EXPR_DIV_E_E
#define ITM_EXPR_MOD ITM_EXPR_MOD_E_E
#define ITM_EXPR_SHIFT_L ITM_EXPR_SHIFT_L_E_E
#define ITM_EXPR_SHIFT_R ITM_EXPR_SHIFT_R_E_E
#define ITM_EXPR_OR ITM_EXPR_OR_E_E
#define ITM_EXPR_XOR ITM_EXPR_XOR_E_E
#define ITM_EXPR_AND ITM_EXPR_AND_E_E
#define ITM_EXPR_EQ ITM_EXPR_EQ_E_E
#define ITM_EXPR_NE ITM_EXPR_NE_E_E
#define ITM_EXPR_GT ITM_EXPR_GT_E_E
#define ITM_EXPR_GE ITM_EXPR_GE_E_E
#define ITM_EXPR_LT ITM_EXPR_LT_E_E
#define ITM_EXPR_LE ITM_EXPR_LE_E_E
typedef enum { /* Expression Type */
ITM_EXPR_NONE, /* not used */
ITM_EXPR_NOP, /* not used */
ITM_EXPR_NAME, /* not used */
ITM_EXPR_INT, /* integer */
ITM_EXPR_SEQ, /* byte sequence */
ITM_EXPR_REG, /* register */
ITM_EXPR_IN_VECTOR, /* in[expr] */
ITM_EXPR_IN_VECTOR_D, /* in[DECIMAL] */
ITM_EXPR_OUT, /* out */
ITM_EXPR_TRUE, /* true */
ITM_EXPR_FALSE, /* false */
ITM_EXPR_IN, /* input data */
ITM_EXPR_UMINUS, /* unary minus */
ITM_EXPR_NOT, /* !A */
ITM_EXPR_NEG, /* ~A */
ITM_EXPR_LOR, /* A || B */
ITM_EXPR_LAND, /* A && B */
ITM_EXPR_ASSIGN, /* A = B */
ITM_EXPR_OUT_ASSIGN, /* out = A */
ITM_EXPR_IN_EQ, /* in == A */
ITM_EXPR_IF, /* if */
ITM_EXPR_ELSE /* else */
#define ITM_OPERAND_EXPR (0)
#define ITM_OPERAND_PLACE (1)
#define ITM_OPERAND_VALUE (2)
#define ITM_OPERAND_REGISTER (3)
typedef struct {
union {
struct {
#if !defined(_LP64) && !defined(_LITTLE_ENDIAN)
#endif
#if !defined(_LP64) && defined(_LITTLE_ENDIAN)
#endif
} itm_ex_num;
} data;
} itm_expr_t;
#ifdef __cplusplus
}
#endif
#endif /* !_ICONV_TM_H */