Added patch headers.
[linux-flexiantxendom0-3.2.10.git] / kdb / modules / lcrash / kl_typeinfo.h
1 /*
2  * $Id: kl_typeinfo.h 1259 2006-04-25 18:33:20Z tjm $
3  *
4  * This file is part of libklib.
5  * A library which provides access to Linux system kernel dumps.
6  *
7  * Created by Silicon Graphics, Inc.
8  * Contributions by IBM, NEC, and others
9  *
10  * Copyright (C) 1999 - 2006 Silicon Graphics, Inc. All rights reserved.
11  * Copyright (C) 2001, 2002 IBM Deutschland Entwicklung GmbH, IBM Corporation
12  * Copyright 2000 Junichi Nomura, NEC Solutions <j-nomura@ce.jp.nec.com>
13  *
14  * This code is free software; you can redistribute it and/or modify
15  * it under the terms of the GNU Lesser Public License as published by
16  * the Free Software Foundation; either version 2.1 of the License, or
17  * (at your option) any later version. See the file COPYING for more
18  * information.
19  */
20
21 #ifndef __KL_TYPEINFO_H
22 #define __KL_TYPEINFO_H
23
24 #define KLT_BASE         0x001
25 #define KLT_STRUCT       0x002
26 #define KLT_UNION        0x004
27 #define KLT_ENUMERATION  0x008
28 #define KLT_MEMBER       0x010
29 #define KLT_ARRAY        0x020
30 #define KLT_POINTER      0x040
31 #define KLT_TYPEDEF      0x080
32 #define KLT_FUNCTION     0x100
33 #define KLT_VARIABLE     0x200
34 #define KLT_SRCFILE      0x400
35 #define KLT_SUBRANGE     0x800
36 #define KLT_INCOMPLETE   0x4000
37 #define KLT_UNKNOWN      0x8000
38 #define KLT_TYPE        (KLT_BASE|KLT_STRUCT|KLT_UNION|KLT_ENUMERATION)
39 #define KLT_TYPES       (KLT_BASE|KLT_STRUCT|KLT_UNION|KLT_ENUMERATION|KLT_TYPEDEF)
40
41 #define IS_TYPE(T)      ((T) & KLT_TYPE)
42 #define IS_STRUCT(T)    ((T) & KLT_STRUCT)
43 #define IS_UNION(T)     ((T) & KLT_UNION)
44 #define IS_ENUM(T)      ((T) & KLT_ENUM)
45 #define IS_MEMBER(T)    ((T) & KLT_MEMBER)
46 #define IS_POINTER(T)   ((T) & KLT_POINTER)
47 #define IS_TYPEDEF(T)   ((T) & KLT_TYPEDEF)
48
49 #define TYP_SETUP_FLG           0x01
50 #define TYP_TYPESTRING_FLG      0x02
51 #define TYP_INCOMPLETE_FLG      0x04
52 #define TYP_XREFERENCE_FLG      0x08
53 #define TYP_ANONYMOUS_FLG       0x10 /* Denotes anonymous union or struct */
54
55 #define NO_INDENT           0x01000000
56 #define SUPPRESS_NAME       0x02000000
57 #define SUPPRESS_NL         0x04000000
58 #define SUPPRESS_SEMI_COLON 0x08000000
59 #define NO_REALTYPE         0x10000000
60
61 extern int numnmlist;
62
63 #define KL_TYPEINFO()   (numnmlist)
64
65 typedef struct kltype_s {
66         char                    *kl_name;         /* type name */
67         char                    *kl_typestr;      /* 'typecast' string */
68         void                    *kl_ptr;          /* ptr to arch typeinfo */
69         int                      kl_flags;        /* (e.g., STAB_FLG) */
70         int                      kl_type;         /* (e.g., KLT_TYPEDEF) */
71         int                      kl_offset;       /* offset to 1st byte */
72         int                      kl_size;         /* number of bytes */
73         int                      kl_bit_offset;   /* offset to 1st data bit */
74         int                      kl_bit_size;     /* total num of data bits */
75         int                      kl_encoding;     /* for base value types */
76         int                      kl_low_bounds;   /* for arrays */
77         int                      kl_high_bounds;  /* for arrays */
78         unsigned int             kl_value;        /* enum value, etc. */
79         struct kltype_s         *kl_member;       /* struct/union member list */
80         struct kltype_s         *kl_next;         /* hash lists, etc. */
81         struct kltype_s         *kl_realtype;     /* pointer to real type */
82         struct kltype_s         *kl_indextype;    /* pointer to index_type */
83         struct kltype_s         *kl_elementtype;  /* pointer to element_type */
84 } kltype_t;
85
86 /* Flag values
87  */
88 #define K_HEX            0x1
89 #define K_OCTAL          0x2
90 #define K_BINARY         0x4
91 #define K_NO_SWAP        0x8
92
93 /* Base type encoding values
94  */
95 #define ENC_CHAR        0x01
96 #define ENC_SIGNED      0x02
97 #define ENC_UNSIGNED    0x04
98 #define ENC_FLOAT       0x08
99 #define ENC_ADDRESS     0x10
100 #define ENC_UNDEFINED   0x20
101
102 /* Maximum number of open namelists
103  */
104 #define MAXNMLIST 10
105
106 typedef struct nmlist_s {
107         int              index;
108         char            *namelist;
109         void            *private;       /* pointer to private control struct */
110         string_table_t  *stringtab;
111 } nmlist_t;
112
113 extern nmlist_t nmlist[];
114 extern int numnmlist;
115 extern int curnmlist;
116
117 #define KL_TYPESTR_STRUCT "struct"
118 #define KL_TYPESTR_UNION  "union"
119 #define KL_TYPESTR_ENUM   "enum"
120 #define KL_TYPESTR_VOID   "void"
121
122 /* Function prototypes
123  */
124 kltype_t *kl_find_type(
125         char *          /* type name */,
126         int             /* type number */);
127
128 kltype_t *kl_find_next_type(
129         kltype_t *      /* kltype_t pointer */,
130         int             /* type number */);
131
132 kltype_t *kl_first_type(
133         int             /* type number */);
134
135 kltype_t *kl_next_type(
136         kltype_t *      /* kltype_t pointer */);
137
138 kltype_t *kl_prev_type(
139         kltype_t *      /* kltype_t pointer */);
140
141 kltype_t *kl_realtype(
142         kltype_t *      /* kltype_t pointer */,
143         int             /* type number */);
144
145 kltype_t *kl_find_typenum(
146         uint64_t        /* private typenumber */);
147
148 int kl_get_first_similar_typedef(
149         char *          /* type name */,
150         char *          /* fullname */);
151
152 int kl_type_size(
153         kltype_t *      /* kltype_t pointer */);
154
155 int kl_struct_len(
156         char *          /* struct name */);
157
158 kltype_t *kl_get_member(
159         kltype_t *      /* kltype_t pointer */,
160         char *          /* member name */);
161
162 int kl_get_member_offset(
163         kltype_t *  /* kltype_t pointer */,
164         char *          /* member name */);
165
166 int kl_is_member(
167         char *          /* struct name */,
168         char *          /* member name */);
169
170 kltype_t *kl_member(
171         char *          /* struct name */,
172         char *          /* member name */);
173
174 int kl_member_offset(
175         char *          /* struct name */,
176         char *          /* member name */);
177
178 int kl_member_size(
179         char *          /* struct name */,
180         char *          /* member name */);
181
182 /* cpw: get rid of last arguent FILE * */
183 void kl_print_member(void *, kltype_t *, int, int);
184 void kl_print_pointer_type(void *, kltype_t *, int, int);
185 void kl_print_function_type(void *, kltype_t *, int, int);
186 void kl_print_array_type(void *, kltype_t *, int, int);
187 void kl_print_enumeration_type(void *, kltype_t *, int, int);
188 void kl_print_base_type(void *, kltype_t *, int, int);
189 void kl_print_type(void *, kltype_t *, int, int);
190 void kl_print_struct_type(void *, kltype_t *, int, int);
191 void kl_print_base_value(void *, kltype_t *, int);
192
193 void kl_print_type(
194         void *          /* pointer to data */,
195         kltype_t *      /* pointer to type information */,
196         int             /* indent level */,
197         int             /* flags */);
198
199 #endif /* __KL_TYPEINFO_H */