diff options
Diffstat (limited to 'nixpkgs/pkgs/development/tools/analysis/valgrind')
-rw-r--r-- | nixpkgs/pkgs/development/tools/analysis/valgrind/coregrind-makefile-race.patch | 41 | ||||
-rw-r--r-- | nixpkgs/pkgs/development/tools/analysis/valgrind/default.nix | 92 |
2 files changed, 133 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/tools/analysis/valgrind/coregrind-makefile-race.patch b/nixpkgs/pkgs/development/tools/analysis/valgrind/coregrind-makefile-race.patch new file mode 100644 index 000000000000..cd09f0edff37 --- /dev/null +++ b/nixpkgs/pkgs/development/tools/analysis/valgrind/coregrind-makefile-race.patch @@ -0,0 +1,41 @@ +From 7820fc268fae4353118b6355f1d4b9e1b7eeebec Mon Sep 17 00:00:00 2001 +From: Philippe Waroquiers <philippe.waroquiers@skynet.be> +Date: Sun, 28 Oct 2018 18:35:11 +0100 +Subject: [PATCH 1/1] Fix dependencies between libcoregrind*.a and + *m_main.o/*m_libcsetjmp.o + +The primary and secondary coregrind libraries must be updated +when m_main.c or m_libcsetjmp.c are changed. + +A dependency was missing between libcoregrind*.a and libnolto_coregrind*.a, +and so tools were not relinked when m_main.c or m_libcsetjmp.c were +changed. +--- + coregrind/Makefile.am | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/coregrind/Makefile.am b/coregrind/Makefile.am +index 914a270..8de1996 100644 +--- a/coregrind/Makefile.am ++++ b/coregrind/Makefile.am +@@ -511,6 +511,8 @@ libcoregrind_@VGCONF_ARCH_PRI@_@VGCONF_OS@_a_CFLAGS += \ + endif + libcoregrind_@VGCONF_ARCH_PRI@_@VGCONF_OS@_a_LIBADD = \ + $(libnolto_coregrind_@VGCONF_ARCH_PRI@_@VGCONF_OS@_a_OBJECTS) ++libcoregrind_@VGCONF_ARCH_PRI@_@VGCONF_OS@_a_DEPENDENCIES = \ ++ libnolto_coregrind-@VGCONF_ARCH_PRI@-@VGCONF_OS@.a + + if VGCONF_HAVE_PLATFORM_SEC + libcoregrind_@VGCONF_ARCH_SEC@_@VGCONF_OS@_a_SOURCES = \ +@@ -531,6 +533,8 @@ libcoregrind_@VGCONF_ARCH_SEC@_@VGCONF_OS@_a_CFLAGS += \ + endif + libcoregrind_@VGCONF_ARCH_SEC@_@VGCONF_OS@_a_LIBADD = \ + $(libnolto_coregrind_@VGCONF_ARCH_SEC@_@VGCONF_OS@_a_OBJECTS) ++libcoregrind_@VGCONF_ARCH_SEC@_@VGCONF_OS@_a_DEPENDENCIES = \ ++ libnolto_coregrind-@VGCONF_ARCH_SEC@-@VGCONF_OS@.a + endif + + #---------------------------------------------------------------------------- +-- +2.9.3 + diff --git a/nixpkgs/pkgs/development/tools/analysis/valgrind/default.nix b/nixpkgs/pkgs/development/tools/analysis/valgrind/default.nix new file mode 100644 index 000000000000..4def201952a9 --- /dev/null +++ b/nixpkgs/pkgs/development/tools/analysis/valgrind/default.nix @@ -0,0 +1,92 @@ +{ stdenv, fetchurl, perl, gdb, llvm, cctools, xnu, bootstrap_cmds }: + +stdenv.mkDerivation rec { + name = "valgrind-3.15.0"; + + src = fetchurl { + url = "https://sourceware.org/pub/valgrind/${name}.tar.bz2"; + sha256 = "1ccawxrni8brcvwhygy12iprkvz409hbr9xkk1bd03gnm2fplz21"; + }; + + # Perl is needed for `cg_annotate'. + nativeBuildInputs = [ perl ]; + + outputs = [ "out" "dev" "man" "doc" ]; + + hardeningDisable = [ "stackprotector" ]; + + # GDB is needed to provide a sane default for `--db-command'. + buildInputs = [ gdb ] ++ stdenv.lib.optionals (stdenv.isDarwin) [ bootstrap_cmds xnu ]; + + enableParallelBuilding = true; + separateDebugInfo = stdenv.isLinux; + + preConfigure = stdenv.lib.optionalString stdenv.isDarwin ( + let OSRELEASE = '' + $(awk -F '"' '/#define OSRELEASE/{ print $2 }' \ + <${xnu}/Library/Frameworks/Kernel.framework/Headers/libkern/version.h)''; + in '' + echo "Don't derive our xnu version using uname -r." + substituteInPlace configure --replace "uname -r" "echo ${OSRELEASE}" + + # Apple's GCC doesn't recognize `-arch' (as of version 4.2.1, build 5666). + echo "getting rid of the \`-arch' GCC option..." + find -name Makefile\* -exec \ + sed -i {} -e's/DARWIN\(.*\)-arch [^ ]\+/DARWIN\1/g' \; + + sed -i coregrind/link_tool_exe_darwin.in \ + -e 's/^my \$archstr = .*/my $archstr = "x86_64";/g' + + echo "substitute hardcoded /usr/include/mach with ${xnu}/include/mach" + substituteInPlace coregrind/Makefile.in \ + --replace /usr/include/mach ${xnu}/include/mach + + substituteInPlace coregrind/m_debuginfo/readmacho.c \ + --replace /usr/bin/dsymutil ${stdenv.cc.bintools.bintools}/bin/dsymutil + + echo "substitute hardcoded /usr/bin/ld with ${cctools}/bin/ld" + substituteInPlace coregrind/link_tool_exe_darwin.in \ + --replace /usr/bin/ld ${cctools}/bin/ld + ''); + + # To prevent rebuild on linux when moving darwin's postPatch fixes to preConfigure + postPatch = ""; + + configureFlags = + stdenv.lib.optional (stdenv.hostPlatform.system == "x86_64-linux" || stdenv.hostPlatform.system == "x86_64-darwin") "--enable-only64bit"; + + doCheck = false; # fails + + postInstall = '' + for i in $out/lib/valgrind/*.supp; do + substituteInPlace $i \ + --replace 'obj:/lib' 'obj:*/lib' \ + --replace 'obj:/usr/X11R6/lib' 'obj:*/lib' \ + --replace 'obj:/usr/lib' 'obj:*/lib' + done + ''; + + meta = { + homepage = http://www.valgrind.org/; + description = "Debugging and profiling tool suite"; + + longDescription = '' + Valgrind is an award-winning instrumentation framework for + building dynamic analysis tools. There are Valgrind tools that + can automatically detect many memory management and threading + bugs, and profile your programs in detail. You can also use + Valgrind to build new tools. + ''; + + license = stdenv.lib.licenses.gpl2Plus; + + maintainers = [ stdenv.lib.maintainers.eelco ]; + platforms = stdenv.lib.platforms.unix; + badPlatforms = [ + "armv5tel-linux" "armv6l-linux" "armv6m-linux" + "sparc-linux" "sparc64-linux" + "riscv32-linux" "riscv64-linux" + "alpha-linux" + ]; + }; +} |