===== Valgrind =====
The recommended installation method is %%FreeBSD%% Ports & Packages.
===== Installation =====
Note: There may be some differences or delays between binary package versions and port versions, depending on whether you use [[QuarterlyBranch|Quarterly]] or Latest package branch.
==== Stable Version ====
The ''%%devel/valgrind%%'' port follows the official Valgrind release cycle, which is roughly aligned with the %%RedHat%% Fedora release cycle, with bi-annual releases targeted for April and October.
Install using either:
* Ports: ''%%cd /usr/ports/devel/valgrind && make install%%'' OR
* Packages: ''%%pkg install valgrind%%''
==== Development Version ====
The ''%%devel/valgrind-devel%%'' port will install a version of Valgrind that is tracking the upstream git repository, and is updated if/when there are sufficient fixes between official Valgrind releases.
Install using either:
* Ports: ''%%cd /usr/ports/devel/valgrind-devel && make install%%'' OR
* Packages: ''%%pkg install valgrind-devel%%''
===== Building from Source =====
==== Pre-Requisites ====
Building valgrind requires the following ports to be installed:
* devel/gmake
* devel/autoconf
* devel/automake
==== Obtaining the Valgrind Source ====
Starting with Valgrind 3.18.1 %%FreeBSD%% support has been integrated into the main Valgrind codebase. Prior to 3.18.1 (though still maintained) the source was hosted on on GitHub
* [[https://valgrind.org/|Valgrind Homepage]]
* [[https://valgrind.org/downloads/current.html|Valgrind.org: Download Valgrind Source Code]]
To check out pre-3.18.1 versions of the source:
git clone https://github.com/paulfloyd/freebsd_valgrind.git
The mercurial bitbucket repo that was the basis of the %%FreeBSD%% Valgrind port up to 3.17 is no longer accessible.
==== Building ====
sh autogen.sh
./configure
gmake
gmake install
===== TODO =====
- Implement a %%FreeBSD%% fair scheduler. Linux has a futex based scheduler. It uses come GCC ''%%__sync%%'' builtins (also available with clang). And a couple of syscalls for futex. Shouldn't be too hard to port to use _umtx_op.
- Implement rfork.
* See https://github.com/paulfloyd/freebsd_valgrind/issues/197
- Improve vgdb-invoker.
- Implement some form of lldb-server.
- Improve core dumps. Currently they are just Linux style core dumps with a %%FreeBSD%% tag.
- Add freeres support to libc [[https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=259294|FreeBSD Bugzilla Issue #259294]]
- Much needs to be done for Clang OMP.
- Fix handling of thread TLS allocation for Helgrind.
* See: https://github.com/paulfloyd/freebsd_valgrind/issues/113
===== Links =====
* [[https://github.com/paulfloyd/freebsd_valgrind|GitHub: paulfloyd/freebsd_valgrind Repository]]
* [[https://www.freshports.org/devel/valgrind/|FreshPorts: devel/valgrind Port]]