public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc(refs/vendors/ARM/heads/morello)] Testism adjustments for pure capability
@ 2022-10-13 11:58 Matthew Malcomson
0 siblings, 0 replies; only message in thread
From: Matthew Malcomson @ 2022-10-13 11:58 UTC (permalink / raw)
To: gcc-cvs
https://gcc.gnu.org/g:d6a3de7701325735daac7a49005c978cc28e97da
commit d6a3de7701325735daac7a49005c978cc28e97da
Author: Matthew Malcomson <matthew.malcomson@arm.com>
Date: Thu Oct 13 12:57:14 2022 +0100
Testism adjustments for pure capability
array25.C
This testcase uses a global buffer as its place to allocate a structure.
During initialisation on unoptimised code, the structure initialises its
sub-structures with zeros. Since the sub-structure contains a pointer
that includes storing a capability. Said global buffer is not aligned.
Hence we get a BUS error.
Here we ensure that the alignment is specified for pure capability
targets.
struct-layout-1.exp
This testcase generates multiple different structures with different
alignment behaviours. It purposefully generates misaligned pointers.
These cause failures on purecap.
This is a G++ variation of the same problem that we had in GCC, and we
simply avoid the tests in the same way that we avoided them in GCC.
g++.abi/vtable2.C
This testcase uses ptrdiff_t for vtable entries. On purecap we have
capability-sized and capability-aligned vtable entries. There seems to
be at least one existing target architecture (see gcc/config/darwin.h)
which uses different types for ptrdiff_t and intptr_t (although I
haven't checked whether these types boil down to the same size data on
hardware), so rather than change the testcase for existing architectures
we only change the type for purecap.
Diff:
---
gcc/testsuite/g++.dg/compat/struct-layout-1.exp | 5 +++++
gcc/testsuite/g++.dg/init/array25.C | 3 +++
gcc/testsuite/g++.old-deja/g++.abi/vtable2.C | 16 +++++++++++-----
3 files changed, 19 insertions(+), 5 deletions(-)
diff --git a/gcc/testsuite/g++.dg/compat/struct-layout-1.exp b/gcc/testsuite/g++.dg/compat/struct-layout-1.exp
index f2a20aafafd..8fc799f794e 100644
--- a/gcc/testsuite/g++.dg/compat/struct-layout-1.exp
+++ b/gcc/testsuite/g++.dg/compat/struct-layout-1.exp
@@ -17,6 +17,11 @@
# This file was written by Jakub Jelinek, <jakub@redhat.com>
# Based on compat.exp writte by Janis Johnson, <janis187@us.ibm.com>
+# The random generator in this testsuite may deliberately underalign
+# capabilities in a packed struct. This is currently not supported.
+if { [check_effective_target_cheri_capability_pure] } then {
+ return
+}
# Test interoperability of two compilers that follow the same ABI.
#
diff --git a/gcc/testsuite/g++.dg/init/array25.C b/gcc/testsuite/g++.dg/init/array25.C
index 1ab2725d7cf..f738d2e67c0 100644
--- a/gcc/testsuite/g++.dg/init/array25.C
+++ b/gcc/testsuite/g++.dg/init/array25.C
@@ -33,6 +33,9 @@ inline void *operator new (__SIZE_TYPE__ size, void *p)
return p;
}
+#ifdef __CHERI_PURE_CAPABILITY__
+__attribute__((aligned(16)))
+#endif
char heap[sizeof(elt[500])];
int main ()
diff --git a/gcc/testsuite/g++.old-deja/g++.abi/vtable2.C b/gcc/testsuite/g++.old-deja/g++.abi/vtable2.C
index 96533e09218..62fbd76ce20 100644
--- a/gcc/testsuite/g++.old-deja/g++.abi/vtable2.C
+++ b/gcc/testsuite/g++.old-deja/g++.abi/vtable2.C
@@ -6,6 +6,12 @@
#include <stddef.h>
+#ifdef __CHERI_PURE_CAPABILITY__
+typedef __INTPTR_TYPE__ vtable_type;
+#else
+typedef ptrdiff_t vtable_type;
+#endif
+
struct S0
{
virtual void s0 ();
@@ -149,14 +155,14 @@ extern "C" {
#ifdef _LP64
#define CMP_VPTR(A, B) (*(unsigned long *)(*(A)+16) == *(unsigned long *)((unsigned long)(B)+16))
#else
-#define CMP_VPTR(A, B) (*(A) == (ptrdiff_t)(B))
+#define CMP_VPTR(A, B) (*(A) == (vtable_type)(B))
#endif /* _LP64 */
#else
extern "C" { unsigned int __canonicalize_funcptr_for_compare (void*); }
#define CMP_VPTR(A, B) (__canonicalize_funcptr_for_compare(*(void **)A) == __canonicalize_funcptr_for_compare((void *)B))
#endif /* __hpux__ */
#else
-#define CMP_VPTR(A, B) (*(A) == (ptrdiff_t)(B))
+#define CMP_VPTR(A, B) (*(A) == (vtable_type)(B))
#endif /* __hppa__ */
#define INC_VPTR(A) ((A) += 1)
#define INC_VDATA(A,N) ((A) += (N))
@@ -165,11 +171,11 @@ extern "C" { unsigned int __canonicalize_funcptr_for_compare (void*); }
int main ()
{
S4 s4;
- ptrdiff_t **vptr;
- ptrdiff_t *vtbl;
+ vtable_type **vptr;
+ vtable_type *vtbl;
// Set vtbl to point at the beginning of S4's primary vtable.
- vptr = (ptrdiff_t **) &s4;
+ vptr = (vtable_type **) &s4;
vtbl = *vptr;
INC_VDATA (vtbl, -5);
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2022-10-13 11:58 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-10-13 11:58 [gcc(refs/vendors/ARM/heads/morello)] Testism adjustments for pure capability Matthew Malcomson
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).