1 /* BZ #18877 mmap offset test.
3 Copyright (C) 2015-2016 Free Software Foundation, Inc.
4 This file is part of the GNU C Library.
6 The GNU C Library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Lesser General Public
8 License as published by the Free Software Foundation; either
9 version 2.1 of the License, or (at your option) any later version.
11 The GNU C Library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Lesser General Public License for more details.
16 You should have received a copy of the GNU Lesser General Public
17 License along with the GNU C Library; if not, see
18 <http://www.gnu.org/licenses/>. */
27 printmsg (int rc
, const char *msg
)
29 printf ("%s failed: %m\n", msg
);
33 /* Check if negative offsets are handled correctly by mmap. */
37 const int prot
= PROT_READ
| PROT_WRITE
;
38 const int flags
= MAP_SHARED
;
39 const unsigned long length
= 0x10000;
40 const unsigned long offset
= 0xace00000;
41 const unsigned long size
= offset
+ length
;
44 char fname
[] = "tst-mmap-offset-XXXXXX";
46 fd
= mkstemp64 (fname
);
48 return printmsg (1, "mkstemp");
51 return printmsg (1, "unlink");
53 if (ftruncate64 (fd
, size
))
54 return printmsg (0, "ftruncate64");
56 addr
= mmap (NULL
, length
, prot
, flags
, fd
, offset
);
57 if (MAP_FAILED
== addr
)
58 return printmsg (1, "mmap");
60 /* This memcpy is likely to SIGBUS if mmap has messed up with offset. */
61 memcpy (addr
, fname
, sizeof (fname
));
66 #define TEST_FUNCTION do_test ()
67 #include "../test-skeleton.c"