The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/sys/ctf.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*      $OpenBSD: ctf.h,v 1.5 2017/08/13 14:56:05 nayden Exp $  */
    2 
    3 /*-
    4  * SPDX-License-Identifier: ISC
    5  *
    6  * Copyright (c) 2016 Martin Pieuchot <mpi@openbsd.org>
    7  * Copyright (c) 2022 The FreeBSD Foundation
    8  *
    9  * Permission to use, copy, modify, and distribute this software for any
   10  * purpose with or without fee is hereby granted, provided that the above
   11  * copyright notice and this permission notice appear in all copies.
   12  *
   13  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
   14  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
   15  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
   16  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
   17  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
   18  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
   19  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
   20  */
   21 
   22 #ifndef _SYS_CTF_H_
   23 #define _SYS_CTF_H_
   24 
   25 #include <sys/_types.h>
   26 
   27 /*
   28  * CTF ``Compact ANSI-C Type Format'' ABI header file.
   29  *
   30  * See the ctf(5) manual page for a detailed description of the format.
   31  */
   32 
   33 typedef struct ctf_preamble {
   34         __uint16_t              ctp_magic;
   35         __uint8_t               ctp_version;
   36         __uint8_t               ctp_flags;
   37 } ctf_preamble_t;
   38 
   39 typedef struct ctf_header {
   40         struct ctf_preamble     cth_preamble;
   41 #define cth_magic       cth_preamble.ctp_magic
   42 #define cth_version     cth_preamble.ctp_version
   43 #define cth_flags       cth_preamble.ctp_flags
   44         __uint32_t              cth_parlabel;
   45         __uint32_t              cth_parname;
   46         __uint32_t              cth_lbloff;
   47         __uint32_t              cth_objtoff;
   48         __uint32_t              cth_funcoff;
   49         __uint32_t              cth_typeoff;
   50         __uint32_t              cth_stroff;
   51         __uint32_t              cth_strlen;
   52 } ctf_header_t;
   53 
   54 #define CTF_F_COMPRESS          (1 << 0)        /* zlib compression */
   55 
   56 typedef struct ctf_lblent {
   57         __uint32_t              ctl_label;
   58         __uint32_t              ctl_typeidx;
   59 } ctf_lblent_t;
   60 
   61 struct ctf_stype_v2 {
   62         __uint32_t              ctt_name;
   63         __uint16_t              ctt_info;
   64         union {
   65                 __uint16_t _size;
   66                 __uint16_t _type;
   67         } _u;
   68 };
   69 
   70 struct ctf_stype_v3 {
   71         __uint32_t              ctt_name;
   72         __uint32_t              ctt_info;
   73         union {
   74                 __uint32_t _size;
   75                 __uint32_t _type;
   76         } _u;
   77 };
   78 
   79 struct ctf_type_v2 {
   80         __uint32_t              ctt_name;
   81         __uint16_t              ctt_info;
   82         union {
   83                 __uint16_t _size;
   84                 __uint16_t _type;
   85         } _u;
   86         __uint32_t              ctt_lsizehi;
   87         __uint32_t              ctt_lsizelo;
   88 };
   89 
   90 struct ctf_type_v3 {
   91         __uint32_t              ctt_name;
   92         __uint32_t              ctt_info;
   93         union {
   94                 __uint32_t _size;
   95                 __uint32_t _type;
   96         } _u;
   97         __uint32_t              ctt_lsizehi;
   98         __uint32_t              ctt_lsizelo;
   99 };
  100 
  101 #define ctt_size _u._size
  102 #define ctt_type _u._type
  103 
  104 struct ctf_array_v2 {
  105         __uint16_t              cta_contents;
  106         __uint16_t              cta_index;
  107         __uint32_t              cta_nelems;
  108 };
  109 
  110 struct ctf_array_v3 {
  111         __uint32_t              cta_contents;
  112         __uint32_t              cta_index;
  113         __uint32_t              cta_nelems;
  114 };
  115 
  116 struct ctf_member_v2 {
  117         __uint32_t              ctm_name;
  118         __uint16_t              ctm_type;
  119         __uint16_t              ctm_offset;
  120 };
  121 
  122 struct ctf_member_v3 {
  123         __uint32_t              ctm_name;
  124         __uint32_t              ctm_type;
  125         __uint32_t              ctm_offset;
  126 };
  127 
  128 struct ctf_lmember_v2 {
  129         __uint32_t              ctlm_name;
  130         __uint16_t              ctlm_type;
  131         __uint16_t              ctlm_pad;
  132         __uint32_t              ctlm_offsethi;
  133         __uint32_t              ctlm_offsetlo;
  134 };
  135 
  136 struct ctf_lmember_v3 {
  137         __uint32_t              ctlm_name;
  138         __uint32_t              ctlm_type;
  139         __uint32_t              ctlm_offsethi;
  140         __uint32_t              ctlm_offsetlo;
  141 };
  142 
  143 #define CTF_V2_LSTRUCT_THRESH   (1 << 13)
  144 #define CTF_V3_LSTRUCT_THRESH   (1 << 29)
  145 
  146 typedef struct ctf_enum {
  147         __uint32_t              cte_name;
  148         __int32_t               cte_value;
  149 } ctf_enum_t;
  150 
  151 #define CTF_MAGIC               0xcff1
  152 #define CTF_VERSION             CTF_VERSION_3
  153 #define CTF_VERSION_3           3
  154 #define CTF_VERSION_2           2
  155 #define CTF_VERSION_1           1
  156 
  157 #define CTF_MAX_NAME            0x7fffffff
  158 
  159 #define CTF_V2_MAX_VLEN         0x03ff
  160 #define CTF_V2_MAX_SIZE         0xfffe
  161 #define CTF_V2_LSIZE_SENT       (CTF_V2_MAX_SIZE + 1) /* sentinel for cts vs ctt */
  162 
  163 #define CTF_V3_MAX_VLEN         0x00ffffff
  164 #define CTF_V3_MAX_SIZE         0xfffffffeu
  165 #define CTF_V3_LSIZE_SENT       (CTF_V3_MAX_SIZE + 1)
  166 
  167 #define CTF_V2_PARENT_SHIFT             15
  168 #define CTF_V2_MAX_TYPE                 0xffff
  169 #define CTF_V2_TYPE_ISPARENT(id)        ((id) < 0x8000)
  170 #define CTF_V2_TYPE_ISCHILD(id)         ((id) > 0x7fff)
  171 #define CTF_V2_TYPE_TO_INDEX(type)      ((type) & 0x7fff)
  172 #define CTF_V2_INDEX_TO_TYPE(type, ischild)                     \
  173         (((type) & 0x7fff) | ((ischild) != 0 ? 0x8000 : 0))
  174 #define CTF_V2_TYPE_INFO(kind, isroot, vlen)                    \
  175         (((kind) << 11) | ((isroot) != 0 ? (1 << 10) : 0) |     \
  176             ((vlen) & CTF_V2_MAX_VLEN))
  177 
  178 #define CTF_V3_PARENT_SHIFT             31
  179 #define CTF_V3_MAX_TYPE                 0xfffffffeu
  180 #define CTF_V3_TYPE_ISPARENT(id)        ((__uint32_t)(id) < 0x80000000u)
  181 #define CTF_V3_TYPE_ISCHILD(id)         ((__uint32_t)(id) > 0x7fffffffu)
  182 #define CTF_V3_TYPE_TO_INDEX(type)      ((type) & 0x7fffffffu)
  183 #define CTF_V3_INDEX_TO_TYPE(type, ischild)                     \
  184         (((type) & 0x7fffffffu) | ((ischild) != 0 ? 0x80000000u : 0))
  185 #define CTF_V3_TYPE_INFO(kind, isroot, vlen)                    \
  186         (((kind) << 26) | ((isroot) != 0 ? (1 << 25) : 0) |     \
  187             ((vlen) & CTF_V3_MAX_VLEN))
  188 
  189 #define CTF_STRTAB_0            0
  190 #define CTF_STRTAB_1            1
  191 
  192 #define CTF_TYPE_NAME(t, o)     (((t) << 31) | ((o) & ((1u << 31) - 1)))
  193 
  194 /*
  195  * Info macro.
  196  */
  197 #define CTF_V2_INFO_VLEN(i)     ((i) & CTF_V2_MAX_VLEN)
  198 #define CTF_V2_INFO_ISROOT(i)   (((i) & 0x0400) >> 10)
  199 #define CTF_V2_INFO_KIND(i)     (((i) & 0xf800) >> 11)
  200 
  201 #define CTF_V3_INFO_VLEN(i)     ((i) & CTF_V3_MAX_VLEN)
  202 #define CTF_V3_INFO_ISROOT(i)   (((i) & 0x02000000) >> 25)
  203 #define CTF_V3_INFO_KIND(i)     (((i) & 0xfc000000) >> 26)
  204 
  205 #define  CTF_K_UNKNOWN          0
  206 #define  CTF_K_INTEGER          1
  207 #define  CTF_K_FLOAT            2
  208 #define  CTF_K_POINTER          3
  209 #define  CTF_K_ARRAY            4
  210 #define  CTF_K_FUNCTION         5
  211 #define  CTF_K_STRUCT           6
  212 #define  CTF_K_UNION            7
  213 #define  CTF_K_ENUM             8
  214 #define  CTF_K_FORWARD          9
  215 #define  CTF_K_TYPEDEF          10
  216 #define  CTF_K_VOLATILE         11
  217 #define  CTF_K_CONST            12
  218 #define  CTF_K_RESTRICT         13
  219 #define  CTF_K_MAX              63
  220 
  221 /*
  222  * Integer/Float Encoding macro.
  223  */
  224 #define _CTF_ENCODING(e)        (((e) & 0xff000000) >> 24)
  225 #define _CTF_OFFSET(e)          (((e) & 0x00ff0000) >> 16)
  226 #define _CTF_BITS(e)            (((e) & 0x0000ffff))
  227 #define _CTF_DATA(encoding, offset, bits) \
  228         (((encoding) << 24) | ((offset) << 16) | (bits))
  229 
  230 #define CTF_INT_ENCODING(e)     _CTF_ENCODING(e)
  231 #define  CTF_INT_SIGNED         (1 << 0)
  232 #define  CTF_INT_CHAR           (1 << 1)
  233 #define  CTF_INT_BOOL           (1 << 2)
  234 #define  CTF_INT_VARARGS        (1 << 3)
  235 #define CTF_INT_OFFSET(e)       _CTF_OFFSET(e)
  236 #define CTF_INT_BITS(e)         _CTF_BITS(e)
  237 #define CTF_INT_DATA(e, o, b)   _CTF_DATA(e, o, b)
  238 
  239 #define CTF_FP_ENCODING(e)      _CTF_ENCODING(e)
  240 #define  CTF_FP_SINGLE          1
  241 #define  CTF_FP_DOUBLE          2
  242 #define  CTF_FP_CPLX            3
  243 #define  CTF_FP_DCPLX           4
  244 #define  CTF_FP_LDCPLX          5
  245 #define  CTF_FP_LDOUBLE         6
  246 #define  CTF_FP_INTRVL          7
  247 #define  CTF_FP_DINTRVL         8
  248 #define  CTF_FP_LDINTRVL        9
  249 #define  CTF_FP_IMAGRY          10
  250 #define  CTF_FP_DIMAGRY         11
  251 #define  CTF_FP_LDIMAGRY        12
  252 #define CTF_FP_OFFSET(e)        _CTF_OFFSET(e)
  253 #define CTF_FP_BITS(e)          _CTF_BITS(e)
  254 #define CTF_FP_DATA(e, o, b)    _CTF_DATA(e, o, b)
  255 
  256 /*
  257  * Name reference macro.
  258  */
  259 #define CTF_NAME_STID(n)        ((n) >> 31)
  260 #define CTF_NAME_OFFSET(n)      ((n) & CTF_MAX_NAME)
  261 
  262 /*
  263  * Type macro.
  264  */
  265 #define CTF_SIZE_TO_LSIZE_HI(s) ((uint32_t)((uint64_t)(s) >> 32))
  266 #define CTF_SIZE_TO_LSIZE_LO(s) ((uint32_t)(s))
  267 #define CTF_TYPE_LSIZE(t)       \
  268         (((uint64_t)(t)->ctt_lsizehi) << 32 | (t)->ctt_lsizelo)
  269 
  270 /*
  271  * Member macro.
  272  */
  273 #define CTF_LMEM_OFFSET(m) \
  274         (((__uint64_t)(m)->ctlm_offsethi) << 32 | (m)->ctlm_offsetlo)
  275 #define CTF_OFFSET_TO_LMEMHI(off)       ((__uint32_t)((__uint64_t)(off) >> 32))
  276 #define CTF_OFFSET_TO_LMEMLO(off)       ((__uint32_t)(off))
  277 
  278 /*
  279  * Compatibility for pre-v3 code.
  280  */
  281 typedef struct ctf_array_v2 ctf_array_t;
  282 typedef struct ctf_member_v2 ctf_member_t;
  283 typedef struct ctf_lmember_v2 ctf_lmember_t;
  284 typedef struct ctf_type_v2 ctf_type_t;
  285 typedef struct ctf_stype_v2 ctf_stype_t;
  286 
  287 #define CTF_INFO_KIND           CTF_V2_INFO_KIND
  288 #define CTF_INFO_VLEN           CTF_V2_INFO_VLEN
  289 #define CTF_INFO_ISROOT         CTF_V2_INFO_ISROOT
  290 #define CTF_TYPE_INFO           CTF_V2_TYPE_INFO
  291 #define CTF_TYPE_ISPARENT       CTF_V2_TYPE_ISPARENT
  292 #define CTF_TYPE_ISCHILD        CTF_V2_TYPE_ISCHILD
  293 #define CTF_TYPE_TO_INDEX       CTF_V2_TYPE_TO_INDEX
  294 #define CTF_INDEX_TO_TYPE       CTF_V2_INDEX_TO_TYPE
  295 #define CTF_LSIZE_SENT          CTF_V2_LSIZE_SENT
  296 #define CTF_LSTRUCT_THRESH      CTF_V2_LSTRUCT_THRESH
  297 #define CTF_MAX_SIZE            CTF_V2_MAX_SIZE
  298 #define CTF_MAX_TYPE            CTF_V2_MAX_TYPE
  299 #define CTF_MAX_VLEN            CTF_V2_MAX_VLEN
  300 
  301 #endif /* _SYS_CTF_H_ */

Cache object: a043c1d5a071ce5f9c70fa95d7ac2f06


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.