diff options
| author | David Wood <david.wood@huawei.com> | 2022-06-13 11:40:28 +0100 |
|---|---|---|
| committer | David Wood <david.wood@huawei.com> | 2022-08-18 15:19:40 +0100 |
| commit | cf2c492ef8c87c049b4e3a62f43c841aafc88cba (patch) | |
| tree | ec6ee935cb54a462d017d19dccbf2f7697708044 /src | |
| parent | 8556e6620e4866526b3cea767ad8c20ae877a569 (diff) | |
| download | rust-cf2c492ef8c87c049b4e3a62f43c841aafc88cba.tar.gz rust-cf2c492ef8c87c049b4e3a62f43c841aafc88cba.zip | |
session: stabilize split debuginfo on linux
Stabilize the `-Csplit-debuginfo` flag... - ...on Linux for all values of the flag. Split DWARF has been implemented for a few months, hasn't had any bug reports and has had some promising benchmarking for incremental debug build performance. - ..on other platforms for the default value. It doesn't make any sense that `-Csplit-debuginfo=packed` is unstable on Windows MSVC when that's the default behaviour, but keep the other values unstable. Signed-off-by: David Wood <david.wood@huawei.com>
Diffstat (limited to 'src')
| -rw-r--r-- | src/bootstrap/builder.rs | 30 | ||||
| -rw-r--r-- | src/test/incremental/split_debuginfo_cached.rs | 4 | ||||
| -rw-r--r-- | src/test/incremental/split_debuginfo_mode.rs | 8 | ||||
| -rw-r--r-- | src/test/run-make-fulldeps/split-debuginfo/Makefile | 39 | ||||
| -rw-r--r-- | src/test/ui/debuginfo/debuginfo-emit-llvm-ir-and-split-debuginfo.rs | 3 | ||||
| -rw-r--r-- | src/tools/compiletest/src/runtest.rs | 7 |
6 files changed, 49 insertions, 42 deletions
diff --git a/src/bootstrap/builder.rs b/src/bootstrap/builder.rs index 0ab4824ac0a..c041da34b84 100644 --- a/src/bootstrap/builder.rs +++ b/src/bootstrap/builder.rs @@ -1759,23 +1759,21 @@ impl<'a> Builder<'a> { }, ); - if !target.contains("windows") { - let needs_unstable_opts = target.contains("linux") - || target.contains("solaris") - || target.contains("windows") - || target.contains("bsd") - || target.contains("dragonfly") - || target.contains("illumos"); - - if needs_unstable_opts { - rustflags.arg("-Zunstable-options"); - } - match self.config.rust_split_debuginfo { - SplitDebuginfo::Packed => rustflags.arg("-Csplit-debuginfo=packed"), - SplitDebuginfo::Unpacked => rustflags.arg("-Csplit-debuginfo=unpacked"), - SplitDebuginfo::Off => rustflags.arg("-Csplit-debuginfo=off"), - }; + let split_debuginfo_is_stable = target.contains("linux") + || target.contains("apple") + || (target.contains("msvc") + && self.config.rust_split_debuginfo == SplitDebuginfo::Packed) + || (target.contains("windows") + && self.config.rust_split_debuginfo == SplitDebuginfo::Off); + + if !split_debuginfo_is_stable { + rustflags.arg("-Zunstable-options"); } + match self.config.rust_split_debuginfo { + SplitDebuginfo::Packed => rustflags.arg("-Csplit-debuginfo=packed"), + SplitDebuginfo::Unpacked => rustflags.arg("-Csplit-debuginfo=unpacked"), + SplitDebuginfo::Off => rustflags.arg("-Csplit-debuginfo=off"), + }; if self.config.cmd.bless() { // Bless `expect!` tests. diff --git a/src/test/incremental/split_debuginfo_cached.rs b/src/test/incremental/split_debuginfo_cached.rs index 25c802d5a1d..ba8385f89a7 100644 --- a/src/test/incremental/split_debuginfo_cached.rs +++ b/src/test/incremental/split_debuginfo_cached.rs @@ -6,8 +6,8 @@ // only-x86_64-unknown-linux-gnu // revisions:rpass1 rpass2 -// [rpass1]compile-flags: -g -Zquery-dep-graph -Zunstable-options -Csplit-debuginfo=packed -Zsplit-dwarf-kind=split -// [rpass2]compile-flags: -g -Zquery-dep-graph -Zunstable-options -Csplit-debuginfo=packed -Zsplit-dwarf-kind=split +// [rpass1]compile-flags: -g -Zquery-dep-graph -Csplit-debuginfo=packed -Zsplit-dwarf-kind=split +// [rpass2]compile-flags: -g -Zquery-dep-graph -Csplit-debuginfo=packed -Zsplit-dwarf-kind=split #![feature(rustc_attrs)] // For `rpass2`, nothing has changed so everything should re-used. diff --git a/src/test/incremental/split_debuginfo_mode.rs b/src/test/incremental/split_debuginfo_mode.rs index f2533e4146a..edc1a80d30e 100644 --- a/src/test/incremental/split_debuginfo_mode.rs +++ b/src/test/incremental/split_debuginfo_mode.rs @@ -6,10 +6,10 @@ // only-x86_64-unknown-linux-gnu // revisions:rpass1 rpass2 rpass3 rpass4 -// [rpass1]compile-flags: -Zquery-dep-graph -Zunstable-options -Csplit-debuginfo=unpacked -Zsplit-dwarf-kind=single -Zsplit-dwarf-inlining=on -// [rpass2]compile-flags: -Zquery-dep-graph -Zunstable-options -Csplit-debuginfo=packed -Zsplit-dwarf-kind=single -Zsplit-dwarf-inlining=on -// [rpass3]compile-flags: -Zquery-dep-graph -Zunstable-options -Csplit-debuginfo=packed -Zsplit-dwarf-kind=split -Zsplit-dwarf-inlining=on -// [rpass4]compile-flags: -Zquery-dep-graph -Zunstable-options -Csplit-debuginfo=packed -Zsplit-dwarf-kind=split -Zsplit-dwarf-inlining=off +// [rpass1]compile-flags: -Zquery-dep-graph -Csplit-debuginfo=unpacked -Zsplit-dwarf-kind=single -Zsplit-dwarf-inlining=on +// [rpass2]compile-flags: -Zquery-dep-graph -Csplit-debuginfo=packed -Zsplit-dwarf-kind=single -Zsplit-dwarf-inlining=on +// [rpass3]compile-flags: -Zquery-dep-graph -Csplit-debuginfo=packed -Zsplit-dwarf-kind=split -Zsplit-dwarf-inlining=on +// [rpass4]compile-flags: -Zquery-dep-graph -Csplit-debuginfo=packed -Zsplit-dwarf-kind=split -Zsplit-dwarf-inlining=off #![feature(rustc_attrs)] // For rpass2 we change -Csplit-debuginfo and thus expect every CGU to be recompiled diff --git a/src/test/run-make-fulldeps/split-debuginfo/Makefile b/src/test/run-make-fulldeps/split-debuginfo/Makefile index e2dc64d8ce2..2a650ea7dfb 100644 --- a/src/test/run-make-fulldeps/split-debuginfo/Makefile +++ b/src/test/run-make-fulldeps/split-debuginfo/Makefile @@ -29,14 +29,19 @@ unpacked: [ ! -d $(TMPDIR)/foo.dSYM ] else ifdef IS_WINDOWS -# Windows only supports =off +# Windows only supports =packed off: packed: unpacked: else -# If disabled, don't run dsymutil +ifeq ($(UNAME),Linux) + UNSTABLEOPTS := +else + UNSTABLEOPTS := -Zunstable-options +endif + off: - $(RUSTC) foo.rs -g -C split-debuginfo=off -Z unstable-options + $(RUSTC) foo.rs -g -C $(UNSTABLEOPTS) split-debuginfo=off [ ! -f $(TMPDIR)/*.dwp ] [ ! -f $(TMPDIR)/*.dwo ] @@ -47,12 +52,12 @@ off: packed: packed-split packed-single packed-split: - $(RUSTC) foo.rs -g -C split-debuginfo=packed -Z unstable-options -Zsplit-dwarf-kind=split + $(RUSTC) foo.rs -g $(UNSTABLEOPTS) -C split-debuginfo=packed -Zsplit-dwarf-kind=split ls $(TMPDIR)/*.dwp rm -rf $(TMPDIR)/*.dwp $(TMPDIR)/*.dwo packed-single: - $(RUSTC) foo.rs -g -C split-debuginfo=packed -Z unstable-options -Zsplit-dwarf-kind=single + $(RUSTC) foo.rs -g $(UNSTABLEOPTS) -C split-debuginfo=packed -Zsplit-dwarf-kind=single ls $(TMPDIR)/*.dwp ls $(TMPDIR)/*.dwo && exit 1 || exit 0 rm -rf $(TMPDIR)/*.dwp @@ -60,37 +65,37 @@ packed-single: packed-remapped: packed-remapped-split packed-remapped-single packed-remapped-split: - $(RUSTC) -Z unstable-options -C split-debuginfo=packed -C debuginfo=2 \ + $(RUSTC) $(UNSTABLEOPTS) -C split-debuginfo=packed -C debuginfo=2 \ -Z split-dwarf-kind=split --remap-path-prefix $(TMPDIR)=/a foo.rs -g objdump -Wi $(TMPDIR)/foo | grep DW_AT_GNU_dwo_name | (! grep $(TMPDIR)) || exit 1 packed-remapped-single: - $(RUSTC) -Z unstable-options -C split-debuginfo=packed -C debuginfo=2 \ + $(RUSTC) $(UNSTABLEOPTS) -C split-debuginfo=packed -C debuginfo=2 \ -Z split-dwarf-kind=single --remap-path-prefix $(TMPDIR)=/a foo.rs -g objdump -Wi $(TMPDIR)/foo | grep DW_AT_GNU_dwo_name | (! grep $(TMPDIR)) || exit 1 packed-crosscrate: packed-crosscrate-split packed-crosscrate-single packed-crosscrate-split: - $(RUSTC) --crate-type lib -Z unstable-options -C split-debuginfo=packed \ + $(RUSTC) --crate-type lib $(UNSTABLEOPTS) -C split-debuginfo=packed \ -Zsplit-dwarf-kind=split -C debuginfo=2 -g bar.rs ls $(TMPDIR)/*.rlib ls $(TMPDIR)/*.dwo && exit 1 || exit 0 ls $(TMPDIR)/*.dwp && exit 1 || exit 0 - $(RUSTC) --extern bar=$(TMPDIR)/libbar.rlib -Z unstable-options -C split-debuginfo=packed \ - -Zsplit-dwarf-kind=split -C debuginfo=2 -g main.rs + $(RUSTC) --extern bar=$(TMPDIR)/libbar.rlib -Z unstable-options $(UNSTABLEOPTS) \ + -C split-debuginfo=packed -Zsplit-dwarf-kind=split -C debuginfo=2 -g main.rs rm $(TMPDIR)/*.dwo rm $(TMPDIR)/main.dwp rm $(TMPDIR)/$(call BIN,main) packed-crosscrate-single: - $(RUSTC) --crate-type lib -Z unstable-options -C split-debuginfo=packed \ + $(RUSTC) --crate-type lib $(UNSTABLEOPTS) -C split-debuginfo=packed \ -Zsplit-dwarf-kind=single -C debuginfo=2 -g bar.rs ls $(TMPDIR)/*.rlib ls $(TMPDIR)/*.dwo && exit 1 || exit 0 ls $(TMPDIR)/*.dwp && exit 1 || exit 0 - $(RUSTC) --extern bar=$(TMPDIR)/libbar.rlib -Z unstable-options -C split-debuginfo=packed \ - -Zsplit-dwarf-kind=single -C debuginfo=2 -g main.rs + $(RUSTC) --extern bar=$(TMPDIR)/libbar.rlib -Z unstable-options $(UNSTABLEOPTS) \ + -C split-debuginfo=packed -Zsplit-dwarf-kind=single -C debuginfo=2 -g main.rs ls $(TMPDIR)/*.dwo && exit 1 || exit 0 rm $(TMPDIR)/main.dwp rm $(TMPDIR)/$(call BIN,main) @@ -98,23 +103,23 @@ packed-crosscrate-single: unpacked: unpacked-split unpacked-single unpacked-remapped-split unpacked-remapped-single unpacked-split: - $(RUSTC) foo.rs -g -C split-debuginfo=unpacked -Z unstable-options -Zsplit-dwarf-kind=split + $(RUSTC) foo.rs -g $(UNSTABLEOPTS) -C split-debuginfo=unpacked -Zsplit-dwarf-kind=split ls $(TMPDIR)/*.dwp && exit 1 || exit 0 ls $(TMPDIR)/*.dwo rm -rf $(TMPDIR)/*.dwp $(TMPDIR)/*.dwo unpacked-single: - $(RUSTC) foo.rs -g -C split-debuginfo=unpacked -Z unstable-options -Zsplit-dwarf-kind=single + $(RUSTC) foo.rs -g $(UNSTABLEOPTS) -C split-debuginfo=unpacked -Zsplit-dwarf-kind=single ls $(TMPDIR)/*.dwp && exit 1 || exit 0 ls $(TMPDIR)/*.dwo && exit 1 || exit 0 unpacked-remapped-split: - $(RUSTC) -Z unstable-options -C split-debuginfo=unpacked -C debuginfo=2 \ + $(RUSTC) $(UNSTABLEOPTS) -C split-debuginfo=unpacked -C debuginfo=2 \ -Z split-dwarf-kind=split --remap-path-prefix $(TMPDIR)=/a foo.rs -g objdump -Wi $(TMPDIR)/foo | grep DW_AT_GNU_dwo_name | (! grep $(TMPDIR)) || exit 1 unpacked-remapped-single: - $(RUSTC) -Z unstable-options -C split-debuginfo=unpacked -C debuginfo=2 \ + $(RUSTC) $(UNSTABLEOPTS) -C split-debuginfo=unpacked -C debuginfo=2 \ -Z split-dwarf-kind=single --remap-path-prefix $(TMPDIR)=/a foo.rs -g objdump -Wi $(TMPDIR)/foo | grep DW_AT_GNU_dwo_name | (! grep $(TMPDIR)) || exit 1 endif diff --git a/src/test/ui/debuginfo/debuginfo-emit-llvm-ir-and-split-debuginfo.rs b/src/test/ui/debuginfo/debuginfo-emit-llvm-ir-and-split-debuginfo.rs index 043011b3316..ff764015dc7 100644 --- a/src/test/ui/debuginfo/debuginfo-emit-llvm-ir-and-split-debuginfo.rs +++ b/src/test/ui/debuginfo/debuginfo-emit-llvm-ir-and-split-debuginfo.rs @@ -1,6 +1,7 @@ // build-pass +// only-linux // -// compile-flags: -g --emit=llvm-ir -Zunstable-options -Csplit-debuginfo=unpacked +// compile-flags: -g --emit=llvm-ir -Csplit-debuginfo=unpacked // // Make sure that we don't explode with an error if we don't actually end up emitting any `dwo`s, // as would be the case if we don't actually codegen anything. diff --git a/src/tools/compiletest/src/runtest.rs b/src/tools/compiletest/src/runtest.rs index 47f2a2d3482..782c0c25431 100644 --- a/src/tools/compiletest/src/runtest.rs +++ b/src/tools/compiletest/src/runtest.rs @@ -2015,11 +2015,14 @@ impl<'test> TestCx<'test> { Some(CompareMode::Chalk) => { rustc.args(&["-Zchalk"]); } - Some(CompareMode::SplitDwarf) => { + Some(CompareMode::SplitDwarf) if self.config.target.contains("windows") => { rustc.args(&["-Csplit-debuginfo=unpacked", "-Zunstable-options"]); } + Some(CompareMode::SplitDwarf) => { + rustc.args(&["-Csplit-debuginfo=unpacked"]); + } Some(CompareMode::SplitDwarfSingle) => { - rustc.args(&["-Csplit-debuginfo=packed", "-Zunstable-options"]); + rustc.args(&["-Csplit-debuginfo=packed"]); } None => {} } |
