diff options
-rw-r--r-- | sim/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | sim/testsuite/sim/cris/c/hellodyn3.c | 9 | ||||
-rw-r--r-- | sim/testsuite/sim/cris/c/mmap5.c | 91 | ||||
-rw-r--r-- | sim/testsuite/sim/cris/c/mmap6.c | 8 | ||||
-rw-r--r-- | sim/testsuite/sim/cris/c/mmap7.c | 14 | ||||
-rw-r--r-- | sim/testsuite/sim/cris/c/mmap8.c | 9 |
6 files changed, 136 insertions, 0 deletions
diff --git a/sim/testsuite/ChangeLog b/sim/testsuite/ChangeLog index 564a8dc..4ee0222 100644 --- a/sim/testsuite/ChangeLog +++ b/sim/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-01-06 Hans-Peter Nilsson <hp@axis.com> + + * sim/cris/c/mmap5.c, sim/cris/c/mmap6.c, sim/cris/c/mmap7.c, + sim/cris/c/mmap8.c, sim/cris/c/hellodyn3.c: New tests. + 2009-01-03 Hans-Peter Nilsson <hp@axis.com> * sim/cris/c/settls1.c: New test. diff --git a/sim/testsuite/sim/cris/c/hellodyn3.c b/sim/testsuite/sim/cris/c/hellodyn3.c new file mode 100644 index 0000000..8ae3a4f --- /dev/null +++ b/sim/testsuite/sim/cris/c/hellodyn3.c @@ -0,0 +1,9 @@ +/* Check that invoking ld.so as a program, invoking the main program, + works. Jump through a few hoops to avoid reading the host + ld.so.cache (having no absolute path specified for the executable + falls back on loading through the same mechanisms as a DSO). +#notarget: *-*-elf +#dynamic: +#sim: --sysroot=@exedir@ @exedir@/lib/ld.so.1 --library-path / + */ +#include "hello.c" diff --git a/sim/testsuite/sim/cris/c/mmap5.c b/sim/testsuite/sim/cris/c/mmap5.c new file mode 100644 index 0000000..95f00c3 --- /dev/null +++ b/sim/testsuite/sim/cris/c/mmap5.c @@ -0,0 +1,91 @@ +/* +#notarget: cris*-*-elf +*/ + +#define _GNU_SOURCE +#include <string.h> +#include <stdlib.h> +#include <stdio.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> +#include <unistd.h> +#include <sys/mman.h> + +int main (int argc, char *argv[]) +{ + int fd = open (argv[0], O_RDONLY); + struct stat sb; + int size; + void *a; + void *b; + const char *str = "a string you'll only find in the program"; + + if (fd == -1) + { + perror ("open"); + abort (); + } + + if (fstat (fd, &sb) < 0) + { + perror ("fstat"); + abort (); + } + + size = 8192; +#ifdef MMAP_SIZE1 + size = MMAP_SIZE1; +#endif + +#ifndef MMAP_PROT1 +#define MMAP_PROT1 PROT_READ | PROT_WRITE | PROT_EXEC +#endif + +#ifndef MMAP_FLAGS1 +#define MMAP_FLAGS1 MAP_PRIVATE | MAP_ANONYMOUS +#endif + + /* Get a page, any page. */ + b = mmap (NULL, size, MMAP_PROT1, MMAP_FLAGS1, -1, 0); + if (b == MAP_FAILED) + abort (); + + /* Remember it, unmap it. */ +#ifndef NO_MUNMAP + if (munmap (b, size) != 0) + abort (); +#endif + +#ifdef MMAP_ADDR2 + b = MMAP_ADDR2; +#endif + +#ifndef MMAP_PROT2 +#define MMAP_PROT2 PROT_READ | PROT_EXEC +#endif + +#ifndef MMAP_FLAGS2 +#define MMAP_FLAGS2 MAP_DENYWRITE | MAP_FIXED | MAP_PRIVATE +#endif + + size = sb.st_size; +#ifdef MMAP_SIZE2 + size = MMAP_SIZE2; +#endif + +#define MMAP_TEST_BAD_ORIG \ + (a == MAP_FAILED || memmem (a, size, str, strlen (str) + 1) == NULL) +#ifndef MMAP_TEST_BAD +#define MMAP_TEST_BAD MMAP_TEST_BAD_ORIG +#endif + + /* Try mapping the now non-mapped page fixed. */ + a = mmap (b, size, MMAP_PROT2, MMAP_FLAGS2, fd, 0); + + if (MMAP_TEST_BAD) + abort (); + + printf ("pass\n"); + exit (0); +} diff --git a/sim/testsuite/sim/cris/c/mmap6.c b/sim/testsuite/sim/cris/c/mmap6.c new file mode 100644 index 0000000..929d9cc --- /dev/null +++ b/sim/testsuite/sim/cris/c/mmap6.c @@ -0,0 +1,8 @@ +/* Check that mmapping specifying a previously mmapped address without + MAP_FIXED works; that we just don't get the same address. +#notarget: cris*-*-elf +*/ +#define NO_MUNMAP +#define MMAP_FLAGS2 MAP_PRIVATE +#define MMAP_TEST_BAD (a == b || MMAP_TEST_BAD_ORIG) +#include "mmap5.c" diff --git a/sim/testsuite/sim/cris/c/mmap7.c b/sim/testsuite/sim/cris/c/mmap7.c new file mode 100644 index 0000000..c4b14b0 --- /dev/null +++ b/sim/testsuite/sim/cris/c/mmap7.c @@ -0,0 +1,14 @@ +/* Check that mmapping a page-aligned size, larger than the file, + works. + +#notarget: cris*-*-elf +*/ + +/* Make sure we get an address where the size fits. */ +#define MMAP_SIZE1 ((sb.st_size + 8192) & ~8191) + +/* If this ever fails because the file is a page-multiple, we'll deal + with that then. We want it larger than the file-size anyway. */ +#define MMAP_SIZE2 ((size + 8192) & ~8191) +#define MMAP_FLAGS2 MAP_DENYWRITE | MAP_PRIVATE | MAP_FIXED +#include "mmap5.c" diff --git a/sim/testsuite/sim/cris/c/mmap8.c b/sim/testsuite/sim/cris/c/mmap8.c new file mode 100644 index 0000000..0564c79 --- /dev/null +++ b/sim/testsuite/sim/cris/c/mmap8.c @@ -0,0 +1,9 @@ +/* Check that mmapping 0 using MAP_FIXED works, both with/without + there being previously mmapped contents. +#notarget: cris*-*-elf +*/ +#define MMAP_FLAGS1 MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED +#define NO_MUNMAP +#define MMAP_SIZE2 8192 +#define MMAP_TEST_BAD (a != b || a != 0) +#include "mmap5.c" |