38#ifndef SECP256K1_CHECKMEM_H
39#define SECP256K1_CHECKMEM_H
42#define SECP256K1_CHECKMEM_NOOP(p, len) do { (void)(p); (void)(len); } while(0)
47#if defined(__has_feature)
48# if __has_feature(memory_sanitizer)
49# include <sanitizer/msan_interface.h>
50# define SECP256K1_CHECKMEM_ENABLED 1
51# if defined(__clang__) && ((__clang_major__ == 21 && __clang_minor__ >= 1) || __clang_major__ >= 22)
52# define SECP256K1_CHECKMEM_UNDEFINE(p, len) do { \
54 _Pragma("clang diagnostic push") \
55 _Pragma("clang diagnostic ignored \"-Wuninitialized-const-pointer\"") \
56 __msan_allocated_memory((p), (len)); \
57 _Pragma("clang diagnostic pop") \
60# define SECP256K1_CHECKMEM_UNDEFINE(p, len) __msan_allocated_memory((p), (len))
62# define SECP256K1_CHECKMEM_DEFINE(p, len) __msan_unpoison((p), (len))
63# define SECP256K1_CHECKMEM_MSAN_DEFINE(p, len) __msan_unpoison((p), (len))
64# define SECP256K1_CHECKMEM_CHECK(p, len) __msan_check_mem_is_initialized((p), (len))
65# define SECP256K1_CHECKMEM_RUNNING() (1)
69#if !defined SECP256K1_CHECKMEM_MSAN_DEFINE
70# define SECP256K1_CHECKMEM_MSAN_DEFINE(p, len) SECP256K1_CHECKMEM_NOOP((p), (len))
75#if !defined SECP256K1_CHECKMEM_ENABLED
78# if defined(__clang__) && defined(__APPLE__)
79# pragma clang diagnostic push
80# pragma clang diagnostic ignored "-Wreserved-identifier"
82# include <valgrind/memcheck.h>
83# if defined(__clang__) && defined(__APPLE__)
84# pragma clang diagnostic pop
86# define SECP256K1_CHECKMEM_ENABLED 1
87# define SECP256K1_CHECKMEM_UNDEFINE(p, len) VALGRIND_MAKE_MEM_UNDEFINED((p), (len))
88# define SECP256K1_CHECKMEM_DEFINE(p, len) VALGRIND_MAKE_MEM_DEFINED((p), (len))
89# define SECP256K1_CHECKMEM_CHECK(p, len) VALGRIND_CHECK_MEM_IS_DEFINED((p), (len))
93# define SECP256K1_CHECKMEM_RUNNING() (VALGRIND_MAKE_MEM_DEFINED(NULL, 0) != 0)
98#if !defined SECP256K1_CHECKMEM_ENABLED
99# define SECP256K1_CHECKMEM_ENABLED 0
100# define SECP256K1_CHECKMEM_UNDEFINE(p, len) SECP256K1_CHECKMEM_NOOP((p), (len))
101# define SECP256K1_CHECKMEM_DEFINE(p, len) SECP256K1_CHECKMEM_NOOP((p), (len))
102# define SECP256K1_CHECKMEM_CHECK(p, len) SECP256K1_CHECKMEM_NOOP((p), (len))
103# define SECP256K1_CHECKMEM_RUNNING() (0)
107#define SECP256K1_CHECKMEM_CHECK_VERIFY(p, len) SECP256K1_CHECKMEM_CHECK((p), (len))
109#define SECP256K1_CHECKMEM_CHECK_VERIFY(p, len) SECP256K1_CHECKMEM_NOOP((p), (len))