aboutsummaryrefslogtreecommitdiff
path: root/tests/old_mmap.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/old_mmap.c')
-rw-r--r--tests/old_mmap.c56
1 files changed, 33 insertions, 23 deletions
diff --git a/tests/old_mmap.c b/tests/old_mmap.c
index 2725fb75..35ec4288 100644
--- a/tests/old_mmap.c
+++ b/tests/old_mmap.c
@@ -2,6 +2,7 @@
* Check decoding of "old mmap" edition of mmap syscall.
*
* Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2018 The strace developers.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -36,57 +37,64 @@
* it would require additional efforts to filter out mmap calls made by glibc.
*/
-#if defined __NR_mmap && \
-( defined __arm__ \
- || defined __i386__ \
- || (defined __s390__ && !defined __s390x__) \
-)
+#if defined __NR_mmap \
+ && (defined __arm__ || defined __i386__ || defined __m68k__ \
+ || defined __s390__ || defined __s390x__) \
+ && (defined PATH_TRACING || !(defined __s390x__ || defined __m68k__))
# include <stdio.h>
# include <string.h>
# include <sys/mman.h>
# include <unistd.h>
+# ifndef TEST_FD
+# define TEST_FD -2LU
+# endif
+
int
main(void)
{
long rc = syscall(__NR_mmap, 0);
+# ifndef PATH_TRACING
printf("mmap(NULL) = %ld %s (%m)\n", rc, errno2name());
+# endif
- const unsigned int args1_c[6] = {
- 0xdeadbeef, /* addr */
- 0xfacefeed, /* len */
+ const unsigned long args1_c[6] = {
+ (unsigned long) 0xbadc0deddeadbeefULL, /* addr */
+ (unsigned long) 0xdeefacedfacefeedULL, /* len */
PROT_READ|PROT_EXEC, /* prot */
MAP_FILE|MAP_FIXED, /* flags */
- -2U, /* fd */
- 0xbadc0ded /* offset */
+ TEST_FD, /* fd */
+ (unsigned long) 0xdecaffedbadc0dedULL /* offset */
};
- const unsigned int page_size = get_page_size();
- const unsigned int args2_c[6] = {
+ const unsigned long page_size = get_page_size();
+ const unsigned long args2_c[6] = {
0,
page_size,
PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_ANONYMOUS,
- -1U,
- 0xfaced000 & -page_size
+ -1LU,
+ (unsigned long) 0xda7a1057faced000ULL & -page_size
};
void *args = tail_memdup(args1_c, sizeof(args1_c));
rc = syscall(__NR_mmap, args);
- printf("mmap(%#x, %u, PROT_READ|PROT_EXEC, MAP_FILE|MAP_FIXED"
- ", %d, %#x) = %ld %s (%m)\n",
- args1_c[0], args1_c[1], args1_c[4], args1_c[5],
+ printf("mmap(%#lx, %lu, PROT_READ|PROT_EXEC, MAP_FILE|MAP_FIXED"
+ ", %d, %#lx) = %ld %s (%m)\n",
+ args1_c[0], args1_c[1], (int) args1_c[4], args1_c[5],
rc, errno2name());
memcpy(args, args2_c, sizeof(args2_c));
rc = syscall(__NR_mmap, args);
- printf("mmap(NULL, %u, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS"
- ", %d, %#x) = %#lx\n",
- args2_c[1], args2_c[4], args2_c[5], rc);
+# ifndef PATH_TRACING
+ printf("mmap(NULL, %lu, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS"
+ ", %d, %#lx) = %#lx\n",
+ args2_c[1], (int) args2_c[4], args2_c[5], rc);
+# endif
void *addr = (void *) rc;
if (mprotect(addr, page_size, PROT_NONE))
- perror_msg_and_fail("mprotect(%p, %u, PROT_NONE)",
+ perror_msg_and_fail("mprotect(%p, %lu, PROT_NONE)",
addr, page_size);
puts("+++ exited with 0 +++");
@@ -95,7 +103,9 @@ main(void)
#else
-SKIP_MAIN_UNDEFINED("__NR_mmap && (__arm__ || __i386__"
- " || (__s390__ && !__s390x__))")
+SKIP_MAIN_UNDEFINED("defined __NR_mmap "
+ "&& (defined __arm__ || defined __i386__ || defined __m68k__ "
+ "|| defined __s390__ || defined __s390x__) "
+ "&& (defined PATH_TRACING || !(defined __s390x__ || defined __m68k__))")
#endif