]> sourceware.org Git - valgrind.git/commitdiff
Update FreeBSD (f)stat tests for FreeBSD 13.1
authorPaul Floyd <pjfloyd@wanadoo.fr>
Thu, 19 May 2022 17:52:57 +0000 (19:52 +0200)
committerPaul Floyd <pjfloyd@wanadoo.fr>
Thu, 19 May 2022 17:52:57 +0000 (19:52 +0200)
Somewhat annoyingly, libc is using tail call optimization
which alters our callstacks.

FreeBSD 13 and earlier had something like

{compatibility API check}
  1372e0:       48 8d 95 08 fe ff ff    lea    -0x1f8(%rbp),%rdx
  1372e7:       bf 8d 01 00 00          mov    $0x18d,%edi
  1372ec:       44 89 f6                mov    %r14d,%esi
  1372ef:       31 c0                   xor    %eax,%eax
  1372f1:       e8 8a c5 09 00          call   1d3880 <syscall@plt>

{compatibility API check}
  1342b9:       3d 9f 4f 12 00          cmp    $0x124f9f,%eax
  1342be:       7c 25                   jl     1342e5 <_fstatfs+0x55>
  1342c0:       49 8b 07                mov    (%r15),%rax
  1342c3:       48 3b 45 e0             cmp    -0x20(%rbp),%rax
  1342c7:       0f 85 51 01 00 00       jne    13441e <_fstatfs+0x18e>

{compatibility not needed}
  1342cd:       44 89 f7                mov    %r14d,%edi
  1342d0:       48 89 de                mov    %rbx,%rsi
  1342d3:       48 81 c4 e8 01 00 00    add    $0x1e8,%rsp
  1342da:       5b                      pop    %rbx
  1342db:       41 5e                   pop    %r14
  1342dd:       41 5f                   pop    %r15
  1342df:       5d                      pop    %rbp

{tail call optimization}

  1342e0:       e9 bb a0 09 00          jmp    1ce3a0 <__sys_fstatfs@plt>

{compatibility API call}

So I've updated the expecteds and added a filter for 13.0 and older.

memcheck/tests/freebsd/Makefile.am
memcheck/tests/freebsd/filter_fstat [new file with mode: 0755]
memcheck/tests/freebsd/stat.stderr.exp
memcheck/tests/freebsd/stat.vgtest
memcheck/tests/freebsd/statfs.stderr.exp
memcheck/tests/freebsd/statfs.vgtest

index b9dc4a6d767ad61b4b0ecf02ff3b24fa2ccb4b4f..472f92125e31ee7b5e4228f4b1b7cc459c2d39ab 100644 (file)
@@ -2,7 +2,7 @@
 include $(top_srcdir)/Makefile.tool-tests.am
 
 dist_noinst_SCRIPTS = filter_stderr filter_pts dump_stdout filter_sigwait \
-       filter_scalar filter_realpathat
+       filter_scalar filter_realpathat filter_fstat
 
 EXTRA_DIST = \
        scalar.h \
diff --git a/memcheck/tests/freebsd/filter_fstat b/memcheck/tests/freebsd/filter_fstat
new file mode 100755 (executable)
index 0000000..b3bdb24
--- /dev/null
@@ -0,0 +1,8 @@
+#! /bin/sh
+
+../filter_stderr "$@" |
+
+gsed '/by 0x........: stat (in \/...libc...)/d;/by 0x........: fstat (in \/...libc...)/d;/by 0x........: fstatat (in \/...libc...)/d' |
+gsed '/by 0x........: statfs (in \/...libc...)/d;/by 0x........: fstatfs (in \/...libc...)/d'
+
+exit 0
index 017dfc77ca8ffe393e52d111597424fa27a144dd..6df3fa375e609d796e7b12989c16ea8ebf9d4ccd 100644 (file)
@@ -1,6 +1,5 @@
 Syscall param fstatat(path) points to unaddressable byte(s)
    ...
-   by 0x........: stat (in /...libc...)
    by 0x........: main (stat.c:52)
  Address 0x........ is 0 bytes inside a block of size 7 free'd
    at 0x........: free (vg_replace_malloc.c:...)
@@ -12,7 +11,6 @@ Syscall param fstatat(path) points to unaddressable byte(s)
 
 Syscall param fstatat(sb) points to unaddressable byte(s)
    ...
-   by 0x........: stat (in /...libc...)
    by 0x........: main (stat.c:57)
  Address 0x........ is 0 bytes inside a block of size 224 free'd
    at 0x........: free (vg_replace_malloc.c:...)
@@ -23,7 +21,6 @@ Syscall param fstatat(sb) points to unaddressable byte(s)
 
 Syscall param fstat(sb) points to unaddressable byte(s)
    at 0x........: __sys_fstat (in /...libc...)
-   by 0x........: fstat (in /...libc...)
    by 0x........: main (stat.c:61)
  Address 0x........ is 0 bytes inside a block of size 224 free'd
    at 0x........: free (vg_replace_malloc.c:...)
@@ -34,16 +31,13 @@ Syscall param fstat(sb) points to unaddressable byte(s)
 
 Syscall param fstat(fd) contains uninitialised byte(s)
    at 0x........: __sys_fstat (in /...libc...)
-   by 0x........: fstat (in /...libc...)
    by 0x........: main (stat.c:64)
 
 Syscall param fstatat(fd) contains uninitialised byte(s)
    ...
-   by 0x........: fstatat (in /...libc...)
    by 0x........: main (stat.c:66)
 
 Syscall param fstatat(flag) contains uninitialised byte(s)
    ...
-   by 0x........: fstatat (in /...libc...)
    by 0x........: main (stat.c:67)
 
index 320803b1d7800af7796b8391147ddf47c794dd5d..bbdf19a1a8fb081de62402c5848dafca6470695e 100644 (file)
@@ -1,3 +1,4 @@
 prereq: test -e ./stat
 prog: stat
 vgopts: -q
+stderr_filter: filter_fstat
index 43e51f98421430289875610d10e3e71e667f4a52..e60ab30fe60721ce68d56389c037a3feac3e915a 100644 (file)
@@ -1,6 +1,5 @@
 Syscall param statfs(buf) points to unaddressable byte(s)
    at 0x........: _statfs (in /...libc...)
-   by 0x........: statfs (in /...libc...)
    by 0x........: main (statfs.c:28)
  Address 0x........ is 0 bytes inside a block of size 2,344 free'd
    at 0x........: free (vg_replace_malloc.c:...)
@@ -11,7 +10,6 @@ Syscall param statfs(buf) points to unaddressable byte(s)
 
 Syscall param fstatfs(buf) points to unaddressable byte(s)
    at 0x........: __sys_fstatfs (in /...libc...)
-   by 0x........: fstatfs (in /...libc...)
    by 0x........: main (statfs.c:31)
  Address 0x........ is 0 bytes inside a block of size 2,344 free'd
    at 0x........: free (vg_replace_malloc.c:...)
@@ -22,7 +20,6 @@ Syscall param fstatfs(buf) points to unaddressable byte(s)
 
 Syscall param statfs(buf) points to unaddressable byte(s)
    at 0x........: _statfs (in /...libc...)
-   by 0x........: statfs (in /...libc...)
    by 0x........: main (statfs.c:34)
  Address 0x........ is 0 bytes after a block of size 2,341 alloc'd
    at 0x........: malloc (vg_replace_malloc.c:...)
@@ -30,7 +27,6 @@ Syscall param statfs(buf) points to unaddressable byte(s)
 
 Syscall param statfs(path) points to unaddressable byte(s)
    at 0x........: _statfs (in /...libc...)
-   by 0x........: statfs (in /...libc...)
    by 0x........: main (statfs.c:39)
  Address 0x........ is 0 bytes inside a block of size 8 free'd
    at 0x........: free (vg_replace_malloc.c:...)
@@ -42,6 +38,5 @@ Syscall param statfs(path) points to unaddressable byte(s)
 
 Syscall param fstatfs(fd) contains uninitialised byte(s)
    at 0x........: __sys_fstatfs (in /...libc...)
-   by 0x........: fstatfs (in /...libc...)
    by 0x........: main (statfs.c:42)
 
index 73c40609d9c15c53544e692986daa3a95d0ff15d..e76486ae86024f0c9f553a018b68f6c0d682a8d9 100644 (file)
@@ -1,3 +1,4 @@
 prereq: test -e ./statfs
 prog: statfs
 vgopts: -q
+stderr_filter: filter_fstat
This page took 1.094267 seconds and 5 git commands to generate.