packaging: Enable testing infrastructure
[external/binutils.git] / include / ctf.h
1 /* CTF format description.
2    Copyright (C) 2019 Free Software Foundation, Inc.
3
4    This file is part of libctf.
5
6    libctf is free software; you can redistribute it and/or modify it under
7    the terms of the GNU General Public License as published by the Free
8    Software Foundation; either version 3, or (at your option) any later
9    version.
10
11    This program is distributed in the hope that it will be useful, but
12    WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
14    See the GNU General Public License for more details.
15
16    You should have received a copy of the GNU General Public License
17    along with this program; see the file COPYING.  If not see
18    <http://www.gnu.org/licenses/>.  */
19
20 #ifndef _CTF_H
21 #define _CTF_H
22
23 #include <sys/types.h>
24 #include <limits.h>
25 #include <stdint.h>
26
27
28 #ifdef  __cplusplus
29 extern "C"
30 {
31 #endif
32
33 /* CTF - Compact ANSI-C Type Format
34
35    This file format can be used to compactly represent the information needed
36    by a debugger to interpret the ANSI-C types used by a given program.
37    Traditionally, this kind of information is generated by the compiler when
38    invoked with the -g flag and is stored in "stabs" strings or in the more
39    modern DWARF format.  CTF provides a representation of only the information
40    that is relevant to debugging a complex, optimized C program such as the
41    operating system kernel in a form that is significantly more compact than
42    the equivalent stabs or DWARF representation.  The format is data-model
43    independent, so consumers do not need different code depending on whether
44    they are 32-bit or 64-bit programs; libctf automatically compensates for
45    endianness variations.  CTF assumes that a standard ELF symbol table is
46    available for use in the debugger, and uses the structure and data of the
47    symbol table to avoid storing redundant information.  The CTF data may be
48    compressed on disk or in memory, indicated by a bit in the header.  CTF may
49    be interpreted in a raw disk file, or it may be stored in an ELF section,
50    typically named .ctf.  Data structures are aligned so that a raw CTF file or
51    CTF ELF section may be manipulated using mmap(2).
52
53    The CTF file or section itself has the following structure:
54
55    +--------+--------+---------+----------+----------+-------+--------+
56    |  file  |  type  |  data   | function | variable | data  | string |
57    | header | labels | objects |   info   |   info   | types | table  |
58    +--------+--------+---------+----------+----------+-------+--------+
59
60    The file header stores a magic number and version information, encoding
61    flags, and the byte offset of each of the sections relative to the end of the
62    header itself.  If the CTF data has been uniquified against another set of
63    CTF data, a reference to that data also appears in the the header.  This
64    reference is the name of the label corresponding to the types uniquified
65    against.
66
67    Following the header is a list of labels, used to group the types included in
68    the data types section.  Each label is accompanied by a type ID i.  A given
69    label refers to the group of types whose IDs are in the range [0, i].
70
71    Data object and function records are stored in the same order as they appear
72    in the corresponding symbol table, except that symbols marked SHN_UNDEF are
73    not stored and symbols that have no type data are padded out with zeroes.
74    For each data object, the type ID (a small integer) is recorded.  For each
75    function, the type ID of the return type and argument types is recorded.
76
77    Variable records (as distinct from data objects) provide a modicum of support
78    for non-ELF systems, mapping a variable name to a CTF type ID.  The variable
79    names are sorted into ASCIIbetical order, permitting binary searching.
80
81    The data types section is a list of variable size records that represent each
82    type, in order by their ID.  The types themselves form a directed graph,
83    where each node may contain one or more outgoing edges to other type nodes,
84    denoted by their ID.
85
86    Strings are recorded as a string table ID (0 or 1) and a byte offset into the
87    string table.  String table 0 is the internal CTF string table.  String table
88    1 is the external string table, which is the string table associated with the
89    ELF symbol table for this object.  CTF does not record any strings that are
90    already in the symbol table, and the CTF string table does not contain any
91    duplicated strings.
92
93    If the CTF data has been merged with another parent CTF object, some outgoing
94    edges may refer to type nodes that exist in another CTF object.  The debugger
95    and libctf library are responsible for connecting the appropriate objects
96    together so that the full set of types can be explored and manipulated.
97
98    This connection is done purely using the ctf_import() function.  There is no
99    notation anywhere in the child CTF file indicating which parent it is
100    connected to: it is the debugger's responsibility to track this.  */
101
102 #define CTF_MAX_TYPE    0xfffffffe      /* Max type identifier value.  */
103 #define CTF_MAX_PTYPE   0x7fffffff      /* Max parent type identifier value.  */
104 #define CTF_MAX_NAME 0x7fffffff         /* Max offset into a string table.  */
105 #define CTF_MAX_VLEN    0xffffff /* Max struct, union, enum members or args.  */
106
107 /* See ctf_type_t */
108 #define CTF_MAX_SIZE    0xfffffffe      /* Max size of a v2 type in bytes. */
109 #define CTF_LSIZE_SENT  0xffffffff      /* Sentinel for v2 ctt_size.  */
110
111 # define CTF_MAX_TYPE_V1        0xffff  /* Max type identifier value.  */
112 # define CTF_MAX_PTYPE_V1       0x7fff  /* Max parent type identifier value.  */
113 # define CTF_MAX_VLEN_V1        0x3ff   /* Max struct, union, enums or args.  */
114 # define CTF_MAX_SIZE_V1        0xfffe  /* Max size of a type in bytes. */
115 # define CTF_LSIZE_SENT_V1      0xffff  /* Sentinel for v1 ctt_size.  */
116
117   /* Start of actual data structure definitions.
118
119      Every field in these structures must have corresponding code in the
120      endianness-swapping machinery in libctf/ctf-open.c.  */
121
122 typedef struct ctf_preamble
123 {
124   unsigned short ctp_magic;     /* Magic number (CTF_MAGIC).  */
125   unsigned char ctp_version;    /* Data format version number (CTF_VERSION).  */
126   unsigned char ctp_flags;      /* Flags (see below).  */
127 } ctf_preamble_t;
128
129 typedef struct ctf_header
130 {
131   ctf_preamble_t cth_preamble;
132   uint32_t cth_parlabel;        /* Ref to name of parent lbl uniq'd against.  */
133   uint32_t cth_parname;         /* Ref to basename of parent.  */
134   uint32_t cth_lbloff;          /* Offset of label section.  */
135   uint32_t cth_objtoff;         /* Offset of object section.  */
136   uint32_t cth_funcoff;         /* Offset of function section.  */
137   uint32_t cth_varoff;          /* Offset of variable section.  */
138   uint32_t cth_typeoff;         /* Offset of type section.  */
139   uint32_t cth_stroff;          /* Offset of string section.  */
140   uint32_t cth_strlen;          /* Length of string section in bytes.  */
141 } ctf_header_t;
142
143 #define cth_magic   cth_preamble.ctp_magic
144 #define cth_version cth_preamble.ctp_version
145 #define cth_flags   cth_preamble.ctp_flags
146
147 #define CTF_MAGIC       0xdff2  /* Magic number identifying header.  */
148
149 /* Data format version number.  */
150
151 /* v1 upgraded to v2 is not quite the same as native v2 (the boundary between
152    parent and child types is different), and you can write it out again via
153    ctf_compress_write(), so we must track whether the thing was originally v1 or
154    not.  If we were writing the header from scratch, we would add a *pair* of
155    version number fields to allow for this, but this will do for now.  (A flag
156    will not do, because we need to encode both the version we came from and the
157    version we went to, not just "we were upgraded".) */
158
159 # define CTF_VERSION_1 1
160 # define CTF_VERSION_1_UPGRADED_3 2
161 # define CTF_VERSION_2 3
162
163 #define CTF_VERSION_3 4
164 #define CTF_VERSION CTF_VERSION_3 /* Current version.  */
165
166 #define CTF_F_COMPRESS  0x1     /* Data buffer is compressed by libctf.  */
167
168 typedef struct ctf_lblent
169 {
170   uint32_t ctl_label;           /* Ref to name of label.  */
171   uint32_t ctl_type;            /* Last type associated with this label.  */
172 } ctf_lblent_t;
173
174 typedef struct ctf_varent
175 {
176   uint32_t ctv_name;            /* Reference to name in string table.  */
177   uint32_t ctv_type;            /* Index of type of this variable.  */
178 } ctf_varent_t;
179
180 /* In format v2, type sizes, measured in bytes, come in two flavours.  Nearly
181    all of them fit into a (UINT_MAX - 1), and thus can be stored in the ctt_size
182    member of a ctf_stype_t.  The maximum value for these sizes is CTF_MAX_SIZE.
183    Types larger than this must be stored in the ctf_lsize member of a
184    ctf_type_t.  Use of this member is indicated by the presence of
185    CTF_LSIZE_SENT in ctt_size.  */
186
187 /* In v1, the same applies, only the limit is (USHRT_MAX - 1) and
188    CTF_MAX_SIZE_V1, and CTF_LSIZE_SENT_V1 is the sentinel.  */
189
190 typedef struct ctf_stype_v1
191 {
192   uint32_t ctt_name;            /* Reference to name in string table.  */
193   unsigned short ctt_info;      /* Encoded kind, variant length (see below).  */
194 #ifndef __GNUC__
195   union
196   {
197     unsigned short _size;       /* Size of entire type in bytes.  */
198     unsigned short _type;       /* Reference to another type.  */
199   } _u;
200 #else
201   __extension__
202   union
203   {
204     unsigned short ctt_size;    /* Size of entire type in bytes.  */
205     unsigned short ctt_type;    /* Reference to another type.  */
206   };
207 #endif
208 } ctf_stype_v1_t;
209
210 typedef struct ctf_type_v1
211 {
212   uint32_t ctt_name;            /* Reference to name in string table.  */
213   unsigned short ctt_info;      /* Encoded kind, variant length (see below).  */
214 #ifndef __GNUC__
215   union
216   {
217     unsigned short _size;       /* Always CTF_LSIZE_SENT_V1.  */
218     unsigned short _type;       /* Do not use.  */
219   } _u;
220 #else
221   __extension__
222   union
223   {
224     unsigned short ctt_size;    /* Always CTF_LSIZE_SENT_V1.  */
225     unsigned short ctt_type;    /* Do not use.  */
226   };
227 #endif
228   uint32_t ctt_lsizehi;         /* High 32 bits of type size in bytes.  */
229   uint32_t ctt_lsizelo;         /* Low 32 bits of type size in bytes.  */
230 } ctf_type_v1_t;
231
232
233 typedef struct ctf_stype
234 {
235   uint32_t ctt_name;            /* Reference to name in string table.  */
236   uint32_t ctt_info;            /* Encoded kind, variant length (see below).  */
237 #ifndef __GNUC__
238   union
239   {
240     uint32_t _size;             /* Size of entire type in bytes.  */
241     uint32_t _type;             /* Reference to another type.  */
242   } _u;
243 #else
244   __extension__
245   union
246   {
247     uint32_t ctt_size;          /* Size of entire type in bytes.  */
248     uint32_t ctt_type;          /* Reference to another type.  */
249   };
250 #endif
251 } ctf_stype_t;
252
253 typedef struct ctf_type
254 {
255   uint32_t ctt_name;            /* Reference to name in string table.  */
256   uint32_t ctt_info;            /* Encoded kind, variant length (see below).  */
257 #ifndef __GNUC__
258 union
259   {
260     uint32_t _size;             /* Always CTF_LSIZE_SENT.  */
261     uint32_t _type;             /* Do not use.  */
262   } _u;
263 #else
264   __extension__
265   union
266   {
267     uint32_t ctt_size;          /* Always CTF_LSIZE_SENT.  */
268     uint32_t ctt_type;          /* Do not use.  */
269   };
270 #endif
271   uint32_t ctt_lsizehi;         /* High 32 bits of type size in bytes.  */
272   uint32_t ctt_lsizelo;         /* Low 32 bits of type size in bytes.  */
273 } ctf_type_t;
274
275 #ifndef __GNUC__
276 #define ctt_size _u._size       /* For fundamental types that have a size.  */
277 #define ctt_type _u._type       /* For types that reference another type.  */
278 #endif
279
280 /* The following macros and inline functions compose and decompose values for
281    ctt_info and ctt_name, as well as other structures that contain name
282    references.  Use outside libdtrace-ctf itself is explicitly for access to CTF
283    files directly: types returned from the library will always appear to be
284    CTF_V2.
285
286    v1: (transparently upgraded to v2 at open time: may be compiled out of the
287    library)
288                ------------------------
289    ctt_info:   | kind | isroot | vlen |
290                ------------------------
291                15   11    10    9     0
292
293    v2:
294                ------------------------
295    ctt_info:   | kind | isroot | vlen |
296                ------------------------
297                31    26    25  24     0
298
299    CTF_V1 and V2 _INFO_VLEN have the same interface:
300
301    kind = CTF_*_INFO_KIND(c.ctt_info);     <-- CTF_K_* value (see below)
302    vlen = CTF_*_INFO_VLEN(fp, c.ctt_info); <-- length of variable data list
303
304    stid = CTF_NAME_STID(c.ctt_name);     <-- string table id number (0 or 1)
305    offset = CTF_NAME_OFFSET(c.ctt_name); <-- string table byte offset
306
307    c.ctt_info = CTF_TYPE_INFO(kind, vlen);
308    c.ctt_name = CTF_TYPE_NAME(stid, offset);  */
309
310 # define CTF_V1_INFO_KIND(info)         (((info) & 0xf800) >> 11)
311 # define CTF_V1_INFO_ISROOT(info)       (((info) & 0x0400) >> 10)
312 # define CTF_V1_INFO_VLEN(info)         (((info) & CTF_MAX_VLEN_V1))
313
314 #define CTF_V2_INFO_KIND(info)          (((info) & 0xfc000000) >> 26)
315 #define CTF_V2_INFO_ISROOT(info)        (((info) & 0x2000000) >> 25)
316 #define CTF_V2_INFO_VLEN(info)          (((info) & CTF_MAX_VLEN))
317
318 #define CTF_NAME_STID(name)             ((name) >> 31)
319 #define CTF_NAME_OFFSET(name)           ((name) & CTF_MAX_NAME)
320
321 /* V2 only. */
322 #define CTF_TYPE_INFO(kind, isroot, vlen) \
323         (((kind) << 26) | (((isroot) ? 1 : 0) << 25) | ((vlen) & CTF_MAX_VLEN))
324
325 #define CTF_TYPE_NAME(stid, offset) \
326         (((stid) << 31) | ((offset) & CTF_MAX_NAME))
327
328 /* The next set of macros are for public consumption only.  Not used internally,
329    since the relevant type boundary is dependent upon the version of the file at
330    *opening* time, not the version after transparent upgrade.  Use
331    ctf_type_isparent() / ctf_type_ischild() for that.  */
332
333 #define CTF_V2_TYPE_ISPARENT(fp, id)    ((id) <= CTF_MAX_PTYPE)
334 #define CTF_V2_TYPE_ISCHILD(fp, id)     ((id) > CTF_MAX_PTYPE)
335 #define CTF_V2_TYPE_TO_INDEX(id)        ((id) & CTF_MAX_PTYPE)
336 #define CTF_V2_INDEX_TO_TYPE(id, child) ((child) ? ((id) | (CTF_MAX_PTYPE+1)) : (id))
337
338 # define CTF_V1_TYPE_ISPARENT(fp, id)   ((id) <= CTF_MAX_PTYPE_V1)
339 # define CTF_V1_TYPE_ISCHILD(fp, id)    ((id) > CTF_MAX_PTYPE_V1)
340 # define CTF_V1_TYPE_TO_INDEX(id)       ((id) & CTF_MAX_PTYPE_V1)
341 # define CTF_V1_INDEX_TO_TYPE(id, child) ((child) ? ((id) | (CTF_MAX_PTYPE_V1+1)) : (id))
342
343 /* Valid for both V1 and V2. */
344 #define CTF_TYPE_LSIZE(cttp) \
345         (((uint64_t)(cttp)->ctt_lsizehi) << 32 | (cttp)->ctt_lsizelo)
346 #define CTF_SIZE_TO_LSIZE_HI(size)      ((uint32_t)((uint64_t)(size) >> 32))
347 #define CTF_SIZE_TO_LSIZE_LO(size)      ((uint32_t)(size))
348
349 #define CTF_STRTAB_0    0       /* String table id 0 (in-CTF).  */
350 #define CTF_STRTAB_1    1       /* String table id 1 (ELF strtab).  */
351
352 /* Values for CTF_TYPE_KIND().  If the kind has an associated data list,
353    CTF_INFO_VLEN() will extract the number of elements in the list, and
354    the type of each element is shown in the comments below. */
355
356 #define CTF_K_UNKNOWN   0       /* Unknown type (used for padding).  */
357 #define CTF_K_INTEGER   1       /* Variant data is CTF_INT_DATA (see below).  */
358 #define CTF_K_FLOAT     2       /* Variant data is CTF_FP_DATA (see below).  */
359 #define CTF_K_POINTER   3       /* ctt_type is referenced type.  */
360 #define CTF_K_ARRAY     4       /* Variant data is single ctf_array_t.  */
361 #define CTF_K_FUNCTION  5       /* ctt_type is return type, variant data is
362                                    list of argument types (unsigned short's for v1,
363                                    uint32_t's for v2).  */
364 #define CTF_K_STRUCT    6       /* Variant data is list of ctf_member_t's.  */
365 #define CTF_K_UNION     7       /* Variant data is list of ctf_member_t's.  */
366 #define CTF_K_ENUM      8       /* Variant data is list of ctf_enum_t's.  */
367 #define CTF_K_FORWARD   9       /* No additional data; ctt_name is tag.  */
368 #define CTF_K_TYPEDEF   10      /* ctt_type is referenced type.  */
369 #define CTF_K_VOLATILE  11      /* ctt_type is base type.  */
370 #define CTF_K_CONST     12      /* ctt_type is base type.  */
371 #define CTF_K_RESTRICT  13      /* ctt_type is base type.  */
372 #define CTF_K_SLICE     14      /* Variant data is a ctf_slice_t.  */
373
374 #define CTF_K_MAX       63      /* Maximum possible (V2) CTF_K_* value.  */
375
376 /* Values for ctt_type when kind is CTF_K_INTEGER.  The flags, offset in bits,
377    and size in bits are encoded as a single word using the following macros.
378    (However, you can also encode the offset and bitness in a slice.)  */
379
380 #define CTF_INT_ENCODING(data) (((data) & 0xff000000) >> 24)
381 #define CTF_INT_OFFSET(data)   (((data) & 0x00ff0000) >> 16)
382 #define CTF_INT_BITS(data)     (((data) & 0x0000ffff))
383
384 #define CTF_INT_DATA(encoding, offset, bits) \
385        (((encoding) << 24) | ((offset) << 16) | (bits))
386
387 #define CTF_INT_SIGNED  0x01    /* Integer is signed (otherwise unsigned).  */
388 #define CTF_INT_CHAR    0x02    /* Character display format.  */
389 #define CTF_INT_BOOL    0x04    /* Boolean display format.  */
390 #define CTF_INT_VARARGS 0x08    /* Varargs display format.  */
391
392 /* Use CTF_CHAR to produce a char that agrees with the system's native
393    char signedness.  */
394 #if CHAR_MIN == 0
395 # define CTF_CHAR (CTF_INT_CHAR)
396 #else
397 # define CTF_CHAR (CTF_INT_CHAR | CTF_INT_SIGNED)
398 #endif
399
400 /* Values for ctt_type when kind is CTF_K_FLOAT.  The encoding, offset in bits,
401    and size in bits are encoded as a single word using the following macros.
402    (However, you can also encode the offset and bitness in a slice.)  */
403
404 #define CTF_FP_ENCODING(data)  (((data) & 0xff000000) >> 24)
405 #define CTF_FP_OFFSET(data)    (((data) & 0x00ff0000) >> 16)
406 #define CTF_FP_BITS(data)      (((data) & 0x0000ffff))
407
408 #define CTF_FP_DATA(encoding, offset, bits) \
409        (((encoding) << 24) | ((offset) << 16) | (bits))
410
411 /* Variant data when kind is CTF_K_FLOAT is an encoding in the top eight bits.  */
412 #define CTF_FP_ENCODING(data)   (((data) & 0xff000000) >> 24)
413
414 #define CTF_FP_SINGLE   1       /* IEEE 32-bit float encoding.  */
415 #define CTF_FP_DOUBLE   2       /* IEEE 64-bit float encoding.  */
416 #define CTF_FP_CPLX     3       /* Complex encoding.  */
417 #define CTF_FP_DCPLX    4       /* Double complex encoding.  */
418 #define CTF_FP_LDCPLX   5       /* Long double complex encoding.  */
419 #define CTF_FP_LDOUBLE  6       /* Long double encoding.  */
420 #define CTF_FP_INTRVL   7       /* Interval (2x32-bit) encoding.  */
421 #define CTF_FP_DINTRVL  8       /* Double interval (2x64-bit) encoding.  */
422 #define CTF_FP_LDINTRVL 9       /* Long double interval (2x128-bit) encoding.  */
423 #define CTF_FP_IMAGRY   10      /* Imaginary (32-bit) encoding.  */
424 #define CTF_FP_DIMAGRY  11      /* Long imaginary (64-bit) encoding.  */
425 #define CTF_FP_LDIMAGRY 12      /* Long double imaginary (128-bit) encoding.  */
426
427 #define CTF_FP_MAX      12      /* Maximum possible CTF_FP_* value */
428
429 /* A slice increases the offset and reduces the bitness of the referenced
430    ctt_type, which must be a type which has an encoding (fp, int, or enum).  We
431    also store the referenced type in here, because it is easier to keep the
432    ctt_size correct for the slice than to shuffle the size into here and keep
433    the ctt_type where it is for other types.
434
435    In a future version, where we loosen requirements on alignment in the CTF
436    file, the cts_offset and cts_bits will be chars: but for now they must be
437    shorts or everything after a slice will become unaligned.  */
438
439 typedef struct ctf_slice
440 {
441   uint32_t cts_type;
442   unsigned short cts_offset;
443   unsigned short cts_bits;
444 } ctf_slice_t;
445
446 typedef struct ctf_array_v1
447 {
448   unsigned short cta_contents;  /* Reference to type of array contents.  */
449   unsigned short cta_index;     /* Reference to type of array index.  */
450   uint32_t cta_nelems;          /* Number of elements.  */
451 } ctf_array_v1_t;
452
453 typedef struct ctf_array
454 {
455   uint32_t cta_contents;        /* Reference to type of array contents.  */
456   uint32_t cta_index;           /* Reference to type of array index.  */
457   uint32_t cta_nelems;          /* Number of elements.  */
458 } ctf_array_t;
459
460 /* Most structure members have bit offsets that can be expressed using a short.
461    Some don't.  ctf_member_t is used for structs which cannot contain any of
462    these large offsets, whereas ctf_lmember_t is used in the latter case.  If
463    any member of a given struct has an offset that cannot be expressed using a
464    uint32_t, all members will be stored as type ctf_lmember_t.  This is expected
465    to be very rare (but nonetheless possible).  */
466
467 #define CTF_LSTRUCT_THRESH      536870912
468
469 /* In v1, the same is true, except that lmembers are used for structs >= 8192
470    bytes in size.  (The ordering of members in the ctf_member_* structures is
471    different to improve padding.)  */
472
473 #define CTF_LSTRUCT_THRESH_V1   8192
474
475 typedef struct ctf_member_v1
476 {
477   uint32_t ctm_name;            /* Reference to name in string table.  */
478   unsigned short ctm_type;      /* Reference to type of member.  */
479   unsigned short ctm_offset;    /* Offset of this member in bits.  */
480 } ctf_member_v1_t;
481
482 typedef struct ctf_lmember_v1
483 {
484   uint32_t ctlm_name;           /* Reference to name in string table.  */
485   unsigned short ctlm_type;     /* Reference to type of member.  */
486   unsigned short ctlm_pad;      /* Padding.  */
487   uint32_t ctlm_offsethi;       /* High 32 bits of member offset in bits.  */
488   uint32_t ctlm_offsetlo;       /* Low 32 bits of member offset in bits.  */
489 } ctf_lmember_v1_t;
490
491 typedef struct ctf_member_v2
492 {
493   uint32_t ctm_name;            /* Reference to name in string table.  */
494   uint32_t ctm_offset;          /* Offset of this member in bits.  */
495   uint32_t ctm_type;            /* Reference to type of member.  */
496 } ctf_member_t;
497
498 typedef struct ctf_lmember_v2
499 {
500   uint32_t ctlm_name;           /* Reference to name in string table.  */
501   uint32_t ctlm_offsethi;       /* High 32 bits of member offset in bits.  */
502   uint32_t ctlm_type;           /* Reference to type of member.  */
503   uint32_t ctlm_offsetlo;       /* Low 32 bits of member offset in bits.  */
504 } ctf_lmember_t;
505
506 #define CTF_LMEM_OFFSET(ctlmp) \
507         (((uint64_t)(ctlmp)->ctlm_offsethi) << 32 | (ctlmp)->ctlm_offsetlo)
508 #define CTF_OFFSET_TO_LMEMHI(offset)    ((uint32_t)((uint64_t)(offset) >> 32))
509 #define CTF_OFFSET_TO_LMEMLO(offset)    ((uint32_t)(offset))
510
511 typedef struct ctf_enum
512 {
513   uint32_t cte_name;            /* Reference to name in string table.  */
514   int32_t cte_value;            /* Value associated with this name.  */
515 } ctf_enum_t;
516
517 /* The ctf_archive is a collection of ctf_file_t's stored together. The format
518    is suitable for mmap()ing: this control structure merely describes the
519    mmap()ed archive (and overlaps the first few bytes of it), hence the
520    greater care taken with integral types.  All CTF files in an archive
521    must have the same data model.  (This is not validated.)
522
523    All integers in this structure are stored in little-endian byte order.
524
525    The code relies on the fact that everything in this header is a uint64_t
526    and thus the header needs no padding (in particular, that no padding is
527    needed between ctfa_ctfs and the unnamed ctfa_archive_modent array
528    that follows it).
529
530    This is *not* the same as the data structure returned by the ctf_arc_*()
531    functions:  this is the low-level on-disk representation.  */
532
533 #define CTFA_MAGIC 0x8b47f2a4d7623eeb   /* Random.  */
534 struct ctf_archive
535 {
536   /* Magic number.  (In loaded files, overwritten with the file size
537      so ctf_arc_close() knows how much to munmap()).  */
538   uint64_t ctfa_magic;
539
540   /* CTF data model.  */
541   uint64_t ctfa_model;
542
543   /* Number of CTF files in the archive.  */
544   uint64_t ctfa_nfiles;
545
546   /* Offset of the name table.  */
547   uint64_t ctfa_names;
548
549   /* Offset of the CTF table.  Each element starts with a size (a uint64_t
550      in network byte order) then a ctf_file_t of that size.  */
551   uint64_t ctfa_ctfs;
552 };
553
554 /* An array of ctfa_nnamed of this structure lies at
555    ctf_archive[ctf_archive->ctfa_modents] and gives the ctfa_ctfs or
556    ctfa_names-relative offsets of each name or ctf_file_t.  */
557
558 typedef struct ctf_archive_modent
559 {
560   uint64_t name_offset;
561   uint64_t ctf_offset;
562 } ctf_archive_modent_t;
563
564 #ifdef  __cplusplus
565 }
566 #endif
567
568 #endif                          /* _CTF_H */