From: Marc Nieper-Wißkirchen Date: Sat, 25 Nov 2023 17:14:55 +0000 (+0100) Subject: jit/cache-tests: New module. X-Git-Tag: v1.0~575 X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=55b2dd5f523815923d51903e028c2ef0167b18d7;p=gnulib.git jit/cache-tests: New module. * tests/jit/test-cache.c: New file. * modules/jit/cache-tests: New file. Mark the test as unportable for now. --- diff --git a/ChangeLog b/ChangeLog index 6fab60c4f0..8cc61bb26b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2023-11-25 Marc Nieper-Wißkirchen + + jit/cache-tests: New module. + * tests/jit/test-cache.c: New file. + * modules/jit/cache-tests: New file. Mark the test as unportable + for now. + 2023-11-25 Marc Nieper-Wißkirchen jit/cache: Fix configure error. diff --git a/modules/jit/cache-tests b/modules/jit/cache-tests new file mode 100644 index 0000000000..eff828890d --- /dev/null +++ b/modules/jit/cache-tests @@ -0,0 +1,20 @@ +Files: +tests/jit/test-cache.c +tests/macros.h + +Status: +unportable-test + +Depends-on: +getpagesize +pagealign_alloc +stdint + +configure.ac: +AC_CHECK_HEADERS_ONCE([sys/mman.h]) +AC_CHECK_FUNCS_ONCE([mprotect]) + +Makefile.am: +TESTS += test-cache +check_PROGRAMS += test-cache +test_cache_SOURCES = jit/test-cache.c diff --git a/tests/jit/test-cache.c b/tests/jit/test-cache.c new file mode 100644 index 0000000000..47c81a8b1e --- /dev/null +++ b/tests/jit/test-cache.c @@ -0,0 +1,77 @@ +/* Test clear_cache. + + Copyright 2023 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include + +#include +#include +#include + +#if HAVE_SYS_MMAN_H && HAVE_MPROTECT +# include +#endif + +#include "macros.h" + +/* This test assumes that the code generated by the compiler for the + procedures `return1' and `return2' is position independent. It + also assumes that function pointers are compatible with data + pointers and that these are bit-compatible to integers. */ + +static int +return1 (void) +{ + return 1; +} + +static int +return2 (void) +{ + return 2; +} + +int +main () +{ +#if !(HAVE_SYS_MMAN_H && HAVE_SYS_MMAN_H) + return 77; +#endif + + int const pagesize = getpagesize (); + unsigned char *start = pagealign_xalloc (pagesize); + unsigned char *end = start + pagesize; + + /* We have to call `mprotect' before the tests because on some + platforms `mprotect' invalidates the caches. */ + mprotect (start, end - start, PROT_READ | PROT_WRITE | PROT_EXEC); + + int (*f) (void) = (void *) start; + + /* We assume that the code is not longer than 64 bytes and that we + can access the full 64 bytes for reading. */ + memcpy (start, return1, 64); + clear_cache (start, end); + ASSERT (f () == 1); + + memcpy (start, return2, 64); + clear_cache (start, end); + ASSERT (f () == 2); + + return 0; +}