cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

stddef.h (3250B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2#ifndef _LINUX_STDDEF_H
      3#define _LINUX_STDDEF_H
      4
      5#include <uapi/linux/stddef.h>
      6
      7#undef NULL
      8#define NULL ((void *)0)
      9
     10enum {
     11	false	= 0,
     12	true	= 1
     13};
     14
     15#undef offsetof
     16#define offsetof(TYPE, MEMBER)	__builtin_offsetof(TYPE, MEMBER)
     17
     18/**
     19 * sizeof_field() - Report the size of a struct field in bytes
     20 *
     21 * @TYPE: The structure containing the field of interest
     22 * @MEMBER: The field to return the size of
     23 */
     24#define sizeof_field(TYPE, MEMBER) sizeof((((TYPE *)0)->MEMBER))
     25
     26/**
     27 * offsetofend() - Report the offset of a struct field within the struct
     28 *
     29 * @TYPE: The type of the structure
     30 * @MEMBER: The member within the structure to get the end offset of
     31 */
     32#define offsetofend(TYPE, MEMBER) \
     33	(offsetof(TYPE, MEMBER)	+ sizeof_field(TYPE, MEMBER))
     34
     35/**
     36 * struct_group() - Wrap a set of declarations in a mirrored struct
     37 *
     38 * @NAME: The identifier name of the mirrored sub-struct
     39 * @MEMBERS: The member declarations for the mirrored structs
     40 *
     41 * Used to create an anonymous union of two structs with identical
     42 * layout and size: one anonymous and one named. The former can be
     43 * used normally without sub-struct naming, and the latter can be
     44 * used to reason about the start, end, and size of the group of
     45 * struct members.
     46 */
     47#define struct_group(NAME, MEMBERS...)	\
     48	__struct_group(/* no tag */, NAME, /* no attrs */, MEMBERS)
     49
     50/**
     51 * struct_group_attr() - Create a struct_group() with trailing attributes
     52 *
     53 * @NAME: The identifier name of the mirrored sub-struct
     54 * @ATTRS: Any struct attributes to apply
     55 * @MEMBERS: The member declarations for the mirrored structs
     56 *
     57 * Used to create an anonymous union of two structs with identical
     58 * layout and size: one anonymous and one named. The former can be
     59 * used normally without sub-struct naming, and the latter can be
     60 * used to reason about the start, end, and size of the group of
     61 * struct members. Includes structure attributes argument.
     62 */
     63#define struct_group_attr(NAME, ATTRS, MEMBERS...) \
     64	__struct_group(/* no tag */, NAME, ATTRS, MEMBERS)
     65
     66/**
     67 * struct_group_tagged() - Create a struct_group with a reusable tag
     68 *
     69 * @TAG: The tag name for the named sub-struct
     70 * @NAME: The identifier name of the mirrored sub-struct
     71 * @MEMBERS: The member declarations for the mirrored structs
     72 *
     73 * Used to create an anonymous union of two structs with identical
     74 * layout and size: one anonymous and one named. The former can be
     75 * used normally without sub-struct naming, and the latter can be
     76 * used to reason about the start, end, and size of the group of
     77 * struct members. Includes struct tag argument for the named copy,
     78 * so the specified layout can be reused later.
     79 */
     80#define struct_group_tagged(TAG, NAME, MEMBERS...) \
     81	__struct_group(TAG, NAME, /* no attrs */, MEMBERS)
     82
     83/**
     84 * DECLARE_FLEX_ARRAY() - Declare a flexible array usable in a union
     85 *
     86 * @TYPE: The type of each flexible array element
     87 * @NAME: The name of the flexible array member
     88 *
     89 * In order to have a flexible array member in a union or alone in a
     90 * struct, it needs to be wrapped in an anonymous struct with at least 1
     91 * named member, but that member can be empty.
     92 */
     93#define DECLARE_FLEX_ARRAY(TYPE, NAME) \
     94	__DECLARE_FLEX_ARRAY(TYPE, NAME)
     95
     96#endif