From 800f280696d54d718ec78684fd517cce472dedca Mon Sep 17 00:00:00 2001 From: Tmplt Date: Sun, 17 Nov 2019 18:46:52 +0100 Subject: [PATCH] gdb: wrap, making libstdc++ plugin safe to load --- pkgs/development/tools/misc/gdb/wrapper.nix | 32 +++++++++++++++++++++ pkgs/top-level/all-packages.nix | 4 ++- 2 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 pkgs/development/tools/misc/gdb/wrapper.nix diff --git a/pkgs/development/tools/misc/gdb/wrapper.nix b/pkgs/development/tools/misc/gdb/wrapper.nix new file mode 100644 index 00000000000..7eccba74747 --- /dev/null +++ b/pkgs/development/tools/misc/gdb/wrapper.nix @@ -0,0 +1,32 @@ +{ stdenv, lib, makeWrapper, gdb-unwrapped, safePaths }: + +let + gdb = gdb-unwrapped; +in + stdenv.mkDerivation { + name = gdb.name; + buildInputs = [ makeWrapper ]; + propagatedBuildInputs = [ gdb ]; + propagatedUserEnvPkgs = [ gdb ]; + phases = "installPhase fixupPhase"; + + # Find all gdb plugins in `safePaths` and + # mark these files as safe to load. + installPhase = '' + mkdir -p $out/share/gdb + initScript=$out/share/gdb/gdbinit + touch $initScript + + for safePath in ${lib.concatStringsSep " " safePaths}; do + for plugin in $(find $safePath | grep -- '.*-gdb.*'); do + echo add-auto-load-safe-path $plugin >> $initScript + done + done + + makeWrapper "${gdb}/bin/gdb" \ + "$out/bin/gdb" \ + --add-flags "-x $initScript" + ''; + + meta = gdb.meta; + } diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index c42024b45d3..fba2a772924 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -10473,7 +10473,9 @@ in bashdb = callPackage ../development/tools/misc/bashdb { }; - gdb = callPackage ../development/tools/misc/gdb { + gdb = callPackage ../development/tools/misc/gdb/wrapper.nix { safePaths = [ stdenv.cc.cc.lib ]; }; + + gdb-unwrapped = callPackage ../development/tools/misc/gdb { guile = null; };