linux/lib/ubsan.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2#ifndef _LIB_UBSAN_H
   3#define _LIB_UBSAN_H
   4
   5enum {
   6        type_kind_int = 0,
   7        type_kind_float = 1,
   8        type_unknown = 0xffff
   9};
  10
  11struct type_descriptor {
  12        u16 type_kind;
  13        u16 type_info;
  14        char type_name[1];
  15};
  16
  17struct source_location {
  18        const char *file_name;
  19        union {
  20                unsigned long reported;
  21                struct {
  22                        u32 line;
  23                        u32 column;
  24                };
  25        };
  26};
  27
  28struct overflow_data {
  29        struct source_location location;
  30        struct type_descriptor *type;
  31};
  32
  33struct type_mismatch_data {
  34        struct source_location location;
  35        struct type_descriptor *type;
  36        unsigned long alignment;
  37        unsigned char type_check_kind;
  38};
  39
  40struct type_mismatch_data_v1 {
  41        struct source_location location;
  42        struct type_descriptor *type;
  43        unsigned char log_alignment;
  44        unsigned char type_check_kind;
  45};
  46
  47struct type_mismatch_data_common {
  48        struct source_location *location;
  49        struct type_descriptor *type;
  50        unsigned long alignment;
  51        unsigned char type_check_kind;
  52};
  53
  54struct nonnull_arg_data {
  55        struct source_location location;
  56        struct source_location attr_location;
  57        int arg_index;
  58};
  59
  60struct vla_bound_data {
  61        struct source_location location;
  62        struct type_descriptor *type;
  63};
  64
  65struct out_of_bounds_data {
  66        struct source_location location;
  67        struct type_descriptor *array_type;
  68        struct type_descriptor *index_type;
  69};
  70
  71struct shift_out_of_bounds_data {
  72        struct source_location location;
  73        struct type_descriptor *lhs_type;
  74        struct type_descriptor *rhs_type;
  75};
  76
  77struct unreachable_data {
  78        struct source_location location;
  79};
  80
  81struct invalid_value_data {
  82        struct source_location location;
  83        struct type_descriptor *type;
  84};
  85
  86#if defined(CONFIG_ARCH_SUPPORTS_INT128) && defined(__SIZEOF_INT128__)
  87typedef __int128 s_max;
  88typedef unsigned __int128 u_max;
  89#else
  90typedef s64 s_max;
  91typedef u64 u_max;
  92#endif
  93
  94#endif
  95