2b99b9fd25
The optimization that removes artifacts when building libraries is correct from the compiler's perspective but not from a debugger's perspective. Unpacked split debuginfo is referred to by filename and debuggers need the artifact that contains debuginfo to continue to exist at that path. Ironically the test expects the correct behavior but it was not running.
309 lines
10 KiB
Makefile
309 lines
10 KiB
Makefile
include ../tools.mk
|
|
|
|
all: off packed unpacked
|
|
|
|
ifeq ($(UNAME),Darwin)
|
|
# If disabled, don't run `dsymutil`.
|
|
off:
|
|
rm -rf $(TMPDIR)/*.dSYM
|
|
$(RUSTC) foo.rs -g -C split-debuginfo=off
|
|
[ ! -d $(TMPDIR)/foo.dSYM ]
|
|
|
|
# Packed by default, but only if debuginfo is requested
|
|
packed:
|
|
rm -rf $(TMPDIR)/*.dSYM
|
|
$(RUSTC) foo.rs
|
|
[ ! -d $(TMPDIR)/foo.dSYM ]
|
|
rm -rf $(TMPDIR)/*.dSYM
|
|
$(RUSTC) foo.rs -g
|
|
[ -d $(TMPDIR)/foo.dSYM ]
|
|
rm -rf $(TMPDIR)/*.dSYM
|
|
$(RUSTC) foo.rs -g -C split-debuginfo=packed
|
|
[ -d $(TMPDIR)/foo.dSYM ]
|
|
rm -rf $(TMPDIR)/*.dSYM
|
|
|
|
# Object files are preserved with unpacked and `dsymutil` isn't run
|
|
unpacked:
|
|
$(RUSTC) foo.rs -g -C split-debuginfo=unpacked
|
|
ls $(TMPDIR)/*.o
|
|
[ ! -d $(TMPDIR)/foo.dSYM ]
|
|
else
|
|
ifdef IS_WINDOWS
|
|
# Windows only supports packed debuginfo - nothing to test.
|
|
off:
|
|
packed:
|
|
unpacked:
|
|
else
|
|
# Some non-Windows, non-Darwin platforms are not stable, and some are.
|
|
ifeq ($(UNAME),Linux)
|
|
UNSTABLEOPTS :=
|
|
else
|
|
UNSTABLEOPTS := -Zunstable-options
|
|
endif
|
|
|
|
# - Debuginfo in `.o` files
|
|
# - `.o` deleted
|
|
# - `.dwo` never created
|
|
# - `.dwp` never created
|
|
off:
|
|
$(RUSTC) foo.rs -g -C $(UNSTABLEOPTS) split-debuginfo=off
|
|
[ ! -f $(TMPDIR)/*.dwp ]
|
|
[ ! -f $(TMPDIR)/*.dwo ]
|
|
$(RUSTC) foo.rs -g
|
|
[ ! -f $(TMPDIR)/*.dwp ]
|
|
[ ! -f $(TMPDIR)/*.dwo ]
|
|
|
|
packed: packed-split packed-single packed-lto packed-remapped packed-crosscrate
|
|
|
|
# - Debuginfo in `.dwo` files
|
|
# - `.o` deleted
|
|
# - `.dwo` deleted
|
|
# - `.dwp` present
|
|
packed-split:
|
|
$(RUSTC) foo.rs -g $(UNSTABLEOPTS) -C split-debuginfo=packed -Zsplit-dwarf-kind=split
|
|
ls $(TMPDIR)/*.o && exit 1 || exit 0
|
|
ls $(TMPDIR)/*.dwo && exit 1 || exit 0
|
|
rm $(TMPDIR)/foo.dwp
|
|
rm $(TMPDIR)/$(call BIN,foo)
|
|
|
|
# - Debuginfo in `.o` files
|
|
# - `.o` deleted
|
|
# - `.dwo` never created
|
|
# - `.dwp` present
|
|
packed-single:
|
|
$(RUSTC) foo.rs -g $(UNSTABLEOPTS) -C split-debuginfo=packed -Zsplit-dwarf-kind=single
|
|
ls $(TMPDIR)/*.o && exit 1 || exit 0
|
|
ls $(TMPDIR)/*.dwo && exit 1 || exit 0
|
|
rm $(TMPDIR)/foo.dwp
|
|
rm $(TMPDIR)/$(call BIN,foo)
|
|
|
|
packed-lto: packed-lto-split packed-lto-single
|
|
|
|
# - rmeta file added to rlib, no object files are generated and thus no debuginfo is generated
|
|
# - `.o` never created
|
|
# - `.dwo` never created
|
|
# - `.dwp` never created
|
|
packed-lto-split:
|
|
$(RUSTC) baz.rs -g $(UNSTABLEOPTS) -Csplit-debuginfo=packed -Zsplit-dwarf-kind=split \
|
|
--crate-type=rlib -Clinker-plugin-lto
|
|
ls $(TMPDIR)/*.o && exit 1 || exit 0
|
|
ls $(TMPDIR)/*.dwo && exit 1 || exit 0
|
|
ls $(TMPDIR)/*.dwp && exit 1 || exit 0
|
|
rm $(TMPDIR)/libbaz.rlib
|
|
|
|
# - rmeta file added to rlib, no object files are generated and thus no debuginfo is generated
|
|
# - `.o` never created
|
|
# - `.dwo` never created
|
|
# - `.dwp` never created
|
|
packed-lto-single:
|
|
$(RUSTC) baz.rs -g $(UNSTABLEOPTS) -Csplit-debuginfo=packed -Zsplit-dwarf-kind=single \
|
|
--crate-type=rlib -Clinker-plugin-lto
|
|
ls $(TMPDIR)/*.o && exit 1 || exit 0
|
|
ls $(TMPDIR)/*.dwo && exit 1 || exit 0
|
|
ls $(TMPDIR)/*.dwp && exit 1 || exit 0
|
|
rm $(TMPDIR)/libbaz.rlib
|
|
|
|
packed-remapped: packed-remapped-split packed-remapped-single
|
|
|
|
# - Debuginfo in `.dwo` files
|
|
# - `.o` and binary refer to remapped `.dwo` paths which do not exist
|
|
# - `.o` deleted
|
|
# - `.dwo` deleted
|
|
# - `.dwp` present
|
|
packed-remapped-split:
|
|
$(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
|
|
ls $(TMPDIR)/*.o && exit 1 || exit 0
|
|
ls $(TMPDIR)/*.dwo && exit 1 || exit 0
|
|
rm $(TMPDIR)/foo.dwp
|
|
rm $(TMPDIR)/$(call BIN,foo)
|
|
|
|
# - Debuginfo in `.o` files
|
|
# - `.o` and binary refer to remapped `.o` paths which do not exist
|
|
# - `.o` deleted
|
|
# - `.dwo` never created
|
|
# - `.dwp` present
|
|
packed-remapped-single:
|
|
$(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
|
|
ls $(TMPDIR)/*.o && exit 1 || exit 0
|
|
ls $(TMPDIR)/*.dwo && exit 1 || exit 0
|
|
rm $(TMPDIR)/foo.dwp
|
|
rm $(TMPDIR)/$(call BIN,foo)
|
|
|
|
packed-crosscrate: packed-crosscrate-split packed-crosscrate-single
|
|
|
|
# - Debuginfo in `.dwo` files
|
|
# - (bar) `.rlib` file created, contains `.dwo`
|
|
# - (bar) `.o` deleted
|
|
# - (bar) `.dwo` deleted
|
|
# - (bar) `.dwp` never created
|
|
# - (main) `.o` deleted
|
|
# - (main) `.dwo` deleted
|
|
# - (main) `.dwp` present
|
|
packed-crosscrate-split:
|
|
$(RUSTC) --crate-type lib $(UNSTABLEOPTS) -C split-debuginfo=packed \
|
|
-Zsplit-dwarf-kind=split -C debuginfo=2 -g bar.rs
|
|
ls $(TMPDIR)/*.rlib
|
|
ls $(TMPDIR)/*.o && exit 1 || exit 0
|
|
ls $(TMPDIR)/*.dwo && exit 1 || exit 0
|
|
ls $(TMPDIR)/*.dwp && exit 1 || exit 0
|
|
$(RUSTC) --extern bar=$(TMPDIR)/libbar.rlib $(UNSTABLEOPTS) \
|
|
-C split-debuginfo=packed -Zsplit-dwarf-kind=split -C debuginfo=2 -g main.rs
|
|
ls $(TMPDIR)/*.o && exit 1 || exit 0
|
|
ls $(TMPDIR)/*.dwo && exit 1 || exit 0
|
|
rm $(TMPDIR)/main.dwp
|
|
rm $(TMPDIR)/$(call BIN,main)
|
|
|
|
# - Debuginfo in `.o` files
|
|
# - (bar) `.rlib` file created, contains `.o`
|
|
# - (bar) `.o` deleted
|
|
# - (bar) `.dwo` never created
|
|
# - (bar) `.dwp` never created
|
|
# - (main) `.o` deleted
|
|
# - (main) `.dwo` never created
|
|
# - (main) `.dwp` present
|
|
packed-crosscrate-single:
|
|
$(RUSTC) --crate-type lib $(UNSTABLEOPTS) -C split-debuginfo=packed \
|
|
-Zsplit-dwarf-kind=single -C debuginfo=2 -g bar.rs
|
|
ls $(TMPDIR)/*.rlib
|
|
ls $(TMPDIR)/*.o && exit 1 || exit 0
|
|
ls $(TMPDIR)/*.dwo && exit 1 || exit 0
|
|
ls $(TMPDIR)/*.dwp && exit 1 || exit 0
|
|
$(RUSTC) --extern bar=$(TMPDIR)/libbar.rlib $(UNSTABLEOPTS) \
|
|
-C split-debuginfo=packed -Zsplit-dwarf-kind=single -C debuginfo=2 -g main.rs
|
|
ls $(TMPDIR)/*.o && exit 1 || exit 0
|
|
ls $(TMPDIR)/*.dwo && exit 1 || exit 0
|
|
rm $(TMPDIR)/main.dwp
|
|
rm $(TMPDIR)/$(call BIN,main)
|
|
|
|
unpacked: unpacked-split unpacked-single unpacked-lto unpacked-remapped unpacked-crosscrate
|
|
|
|
# - Debuginfo in `.dwo` files
|
|
# - `.o` deleted
|
|
# - `.dwo` present
|
|
# - `.dwp` never created
|
|
unpacked-split:
|
|
$(RUSTC) foo.rs -g $(UNSTABLEOPTS) -C split-debuginfo=unpacked -Zsplit-dwarf-kind=split
|
|
ls $(TMPDIR)/*.o && exit 1 || exit 0
|
|
rm $(TMPDIR)/*.dwo
|
|
ls $(TMPDIR)/*.dwp && exit 1 || exit 0
|
|
rm $(TMPDIR)/$(call BIN,foo)
|
|
|
|
# - Debuginfo in `.o` files
|
|
# - `.o` present
|
|
# - `.dwo` never created
|
|
# - `.dwp` never created
|
|
unpacked-single:
|
|
$(RUSTC) foo.rs -g $(UNSTABLEOPTS) -C split-debuginfo=unpacked -Zsplit-dwarf-kind=single
|
|
ls $(TMPDIR)/*.o
|
|
ls $(TMPDIR)/*.dwo && exit 1 || exit 0
|
|
ls $(TMPDIR)/*.dwp && exit 1 || exit 0
|
|
rm $(TMPDIR)/$(call BIN,foo)
|
|
|
|
unpacked-lto: packed-lto-split packed-lto-single
|
|
|
|
# - rmeta file added to rlib, no object files are generated and thus no debuginfo is generated
|
|
# - `.o` never created
|
|
# - `.dwo` never created
|
|
# - `.dwp` never created
|
|
unpacked-lto-split:
|
|
$(RUSTC) baz.rs -g $(UNSTABLEOPTS) -Csplit-debuginfo=unpacked -Zsplit-dwarf-kind=split \
|
|
--crate-type=rlib -Clinker-plugin-lto
|
|
ls $(TMPDIR)/*.o && exit 1 || exit 0
|
|
ls $(TMPDIR)/*.dwo && exit 1 || exit 0
|
|
ls $(TMPDIR)/*.dwp && exit 1 || exit 0
|
|
rm $(TMPDIR)/libbaz.rlib
|
|
|
|
# - rmeta file added to rlib, no object files are generated and thus no debuginfo is generated
|
|
# - `.o` never created
|
|
# - `.dwo` never created
|
|
# - `.dwp` never created
|
|
unpacked-lto-single:
|
|
$(RUSTC) baz.rs -g $(UNSTABLEOPTS) -Csplit-debuginfo=unpacked -Zsplit-dwarf-kind=single \
|
|
--crate-type=rlib -Clinker-plugin-lto
|
|
ls $(TMPDIR)/*.o && exit 1 || exit 0
|
|
ls $(TMPDIR)/*.dwo && exit 1 || exit 0
|
|
ls $(TMPDIR)/*.dwp && exit 1 || exit 0
|
|
rm $(TMPDIR)/libbaz.rlib
|
|
|
|
unpacked-remapped: unpacked-remapped-split unpacked-remapped-single
|
|
|
|
# - Debuginfo in `.dwo` files
|
|
# - `.o` and binary refer to remapped `.dwo` paths which do not exist
|
|
# - `.o` deleted
|
|
# - `.dwo` present
|
|
# - `.dwp` never created
|
|
unpacked-remapped-split:
|
|
$(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
|
|
ls $(TMPDIR)/*.o && exit 1 || exit 0
|
|
rm $(TMPDIR)/*.dwo
|
|
ls $(TMPDIR)/*.dwp && exit 1 || exit 0
|
|
rm $(TMPDIR)/$(call BIN,foo)
|
|
|
|
# - Debuginfo in `.o` files
|
|
# - `.o` and binary refer to remapped `.o` paths which do not exist
|
|
# - `.o` present
|
|
# - `.dwo` never created
|
|
# - `.dwp` never created
|
|
unpacked-remapped-single:
|
|
$(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
|
|
rm $(TMPDIR)/*.o
|
|
ls $(TMPDIR)/*.dwo && exit 1 || exit 0
|
|
ls $(TMPDIR)/*.dwp && exit 1 || exit 0
|
|
rm $(TMPDIR)/$(call BIN,foo)
|
|
|
|
unpacked-crosscrate: unpacked-crosscrate-split unpacked-crosscrate-single
|
|
|
|
# - Debuginfo in `.dwo` files
|
|
# - (bar) `.rlib` file created, contains `.dwo`
|
|
# - (bar) `.o` deleted
|
|
# - (bar) `.dwo` present
|
|
# - (bar) `.dwp` never created
|
|
# - (main) `.o` deleted
|
|
# - (main) `.dwo` present
|
|
# - (main) `.dwp` never created
|
|
unpacked-crosscrate-split:
|
|
$(RUSTC) --crate-type lib $(UNSTABLEOPTS) -C split-debuginfo=unpacked \
|
|
-Zsplit-dwarf-kind=split -C debuginfo=2 -g bar.rs
|
|
ls $(TMPDIR)/*.rlib
|
|
ls $(TMPDIR)/*.o && exit 1 || exit 0
|
|
ls $(TMPDIR)/*.dwo
|
|
ls $(TMPDIR)/*.dwp && exit 1 || exit 0
|
|
$(RUSTC) --extern bar=$(TMPDIR)/libbar.rlib $(UNSTABLEOPTS) \
|
|
-C split-debuginfo=unpacked -Zsplit-dwarf-kind=split -C debuginfo=2 -g main.rs
|
|
ls $(TMPDIR)/*.o && exit 1 || exit 0
|
|
rm $(TMPDIR)/*.dwo
|
|
ls $(TMPDIR)/*.dwp && exit 1 || exit 0
|
|
rm $(TMPDIR)/$(call BIN,main)
|
|
|
|
# - Debuginfo in `.o` files
|
|
# - (bar) `.rlib` file created, contains `.o`
|
|
# - (bar) `.o` present
|
|
# - (bar) `.dwo` never created
|
|
# - (bar) `.dwp` never created
|
|
# - (main) `.o` present
|
|
# - (main) `.dwo` never created
|
|
# - (main) `.dwp` never created
|
|
unpacked-crosscrate-single:
|
|
$(RUSTC) --crate-type lib $(UNSTABLEOPTS) -C split-debuginfo=unpacked \
|
|
-Zsplit-dwarf-kind=single -C debuginfo=2 -g bar.rs
|
|
ls $(TMPDIR)/*.rlib
|
|
ls $(TMPDIR)/*.o
|
|
ls $(TMPDIR)/*.dwo && exit 1 || exit 0
|
|
ls $(TMPDIR)/*.dwp && exit 1 || exit 0
|
|
$(RUSTC) --extern bar=$(TMPDIR)/libbar.rlib $(UNSTABLEOPTS) \
|
|
-C split-debuginfo=unpacked -Zsplit-dwarf-kind=single -C debuginfo=2 -g main.rs
|
|
ls $(TMPDIR)/*.o
|
|
ls $(TMPDIR)/*.dwo && exit 1 || exit 0
|
|
ls $(TMPDIR)/*.dwp && exit 1 || exit 0
|
|
rm $(TMPDIR)/$(call BIN,main)
|
|
endif
|
|
endif
|