]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
[gdb/tdep] Fix selftest scoped_mmap on freebsd
authorTom de Vries <tdevries@suse.de>
Sat, 5 Jul 2025 11:29:53 +0000 (13:29 +0200)
committerTom de Vries <tdevries@suse.de>
Sat, 5 Jul 2025 11:29:53 +0000 (13:29 +0200)
On x86_64-freebsd, I run into:
...
$ gdb -q -batch -ex "maint selftest scoped_mmap"
Running selftest scoped_mmap.
Self test failed: self-test failed at scoped_mmap-selftests.c:50

Failures:
  scoped_mmap

Ran 1 unit tests, 1 failed
...

The problem is that this call:
...
    ::scoped_mmap smmap (nullptr, sysconf (_SC_PAGESIZE), PROT_WRITE,
 MAP_ANONYMOUS | MAP_PRIVATE, 0, 0);
...
returns MAP_FAILED and sets errno to EINVAL because the argument fd == 0.

If MAP_ANONYMOUS is used, fd == -1 should be used on freebsd.  On linux, fd is
ignored but -1 is recommended for portability.

Fix this by using fd == -1 instead.

Tested x86_64-freebsd and x86_64-linux.

gdb/unittests/scoped_mmap-selftests.c

index 72568fe19b74e5e516a5c78a11e02212ee7672eb..f752b9aa33c49e88462e4f9d9460d9176d4ad61c 100644 (file)
@@ -41,7 +41,7 @@ test_destroy ()
   errno = 0;
   {
     ::scoped_mmap smmap (nullptr, sysconf (_SC_PAGESIZE), PROT_WRITE,
-                        MAP_ANONYMOUS | MAP_PRIVATE, 0, 0);
+                        MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
 
     mem = smmap.get ();
     SELF_CHECK (mem != nullptr);
@@ -59,7 +59,7 @@ test_release ()
   errno = 0;
   {
     ::scoped_mmap smmap (nullptr, sysconf (_SC_PAGESIZE), PROT_WRITE,
-                        MAP_ANONYMOUS | MAP_PRIVATE, 0, 0);
+                        MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
 
     mem = smmap.release ();
     SELF_CHECK (mem != nullptr);