diff options
Diffstat (limited to 'src/H5detect.c')
-rw-r--r-- | src/H5detect.c | 42 |
1 files changed, 29 insertions, 13 deletions
diff --git a/src/H5detect.c b/src/H5detect.c index 2dae228..1780932 100644 --- a/src/H5detect.c +++ b/src/H5detect.c @@ -36,8 +36,8 @@ static const char *FileHeader = "\n\ * Livermore National Laboratory. * * Detects machine byte order and floating point - * format and generates a C source file (native.c) - * to describe those paramters. + * format and generates a C source file (H5Tinit.c) + * to describe those parameters. * * Assumptions: We have an ANSI compiler. We're on a Unix like * system or configure has detected those Unix @@ -54,6 +54,16 @@ static const char *FileHeader = "\n\ #include "H5Tpublic.h" #include "H5Rpublic.h" +#if defined(__has_attribute) +#if __has_attribute(no_sanitize) +#define HDF_NO_UBSAN __attribute__((no_sanitize("undefined"))) +#else +#define HDF_NO_UBSAN +#endif +#else +#define HDF_NO_UBSAN +#endif + #define MAXDETECT 64 /* The ALIGNMENT test code may generate the SIGBUS, SIGSEGV, or SIGILL signals. @@ -65,7 +75,7 @@ static const char *FileHeader = "\n\ /* Define H5SETJMP/H5LONGJMP depending on if sigsetjmp/siglongjmp are */ /* supported. */ #if defined(H5_HAVE_SIGSETJMP) && defined(H5_HAVE_SIGLONGJMP) -/* Always save blocked signals to be restore by siglongjmp. */ +/* Always save blocked signals to be restored by siglongjmp. */ #define H5JMP_BUF sigjmp_buf #define H5SETJMP(buf) HDsigsetjmp(buf, 1) #define H5LONGJMP(buf, val) HDsiglongjmp(buf, val) @@ -1347,7 +1357,7 @@ bit.\n"; * *------------------------------------------------------------------------- */ -static void +static void HDF_NO_UBSAN detect_C89_integers(void) { DETECT_BYTE(signed char, SCHAR, d_g[nd_g]); nd_g++; @@ -1375,7 +1385,7 @@ detect_C89_integers(void) * *------------------------------------------------------------------------- */ -static void +static void HDF_NO_UBSAN detect_C89_floats(void) { DETECT_F(float, FLOAT, d_g[nd_g]); nd_g++; @@ -1397,7 +1407,7 @@ detect_C89_floats(void) * *------------------------------------------------------------------------- */ -static void +static void HDF_NO_UBSAN detect_C99_integers8(void) { #if H5_SIZEOF_INT8_T>0 @@ -1459,7 +1469,7 @@ detect_C99_integers8(void) * *------------------------------------------------------------------------- */ -static void +static void HDF_NO_UBSAN detect_C99_integers16(void) { #if H5_SIZEOF_INT16_T>0 @@ -1497,7 +1507,7 @@ detect_C99_integers16(void) * *------------------------------------------------------------------------- */ -static void +static void HDF_NO_UBSAN detect_C99_integers32(void) { #if H5_SIZEOF_INT32_T>0 @@ -1535,7 +1545,7 @@ detect_C99_integers32(void) * *------------------------------------------------------------------------- */ -static void +static void HDF_NO_UBSAN detect_C99_integers64(void) { #if H5_SIZEOF_INT64_T>0 @@ -1586,7 +1596,7 @@ detect_C99_integers64(void) * *------------------------------------------------------------------------- */ -static void +static void HDF_NO_UBSAN detect_C99_integers(void) { /* break it down to more subroutines so that each module subroutine */ @@ -1612,7 +1622,7 @@ detect_C99_integers(void) * *------------------------------------------------------------------------- */ -static void +static void HDF_NO_UBSAN detect_C99_floats(void) { #if H5_SIZEOF_DOUBLE == H5_SIZEOF_LONG_DOUBLE @@ -1643,7 +1653,7 @@ detect_C99_floats(void) * *------------------------------------------------------------------------- */ -static void +static void HDF_NO_UBSAN detect_alignments(void) { /* Detect structure alignment for pointers, hvl_t, hobj_ref_t, hdset_reg_ref_t */ @@ -1662,6 +1672,12 @@ detect_alignments(void) */ static int verify_signal_handlers(int signum, void (*handler)(int)) { +#if defined(__has_feature) +#if __has_feature(address_sanitizer) || __has_feature(thread_sanitizer) + /* Under the address and thread sanitizers, don't raise any signals. */ + return 0; +#endif +#endif void (*save_handler)(int) = HDsignal(signum, handler); int i, val; int ntries=5; @@ -1725,7 +1741,7 @@ static int verify_signal_handlers(int signum, void (*handler)(int)) * *------------------------------------------------------------------------- */ -int +int HDF_NO_UBSAN main(void) { |