1 Installing from ports or via pkg
2 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4 If you are using FreeBSD 11.3 or later, then you should be able to install
7 pkg install devel/valgrind
9 or alternatively from ports (if installed)
11 cd /usr/ports/devel/valgrind && make install clean
17 Install ports for autoconf, automake, libtool and gmake.
20 $ ./configure --prefix=/where/ever
24 Known Limitations (June 2022)
26 0. Be aware that if you use a wrapper script and run Valgrind on the wrapper
27 script Valgrind may hit restrictions if the wrapper script runs any
28 Capsicum enabled applications. Examples of Capsicum enabled applications
29 are echo, basename, tee, uniq and wc. It is recommended that you either
30 avoid these applications or that you run Valgrind directly on your test
32 1. There are some limitations when running Valgrind on code that was compiled
33 with clang. These issues are not present with code compiled with GCC.
34 a) There may be missing source information concerning variables due
35 to DWARF extensions used by GCC.
36 b) Code that uses OpenMP will generate spurious errors.
37 2. vgdb invoker, which uses ptrace, may cause system calls to be
38 interrupted. As an example, if the debuggee seems to have be
39 stuck and you press Ctrl-C in gdb the debuggee may execute
40 one more statement before stopping and returning control to
46 See README_DEVELOPERS, README_MISSING_SYSCALL_OR_IOCTL and docs/*
47 for more general information for developers.
51 When adding syscalls, you need to look at the manpage and also syscalls.master
53 https://github.com/freebsd/freebsd/blob/master/sys/kern/syscalls.master
55 https://github.com/freebsd/freebsd/blob/master/sys/compat/freebsd32/syscalls.master
57 and if you installed the src package there should also be
59 /usr/src/sys/kern/syscalls.master
61 /usr/src/sys/compat/freebsd32/syscalls.master)
63 syscalls.master is particularly useful for seeing quickly whether parameters
64 are inputs or outputs.
66 The syscall wrappers can vary from trivial to difficult. Fortunately, many are
67 either trivial (no arguments) or easy (Valgrind just needs to know what memory
68 is being read or written). Some syscalls, such as those involving process
69 creation and termination, signals and memory mapping require deeper interaction
72 When you add syscalls you will need to modify several files
73 a) include/vki/vki-scnums-freebsd.h
74 This file contains one #define for each syscall. The _NR_ prefix (Linux
75 style) is used rather than SYS_ for compatibility with the rest of the
77 b) coregrind/m_syswrap/priv_syswrap-freebsd.h
78 This uses the DECL_TEMPLATE macro to generate declarations for the syscall
79 before and after wrappers.
80 c) coregrind/m_syswrap/syswrap-freebsd.c
81 This is where the bulk of the code resides. Toward the end of the file
82 the BSDX_/BSDXY macros are used to generate entries in the table of
83 syscalls. BSDX_ is used for wrappers that only have a 'before', BSDXY
84 if both wrappers are required. In general, syscalls that have no arguments
85 or only input arguments just need a BSDX_ macro (before only). Syscalls
86 with output arguments need a BSDXY macro (before and after).
87 d) If the syscall uses 64bit arguments (long long) then instead of putting
88 the wrapper definitions in syswrap-freebsd.c there will be one definition
89 for each platform amd64 and x86 in syswrap-x86-freebsd.c and
90 syswrap-amd64-freebsd.c.
91 Each long long needs to be split into two ARGs in the x86 version.
93 The PRE (before) wrapper
94 ------------------------
96 Each PRE wrapper always contains the following two macro calls
98 PRINT. This outputs the syscall name and argument values when Valgrind is
102 PRE_READ_REGX. This macro lets Valgrind know about the number and types of the
103 syscall arguments which allows Valgrind to check that they are initialized.
104 X is the number of arguments. It is best that the argument names match
105 the man page, but they must match the types and number of arguments in
106 syscalls.master. Occasionally there are differences between the two.
108 If the syscall takes pointers to memory there will be one of the following for
109 each pointer argument.
111 PRE_MEM_RASCIIZ for NULL terminated ascii strings.
113 PRE_MEM_READ for pointers to structures or arrays that are read.
115 PRE_MEM_WRITE for pointers to structures or arrays that are written.
117 As a rule, the definitions of structures are copied into vki-freebsd.h
118 with the vki- prefix. [vki - Valgrind kernel interface; this was done
119 historically to protect against discrepancies between user include
120 structure definitions and kernel definitions on Linux].
122 The POST (after) wrapper
123 ------------------------
125 These are much easier.
127 They just contain a POST_MEM_WRITE macro for each output argument.
129 1. Running regression tests
131 In order to run all of the regression tests you will need to install
132 the following packages
136 In addition to running "make" you will need to run
137 "make check" to build the regression test exectutables
138 and "make regtest". Again, more details can be seen in
141 If you want to run the 'nightly' script (see nightly/README.txt)
142 you will need to install coreutils and modify the
143 nightly/conf/freebsd.* files. The default configuration
144 sends an e-mail to the valgrind-testresults mailing list.
149 If you find any problems please create a bugzilla report at
150 https://bugs.kde.org using the Valgrind product.
152 Alternatively you can use the FreeBSD bugilla
153 https://bugs.freebsd.org
158 Valgrind was originally ported to FreeBSD by Doug Rabson
161 Paul Floyd (that's me), started looking at this project in late 2018,
162 took a long pause and then continued in earnest in January 2020.
164 A big thanks to Nick Briggs for helping with the x86 version.
166 Kyle Evans and Ed Maste for contributing patches and helping with the
167 integration with FreeBSD ports.
169 Prior to 2018 many others have also contributed.
176 Brian Fundakowski Feldman