/auxprogs/getoff-nanomips-linux
/auxprogs/getoff-amd64-solaris
/auxprogs/getoff-x86-solaris
+/auxprogs/getoff-*-freebsd
/auxprogs/libmpiwrap-PPC32_LINUX.so
/auxprogs/libmpiwrap-PPC64_LINUX.so
/auxprogs/libmpiwrap-x86-darwin.so
/cachegrind/cachegrind-*-darwin
/cachegrind/cachegrind-*-linux
/cachegrind/cachegrind-*-solaris
+/cachegrind/cachegrind-*-freebsd
/cachegrind/cg_annotate
/cachegrind/cg_diff
/cachegrind/cg_merge
/callgrind/callgrind-*-darwin
/callgrind/callgrind-*-linux
/callgrind/callgrind-*-solaris
+/callgrind/callgrind-*-freebsd
/callgrind/callgrind_annotate
/callgrind/callgrind_control
/callgrind/Makefile
/coregrind/link_tool_exe_darwin
/coregrind/link_tool_exe_linux
/coregrind/link_tool_exe_solaris
+/coregrind/link_tool_exe_freebsd
/coregrind/Makefile
/coregrind/Makefile.in
/coregrind/no_op_client_for_valgrind
/dhat/dhat-*-darwin
/dhat/dhat-*-linux
/dhat/dhat-*-solaris
+/dhat/dhat-*-freebsd
/dhat/Makefile
/dhat/Makefile.in
/dhat/vgpreload_dhat-*-linux.so
/dhat/vgpreload_dhat-*-darwin.so
/dhat/vgpreload_dhat-*-solaris.so
+/dhat/vgpreload_dhat-*-freebsd.so
# /dhat/tests/
/dhat/tests/Makefile
/drd/drd-*-darwin
/drd/drd-*-linux
/drd/drd-*-solaris
+/drd/drd-*-freebsd
/drd/Makefile
/drd/Makefile.in
/drd/splash2
/drd/vgpreload_drd-*-linux.so
/drd/vgpreload_drd-*-darwin.so
/drd/vgpreload_drd-*-solaris.so
+/drd/vgpreload_drd-*-freebsd.so
# /drd/docs/
/drd/docs/.deps
/drd/tests/tc24_nonzero_sem
/drd/tests/threaded-fork
/drd/tests/thread_name
+/drd/tests/thread_name_freebsd
/drd/tests/trylock
/drd/tests/tsan_unittest
/drd/tests/unit_bitmap
/gdbserver_tests/*.dSYM
/gdbserver_tests/*.diff*
/gdbserver_tests/*.out
+/gdbserver_tests/filter_gdb
+/gdbserver_tests/filter_memcheck_monitor
+/gdbserver_tests/filter_stderr
+/gdbserver_tests/filter_vgdb
+/gdbserver_tests/filter_vgdb.in.orig
/gdbserver_tests/.deps
/gdbserver_tests/clean_after_fork
/gdbserver_tests/detailed
/helgrind/helgrind-*-darwin
/helgrind/helgrind-*-linux
/helgrind/helgrind-*-solaris
+/helgrind/helgrind-*-freebsd
/helgrind/Makefile
/helgrind/Makefile.in
/helgrind/vgpreload_helgrind-*-linux.so
/helgrind/vgpreload_helgrind-*-darwin.so
/helgrind/vgpreload_helgrind-*-solaris.so
+/helgrind/vgpreload_helgrind-*-freebsd.so
# /helgrind/docs/
/helgrind/docs/Makefile
/lackey/lackey-*-darwin
/lackey/lackey-*-linux
/lackey/lackey-*-solaris
+/lackey/lackey-*-freebsd
/lackey/Makefile
/lackey/Makefile.in
/massif/massif-*-darwin
/massif/massif-*-linux
/massif/massif-*-solaris
+/massif/massif-*-freebsd
/massif/ms_print
# /massif/docs/
/memcheck/memcheck-*-darwin
/memcheck/memcheck-*-linux
/memcheck/memcheck-*-solaris
+/memcheck/memcheck-*-freebsd
# /memcheck/docs/
/memcheck/docs/Makefile.in
/memcheck/tests/*.stderr.out
/memcheck/tests/*.stdout.diff*
/memcheck/tests/*.stdout.out
+/memcheck/tests/filter_dw4
+/memcheck/tests/filter_overlaperror
/memcheck/tests/.deps
/memcheck/tests/accounting
/memcheck/tests/addressable
/memcheck/tests/zeropage
# /memcheck/tests/amd64/
-/memcheck/tests/amd64/*.diff
+/memcheck/tests/amd64/*.diff*
/memcheck/tests/amd64/*.dSYM
/memcheck/tests/amd64/*.out
/memcheck/tests/amd64/.deps
/memcheck/tests/x86/*.stderr.out
/memcheck/tests/x86/*.stdout.diff
/memcheck/tests/x86/*.stdout.out
+/memcheck/tests/x86/filter_pushfpopf
/memcheck/tests/x86/.deps
/memcheck/tests/x86/Makefile
/memcheck/tests/x86/Makefile.in
/memcheck/tests/x86-solaris/ldsoexec
/memcheck/tests/x86-solaris/scalar
+# /memcheck/tests/freebsd/
+/memcheck/tests/freebsd/*.stderr.diff*
+/memcheck/tests/freebsd/*.stderr.out
+/memcheck/tests/freebsd/*.stdout.diff
+/memcheck/tests/freebsd/*.stdout.out
+/memcheck/tests/freebsd/.deps
+/memcheck/tests/freebsd/Makefile
+/memcheck/tests/freebsd/Makefile.in
+/memcheck/tests/freebsd/statfs
+/memcheck/tests/freebsd/pdfork_pdkill
+/memcheck/tests/freebsd/getfsstat
+/memcheck/tests/freebsd/inlinfo
+/memcheck/tests/freebsd/inlinfo_nested.so
+/memcheck/tests/freebsd/extattr
+/memcheck/tests/freebsd/sigwait
+/memcheck/tests/freebsd/chflags
+/memcheck/tests/freebsd/get_set_login
+/memcheck/tests/freebsd/revoke
+/memcheck/tests/freebsd/scalar
+/memcheck/tests/freebsd/capsicum
+/memcheck/tests/freebsd/getfh
+/memcheck/tests/freebsd/linkat
+/memcheck/tests/freebsd/scalar_fork
+/memcheck/tests/freebsd/scalar_thr_exit
+/memcheck/tests/freebsd/scalar_abort2
+/memcheck/tests/freebsd/scalar_pdfork
+/memcheck/tests/freebsd/scalar_vfork
+/memcheck/tests/freebsd/stat
+/memcheck/tests/freebsd/file_locking_wait6
+/memcheck/tests/freebsd/utimens
+/memcheck/tests/freebsd/access
+/memcheck/tests/freebsd/chmod_chown
+/memcheck/tests/freebsd/misc
+/memcheck/tests/freebsd/get_set_context
+/memcheck/tests/freebsd/utimes
+/memcheck/tests/freebsd/static_allocs
+
+# /memcheck/tests/amd64-freebsd
+/memcheck/tests/amd64-freebsd/*.stderr.diff
+/memcheck/tests/amd64-freebsd/*.stderr.out
+/memcheck/tests/amd64-freebsd/*.stdout.diff
+/memcheck/tests/amd64-freebsd/*.stdout.out
+/memcheck/tests/amd64-freebsd/.deps
+/memcheck/tests/amd64-freebsd/Makefile
+/memcheck/tests/amd64-freebsd/Makefile.in
+/memcheck/tests/amd64-freebsd/posix_fadvise
+/memcheck/tests/amd64-freebsd/posix_fallocate
+
+# /memcheck/tests/x86-freebsd
+/memcheck/tests/x86-freebsd/*.stderr.diff
+/memcheck/tests/x86-freebsd/*.stderr.out
+/memcheck/tests/x86-freebsd/*.stdout.diff
+/memcheck/tests/x86-freebsd/*.stdout.out
+/memcheck/tests/x86-freebsd/.deps
+/memcheck/tests/x86-freebsd/Makefile
+/memcheck/tests/x86-freebsd/Makefile.in
+/memcheck/tests/x86-freebsd/posix_fadvise
+/memcheck/tests/x86-freebsd/posix_fallocate
+
# /mpi/
/mpi/*.dSYM
/mpi/*.so
/none/none-*-darwin
/none/none-*-linux
/none/none-*-solaris
+/none/none-*-freebsd
# /none/docs/
/none/docs/Makefile.in
/none/tests/solaris/stack_prot
/none/tests/solaris/threads_exitall
+# /none/tests/freebsd/
+/none/tests/freebsd/*.stderr.diff
+/none/tests/freebsd/*.stderr.out
+/none/tests/freebsd/*.stdout.diff
+/none/tests/freebsd/*.stdout.out
+/none/tests/freebsd/.deps
+/none/tests/freebsd/Makefile
+/none/tests/freebsd/Makefile.in
+/none/tests/freebsd/auxv
+/none/tests/freebsd/osrel
+/none/tests/freebsd/swapcontext
+
# /none/tests/x86/
/none/tests/x86/*.dSYM
/none/tests/x86/*.stderr.diff
-O -g -fno-omit-frame-pointer -fno-strict-aliasing \
-fpic -fPIC -fno-builtin @FLAG_FNO_IPA_ICF@
else
+if VGCONF_OS_IS_FREEBSD
+AM_CFLAGS_PSO_BASE = -O -g -fno-omit-frame-pointer -fno-strict-aliasing \
+ -fpic -fPIC -fno-builtin
+if COMPILER_IS_CLANG
+ AM_CFLAGS_BASE += @FLAG_W_NO_EXPANSION_TO_DEFINED@
+endif
+else
AM_CFLAGS_PSO_BASE = -O -g -fno-omit-frame-pointer -fno-strict-aliasing \
-fpic -fno-builtin @FLAG_FNO_IPA_ICF@
endif
+endif
# Flags for specific targets.
AM_CFLAGS_PSO_PPC64LE_LINUX = @FLAG_M64@ $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE)
AM_CCASFLAGS_PPC64LE_LINUX = @FLAG_M64@ -g
+AM_FLAG_M3264_X86_FREEBSD = @FLAG_M32@
+AM_CFLAGS_X86_FREEBSD = @FLAG_M32@ @PREFERRED_STACK_BOUNDARY_2@ \
+ $(AM_CFLAGS_BASE) -fomit-frame-pointer
+AM_CFLAGS_PSO_X86_FREEBSD = @FLAG_M32@ $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE)
+AM_CCASFLAGS_X86_FREEBSD = @FLAG_M32@ -g
+
AM_FLAG_M3264_ARM_LINUX = @FLAG_M32@
AM_CFLAGS_ARM_LINUX = @FLAG_M32@ \
$(AM_CFLAGS_BASE) -marm -mcpu=cortex-a8
AM_CFLAGS_PSO_ARM64_LINUX = @FLAG_M64@ $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE)
AM_CCASFLAGS_ARM64_LINUX = @FLAG_M64@ -g
+
+AM_FLAG_M3264_AMD64_FREEBSD = @FLAG_M64@
+AM_CFLAGS_AMD64_FREEBSD = @FLAG_M64@ \
+ $(AM_CFLAGS_BASE) -fomit-frame-pointer
+AM_CFLAGS_PSO_AMD64_FREEBSD = @FLAG_M64@ $(AM_CFLAGS_BASE) $(AM_CFLAGS_PSO_BASE)
+AM_CCASFLAGS_AMD64_FREEBSD = @FLAG_M64@ -g
+
+
AM_FLAG_M3264_X86_DARWIN = -arch i386
AM_CFLAGS_X86_DARWIN = $(WERROR) -arch i386 $(AM_CFLAGS_BASE) \
-mmacosx-version-min=10.6 \
# Baseline link flags for making vgpreload shared objects.
#
PRELOAD_LDFLAGS_COMMON_LINUX = -nodefaultlibs -shared -Wl,-z,interpose,-z,initfirst
+PRELOAD_LDFLAGS_COMMON_FREEBSD = -nodefaultlibs -shared -Wl,-z,interpose,-z,initfirst
PRELOAD_LDFLAGS_COMMON_DARWIN = -dynamic -dynamiclib -all_load
PRELOAD_LDFLAGS_COMMON_SOLARIS = -nodefaultlibs -shared -Wl,-z,interpose,-z,initfirst
if SOLARIS_XPG_SYMBOLS_PRESENT
PRELOAD_LDFLAGS_PPC64LE_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M64@
PRELOAD_LDFLAGS_ARM_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M32@
PRELOAD_LDFLAGS_ARM64_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M64@
+PRELOAD_LDFLAGS_X86_FREEBSD = $(PRELOAD_LDFLAGS_COMMON_FREEBSD) @FLAG_M32@
+PRELOAD_LDFLAGS_AMD64_FREEBSD= $(PRELOAD_LDFLAGS_COMMON_FREEBSD) @FLAG_M64@
PRELOAD_LDFLAGS_X86_DARWIN = $(PRELOAD_LDFLAGS_COMMON_DARWIN) -arch i386
PRELOAD_LDFLAGS_AMD64_DARWIN = $(PRELOAD_LDFLAGS_COMMON_DARWIN) -arch x86_64
PRELOAD_LDFLAGS_S390X_LINUX = $(PRELOAD_LDFLAGS_COMMON_LINUX) @FLAG_M64@
glibc-2.2-LinuxThreads-helgrind.supp \
glibc-2.X-drd.supp \
darwin9.supp darwin9-drd.supp \
+ freebsd.supp freebsd-helgrind.supp freebsd-drd.supp \
darwin10.supp darwin10-drd.supp \
darwin11.supp darwin12.supp darwin13.supp darwin14.supp darwin15.supp \
darwin16.supp darwin17.supp \
README.mips \
README.aarch64 \
README.solaris \
+ README.freebsd \
NEWS.old \
valgrind.pc.in \
valgrind.spec.in \
TOOL_LDFLAGS_COMMON_SOLARIS = \
-static -nodefaultlibs -nostartfiles -u _start \
-Wl,-M,/usr/lib/ld/map.noexstk
+TOOL_LDFLAGS_COMMON_FREEBSD = -static \
+ -nodefaultlibs -nostartfiles -Wl,-u,_start @FLAG_NO_BUILD_ID@
TOOL_LDFLAGS_X86_LINUX = \
$(TOOL_LDFLAGS_COMMON_LINUX) @FLAG_M32@
+TOOL_LDFLAGS_X86_FREEBSD = \
+ $(TOOL_LDFLAGS_COMMON_FREEBSD) @FLAG_M32@
+
TOOL_LDFLAGS_AMD64_LINUX = \
$(TOOL_LDFLAGS_COMMON_LINUX) @FLAG_M64@
+TOOL_LDFLAGS_AMD64_FREEBSD = \
+ $(TOOL_LDFLAGS_COMMON_FREEBSD) @FLAG_M64@
+
TOOL_LDFLAGS_PPC32_LINUX = \
$(TOOL_LDFLAGS_COMMON_LINUX) @FLAG_M32@
LIBREPLACEMALLOC_PPC64LE_LINUX = \
$(top_builddir)/coregrind/libreplacemalloc_toolpreload-ppc64le-linux.a
+LIBREPLACEMALLOC_X86_FREEBSD = \
+ $(top_builddir)/coregrind/libreplacemalloc_toolpreload-x86-freebsd.a
+
LIBREPLACEMALLOC_ARM_LINUX = \
$(top_builddir)/coregrind/libreplacemalloc_toolpreload-arm-linux.a
LIBREPLACEMALLOC_ARM64_LINUX = \
$(top_builddir)/coregrind/libreplacemalloc_toolpreload-arm64-linux.a
+LIBREPLACEMALLOC_AMD64_FREEBSD = \
+ $(top_builddir)/coregrind/libreplacemalloc_toolpreload-amd64-freebsd.a
+
LIBREPLACEMALLOC_X86_DARWIN = \
$(top_builddir)/coregrind/libreplacemalloc_toolpreload-x86-darwin.a
$(LIBREPLACEMALLOC_ARM64_LINUX) \
-Wl,--no-whole-archive
+LIBREPLACEMALLOC_LDFLAGS_X86_FREEBSD = \
+ -Wl,--whole-archive \
+ $(LIBREPLACEMALLOC_X86_FREEBSD) \
+ -Wl,--no-whole-archive
+
+LIBREPLACEMALLOC_LDFLAGS_AMD64_FREEBSD = \
+ -Wl,--whole-archive \
+ $(LIBREPLACEMALLOC_AMD64_FREEBSD) \
+ -Wl,--no-whole-archive
+
LIBREPLACEMALLOC_LDFLAGS_X86_DARWIN = \
$(LIBREPLACEMALLOC_X86_DARWIN)
than mailing the developers (or mailing lists) directly -- bugs that
are not entered into bugzilla tend to get forgotten about or ignored.
+208531 [PATCH]: FreeBSD support for valgrind
368960 WARNING: unhandled amd64-linux syscall: 163 (acct)
+407589 [Linux] Add support for C11 aligned_alloc() and GNU reallocarray()
423963 Error in child thread when CLONE_PIDFD is used
429375 PPC ISA 3.1 support is missing, part 9
431157 PPC_FEATURE2_SCV needs to be masked in AT_HWCAP2
- nanoMIPS/Linux
- X86/Solaris
- AMD64/Solaris
+- X86/FreeBSD
+- AMD64/FreeBSD
Note that AMD64 is just another name for x86_64, and Valgrind runs fine
on Intel processors. Also note that the core of macOS is called
--- /dev/null
+Installing from ports or via pkg
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+If you are using FreeBSD 11.3 or later, then you should be able to install
+Valgrind using either
+
+pkg install devel/valgrind
+
+or alternatively from ports (if installed)
+
+cd /usr/ports/devel/valgrind && make install clean
+
+
+Building Valgrind
+~~~~~~~~~~~~~~~~~
+
+Install ports for autoconf, automake, libtool and gmake.
+
+$ sh autogen.sh
+$ ./configure --prefix=/where/ever
+$ gmake
+$ gmake install
+
+Known Limitations (December 2020)
+
+0. Be aware that if you use a wrapper script and run Valgrind on the wrapper
+ script Valgrind may hit restrictions if the wrapper script runs any
+ Capsicum enabled applications. Examples of Capsicum enabled applications
+ are echo, basename, tee, uniq and wc. It is recommended that you either
+ avoid these applications or that you run Valgrind directly on your test
+ application.
+1. There are some limitations when running Valgrind on code that was compiled
+ with clang. These issues are not present with code compiled with GCC.
+ a) There may be missing source information concerning variables.
+ b) The client request mechanism may not work entirely correctly.
+ c) Code that uses OpenMP will generate spurious errors.
+2. There are some limitations specific to i386
+ a) In some cases signals are mishandled causing Valgrind to terminate and
+ report a SIGSEGV.
+ b) Applications that create and join many threads may crash.
+
+Notes for Developers
+~~~~~~~~~~~~~~~~~~~~
+
+See README_DEVELOPERS, README_MISSING_SYSCALL_OR_IOCTL and docs/*
+for more general information for developers.
+
+0. Adding syscalls.
+
+When adding syscalls, you need to look at the manpage and also syscalls.master
+(online at
+https://github.com/freebsd/freebsd/blob/master/sys/kern/syscalls.master
+and for 32bit
+https://github.com/freebsd/freebsd/blob/master/sys/compat/freebsd32/syscalls.master
+
+and if you installed the src package there should also be
+
+/usr/src/sys/kern/syscalls.master
+and
+/usr/src/sys/compat/freebsd32/syscalls.master)
+
+syscalls.master is particularly useful for seeing quickly whether parameters
+are inputs or outputs.
+
+The syscall wrappers can vary from trivial to difficult. Fortunately, many are
+either trivial (no arguments) or easy (Valgrind just needs to know what memory
+is being read or written). Some syscalls, such as those involving process
+creation and termination, signals and memory mapping require deeper interaction
+with Valgrind.
+
+When you add syscalls you will need to modify several files
+ a) include/vki/vki-scnums-freebsd.h
+ This file contains one #define for each syscall. The _NR_ prefix (Linux
+ style) is used rather than SYS_ for compatibility with the rest of the
+ Valgrind source.
+ b) coregrind/m_syswrap/priv_syswrap-freebsd.h
+ This uses the DECL_TEMPLATE macro to generate declarations for the syscall
+ before and after wrappers.
+ c) coregrind/m_syswrap/syswrap-freebsd.c
+ This is where the bulk of the code resides. Toward the end of the file
+ the BSDX_/BSDXY macros are used to generate entries in the table of
+ syscalls. BSDX_ is used for wrappers that only have a 'before', BSDXY
+ if both wrappers are required. In general, syscalls that have no arguments
+ or only input arguments just need a BSDX_ macro (before only). Syscalls
+ with output arguments need a BSDXY macro (before and after).
+ d) If the syscall uses 64bit arguments (long long) then instead of putting
+ the wrapper definitions in syswrap-freebsd.c there will be one definition
+ for each platform amd64 and x86 in syswrap-x86-freebsd.c and
+ syswrap-amd64-freebsd.c.
+ Each long long needs to be split into two ARGs in the x86 version.
+
+The PRE (before) wrapper
+------------------------
+
+Each PRE wrapper always contains the following two macro calls
+
+PRINT. This outputs the syscall name and argument values when Valgrind is
+executed with
+--trace-syscalls=yes
+
+PRE_READ_REGX. This macro lets Valgrind know about the number and types of the
+syscall arguments which allows Valgrind to check that they are initialized.
+X is the number of arguments. It is best that the argument names match
+the man page, but the must match the types and number of arguments in
+syscalls.master.
+Occasionally there are differences between the two.
+
+If the syscall takes pointers to memory there will be one of the following for
+each pointer argument.
+
+PRE_MEM_RASCIIZ for NULL terminated ascii strings.
+
+PRE_MEM_READ for pointers to structures or arrays that are read.
+
+PRE_MEM_WRITE for pointers to structures or arrays that are written.
+
+As a rule, the definitions of structures are copied into vki-freebsd.h
+with the vki- prefix. [vki - Valgrind kernel interface; this was done
+historically to protect against discrepancies between user include
+structure definitions and kernel definitions on Linux].
+
+The POST (after) wrapper
+------------------------
+
+These are much easier.
+
+They just contain a POST_MEM_WRITE macro for each output argument.
+
+
+Feedback
+~~~~~~~~
+
+If you find any problems please create a bugzilla report at
+https://bugs.kde.org using the Valgrind product.
+
+Alternatively you can use the FreeBSD bugilla
+https://bugs.freebsd.org
+
+Credits
+~~~~~~~
+
+Valgrind was originally ported to FreeBSD by Doug Rabson
+in 2004.
+
+Paul Floyd (that's me), started looking at this project in late 2018,
+took a long pause and then continued in earnest in January 2020.
+
+A big thanks to Nick Briggs for helping with the x86 version.
+
+Kyle Evans and Ed Maste for contributing patches and helping with the
+integration with FreeBSD ports.
+
+Prior to 2018 many others have also contributed.
+
+Dimitry Andric
+Simon Barner
+Roman Bogorodskiy
+Rebecca Cran
+Bryan Drewery
+Brian Fundakowski Feldman
+Denis Generalov
+Mikolaj Golub
+Eugene Kilachkoff
+Xin LI
+Phil Longstaff
+Pav Lucistnik
+Conrad Meyer
+Julien Nadeau
+Frerich Raabe
+Doug Rabson
+Craig Rodrigues
+Tom Russo
+Stephen Sanders
+Stanislav Sedov
+Andrei V. Shetuhin
+Niklas Sorensson
+Ryan Stone
+Jerry Toung
+Yuri
+
AM_CXXFLAGS += $(AM_FLAG_M3264_PRI)
# C ones
+if !VGCONF_OS_IS_FREEBSD
dlclose_LDADD = -ldl
+endif
if VGCONF_OS_IS_DARWIN
myprint_so_LDFLAGS = $(AM_CFLAGS) -dynamic -dynamiclib -all_load -fpic
else
ARCH_MAX="x86"
;;
- x86_64)
+ x86_64|amd64)
AC_MSG_RESULT([ok (${host_cpu})])
ARCH_MAX="amd64"
;;
;;
+ *freebsd*)
+ AC_MSG_RESULT([ok (${host_os})])
+ VGCONF_OS="freebsd"
+ AC_DEFINE([FREEBSD_10], 1000, [FREEBSD_VERS value for FreeBSD 10.x])
+ AC_DEFINE([FREEBSD_11], 1100, [FREEBSD_VERS value for FreeBSD 11.x])
+ AC_DEFINE([FREEBSD_12], 1200, [FREEBSD_VERS value for FreeBSD 12.0 to 12.1])
+ AC_DEFINE([FREEBSD_12_2], 1220, [FREEBSD_VERS value for FreeBSD 12.2])
+ AC_DEFINE([FREEBSD_13], 1300, [FREEBSD_VERS value for FreeBSD 13.x])
+ AC_DEFINE([FREEBSD_14], 1400, [FREEBSD_VERS value for FreeBSD 14.x])
+
+ AC_MSG_CHECKING([for the kernel version])
+ kernel=`uname -r`
+
+ case "${kernel}" in
+ 10.*)
+ AC_MSG_RESULT([FreeBSD 10.x (${kernel})])
+ AC_DEFINE([FREEBSD_VERS], FREEBSD_10, [FreeBSD version])
+ ;;
+ 11.*)
+ AC_MSG_RESULT([FreeBSD 11.x (${kernel})])
+ AC_DEFINE([FREEBSD_VERS], FREEBSD_11, [FreeBSD version])
+ ;;
+ 12.*)
+ case "${kernel}" in
+ 12.[[0-1]]-*)
+ AC_MSG_RESULT([FreeBSD 12.x (${kernel})])
+ AC_DEFINE([FREEBSD_VERS], FREEBSD_12, [FreeBSD version])
+ ;;
+ *)
+ AC_MSG_RESULT([FreeBSD 12.x (${kernel})])
+ AC_DEFINE([FREEBSD_VERS], FREEBSD_12_2, [FreeBSD version])
+ ;;
+ esac
+ ;;
+ 13.*)
+ AC_MSG_RESULT([FreeBSD 13.x (${kernel})])
+ AC_DEFINE([FREEBSD_VERS], FREEBSD_13, [FreeBSD version])
+ ;;
+ 14.*)
+ AC_MSG_RESULT([FreeBSD 14.x (${kernel})])
+ AC_DEFINE([FREEBSD_VERS], FREEBSD_14, [FreeBSD version])
+ ;;
+ *)
+ AC_MSG_RESULT([unsupported (${kernel})])
+ AC_MSG_ERROR([Valgrind works on FreeBSD 10.x to 14.x])
+ ;;
+ esac
+
+ DEFAULT_SUPP="freebsd.supp freebsd-helgrind.supp freebsd-drd.supp ${DEFAULT_SUPP}"
+ ;;
+
*darwin*)
AC_MSG_RESULT([ok (${host_os})])
VGCONF_OS="darwin"
valt_load_address_pri_inner="0x38000000"
AC_MSG_RESULT([ok (${ARCH_MAX}-${VGCONF_OS})])
;;
+ x86-freebsd)
+ VGCONF_ARCH_PRI="x86"
+ VGCONF_ARCH_SEC=""
+ VGCONF_PLATFORM_PRI_CAPS="X86_FREEBSD"
+ VGCONF_PLATFORM_SEC_CAPS=""
+ valt_load_address_pri_norml="0x38000000"
+ valt_load_address_pri_inner="0x28000000"
+ valt_load_address_sec_norml="0xUNSET"
+ valt_load_address_sec_inner="0xUNSET"
+ AC_MSG_RESULT([ok (${ARCH_MAX}-${VGCONF_OS})])
+ ;;
+ amd64-freebsd)
+ if test x$vg_cv_only64bit = xyes; then
+ VGCONF_ARCH_PRI="amd64"
+ VGCONF_ARCH_SEC=""
+ VGCONF_PLATFORM_PRI_CAPS="AMD64_FREEBSD"
+ VGCONF_PLATFORM_SEC_CAPS=""
+ elif test x$vg_cv_only32bit = xyes; then
+ VGCONF_ARCH_PRI="x86"
+ VGCONF_ARCH_SEC=""
+ VGCONF_PLATFORM_PRI_CAPS="X86_FREEBSD"
+ VGCONF_PLATFORM_SEC_CAPS=""
+ else
+ VGCONF_ARCH_PRI="amd64"
+ VGCONF_ARCH_SEC="x86"
+ VGCONF_PLATFORM_PRI_CAPS="AMD64_FREEBSD"
+ VGCONF_PLATFORM_SEC_CAPS="X86_FREEBSD"
+ fi
+ # These work with either base clang or ports installed gcc
+ # Hand rolled compilers probably need INSTALL_DIR/lib (at least for gcc)
+ if test x$is_clang = xclang ; then
+ FLAG_32ON64="-B/usr/lib32"
+ else
+ GCC_MAJOR_VERSION=`${CC} -dumpversion | $SED 's/\..*//' 2>/dev/null`
+ FLAG_32ON64="-B/usr/local/lib32/gcc${GCC_MAJOR_VERSION} -Wl,-rpath,/usr/local/lib32/gcc${GCC_MAJOR_VERSION}/"
+ fi
+ valt_load_address_pri_norml="0x38000000"
+ valt_load_address_pri_inner="0x28000000"
+ valt_load_address_sec_norml="0x38000000"
+ valt_load_address_sec_inner="0x28000000"
+ AC_MSG_RESULT([ok (${ARCH_MAX}-${VGCONF_OS})])
+ ;;
# Darwin gets identified as 32-bit even when it supports 64-bit.
# (Not sure why, possibly because 'uname' returns "i386"?) Just about
# all Macs support both 32-bit and 64-bit, so we just build both. If
AM_CONDITIONAL(VGCONF_ARCHS_INCLUDE_X86,
test x$VGCONF_PLATFORM_PRI_CAPS = xX86_LINUX \
-o x$VGCONF_PLATFORM_SEC_CAPS = xX86_LINUX \
+ -o x$VGCONF_PLATFORM_PRI_CAPS = xX86_FREEBSD \
+ -o x$VGCONF_PLATFORM_SEC_CAPS = xX86_FREEBSD \
-o x$VGCONF_PLATFORM_PRI_CAPS = xX86_DARWIN \
-o x$VGCONF_PLATFORM_SEC_CAPS = xX86_DARWIN \
-o x$VGCONF_PLATFORM_PRI_CAPS = xX86_SOLARIS \
-o x$VGCONF_PLATFORM_SEC_CAPS = xX86_SOLARIS )
AM_CONDITIONAL(VGCONF_ARCHS_INCLUDE_AMD64,
test x$VGCONF_PLATFORM_PRI_CAPS = xAMD64_LINUX \
+ -o x$VGCONF_PLATFORM_PRI_CAPS = xAMD64_FREEBSD \
-o x$VGCONF_PLATFORM_PRI_CAPS = xAMD64_DARWIN \
-o x$VGCONF_PLATFORM_PRI_CAPS = xAMD64_SOLARIS )
AM_CONDITIONAL(VGCONF_ARCHS_INCLUDE_PPC32,
test x$VGCONF_PLATFORM_PRI_CAPS = xMIPS64_LINUX)
AM_CONDITIONAL(VGCONF_PLATFORMS_INCLUDE_NANOMIPS_LINUX,
test x$VGCONF_PLATFORM_PRI_CAPS = xNANOMIPS_LINUX)
-AM_CONDITIONAL(VGCONF_PLATFORMS_INCLUDE_X86_DARWIN,
+AM_CONDITIONAL(VGCONF_PLATFORMS_INCLUDE_X86_FREEBSD,
+ test x$VGCONF_PLATFORM_PRI_CAPS = xX86_FREEBSD \
+ -o x$VGCONF_PLATFORM_SEC_CAPS = xX86_FREEBSD)
+AM_CONDITIONAL(VGCONF_PLATFORMS_INCLUDE_AMD64_FREEBSD,
+ test x$VGCONF_PLATFORM_PRI_CAPS = xAMD64_FREEBSD)
+AM_CONDITIONAL(VGCONF_PLATFORMS_INCLUDE_X86_DARWIN,
test x$VGCONF_PLATFORM_PRI_CAPS = xX86_DARWIN \
-o x$VGCONF_PLATFORM_SEC_CAPS = xX86_DARWIN)
AM_CONDITIONAL(VGCONF_PLATFORMS_INCLUDE_AMD64_DARWIN,
-o x$VGCONF_PLATFORM_PRI_CAPS = xMIPS32_LINUX \
-o x$VGCONF_PLATFORM_PRI_CAPS = xMIPS64_LINUX \
-o x$VGCONF_PLATFORM_PRI_CAPS = xNANOMIPS_LINUX)
+AM_CONDITIONAL(VGCONF_OS_IS_FREEBSD,
+ test x$VGCONF_PLATFORM_PRI_CAPS = xX86_FREEBSD \
+ -o x$VGCONF_PLATFORM_PRI_CAPS = xAMD64_FREEBSD)
AM_CONDITIONAL(VGCONF_OS_IS_DARWIN,
test x$VGCONF_PLATFORM_PRI_CAPS = xX86_DARWIN \
-o x$VGCONF_PLATFORM_PRI_CAPS = xAMD64_DARWIN)
AM_CONDITIONAL(VGCONF_OS_IS_SOLARIS,
test x$VGCONF_PLATFORM_PRI_CAPS = xX86_SOLARIS \
-o x$VGCONF_PLATFORM_PRI_CAPS = xAMD64_SOLARIS)
+AM_CONDITIONAL(VGCONF_OS_IS_DARWIN_OR_FREEBSD,
+ test x$VGCONF_PLATFORM_PRI_CAPS = xX86_FREEBSD \
+ -o x$VGCONF_PLATFORM_PRI_CAPS = xAMD64_FREEBSD \
+ -o x$VGCONF_PLATFORM_PRI_CAPS = xX86_DARWIN \
+ -o x$VGCONF_PLATFORM_PRI_CAPS = xAMD64_DARWIN)
# Sometimes, in the Makefile.am files, it's useful to know whether or not
],
GLIBC_VERSION="darwin")
+AC_EGREP_CPP([FREEBSD_LIBC], [
+#include <sys/cdefs.h>
+#if defined(__FreeBSD__)
+ FREEBSD_LIBC
+#endif
+],
+GLIBC_VERSION="freebsd")
+
# not really a version check
AC_EGREP_CPP([BIONIC_LIBC], [
#if defined(__ANDROID__)
AC_DEFINE([DARWIN_LIBC], 1, [Define to 1 if you're using Darwin])
# DEFAULT_SUPP set by kernel version check above.
;;
+ freebsd)
+ AC_MSG_RESULT(FreeBSD)
+ AC_DEFINE([FREEBSD_LIBC], 1, [Define to 1 if you're using FreeBSD])
+ # DEFAULT_SUPP set by kernel version check above.
+ ;;
bionic)
AC_MSG_RESULT(Bionic)
AC_DEFINE([BIONIC_LIBC], 1, [Define to 1 if you're using Bionic])
AC_MSG_CHECKING([if gcc accepts -m32])
safe_CFLAGS=$CFLAGS
- CFLAGS="-m32 -Werror"
+ CFLAGS="${FLAG_32ON64} -m32 -Werror"
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
return 0;
]])], [
- FLAG_M32="-m32"
+ FLAG_M32="${FLAG_32ON64} -m32"
AC_MSG_RESULT([yes])
], [
FLAG_M32=""
AC_GCC_WARNING_SUBST_NO([static-local-in-inline], [FLAG_W_NO_STATIC_LOCAL_IN_INLINE])
AC_GCC_WARNING_SUBST_NO([mismatched-new-delete], [FLAG_W_NO_MISMATCHED_NEW_DELETE])
AC_GCC_WARNING_SUBST_NO([infinite-recursion], [FLAG_W_NO_INFINITE_RECURSION])
+AC_GCC_WARNING_SUBST_NO([expansion-to-defined], [FLAG_W_NO_EXPANSION_TO_DEFINED])
AC_GCC_WARNING_SUBST([write-strings], [FLAG_W_WRITE_STRINGS])
AC_GCC_WARNING_SUBST([empty-body], [FLAG_W_EMPTY_BODY])
AC_MSG_CHECKING([if gcc accepts -no-pie])
safe_CFLAGS=$CFLAGS
-CFLAGS="-no-pie"
+CFLAGS="-no-pie -Werror"
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ ]], [[
return 0;
# will reside. -Ttext aligns just the .text section start (but not any
# other section).
#
-# So test for -Ttext-segment which is supported by all bfd ld versions
+# LLVM ld.lld 10.0 changed the semantics of its -Ttext. See "Breaking changes"
+# in https://releases.llvm.org/10.0.0/tools/lld/docs/ReleaseNotes.html
+# The --image-base option (since version 6.0?) provides the semantics needed.
+# -Ttext-segment generates an error, but -Ttext now more closely
+# follows the GNU (bfd) ld's -Ttext.
+#
+# So test first for --image-base support, and if that fails then
+# for -Ttext-segment which is supported by all bfd ld versions
# and use that if it exists. If it doesn't exist it must be an older
# version of gold and we can fall back to using -Ttext which has the
# right semantics.
-AC_MSG_CHECKING([if the linker accepts -Wl,-Ttext-segment])
-
safe_CFLAGS=$CFLAGS
-CFLAGS="-static -nodefaultlibs -nostartfiles -Wl,-Ttext-segment=$valt_load_address_pri_norml -Werror"
+AC_MSG_CHECKING([if the linker accepts -Wl,--image-base])
+
+CFLAGS="-static -nodefaultlibs -nostartfiles -Wl,--image-base=$valt_load_address_pri_norml -Werror"
AC_LINK_IFELSE(
[AC_LANG_SOURCE([int _start () { return 0; }])],
[
linker_using_t_text="no"
- AC_SUBST([FLAG_T_TEXT], ["-Ttext-segment"])
+ AC_SUBST([FLAG_T_TEXT], ["--image-base"])
AC_MSG_RESULT([yes])
], [
- linker_using_t_text="yes"
- AC_SUBST([FLAG_T_TEXT], ["-Ttext"])
AC_MSG_RESULT([no])
+
+ AC_MSG_CHECKING([if the linker accepts -Wl,-Ttext-segment])
+
+ CFLAGS="-static -nodefaultlibs -nostartfiles -Wl,-Ttext-segment=$valt_load_address_pri_norml -Werror"
+
+ AC_LINK_IFELSE(
+ [AC_LANG_SOURCE([int _start () { return 0; }])],
+ [
+ linker_using_t_text="no"
+ AC_SUBST([FLAG_T_TEXT], ["-Ttext-segment"])
+ AC_MSG_RESULT([yes])
+ ], [
+ linker_using_t_text="yes"
+ AC_SUBST([FLAG_T_TEXT], ["-Ttext"])
+ AC_MSG_RESULT([no])
+ ])
])
+
CFLAGS=$safe_CFLAGS
-# If the linker only supports -Ttext (not -Ttext-segment) then we will
+# If the linker only supports -Ttext (not -Ttext-segment or --image-base) then we will
# have to strip any build-id ELF NOTEs from the statically linked tools.
# Otherwise the build-id NOTE might end up at the default load address.
# (Pedantically if the linker is gold then -Ttext is fine, but newer
AC_MSG_RESULT([no])
])
else
-AC_MSG_NOTICE([ld -Ttext-segment used, no need to strip build-id NOTEs.])
+AC_MSG_NOTICE([ld --image-base or -Ttext-segment used, no need to strip build-id NOTEs.])
AC_SUBST([FLAG_NO_BUILD_ID], [""])
fi
CFLAGS=$safe_CFLAGS
mflag_primary=
if test x$VGCONF_PLATFORM_PRI_CAPS = xX86_LINUX \
+ -o x$VGCONF_PLATFORM_PRI_CAPS = xX86_FREEBSD \
-o x$VGCONF_PLATFORM_PRI_CAPS = xPPC32_LINUX \
-o x$VGCONF_PLATFORM_PRI_CAPS = xARM_LINUX \
-o x$VGCONF_PLATFORM_PRI_CAPS = xMIPS32_LINUX \
-o x$VGCONF_PLATFORM_PRI_CAPS = xX86_SOLARIS ; then
mflag_primary=$FLAG_M32
elif test x$VGCONF_PLATFORM_PRI_CAPS = xAMD64_LINUX \
+ -o x$VGCONF_PLATFORM_PRI_CAPS = xAMD64_FREEBSD \
-o x$VGCONF_PLATFORM_PRI_CAPS = xPPC64_LINUX \
-o x$VGCONF_PLATFORM_PRI_CAPS = xARM64_LINUX \
-o x$VGCONF_PLATFORM_PRI_CAPS = xMIPS64_LINUX \
if test x$VGCONF_PLATFORM_SEC_CAPS = xX86_LINUX \
-o x$VGCONF_PLATFORM_SEC_CAPS = xPPC32_LINUX \
-o x$VGCONF_PLATFORM_SEC_CAPS = xX86_SOLARIS \
- -o x$VGCONF_PLATFORM_SEC_CAPS = xMIPS32_LINUX ; then
+ -o x$VGCONF_PLATFORM_SEC_CAPS = xMIPS32_LINUX \
+ -o x$VGCONF_PLATFORM_SEC_CAPS = xX86_FREEBSD ; then
mflag_secondary=$FLAG_M32
elif test x$VGCONF_PLATFORM_SEC_CAPS = xX86_DARWIN ; then
mflag_secondary="$FLAG_M32 -arch i386"
AM_COND_IF([VGCONF_OS_IS_LINUX],
[CFLAGS_MPI="-g -O -fno-omit-frame-pointer -Wall -fpic"
LDFLAGS_MPI="-fpic -shared"])
+AM_COND_IF([VGCONF_OS_IS_FREEBSD],
+ [CFLAGS_MPI="-g -O -fno-omit-frame-pointer -Wall -fpic"
+ LDFLAGS_MPI="-fpic -shared"])
AM_COND_IF([VGCONF_OS_IS_DARWIN],
[CFLAGS_MPI="-g -O -fno-omit-frame-pointer -Wall -dynamic"
LDFLAGS_MPI="-dynamic -dynamiclib -all_load"])
launcher-linux.c \
m_debuglog.c
endif
+if VGCONF_OS_IS_FREEBSD
+valgrind_SOURCES = \
+ launcher-freebsd.c \
+ m_debuglog.c
+endif
# for valgrind coregrind building, use the LTO versions, in case they differ from non lto versions
AR = ${LTO_AR}
if VGCONF_OS_IS_SOLARIS
vgdb_SOURCES += vgdb-invoker-solaris.c
endif
+if VGCONF_OS_IS_FREEBSD
+# As with Darwin, we don't have ptrace PTRACE_PEEKTEXT
+# so we can't use vgdb-invoker-ptrace.c
+# Need to find an alternative, like Solaris
+vgdb_SOURCES += vgdb-invoker-none.c
+endif
vgdb_CPPFLAGS = $(AM_CPPFLAGS_PRI)
vgdb_CFLAGS = $(AM_CFLAGS_PRI) $(LTO_CFLAGS)
downloadsdir = $(top_builddir)/docs/downloads
vgdir = $(top_builddir)/docs/valgrind
+if VGCONF_OS_IS_FREEBSD
+XML_CATALOG_FILES = /usr/local/share/xml/catalog
+else
XML_CATALOG_FILES = /etc/xml/catalog
+endif
# file to log print output to
LOGFILE = print.log
XSL_TEXT_STYLE = $(mylibdir)/vg-faq2txt.xsl
XSL_WEBSITE_STYLE = $(mylibdir)/vg-html-website.xsl
XSL_MAN_STYLES = \
+ /usr/local/share/xsl/docbook/manpages/docbook.xsl \
/usr/share/sgml/docbook/xsl-stylesheets/manpages/docbook.xsl \
/usr/share/xml/docbook/stylesheet/nwalsh/current/manpages/docbook.xsl \
/usr/share/xml/docbook/stylesheet/nwalsh/manpages/docbook.xsl
pth_inconsistent_cond_wait \
pth_mutex_reinit \
pth_process_shared_mutex \
- pth_uninitialized_cond \
recursive_mutex \
rwlock_race \
rwlock_test \
if HAVE_BUILTIN_ATOMIC_CXX
check_PROGRAMS += \
- annotate_smart_pointer \
- tsan_unittest
+ annotate_smart_pointer
+endif
+
+if !VGCONF_OS_IS_FREEBSD
+check_PROGRAMS += tsan_unittest \
+ pth_uninitialized_cond
endif
# clang 3.3 will generate errors about libstdc++ headers from
check_PROGRAMS += sem_wait
endif
+if VGCONF_OS_IS_FREEBSD
+check_PROGRAMS += thread_name_freebsd
+endif
+
AM_CFLAGS += $(AM_FLAG_M3264_PRI) @FLAG_W_EXTRA@ -Wno-inline -Wno-unused-parameter
AM_CXXFLAGS += $(AM_FLAG_M3264_PRI) @FLAG_W_EXTRA@ @FLAG_FALIGNED_NEW@ \
bug322621_SOURCES = bug322621.cpp
concurrent_close_SOURCES = concurrent_close.cpp
+if !VGCONF_OS_IS_FREEBSD
dlopen_main_LDADD = -ldl
+endif
dlopen_lib_so_SOURCES = dlopen_lib.c
dlopen_lib_so_CFLAGS = -fPIC
dlopen_lib_so_LDFLAGS = -shared -fPIC
--- /dev/null
+# Suppressions for FreeBSD / DRD
+
+{
+ DRD-LDRT
+ drd:ConflictingAccess
+ obj:/libexec/ld-elf*.so.1
+}
+{
+ DRD-PTHREAD-EXIT1
+ drd:ConflictingAccess
+ ...
+ fun:pthread_exit
+}
+{
+ DRD-PTHREAD_CREATE1
+ drd:ConflictingAccess
+ ...
+ fun:pthread_create
+}
+{
+ DRD-PTHREAD-EXIT2
+ drd:ConflictingAccess
+ obj:*/lib*/libthr.so.3
+ fun:pthread_exit
+}
+{
+ DRD-PRINTF1
+ drd:ConflictingAccess
+ fun:f*lockfile
+}
+{
+ DRD-MANY1
+ drd:ConflictingAccess
+ obj:/lib/libthr.so.3
+ obj:/libexec/ld-elf*.so.1
+}
+{
+ DRD-MANY2
+ drd:ConflictingAccess
+ obj:*/lib*/libthr.so.3
+ obj:*/lib*/libthr.so.3
+ obj:/libexec/ld-elf*.so.1
+}
+{
+ DRD-MANY3
+ drd:ConflictingAccess
+ obj:*/lib*/libthr.so.3
+ obj:*/lib*/libthr.so.3
+ obj:*/lib*/libthr.so.3
+ obj:/libexec/ld-elf*.so.1
+}
+{
+ DRD-UNWIND1
+ drd:ConflictingAccess
+ ...
+ fun:dl_iterate_phdr
+ obj:*/lib*/libgcc_s.so.1
+}
+{
+ DRD-PTHREAD-DETACH1
+ drd:ConflictingAccess
+ obj:*/lib*/libthr.so.3
+ fun:pthread_detach
+}
+{
+ DRD-LIBGOMP
+ drd:ConflictingAccess
+ obj:/usr/local/lib*/gcc*/libgomp.so.1.0.0
+}
+{
+ DRD-LIBOMP
+ drd:ConflictingAccess
+ obj:/usr/lib*/libomp.so
+}
+{
+ DRD-LIBGOMP3
+ drd:ConflictingAccess
+ fun:.omp_outlined*
+}
+{
+ DRD-LIBGOMP4
+ drd:ConflictingAccess
+ obj:*/lib*/libthr.so.3
+ obj:*/lib*/libthr.so.3
+ obj:*/lib*/libthr.so.3
+ fun:pthread_setspecific
+}
+{
+ DRD-UNWIND1
+ drd:ConflictingAccess
+ fun:_Unwind_GetCFA
+ obj:*/lib*/libthr.so.3
+ obj:*/lib*/libgcc_s.so.1
+}
+{
+ DRD-UNWIND2
+ drd:ConflictingAccess
+ ...
+ fun:_Unwind_ForcedUnwind
+}
+{
+ DRD-PTHREAD-ATTR1
+ drd:ConflictingAccess
+ fun:pthread_attr_get_np
+}
+{
+ DRD-PTHREAD-SETSPECIFIC
+ drd:ConflictingAccess
+ fun:pthread_setspecific
+}
+{
+ DRD-MEMSET
+ drd:ConflictingAccess
+ fun:memset
+ obj:*/lib*/libthr.so.3
+}
+{
+ DRD-SET-POINTER
+ drd:ConflictingAccess
+ fun:_ZNSt3__121__thread_specific_ptrINS_15__thread_structEE11set_pointerEPS1_
+}
+{
+ DRD-DL-ITERATE-PHDR
+ drd:ConflictingAccess
+ ...
+ obj:*/lib*/libthr.so.3
+ obj:/libexec/ld-elf*.so.1
+ fun:dl_iterate_phdr
+}
+{
+ DRD-LIBGCC-S
+ drd:ConflictingAccess
+ obj:*/lib*/libgcc_s.so.1
+ obj:*/lib*/libgcc_s.so.1
+ obj:*/lib*/libgcc_s.so.1
+ obj:*/lib*/libgcc_s.so.1
+ obj:*/lib*/libgcc_s.so.1
+ obj:*/lib*/libgcc_s.so.1
+}
+{
+ DRD-DLOPEN
+ drd:ConflictingAccess
+ obj:*/lib*/libthr.so.3
+ obj:/libexec/ld-elf*.so.1
+ obj:/libexec/ld-elf*.so.1
+ obj:/libexec/ld-elf*.so.1
+ fun:dlopen
+}
+{
+ DRD-LD-ELF
+ drd:ConflictingAccess
+ obj:*/lib*/libthr.so.3
+ ...
+ obj:/libexec/ld-elf*.so.1
+}
+{
+ DRD-SNPRINTF
+ drd:ConflictingAccess
+ ...
+ obj:*/lib*/libc.so.7
+ fun:snprintf
+}
+{
+ DRD-FREEBSD122-OMP
+ drd:MutexErr
+ fun:pthread_mutex_destroy_intercept
+ fun:pthread_mutex_destroy
+ fun:_ZNSt3__15mutexD1Ev
+ fun:__cxa_finalize
+}
--- /dev/null
+# Suppressions for FreeBSD / Helgrind
+
+{
+ HELGRIND-LIBTHR1
+ Helgrind:Race
+ obj:*/lib*/libthr.so.3
+}
+{
+ HELGRIND-LIB-LDRT1
+ Helgrind:Race
+ obj:/libexec/ld-elf*.so.1
+}
+{
+ HELGRIND-PTHREAD-EXIT0
+ Helgrind:Race
+ fun:thr_exit
+ obj:*/lib*/libthr.so.3
+ obj:*/lib*/libthr.so.3
+}
+{
+ HELGRIND-PTHREAD-EXIT1
+ Helgrind:Race
+ fun:_pthread_exit_mask
+ fun:pthread_exit
+ obj:*/lib*/libthr.so.3
+}
+{
+ HELGRIND-PTHREAD-EXIT2
+ Helgrind:Race
+ fun:__sys_thr_exit
+ fun:_pthread_exit_mask
+ fun:pthread_exit
+ obj:*/lib*/libthr.so.3
+}
+{
+ HELGRIND-PTHREAD-EXIT4
+ Helgrind:Race
+ fun:_thr_try_gc
+ obj:*/lib*/libthr.so.3
+ fun:pthread_join_WRK
+ fun:pthread_join
+}
+{
+ HELGRIND-PTHREAD-EXIT5
+ Helgrind:Race
+ fun:__sys_thr_exit
+ obj:*/lib*/libthr.so.3
+ fun:_pthread_exit_mask
+ fun:pthread_exit
+ obj:/lib/libthr.so.3
+}
+{
+ HELGRIND-PTHREAD-BARRIER2
+ Helgrind:Race
+ fun:pthread_barrier_init
+}
+# added PJF
+{
+ HELGRIND-EXIT1
+ Helgrind:Race
+ obj:/libexec/ld-elf*.so.1
+ obj:/libexec/ld-elf*.so.1
+ fun:__cxa_finalize
+ fun:exit
+}
+{
+ HELGRIND-EXIT2
+ Helgrind:Race
+ obj:/libexec/ld-elf*.so.1
+ obj:/libexec/ld-elf*.so.1
+ fun:_rtld_error
+ obj:/libexec/ld-elf*.so.1
+ obj:/libexec/ld-elf*.so.1
+ fun:__cxa_finalize
+ fun:exit
+}
+{
+ HELGRIND-EDIT3
+ Helgrind:Race
+ fun:_rtld_error
+ obj:/libexec/ld-elf*.so.1
+ obj:/libexec/ld-elf*.so.1
+ fun:__cxa_finalize
+ fun:exit
+}
+{
+ HELGRIND-EXIT3
+ Helgrind:Race
+ obj:/libexec/ld-elf*.so.1
+ obj:/libexec/ld-elf*.so.1
+ obj:/libexec/ld-elf*.so.1
+ obj:/libexec/ld-elf*.so.1
+ fun:__cxa_finalize
+ fun:exit
+}
+# PJF not sure exactly what the cause of this is, but it looks like it is the
+# tls used for pthread_self() with a conflict between pthread_create and
+# mythread_wrapper which coverst create/join/exit
+{
+ HELGRIND-PTHREAD-CREATE1
+ Helgrind:Race
+ obj:/libexec/ld-elf*.so.1
+ fun:_rtld_allocate_tls
+ obj:*/lib*/libthr.so.3
+ obj:*/lib*/libthr.so.3
+ fun:pthread_create
+}
+{
+ HELGRIND-PTHREAD-CREATE2
+ Helgrind:Race
+ fun:memset
+ obj:*/lib*/libthr.so.3
+ fun:pthread_create
+}
+# PJF again a pthread_self() hazard
+{
+ HELGRIND-PTHREAD-SELF1
+ Helgrind:Race
+ fun:mythread_wrapper
+ obj:*/lib*/libthr.so.3
+}
+{
+ HELGRIND-SEM-CLOCKWAIT1
+ Helgrind:Race
+ fun:sem_clockwait_np
+}
+{
+ HELGRIND-UMTX-OP1
+ Helgrind:Race
+ fun:_umtx_op
+}
+{
+ HELGRIND-SEM-POST1
+ Helgrind:Race
+ fun:sem_post
+}
+{
+ HELGRIND-GCC-UNWIND1
+ Helgrind:Race
+ obj:/lib/libgcc_s.so.1
+}
+{
+ HELGRIND-LIBC-PRINTF1
+ Helgrind:Race
+ fun:flockfile
+}
+{
+ HELGRIND-LIBC-PRINTF2
+ Helgrind:Race
+ fun:funlockfile
+}
+{
+ HELGRIND-MUTEX-LOCK1
+ Helgrind:Race
+ fun:memset
+ obj:*/lib*/libthr.so.3
+}
+{
+ HELGRIND-LIBOMP
+ Helgrind:Race
+ obj:/usr/lib*/libomp.so
+}
--- /dev/null
+# Suppressions for FreeBSD / Memcheck
+#This is a workaround for a bug in rtld
+{
+ MEMCHECK-RTLD-32ON64
+ Memcheck:Addr4
+ fun:memcpy
+ fun:elf_aux_info
+}
+{
+ MEMCHECK-RTLD-COND
+ Memcheck:Cond
+ obj:/libexec/ld-elf*.so.1
+}
+{
+ MEMCHECK-RTLD-32ON64-ADDR4
+ Memcheck:Addr4
+ obj:/libexec/ld-elf32.so.1
+ obj:/libexec/ld-elf32.so.1
+}
+
+{
+ MEMCHECK-LIBSTDC++-REACHABLE
+ Memcheck:Leak
+ match-leak-kinds: reachable
+ fun:malloc
+ obj:/usr/local/lib*/gcc9/libstdc++.so.*
+ obj:/libexec/ld-elf*.so.1
+ obj:/libexec/ld-elf*.so.1
+ obj:/libexec/ld-elf*.so.1
+}
+{
+ MEMCHECK-LIBC-REACHABLE
+ Memcheck:Leak
+ match-leak-kinds: reachable
+ fun:malloc
+ obj:*/lib*/libc.so.7
+ obj:*/lib*/libc.so.7
+ obj:*/lib*/libc.so.7
+ fun:vfprintf_l
+}
+# clang only, should check that this is not a genuine error
+{
+ MEMCHECK-POSIX-FADVISE
+ Memcheck:Cond
+ fun:posix_fadvise
+}
+{
+ MEMCHECK-POSIX-FALLOCATE
+ Memcheck:Cond
+ fun:posix_fallocate
+}
clean_after_fork \
fork_chain \
gone \
- main_pic \
passsigalrm \
self_invalidate \
sleepers \
t \
watchpoints
+if !VGCONF_OS_IS_FREEBSD
+ check_PROGRAMS += main_pic
+
+ main_pic_LDFLAGS = @FLAG_PIE@
+ main_pic_CFLAGS = $(AM_CFLAGS) -fPIC
+endif
+
AM_CFLAGS += $(AM_FLAG_M3264_PRI)
AM_CXXFLAGS += $(AM_FLAG_M3264_PRI)
LDADD = -lpthread
-
-main_pic_LDFLAGS = @FLAG_PIE@
-main_pic_CFLAGS = $(AM_CFLAGS) -fPIC
if VGCONF_OS_IS_SOLARIS
SUBDIRS += solaris
endif
+if VGCONF_OS_IS_FREEBSD
+SUBDIRS += freebsd
+endif
# Platform-specific tests
if VGCONF_PLATFORMS_INCLUDE_X86_LINUX
if VGCONF_PLATFORMS_INCLUDE_AMD64_SOLARIS
SUBDIRS += amd64-solaris
endif
+if VGCONF_PLATFORMS_INCLUDE_X86_FREEBSD
+SUBDIRS += x86-freebsd
+endif
+if VGCONF_PLATFORMS_INCLUDE_AMD64_FREEBSD
+SUBDIRS += amd64-freebsd
+endif
DIST_SUBDIRS = x86 amd64 ppc32 ppc64 s390x linux \
darwin solaris x86-linux amd64-linux arm64-linux \
--- /dev/null
+#! /bin/sh
+
+../filter_stderr "$@"
--- /dev/null
+#! /bin/sh
+
+../filter_stderr "$@" |
+
+gsed 's/Open file descriptor.*/Open file descriptor .../'
--- /dev/null
+#! /bin/sh
+
+../filter_stderr "$@"
MPI_FLAG_M3264_PRI = $(AM_FLAG_M3264_PRI)
MPI_FLAG_M3264_SEC = $(AM_FLAG_M3264_SEC)
endif
+if VGCONF_OS_IS_FREEBSD
+ MPI_FLAG_M3264_PRI = $(AM_FLAG_M3264_PRI)
+ MPI_FLAG_M3264_SEC = $(AM_FLAG_M3264_SEC)
+endif
if VGCONF_OS_IS_DARWIN
MPI_FLAG_M3264_PRI = $(AM_FLAG_M3264_PRI)
MPI_FLAG_M3264_SEC = $(AM_FLAG_M3264_SEC)
if VGCONF_OS_IS_SOLARIS
SUBDIRS += solaris
endif
+if VGCONF_OS_IS_FREEBSD
+SUBDIRS += freebsd
+endif
# Platform-specific tests
if VGCONF_PLATFORMS_INCLUDE_AMD64_LINUX
endif
DIST_SUBDIRS = x86 amd64 ppc32 ppc64 arm arm64 s390x mips32 mips64 nanomips \
- linux darwin solaris amd64-linux x86-linux amd64-darwin \
+ linux darwin solaris freebsd amd64-linux x86-linux amd64-darwin \
x86-darwin amd64-solaris x86-solaris scripts .
dist_noinst_SCRIPTS = \
endif
# This doesn't appear to be compilable on Darwin.
+if ! VGCONF_OS_IS_DARWIN_OR_FREEBSD
+ check_PROGRAMS += rlimit64_nofile
+endif
+
if ! VGCONF_OS_IS_DARWIN
- check_PROGRAMS += rlimit64_nofile \
- ppoll_alarm
+ check_PROGRAMS += ppoll_alarm
endif
# clang does not know -ansi
pth_stackalign_LDADD = -lpthread
pth_2sig_LDADD = -lpthread
pth_term_signal_LDADD = -lpthread
-res_search_LDADD = -lresolv -lpthread
+if VGCONF_OS_IS_FREEBSD
+ res_search_LDADD = -lpthread
+ resolv_LDADD = -lpthread
+else
+ res_search_LDADD = -lresolv -lpthread
+ resolv_LDADD = -lresolv -lpthread
+endif
resolv_CFLAGS = $(AM_CFLAGS)
-resolv_LDADD = -lresolv -lpthread
if VGCONF_OS_IS_SOLARIS
resolv_CFLAGS += -U_REENTRANT
endif
endif
vgprintf_nvalgrind_SOURCES = vgprintf.c
-vgprintf_nvalgrind_CFLAGS = -DNVALGRIND
+vgprintf_nvalgrind_CFLAGS = ${AM_CFLAGS} -DNVALGRIND
valgrind_cpp_test_SOURCES = valgrind_cpp_test.cpp
valgrind_cpp_test_LDADD = -lstdc++
--- /dev/null
+#! /bin/sh
+
+../filter_stderr "$@"