github.com/prysmaticlabs/prysm@v1.4.4/third_party/afl/types.h (about)

     1  /*
     2     american fuzzy lop - type definitions and minor macros
     3     ------------------------------------------------------
     4  
     5     Written and maintained by Michal Zalewski <lcamtuf@google.com>
     6  
     7     Copyright 2013, 2014, 2015 Google Inc. All rights reserved.
     8  
     9     Licensed under the Apache License, Version 2.0 (the "License");
    10     you may not use this file except in compliance with the License.
    11     You may obtain a copy of the License at:
    12  
    13       http://www.apache.org/licenses/LICENSE-2.0
    14  
    15   */
    16  
    17  #ifndef _HAVE_TYPES_H
    18  #define _HAVE_TYPES_H
    19  
    20  #include <stdint.h>
    21  #include <stdlib.h>
    22  
    23  typedef uint8_t  u8;
    24  typedef uint16_t u16;
    25  typedef uint32_t u32;
    26  
    27  /*
    28  
    29     Ugh. There is an unintended compiler / glibc #include glitch caused by
    30     combining the u64 type an %llu in format strings, necessitating a workaround.
    31  
    32     In essence, the compiler is always looking for 'unsigned long long' for %llu.
    33     On 32-bit systems, the u64 type (aliased to uint64_t) is expanded to
    34     'unsigned long long' in <bits/types.h>, so everything checks out.
    35  
    36     But on 64-bit systems, it is #ifdef'ed in the same file as 'unsigned long'.
    37     Now, it only happens in circumstances where the type happens to have the
    38     expected bit width, *but* the compiler does not know that... and complains
    39     about 'unsigned long' being unsafe to pass to %llu.
    40  
    41   */
    42  
    43  #ifdef __x86_64__
    44  typedef unsigned long long u64;
    45  #else
    46  typedef uint64_t u64;
    47  #endif /* ^__x86_64__ */
    48  
    49  typedef int8_t   s8;
    50  typedef int16_t  s16;
    51  typedef int32_t  s32;
    52  typedef int64_t  s64;
    53  
    54  #ifndef MIN
    55  #  define MIN(_a,_b) ((_a) > (_b) ? (_b) : (_a))
    56  #  define MAX(_a,_b) ((_a) > (_b) ? (_a) : (_b))
    57  #endif /* !MIN */
    58  
    59  #define SWAP16(_x) ({ \
    60      u16 _ret = (_x); \
    61      (u16)((_ret << 8) | (_ret >> 8)); \
    62    })
    63  
    64  #define SWAP32(_x) ({ \
    65      u32 _ret = (_x); \
    66      (u32)((_ret << 24) | (_ret >> 24) | \
    67            ((_ret << 8) & 0x00FF0000) | \
    68            ((_ret >> 8) & 0x0000FF00)); \
    69    })
    70  
    71  #ifdef AFL_LLVM_PASS
    72  #  define AFL_R(x) (random() % (x))
    73  #else
    74  #  define R(x) (random() % (x))
    75  #endif /* ^AFL_LLVM_PASS */
    76  
    77  #define STRINGIFY_INTERNAL(x) #x
    78  #define STRINGIFY(x) STRINGIFY_INTERNAL(x)
    79  
    80  #define MEM_BARRIER() \
    81    __asm__ volatile("" ::: "memory")
    82  
    83  #define likely(_x)   __builtin_expect(!!(_x), 1)
    84  #define unlikely(_x)  __builtin_expect(!!(_x), 0)
    85  
    86  #endif /* ! _HAVE_TYPES_H */