]> git.saurik.com Git - apple/xnu.git/blobdiff - bsd/i386/dis_tables.h
xnu-1228.tar.gz
[apple/xnu.git] / bsd / i386 / dis_tables.h
diff --git a/bsd/i386/dis_tables.h b/bsd/i386/dis_tables.h
new file mode 100644 (file)
index 0000000..548b22b
--- /dev/null
@@ -0,0 +1,116 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License (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
+ * or http://www.opensolaris.org/os/licensing.
+ * 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 2006 Sun Microsystems, Inc.  All rights reserved.
+ * Use is subject to license terms.
+ */
+
+/*     Copyright (c) 1988 AT&T */
+/*       All Rights Reserved   */
+
+
+#ifndef _DIS_TABLES_H
+#define        _DIS_TABLES_H
+
+/* #pragma ident       "@(#)dis_tables.h       1.8     06/05/30 SMI" */
+
+/*
+ * Constants and prototypes for the IA32 disassembler backend.  See dis_tables.c
+ * for usage information and documentation.
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if !defined(__APPLE__)
+#include <sys/types.h>
+#include <sys/inttypes.h>
+#include <sys/param.h>
+#else
+#include <sys/types.h>
+#include <stdint.h>
+#include <sys/param.h>
+#endif /* __APPLE__ */
+
+/*
+ * values for cpu mode
+ */
+#define        SIZE16  1
+#define        SIZE32  2
+#define        SIZE64  3
+
+#define        OPLEN   256
+#define        PFIXLEN   8
+#define        NCPS    12      /* number of chars per symbol   */
+
+/*
+ * data structures that must be provided to dtrace_dis86()
+ */
+typedef struct d86opnd {
+       char            d86_opnd[OPLEN];        /* symbolic rep of operand */
+       char            d86_prefix[PFIXLEN];    /* any prefix string or "" */
+       uint_t          d86_mode;               /* mode for immediate */
+       uint_t          d86_value_size;         /* size in bytes of d86_value */
+       uint64_t        d86_value;              /* immediate value of opnd */
+} d86opnd_t;
+
+typedef struct dis86 {
+       uint_t          d86_mode;
+       uint_t          d86_error;
+       uint_t          d86_len;                /* instruction length */
+       int             d86_rmindex;            /* index of modrm byte or -1 */
+       uint_t          d86_memsize;            /* size of memory referenced */
+       char            d86_bytes[16];          /* bytes of instruction */
+       char            d86_mnem[OPLEN];
+       uint_t          d86_numopnds;
+       uint_t          d86_rex_prefix;         /* value of REX prefix if !0 */
+       char            *d86_seg_prefix;        /* segment prefix, if any */
+       uint_t          d86_opnd_size;
+       uint_t          d86_addr_size;
+       uint_t          d86_got_modrm;
+       struct d86opnd  d86_opnd[3];            /* up to 3 operands */
+       int             (*d86_check_func)(void *);
+       int             (*d86_get_byte)(void *);
+#ifdef DIS_TEXT
+       int             (*d86_sym_lookup)(void *, uint64_t, char *, size_t);
+       int             (*d86_sprintf_func)(char *, size_t, const char *, ...);
+       int             d86_flags;
+       uint_t          d86_imm_bytes;
+#endif
+       void            *d86_data;
+} dis86_t;
+
+extern int dtrace_disx86(dis86_t *x, uint_t cpu_mode);
+
+#define        DIS_F_OCTAL     0x1     /* Print all numbers in octal */
+
+#ifdef DIS_TEXT
+extern void dtrace_disx86_str(dis86_t *x, uint_t cpu_mode, uint64_t pc,
+    char *buf, size_t len);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _DIS_TABLES_H */
+