public inbox for glibc-cvs@sourceware.org
help / color / mirror / Atom feed
* [glibc/arm/morello/main] support: Fix TEST_COMPARE for uintptr_t.
@ 2022-08-05 19:37 Szabolcs Nagy
0 siblings, 0 replies; 4+ messages in thread
From: Szabolcs Nagy @ 2022-08-05 19:37 UTC (permalink / raw)
To: glibc-cvs
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=f4fe4afdf02c7d9732029b91221048bb0c48a399
commit f4fe4afdf02c7d9732029b91221048bb0c48a399
Author: Carlos Eduardo Seo <carlos.seo@arm.com>
Date: Mon Jun 27 21:27:50 2022 +0000
support: Fix TEST_COMPARE for uintptr_t.
TEST_COMPARE should allow comparison between two capability values.
Diff:
---
support/check.h | 42 ++++++++++++++++++++++++++++++++--
support/support_test_compare_failure.c | 25 ++++++++++++++++++++
2 files changed, 65 insertions(+), 2 deletions(-)
diff --git a/support/check.h b/support/check.h
index fa080cf480..202d5a8047 100644
--- a/support/check.h
+++ b/support/check.h
@@ -98,7 +98,8 @@ void support_record_failure (void);
/* Compare the two integers LEFT and RIGHT and report failure if they
are different. */
-#define TEST_COMPARE(left, right) \
+#ifndef __CHERI_PURE_CAPABILITY__
+# define TEST_COMPARE(left, right) \
({ \
/* + applies the integer promotions, for bitfield support. */ \
typedef __typeof__ (+ (left)) __left_type; \
@@ -126,6 +127,32 @@ void support_record_failure (void);
#left, __left_value, __left_is_positive, sizeof (__left_type), \
#right, __right_value, __right_is_positive, sizeof (__right_type)); \
})
+#else
+# define TEST_COMPARE(left, right) \
+ ({ \
+ /* + applies the integer promotions, for bitfield support. */ \
+ typedef __typeof__ (+ (left)) __left_type; \
+ typedef __typeof__ (+ (right)) __right_type; \
+ __left_type __left_value = (left); \
+ __right_type __right_value = (right); \
+ int __left_is_positive = __left_value > 0; \
+ int __right_is_positive = __right_value > 0; \
+ /* Prevent use with floating-point types. */ \
+ support_static_assert ((__left_type) 1.0 == (__left_type) 1.5, \
+ "left value has floating-point type"); \
+ support_static_assert ((__right_type) 1.0 == (__right_type) 1.5, \
+ "right value has floating-point type"); \
+ /* Compare the value. */ \
+ if (__left_value != __right_value \
+ || __left_is_positive != __right_is_positive) \
+ /* Pass the sign for printing the correct value. */ \
+ support_test_compare_failure \
+ (__FILE__, __LINE__, \
+ #left, __left_value, __left_is_positive, sizeof (__left_type), \
+ #right, __right_value, __right_is_positive, sizeof (__right_type)); \
+ })
+#endif
+
/* Internal implementation of TEST_COMPARE. LEFT_POSITIVE and
RIGHT_POSITIVE are used to store the sign separately, so that both
@@ -133,6 +160,7 @@ void support_record_failure (void);
RIGHT_VALUE, and the function can still print the original value.
LEFT_SIZE and RIGHT_SIZE specify the size of the argument in bytes,
for hexadecimal formatting. */
+#ifndef __CHERI_PURE_CAPABILITY__
void support_test_compare_failure (const char *file, int line,
const char *left_expr,
long long left_value,
@@ -142,7 +170,17 @@ void support_test_compare_failure (const char *file, int line,
long long right_value,
int right_positive,
int right_size);
-
+#else
+void support_test_compare_failure (const char *file, int line,
+ const char *left_expr,
+ __uintcap_t left_value,
+ int left_positive,
+ int left_size,
+ const char *right_expr,
+ __uintcap_t right_value,
+ int right_positive,
+ int right_size);
+#endif
/* Compare [LEFT, LEFT + LEFT_LENGTH) with [RIGHT, RIGHT +
RIGHT_LENGTH) and report a test failure if the arrays are
diff --git a/support/support_test_compare_failure.c b/support/support_test_compare_failure.c
index 792cc2074e..75f000a182 100644
--- a/support/support_test_compare_failure.c
+++ b/support/support_test_compare_failure.c
@@ -34,6 +34,7 @@ report (const char *which, const char *expr, long long value, int positive,
printf (" (0x%llx); from: %s\n", (unsigned long long) value & mask, expr);
}
+#ifndef __CHERI_PURE_CAPABILITY__
void
support_test_compare_failure (const char *file, int line,
const char *left_expr,
@@ -56,3 +57,27 @@ support_test_compare_failure (const char *file, int line,
report ("right", right_expr, right_value, right_positive, right_size);
errno = saved_errno;
}
+#else
+void
+support_test_compare_failure (const char *file, int line,
+ const char *left_expr,
+ __uintcap_t left_value,
+ int left_positive,
+ int left_size,
+ const char *right_expr,
+ __uintcap_t right_value,
+ int right_positive,
+ int right_size)
+{
+ int saved_errno = errno;
+ support_record_failure ();
+ if (left_size != right_size)
+ printf ("%s:%d: numeric comparison failure (widths %d and %d)\n",
+ file, line, left_size * 8, right_size * 8);
+ else
+ printf ("%s:%d: numeric comparison failure\n", file, line);
+ report (" left", left_expr, left_value, left_positive, left_size);
+ report ("right", right_expr, right_value, right_positive, right_size);
+ errno = saved_errno;
+}
+#endif
^ permalink raw reply [flat|nested] 4+ messages in thread
* [glibc/arm/morello/main] support: Fix TEST_COMPARE for uintptr_t.
@ 2022-11-23 14:49 Szabolcs Nagy
0 siblings, 0 replies; 4+ messages in thread
From: Szabolcs Nagy @ 2022-11-23 14:49 UTC (permalink / raw)
To: glibc-cvs
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=4661ab7a69fd30bf29f6dfdb39d76cc5d13c9cc6
commit 4661ab7a69fd30bf29f6dfdb39d76cc5d13c9cc6
Author: Carlos Eduardo Seo <carlos.seo@arm.com>
Date: Mon Jun 27 21:27:50 2022 +0000
support: Fix TEST_COMPARE for uintptr_t.
TEST_COMPARE should allow comparison between two capability values.
Diff:
---
support/check.h | 42 ++++++++++++++++++++++++++++++++--
support/support_test_compare_failure.c | 25 ++++++++++++++++++++
2 files changed, 65 insertions(+), 2 deletions(-)
diff --git a/support/check.h b/support/check.h
index fa080cf480..202d5a8047 100644
--- a/support/check.h
+++ b/support/check.h
@@ -98,7 +98,8 @@ void support_record_failure (void);
/* Compare the two integers LEFT and RIGHT and report failure if they
are different. */
-#define TEST_COMPARE(left, right) \
+#ifndef __CHERI_PURE_CAPABILITY__
+# define TEST_COMPARE(left, right) \
({ \
/* + applies the integer promotions, for bitfield support. */ \
typedef __typeof__ (+ (left)) __left_type; \
@@ -126,6 +127,32 @@ void support_record_failure (void);
#left, __left_value, __left_is_positive, sizeof (__left_type), \
#right, __right_value, __right_is_positive, sizeof (__right_type)); \
})
+#else
+# define TEST_COMPARE(left, right) \
+ ({ \
+ /* + applies the integer promotions, for bitfield support. */ \
+ typedef __typeof__ (+ (left)) __left_type; \
+ typedef __typeof__ (+ (right)) __right_type; \
+ __left_type __left_value = (left); \
+ __right_type __right_value = (right); \
+ int __left_is_positive = __left_value > 0; \
+ int __right_is_positive = __right_value > 0; \
+ /* Prevent use with floating-point types. */ \
+ support_static_assert ((__left_type) 1.0 == (__left_type) 1.5, \
+ "left value has floating-point type"); \
+ support_static_assert ((__right_type) 1.0 == (__right_type) 1.5, \
+ "right value has floating-point type"); \
+ /* Compare the value. */ \
+ if (__left_value != __right_value \
+ || __left_is_positive != __right_is_positive) \
+ /* Pass the sign for printing the correct value. */ \
+ support_test_compare_failure \
+ (__FILE__, __LINE__, \
+ #left, __left_value, __left_is_positive, sizeof (__left_type), \
+ #right, __right_value, __right_is_positive, sizeof (__right_type)); \
+ })
+#endif
+
/* Internal implementation of TEST_COMPARE. LEFT_POSITIVE and
RIGHT_POSITIVE are used to store the sign separately, so that both
@@ -133,6 +160,7 @@ void support_record_failure (void);
RIGHT_VALUE, and the function can still print the original value.
LEFT_SIZE and RIGHT_SIZE specify the size of the argument in bytes,
for hexadecimal formatting. */
+#ifndef __CHERI_PURE_CAPABILITY__
void support_test_compare_failure (const char *file, int line,
const char *left_expr,
long long left_value,
@@ -142,7 +170,17 @@ void support_test_compare_failure (const char *file, int line,
long long right_value,
int right_positive,
int right_size);
-
+#else
+void support_test_compare_failure (const char *file, int line,
+ const char *left_expr,
+ __uintcap_t left_value,
+ int left_positive,
+ int left_size,
+ const char *right_expr,
+ __uintcap_t right_value,
+ int right_positive,
+ int right_size);
+#endif
/* Compare [LEFT, LEFT + LEFT_LENGTH) with [RIGHT, RIGHT +
RIGHT_LENGTH) and report a test failure if the arrays are
diff --git a/support/support_test_compare_failure.c b/support/support_test_compare_failure.c
index 792cc2074e..75f000a182 100644
--- a/support/support_test_compare_failure.c
+++ b/support/support_test_compare_failure.c
@@ -34,6 +34,7 @@ report (const char *which, const char *expr, long long value, int positive,
printf (" (0x%llx); from: %s\n", (unsigned long long) value & mask, expr);
}
+#ifndef __CHERI_PURE_CAPABILITY__
void
support_test_compare_failure (const char *file, int line,
const char *left_expr,
@@ -56,3 +57,27 @@ support_test_compare_failure (const char *file, int line,
report ("right", right_expr, right_value, right_positive, right_size);
errno = saved_errno;
}
+#else
+void
+support_test_compare_failure (const char *file, int line,
+ const char *left_expr,
+ __uintcap_t left_value,
+ int left_positive,
+ int left_size,
+ const char *right_expr,
+ __uintcap_t right_value,
+ int right_positive,
+ int right_size)
+{
+ int saved_errno = errno;
+ support_record_failure ();
+ if (left_size != right_size)
+ printf ("%s:%d: numeric comparison failure (widths %d and %d)\n",
+ file, line, left_size * 8, right_size * 8);
+ else
+ printf ("%s:%d: numeric comparison failure\n", file, line);
+ report (" left", left_expr, left_value, left_positive, left_size);
+ report ("right", right_expr, right_value, right_positive, right_size);
+ errno = saved_errno;
+}
+#endif
^ permalink raw reply [flat|nested] 4+ messages in thread
* [glibc/arm/morello/main] support: Fix TEST_COMPARE for uintptr_t.
@ 2022-10-27 14:00 Szabolcs Nagy
0 siblings, 0 replies; 4+ messages in thread
From: Szabolcs Nagy @ 2022-10-27 14:00 UTC (permalink / raw)
To: glibc-cvs
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=fac448ae9edb57ad6a8415ecfa6ef5dad61a9d0c
commit fac448ae9edb57ad6a8415ecfa6ef5dad61a9d0c
Author: Carlos Eduardo Seo <carlos.seo@arm.com>
Date: Mon Jun 27 21:27:50 2022 +0000
support: Fix TEST_COMPARE for uintptr_t.
TEST_COMPARE should allow comparison between two capability values.
Diff:
---
support/check.h | 42 ++++++++++++++++++++++++++++++++--
support/support_test_compare_failure.c | 25 ++++++++++++++++++++
2 files changed, 65 insertions(+), 2 deletions(-)
diff --git a/support/check.h b/support/check.h
index fa080cf480..202d5a8047 100644
--- a/support/check.h
+++ b/support/check.h
@@ -98,7 +98,8 @@ void support_record_failure (void);
/* Compare the two integers LEFT and RIGHT and report failure if they
are different. */
-#define TEST_COMPARE(left, right) \
+#ifndef __CHERI_PURE_CAPABILITY__
+# define TEST_COMPARE(left, right) \
({ \
/* + applies the integer promotions, for bitfield support. */ \
typedef __typeof__ (+ (left)) __left_type; \
@@ -126,6 +127,32 @@ void support_record_failure (void);
#left, __left_value, __left_is_positive, sizeof (__left_type), \
#right, __right_value, __right_is_positive, sizeof (__right_type)); \
})
+#else
+# define TEST_COMPARE(left, right) \
+ ({ \
+ /* + applies the integer promotions, for bitfield support. */ \
+ typedef __typeof__ (+ (left)) __left_type; \
+ typedef __typeof__ (+ (right)) __right_type; \
+ __left_type __left_value = (left); \
+ __right_type __right_value = (right); \
+ int __left_is_positive = __left_value > 0; \
+ int __right_is_positive = __right_value > 0; \
+ /* Prevent use with floating-point types. */ \
+ support_static_assert ((__left_type) 1.0 == (__left_type) 1.5, \
+ "left value has floating-point type"); \
+ support_static_assert ((__right_type) 1.0 == (__right_type) 1.5, \
+ "right value has floating-point type"); \
+ /* Compare the value. */ \
+ if (__left_value != __right_value \
+ || __left_is_positive != __right_is_positive) \
+ /* Pass the sign for printing the correct value. */ \
+ support_test_compare_failure \
+ (__FILE__, __LINE__, \
+ #left, __left_value, __left_is_positive, sizeof (__left_type), \
+ #right, __right_value, __right_is_positive, sizeof (__right_type)); \
+ })
+#endif
+
/* Internal implementation of TEST_COMPARE. LEFT_POSITIVE and
RIGHT_POSITIVE are used to store the sign separately, so that both
@@ -133,6 +160,7 @@ void support_record_failure (void);
RIGHT_VALUE, and the function can still print the original value.
LEFT_SIZE and RIGHT_SIZE specify the size of the argument in bytes,
for hexadecimal formatting. */
+#ifndef __CHERI_PURE_CAPABILITY__
void support_test_compare_failure (const char *file, int line,
const char *left_expr,
long long left_value,
@@ -142,7 +170,17 @@ void support_test_compare_failure (const char *file, int line,
long long right_value,
int right_positive,
int right_size);
-
+#else
+void support_test_compare_failure (const char *file, int line,
+ const char *left_expr,
+ __uintcap_t left_value,
+ int left_positive,
+ int left_size,
+ const char *right_expr,
+ __uintcap_t right_value,
+ int right_positive,
+ int right_size);
+#endif
/* Compare [LEFT, LEFT + LEFT_LENGTH) with [RIGHT, RIGHT +
RIGHT_LENGTH) and report a test failure if the arrays are
diff --git a/support/support_test_compare_failure.c b/support/support_test_compare_failure.c
index 792cc2074e..75f000a182 100644
--- a/support/support_test_compare_failure.c
+++ b/support/support_test_compare_failure.c
@@ -34,6 +34,7 @@ report (const char *which, const char *expr, long long value, int positive,
printf (" (0x%llx); from: %s\n", (unsigned long long) value & mask, expr);
}
+#ifndef __CHERI_PURE_CAPABILITY__
void
support_test_compare_failure (const char *file, int line,
const char *left_expr,
@@ -56,3 +57,27 @@ support_test_compare_failure (const char *file, int line,
report ("right", right_expr, right_value, right_positive, right_size);
errno = saved_errno;
}
+#else
+void
+support_test_compare_failure (const char *file, int line,
+ const char *left_expr,
+ __uintcap_t left_value,
+ int left_positive,
+ int left_size,
+ const char *right_expr,
+ __uintcap_t right_value,
+ int right_positive,
+ int right_size)
+{
+ int saved_errno = errno;
+ support_record_failure ();
+ if (left_size != right_size)
+ printf ("%s:%d: numeric comparison failure (widths %d and %d)\n",
+ file, line, left_size * 8, right_size * 8);
+ else
+ printf ("%s:%d: numeric comparison failure\n", file, line);
+ report (" left", left_expr, left_value, left_positive, left_size);
+ report ("right", right_expr, right_value, right_positive, right_size);
+ errno = saved_errno;
+}
+#endif
^ permalink raw reply [flat|nested] 4+ messages in thread
* [glibc/arm/morello/main] support: Fix TEST_COMPARE for uintptr_t.
@ 2022-10-26 15:21 Szabolcs Nagy
0 siblings, 0 replies; 4+ messages in thread
From: Szabolcs Nagy @ 2022-10-26 15:21 UTC (permalink / raw)
To: glibc-cvs
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=9fd3495588248ba7e0504fb5af35c83474344c62
commit 9fd3495588248ba7e0504fb5af35c83474344c62
Author: Carlos Eduardo Seo <carlos.seo@arm.com>
Date: Mon Jun 27 21:27:50 2022 +0000
support: Fix TEST_COMPARE for uintptr_t.
TEST_COMPARE should allow comparison between two capability values.
Diff:
---
support/check.h | 42 ++++++++++++++++++++++++++++++++--
support/support_test_compare_failure.c | 25 ++++++++++++++++++++
2 files changed, 65 insertions(+), 2 deletions(-)
diff --git a/support/check.h b/support/check.h
index fa080cf480..202d5a8047 100644
--- a/support/check.h
+++ b/support/check.h
@@ -98,7 +98,8 @@ void support_record_failure (void);
/* Compare the two integers LEFT and RIGHT and report failure if they
are different. */
-#define TEST_COMPARE(left, right) \
+#ifndef __CHERI_PURE_CAPABILITY__
+# define TEST_COMPARE(left, right) \
({ \
/* + applies the integer promotions, for bitfield support. */ \
typedef __typeof__ (+ (left)) __left_type; \
@@ -126,6 +127,32 @@ void support_record_failure (void);
#left, __left_value, __left_is_positive, sizeof (__left_type), \
#right, __right_value, __right_is_positive, sizeof (__right_type)); \
})
+#else
+# define TEST_COMPARE(left, right) \
+ ({ \
+ /* + applies the integer promotions, for bitfield support. */ \
+ typedef __typeof__ (+ (left)) __left_type; \
+ typedef __typeof__ (+ (right)) __right_type; \
+ __left_type __left_value = (left); \
+ __right_type __right_value = (right); \
+ int __left_is_positive = __left_value > 0; \
+ int __right_is_positive = __right_value > 0; \
+ /* Prevent use with floating-point types. */ \
+ support_static_assert ((__left_type) 1.0 == (__left_type) 1.5, \
+ "left value has floating-point type"); \
+ support_static_assert ((__right_type) 1.0 == (__right_type) 1.5, \
+ "right value has floating-point type"); \
+ /* Compare the value. */ \
+ if (__left_value != __right_value \
+ || __left_is_positive != __right_is_positive) \
+ /* Pass the sign for printing the correct value. */ \
+ support_test_compare_failure \
+ (__FILE__, __LINE__, \
+ #left, __left_value, __left_is_positive, sizeof (__left_type), \
+ #right, __right_value, __right_is_positive, sizeof (__right_type)); \
+ })
+#endif
+
/* Internal implementation of TEST_COMPARE. LEFT_POSITIVE and
RIGHT_POSITIVE are used to store the sign separately, so that both
@@ -133,6 +160,7 @@ void support_record_failure (void);
RIGHT_VALUE, and the function can still print the original value.
LEFT_SIZE and RIGHT_SIZE specify the size of the argument in bytes,
for hexadecimal formatting. */
+#ifndef __CHERI_PURE_CAPABILITY__
void support_test_compare_failure (const char *file, int line,
const char *left_expr,
long long left_value,
@@ -142,7 +170,17 @@ void support_test_compare_failure (const char *file, int line,
long long right_value,
int right_positive,
int right_size);
-
+#else
+void support_test_compare_failure (const char *file, int line,
+ const char *left_expr,
+ __uintcap_t left_value,
+ int left_positive,
+ int left_size,
+ const char *right_expr,
+ __uintcap_t right_value,
+ int right_positive,
+ int right_size);
+#endif
/* Compare [LEFT, LEFT + LEFT_LENGTH) with [RIGHT, RIGHT +
RIGHT_LENGTH) and report a test failure if the arrays are
diff --git a/support/support_test_compare_failure.c b/support/support_test_compare_failure.c
index 792cc2074e..75f000a182 100644
--- a/support/support_test_compare_failure.c
+++ b/support/support_test_compare_failure.c
@@ -34,6 +34,7 @@ report (const char *which, const char *expr, long long value, int positive,
printf (" (0x%llx); from: %s\n", (unsigned long long) value & mask, expr);
}
+#ifndef __CHERI_PURE_CAPABILITY__
void
support_test_compare_failure (const char *file, int line,
const char *left_expr,
@@ -56,3 +57,27 @@ support_test_compare_failure (const char *file, int line,
report ("right", right_expr, right_value, right_positive, right_size);
errno = saved_errno;
}
+#else
+void
+support_test_compare_failure (const char *file, int line,
+ const char *left_expr,
+ __uintcap_t left_value,
+ int left_positive,
+ int left_size,
+ const char *right_expr,
+ __uintcap_t right_value,
+ int right_positive,
+ int right_size)
+{
+ int saved_errno = errno;
+ support_record_failure ();
+ if (left_size != right_size)
+ printf ("%s:%d: numeric comparison failure (widths %d and %d)\n",
+ file, line, left_size * 8, right_size * 8);
+ else
+ printf ("%s:%d: numeric comparison failure\n", file, line);
+ report (" left", left_expr, left_value, left_positive, left_size);
+ report ("right", right_expr, right_value, right_positive, right_size);
+ errno = saved_errno;
+}
+#endif
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2022-11-23 14:49 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-08-05 19:37 [glibc/arm/morello/main] support: Fix TEST_COMPARE for uintptr_t Szabolcs Nagy
2022-10-26 15:21 Szabolcs Nagy
2022-10-27 14:00 Szabolcs Nagy
2022-11-23 14:49 Szabolcs Nagy
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).