summaryrefslogtreecommitdiffstats
path: root/src/H5detect.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/H5detect.c')
-rw-r--r--src/H5detect.c42
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)
{