2 * $Id: kl_typeinfo.h 1259 2006-04-25 18:33:20Z tjm $
4 * This file is part of libklib.
5 * A library which provides access to Linux system kernel dumps.
7 * Created by Silicon Graphics, Inc.
8 * Contributions by IBM, NEC, and others
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>
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
21 #ifndef __KL_TYPEINFO_H
22 #define __KL_TYPEINFO_H
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)
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)
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 */
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
63 #define KL_TYPEINFO() (numnmlist)
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 */
93 /* Base type encoding values
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
102 /* Maximum number of open namelists
106 typedef struct nmlist_s {
109 void *private; /* pointer to private control struct */
110 string_table_t *stringtab;
113 extern nmlist_t nmlist[];
114 extern int numnmlist;
115 extern int curnmlist;
117 #define KL_TYPESTR_STRUCT "struct"
118 #define KL_TYPESTR_UNION "union"
119 #define KL_TYPESTR_ENUM "enum"
120 #define KL_TYPESTR_VOID "void"
122 /* Function prototypes
124 kltype_t *kl_find_type(
125 char * /* type name */,
126 int /* type number */);
128 kltype_t *kl_find_next_type(
129 kltype_t * /* kltype_t pointer */,
130 int /* type number */);
132 kltype_t *kl_first_type(
133 int /* type number */);
135 kltype_t *kl_next_type(
136 kltype_t * /* kltype_t pointer */);
138 kltype_t *kl_prev_type(
139 kltype_t * /* kltype_t pointer */);
141 kltype_t *kl_realtype(
142 kltype_t * /* kltype_t pointer */,
143 int /* type number */);
145 kltype_t *kl_find_typenum(
146 uint64_t /* private typenumber */);
148 int kl_get_first_similar_typedef(
149 char * /* type name */,
150 char * /* fullname */);
153 kltype_t * /* kltype_t pointer */);
156 char * /* struct name */);
158 kltype_t *kl_get_member(
159 kltype_t * /* kltype_t pointer */,
160 char * /* member name */);
162 int kl_get_member_offset(
163 kltype_t * /* kltype_t pointer */,
164 char * /* member name */);
167 char * /* struct name */,
168 char * /* member name */);
171 char * /* struct name */,
172 char * /* member name */);
174 int kl_member_offset(
175 char * /* struct name */,
176 char * /* member name */);
179 char * /* struct name */,
180 char * /* member name */);
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);
194 void * /* pointer to data */,
195 kltype_t * /* pointer to type information */,
196 int /* indent level */,
199 #endif /* __KL_TYPEINFO_H */