diff options
Diffstat (limited to 'nixpkgs/pkgs/development/tools/misc/gdb')
3 files changed, 153 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/tools/misc/gdb/darwin-target-match.patch b/nixpkgs/pkgs/development/tools/misc/gdb/darwin-target-match.patch new file mode 100644 index 000000000000..978a67950569 --- /dev/null +++ b/nixpkgs/pkgs/development/tools/misc/gdb/darwin-target-match.patch @@ -0,0 +1,11 @@ +--- a/configure 2017-06-05 00:51:26.000000000 +0900 ++++ b/configure 2018-03-06 23:12:58.000000000 +0900 +@@ -3644,7 +3644,7 @@ + noconfigdirs="$noconfigdirs ld gprof" + noconfigdirs="$noconfigdirs sim target-rda" + ;; +- x86_64-*-darwin[912]*) ++ x86_64-*-darwin*) + noconfigdirs="$noconfigdirs ld gas gprof" + noconfigdirs="$noconfigdirs sim target-rda" + ;; diff --git a/nixpkgs/pkgs/development/tools/misc/gdb/debug-info-from-env.patch b/nixpkgs/pkgs/development/tools/misc/gdb/debug-info-from-env.patch new file mode 100644 index 000000000000..de59bd2d17bb --- /dev/null +++ b/nixpkgs/pkgs/development/tools/misc/gdb/debug-info-from-env.patch @@ -0,0 +1,24 @@ +diff -ur a/gdb/main.c b/gdb/main.c +--- a/gdb/main.c 2020-02-08 13:50:14.000000000 +0100 ++++ b/gdb/main.c 2020-02-24 10:02:07.731806739 +0100 +@@ -567,9 +567,17 @@ + gdb_sysroot = xstrdup (TARGET_SYSROOT_PREFIX); + } + +- debug_file_directory +- = xstrdup (relocate_gdb_directory (DEBUGDIR, +- DEBUGDIR_RELOCATABLE).c_str ()); ++ debug_file_directory = getenv ("NIX_DEBUG_INFO_DIRS"); ++ if (debug_file_directory != NULL) ++ // This might be updated later using ++ // $ set debug-file-directory /to/some/path ++ // which will use xfree. We must then have a xmallocated ++ // copy of the string that can be xfeed later. ++ debug_file_directory = xstrdup (debug_file_directory); ++ else ++ debug_file_directory ++ = xstrdup (relocate_gdb_directory (DEBUGDIR, ++ DEBUGDIR_RELOCATABLE).c_str ()); + + gdb_datadir = relocate_gdb_directory (GDB_DATADIR, + GDB_DATADIR_RELOCATABLE); diff --git a/nixpkgs/pkgs/development/tools/misc/gdb/default.nix b/nixpkgs/pkgs/development/tools/misc/gdb/default.nix new file mode 100644 index 000000000000..ffe1fa3662f8 --- /dev/null +++ b/nixpkgs/pkgs/development/tools/misc/gdb/default.nix @@ -0,0 +1,118 @@ +{ lib, stdenv, targetPackages + +# Build time +, fetchurl, pkg-config, perl, texinfo, setupDebugInfoDirs, buildPackages + +# Run time +, ncurses, readline, gmp, mpfr, expat, libipt, zlib, dejagnu + +, pythonSupport ? stdenv.hostPlatform == stdenv.buildPlatform && !stdenv.hostPlatform.isCygwin, python3 ? null +, guile ? null +, safePaths ? [ + # $debugdir:$datadir/auto-load are whitelisted by default by GDB + "$debugdir" "$datadir/auto-load" + # targetPackages so we get the right libc when cross-compiling and using buildPackages.gdb + targetPackages.stdenv.cc.cc.lib + ] +}: + +let + basename = "gdb"; + targetPrefix = lib.optionalString (stdenv.targetPlatform != stdenv.hostPlatform) + "${stdenv.targetPlatform.config}-"; +in + +assert pythonSupport -> python3 != null; + +stdenv.mkDerivation rec { + pname = targetPrefix + basename; + version = "10.2"; + + src = fetchurl { + url = "mirror://gnu/gdb/${basename}-${version}.tar.xz"; + sha256 = "0aag1c0fw875pvhjg1qp7x8pf6gf92bjv5gcic5716scacyj58da"; + }; + + postPatch = if stdenv.isDarwin then '' + substituteInPlace gdb/darwin-nat.c \ + --replace '#include "bfd/mach-o.h"' '#include "mach-o.h"' + '' else null; + + patches = [ + ./debug-info-from-env.patch + ] ++ lib.optionals stdenv.isDarwin [ + ./darwin-target-match.patch + ]; + + nativeBuildInputs = [ pkg-config texinfo perl setupDebugInfoDirs ]; + + buildInputs = [ ncurses readline gmp mpfr expat libipt zlib guile ] + ++ lib.optional pythonSupport python3 + ++ lib.optional doCheck dejagnu; + + propagatedNativeBuildInputs = [ setupDebugInfoDirs ]; + + depsBuildBuild = [ buildPackages.stdenv.cc ]; + + enableParallelBuilding = true; + + # darwin build fails with format hardening since v7.12 + hardeningDisable = lib.optionals stdenv.isDarwin [ "format" ]; + + NIX_CFLAGS_COMPILE = "-Wno-format-nonliteral"; + + configurePlatforms = [ "build" "host" "target" ]; + + # GDB have to be built out of tree. + preConfigure = '' + mkdir _build + cd _build + ''; + configureScript = "../configure"; + + configureFlags = with lib; [ + # Set the program prefix to the current targetPrefix. + # This ensures that the prefix always conforms to + # nixpkgs' expectations instead of relying on the build + # system which only receives `config` which is merely a + # subset of the platform description. + "--program-prefix=${targetPrefix}" + + "--enable-targets=all" "--enable-64-bit-bfd" + "--disable-install-libbfd" + "--disable-shared" "--enable-static" + "--with-system-zlib" + "--with-system-readline" + + "--with-gmp=${gmp.dev}" + "--with-mpfr=${mpfr.dev}" + "--with-expat" "--with-libexpat-prefix=${expat.dev}" + "--with-auto-load-safe-path=${builtins.concatStringsSep ":" safePaths}" + ] ++ lib.optional (!pythonSupport) "--without-python" + ++ lib.optional stdenv.hostPlatform.isMusl "--disable-nls"; + + postInstall = + '' # Remove Info files already provided by Binutils and other packages. + rm -v $out/share/info/bfd.info + ''; + + # TODO: Investigate & fix the test failures. + doCheck = false; + + meta = with lib; { + description = "The GNU Project debugger"; + + longDescription = '' + GDB, the GNU Project debugger, allows you to see what is going + on `inside' another program while it executes -- or what another + program was doing at the moment it crashed. + ''; + + homepage = "https://www.gnu.org/software/gdb/"; + + license = lib.licenses.gpl3Plus; + + platforms = with platforms; linux ++ cygwin ++ darwin; + maintainers = with maintainers; [ pierron globin lsix ]; + }; +} |