Skip to content

Commit c5b88c2

Browse files
committed
dev-shell: Disable separateDebugInfo
This breaks gdb pretty-printers inserted into .debug_gdb_scripts section, because it implies --compress-debug-sections=zlib, -Wa,--compress-debug-sections. This is very unfortunate, because then gdb can't use pretty printers for Boost.Unordered (which are very useful, since boost::unoredred_flat_map is impossible to debug). This seems perfectly fine to disable in the dev-shell for the time being. See [1-3] for further references. With this change I'm able to use boost's pretty-printers out-of-the box: ``` p *importResolutionCache $2 = boost::concurrent_flat_map with 1 elements = {[{accessor = {p = std::shared_ptr<nix::SourceAccessor> (use count 5, weak count 1) = { get() = 0x555555d830a8}}, path = {static root = {static root = <same as static member of an already seen type>, path = "/"}, path = "/derivation-internal.nix"}}] = {accessor = {p = std::shared_ptr<nix::SourceAccessor> (use count 5, weak count 1) = { get() = 0x555555d830a8}}, path = {static root = {static root = <same as static member of an already seen type>, path = "/"}, path = "/derivation-internal.nix"}}} ``` When combined with a simple `add-auto-load-safe-path ~/code` in .gdbinit [1]: https://gerrit.lix.systems/c/lix/+/3880 [2]: https://git.lix.systems/lix-project/lix/issues/1003 [3]: https://sourceware.org/pipermail/gdb-patches/2025-October/221398.html
1 parent fb117e0 commit c5b88c2

File tree

1 file changed

+41
-32
lines changed

1 file changed

+41
-32
lines changed

packaging/dev-shell.nix

Lines changed: 41 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,9 @@ pkgs.nixComponents2.nix-util.overrideAttrs (
7070

7171
# We use this shell with the local checkout, not unpackPhase.
7272
src = null;
73+
# Workaround https://sourceware.org/pipermail/gdb-patches/2025-October/221398.html
74+
# Remove when gdb fix is rolled out everywhere.
75+
separateDebugInfo = false;
7376

7477
env = {
7578
# For `make format`, to work without installing pre-commit
@@ -93,38 +96,44 @@ pkgs.nixComponents2.nix-util.overrideAttrs (
9396
++ map (transformFlag "libcmd") (ignoreCrossFile pkgs.nixComponents2.nix-cmd.mesonFlags);
9497

9598
nativeBuildInputs =
96-
attrs.nativeBuildInputs or [ ]
97-
++ pkgs.nixComponents2.nix-util.nativeBuildInputs
98-
++ pkgs.nixComponents2.nix-store.nativeBuildInputs
99-
++ pkgs.nixComponents2.nix-fetchers.nativeBuildInputs
100-
++ pkgs.nixComponents2.nix-expr.nativeBuildInputs
101-
++ lib.optionals havePerl pkgs.nixComponents2.nix-perl-bindings.nativeBuildInputs
102-
++ lib.optionals buildCanExecuteHost pkgs.nixComponents2.nix-manual.externalNativeBuildInputs
103-
++ pkgs.nixComponents2.nix-internal-api-docs.nativeBuildInputs
104-
++ pkgs.nixComponents2.nix-external-api-docs.nativeBuildInputs
105-
++ pkgs.nixComponents2.nix-functional-tests.externalNativeBuildInputs
106-
++ lib.optional (
107-
!buildCanExecuteHost
108-
# Hack around https://github.com/nixos/nixpkgs/commit/bf7ad8cfbfa102a90463433e2c5027573b462479
109-
&& !(stdenv.hostPlatform.isWindows && stdenv.buildPlatform.isDarwin)
110-
&& stdenv.hostPlatform.emulatorAvailable pkgs.buildPackages
111-
&& lib.meta.availableOn stdenv.buildPlatform (stdenv.hostPlatform.emulator pkgs.buildPackages)
112-
) pkgs.buildPackages.mesonEmulatorHook
113-
++ [
114-
pkgs.buildPackages.cmake
115-
pkgs.buildPackages.gnused
116-
pkgs.buildPackages.shellcheck
117-
pkgs.buildPackages.changelog-d
118-
modular.pre-commit.settings.package
119-
(pkgs.writeScriptBin "pre-commit-hooks-install" modular.pre-commit.settings.installationScript)
120-
pkgs.buildPackages.nixfmt-rfc-style
121-
pkgs.buildPackages.shellcheck
122-
pkgs.buildPackages.gdb
123-
]
124-
++ lib.optional (stdenv.cc.isClang && stdenv.hostPlatform == stdenv.buildPlatform) (
125-
lib.hiPrio pkgs.buildPackages.clang-tools
126-
)
127-
++ lib.optional stdenv.hostPlatform.isLinux pkgs.buildPackages.mold-wrapped;
99+
let
100+
inputs =
101+
attrs.nativeBuildInputs or [ ]
102+
++ pkgs.nixComponents2.nix-util.nativeBuildInputs
103+
++ pkgs.nixComponents2.nix-store.nativeBuildInputs
104+
++ pkgs.nixComponents2.nix-fetchers.nativeBuildInputs
105+
++ pkgs.nixComponents2.nix-expr.nativeBuildInputs
106+
++ lib.optionals havePerl pkgs.nixComponents2.nix-perl-bindings.nativeBuildInputs
107+
++ lib.optionals buildCanExecuteHost pkgs.nixComponents2.nix-manual.externalNativeBuildInputs
108+
++ pkgs.nixComponents2.nix-internal-api-docs.nativeBuildInputs
109+
++ pkgs.nixComponents2.nix-external-api-docs.nativeBuildInputs
110+
++ pkgs.nixComponents2.nix-functional-tests.externalNativeBuildInputs
111+
++ lib.optional (
112+
!buildCanExecuteHost
113+
# Hack around https://github.com/nixos/nixpkgs/commit/bf7ad8cfbfa102a90463433e2c5027573b462479
114+
&& !(stdenv.hostPlatform.isWindows && stdenv.buildPlatform.isDarwin)
115+
&& stdenv.hostPlatform.emulatorAvailable pkgs.buildPackages
116+
&& lib.meta.availableOn stdenv.buildPlatform (stdenv.hostPlatform.emulator pkgs.buildPackages)
117+
) pkgs.buildPackages.mesonEmulatorHook
118+
++ [
119+
pkgs.buildPackages.cmake
120+
pkgs.buildPackages.gnused
121+
pkgs.buildPackages.shellcheck
122+
pkgs.buildPackages.changelog-d
123+
modular.pre-commit.settings.package
124+
(pkgs.writeScriptBin "pre-commit-hooks-install" modular.pre-commit.settings.installationScript)
125+
pkgs.buildPackages.nixfmt-rfc-style
126+
pkgs.buildPackages.shellcheck
127+
pkgs.buildPackages.gdb
128+
]
129+
++ lib.optional (stdenv.cc.isClang && stdenv.hostPlatform == stdenv.buildPlatform) (
130+
lib.hiPrio pkgs.buildPackages.clang-tools
131+
)
132+
++ lib.optional stdenv.hostPlatform.isLinux pkgs.buildPackages.mold-wrapped;
133+
in
134+
# FIXME: separateDebugInfo = false doesn't actually prevent -Wa,--compress-debug-sections
135+
# from making its way into NIX_CFLAGS_COMPILE.
136+
lib.filter (p: !lib.hasInfix "separate-debug-info" p) inputs;
128137

129138
buildInputs = [
130139
pkgs.gbenchmark

0 commit comments

Comments
 (0)