• Vincent Dagonneau's avatar
    tools/nolibc: add integer types and integer limit macros · 3e9fd4e9
    Vincent Dagonneau authored
    This commit adds some of the missing integer types to stdint.h and adds
    limit macros (e.g. INTN_{MIN,MAX}).
    
    The reference used for adding these types is
    https://pubs.opengroup.org/onlinepubs/009695399/basedefs/stdint.h.html.
    
    We rely on the compiler-defined __LONG_MAX__ to get the right limits for
    size_t, intptr_t, uintptr_t and ptrdiff_t. This compiler constant seem
    to have been defined at least since GCC 4.1.2 and clang
    3.0.0 on x86_64. It is also defined on ARM (32&64), mips and RISC-V.
    
    Note that the maximum size of size_t is implementation-defined (>65535),
    in this case I chose to go with unsigned long on all platforms since
    unsigned long == unsigned int on all the platforms we care about. Note
    that the kernel uses either unsigned int or unsigned long in
    linux/include/uapi/asm-generic/posix_types.h. These should be equivalent
    for the plaforms we are targeting.
    
    Also note that the 'fast*' flavor of the types have been chosen to be
    always 1 byte for '*fast8*' and always long (a.k.a. intptr_t/uintptr_t) for
    the other variants. I have never seen the 'fast*' types in use in the wild
    but that seems to be what glibc does.
    Signed-off-by: default avatarVincent Dagonneau <v@vda.io>
    Reviewed-by: default avatarThomas Weißschuh <linux@weissschuh.net>
    Signed-off-by: default avatarWilly Tarreau <w@1wt.eu>
    Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
    3e9fd4e9
stdint.h 2.91 KB