Skip to content

Commit 7608d06

Browse files
debuginfo: Add script that allows to conveniently start LLDB in "rust-mode"
1 parent f19e6d7 commit 7608d06

File tree

6 files changed

+104
-5
lines changed

6 files changed

+104
-5
lines changed

Makefile.in

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,8 @@ include $(CFG_SRC_DIR)mk/rustllvm.mk
198198
include $(CFG_SRC_DIR)mk/docs.mk
199199
# LLVM
200200
include $(CFG_SRC_DIR)mk/llvm.mk
201+
# Rules for installing debugger scripts
202+
include $(CFG_SRC_DIR)mk/debuggers.mk
201203

202204
######################################################################
203205
# Secondary makefiles, conditionalized for speed

mk/clean.mk

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ clean-generic-$(2)-$(1):
6363
-name '*.lib' -o \
6464
-name '*.dll' -o \
6565
-name '*.def' -o \
66+
-name '*.py' -o \
6667
-name '*.bc' \
6768
\) \
6869
| xargs rm -f
@@ -78,7 +79,7 @@ define CLEAN_HOST_STAGE_N
7879

7980
clean$(1)_H_$(2): \
8081
$$(foreach crate,$$(CRATES),clean$(1)_H_$(2)-lib-$$(crate)) \
81-
$$(foreach tool,$$(TOOLS),clean$(1)_H_$(2)-tool-$$(tool))
82+
$$(foreach tool,$$(TOOLS) $$(DEBUGGER_BIN_SCRIPTS),clean$(1)_H_$(2)-tool-$$(tool))
8283
$$(Q)rm -fr $(2)/rt/libbacktrace
8384

8485
clean$(1)_H_$(2)-tool-%:
@@ -98,7 +99,7 @@ define CLEAN_TARGET_STAGE_N
9899

99100
clean$(1)_T_$(2)_H_$(3): \
100101
$$(foreach crate,$$(CRATES),clean$(1)_T_$(2)_H_$(3)-lib-$$(crate)) \
101-
$$(foreach tool,$$(TOOLS),clean$(1)_T_$(2)_H_$(3)-tool-$$(tool))
102+
$$(foreach tool,$$(TOOLS) $$(DEBUGGER_BIN_SCRIPTS),clean$(1)_T_$(2)_H_$(3)-tool-$$(tool))
102103
$$(Q)rm -f $$(TLIB$(1)_T_$(2)_H_$(3))/libmorestack.a
103104
$$(Q)rm -f $$(TLIB$(1)_T_$(2)_H_$(3))/libcompiler-rt.a
104105
$(Q)rm -f $$(TLIB$(1)_T_$(2)_H_$(3))/librun_pass_stage* # For unix

mk/debuggers.mk

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
# Copyright 2014 The Rust Project Developers. See the COPYRIGHT
2+
# file at the top-level directory of this distribution and at
3+
# http://rust-lang.org/COPYRIGHT.
4+
#
5+
# Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6+
# http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7+
# <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8+
# option. This file may not be copied, modified, or distributed
9+
# except according to those terms.
10+
11+
######################################################################
12+
# Copy debugger related scripts
13+
######################################################################
14+
15+
DEBUGGER_RUSTLIB_ETC_SCRIPTS=lldb_rust_formatters.py
16+
DEBUGGER_BIN_SCRIPTS=rust-lldb
17+
18+
DEBUGGER_RUSTLIB_ETC_SCRIPTS_ABS=$(foreach script,$(DEBUGGER_RUSTLIB_ETC_SCRIPTS), \
19+
$(CFG_SRC_DIR)src/etc/$(script))
20+
DEBUGGER_BIN_SCRIPTS_ABS=$(foreach script,$(DEBUGGER_BIN_SCRIPTS), \
21+
$(CFG_SRC_DIR)src/etc/$(script))
22+
23+
DEBUGGER_SCRIPTS_ALL=$(DEBUGGER_RUSTLIB_ETC_SCRIPTS_ABS) $(DEBUGGER_BIN_SCRIPTS_ABS)
24+
25+
# $(1) - the stage to copy to
26+
# $(2) - the host triple
27+
define DEF_INSTALL_DEBUGGER_SCRIPTS_HOST
28+
29+
tmp/install-debugger-scripts$(1)_H_$(2).done: $$(DEBUGGER_SCRIPTS_ALL)
30+
$(Q)mkdir -p $$(HBIN$(1)_H_$(2))
31+
$(Q)mkdir -p $$(HLIB$(1)_H_$(2))/rustlib/etc
32+
$(Q)install $(DEBUGGER_BIN_SCRIPTS_ABS) $$(HBIN$(1)_H_$(2))
33+
$(Q)install $(DEBUGGER_RUSTLIB_ETC_SCRIPTS_ABS) $$(HLIB$(1)_H_$(2))/rustlib/etc
34+
$(Q)touch $$@
35+
endef
36+
37+
# Expand host make-targets for all stages
38+
$(foreach stage,$(STAGES), \
39+
$(foreach host,$(CFG_HOST), \
40+
$(eval $(call DEF_INSTALL_DEBUGGER_SCRIPTS_HOST,$(stage),$(host)))))
41+
42+
# $(1) is the stage number
43+
# $(2) is the target triple
44+
# $(3) is the host triple
45+
define DEF_INSTALL_DEBUGGER_SCRIPTS_TARGET
46+
47+
tmp/install-debugger-scripts$(1)_T_$(2)_H_$(3).done: $$(DEBUGGER_SCRIPTS_ALL)
48+
$(Q)mkdir -p $$(TBIN$(1)_T_$(2)_H_$(3))
49+
$(Q)mkdir -p $$(TLIB$(1)_T_$(2)_H_$(3))/rustlib/etc
50+
$(Q)install $(DEBUGGER_BIN_SCRIPTS_ABS) $$(TBIN$(1)_T_$(2)_H_$(3))
51+
$(Q)install $(DEBUGGER_RUSTLIB_ETC_SCRIPTS_ABS) $$(TLIB$(1)_T_$(2)_H_$(3))/rustlib/etc
52+
$(Q)touch $$@
53+
endef
54+
55+
# Expand target make-targets for all stages
56+
$(foreach stage,$(STAGES), \
57+
$(foreach target,$(CFG_TARGET), \
58+
$(foreach host,$(CFG_HOST), \
59+
$(eval $(call DEF_INSTALL_DEBUGGER_SCRIPTS_TARGET,$(stage),$(target),$(host))))))

mk/main.mk

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -356,7 +356,8 @@ HSREQ$(1)_H_$(3) = $$(HBIN$(1)_H_$(3))/rustc$$(X_$(3))
356356
else
357357
HSREQ$(1)_H_$(3) = \
358358
$$(HBIN$(1)_H_$(3))/rustc$$(X_$(3)) \
359-
$$(MKFILE_DEPS)
359+
$$(MKFILE_DEPS) \
360+
tmp/install-debugger-scripts$(1)_H_$(3).done
360361
endif
361362

362363
# Prerequisites for using the stageN compiler to build target artifacts
@@ -370,7 +371,8 @@ TSREQ$(1)_T_$(2)_H_$(3) = \
370371
SREQ$(1)_T_$(2)_H_$(3) = \
371372
$$(TSREQ$(1)_T_$(2)_H_$(3)) \
372373
$$(foreach dep,$$(TARGET_CRATES), \
373-
$$(TLIB$(1)_T_$(2)_H_$(3))/stamp.$$(dep))
374+
$$(TLIB$(1)_T_$(2)_H_$(3))/stamp.$$(dep)) \
375+
tmp/install-debugger-scripts$(1)_T_$(2)_H_$(3).done
374376

375377
# Prerequisites for a working stageN compiler and complete set of target
376378
# libraries

mk/prepare.mk

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ prepare-base-$(1): PREPARE_DEST_LIB_DIR=$$(PREPARE_DEST_DIR)/$$(CFG_LIBDIR_RELAT
155155
prepare-base-$(1): PREPARE_DEST_MAN_DIR=$$(PREPARE_DEST_DIR)/share/man/man1
156156
prepare-base-$(1): prepare-everything-$(1)
157157

158-
prepare-everything-$(1): prepare-host-$(1) prepare-targets-$(1)
158+
prepare-everything-$(1): prepare-host-$(1) prepare-targets-$(1) prepare-debugger-scripts-$(1)
159159

160160
prepare-host-$(1): prepare-host-tools-$(1)
161161

@@ -167,8 +167,13 @@ prepare-host-tools-$(1): \
167167
prepare-host-dirs-$(1): prepare-maybe-clean-$(1)
168168
$$(call PREPARE_DIR,$$(PREPARE_DEST_BIN_DIR))
169169
$$(call PREPARE_DIR,$$(PREPARE_DEST_LIB_DIR))
170+
$$(call PREPARE_DIR,$$(PREPARE_DEST_LIB_DIR)/rustlib/etc)
170171
$$(call PREPARE_DIR,$$(PREPARE_DEST_MAN_DIR))
171172

173+
prepare-debugger-scripts-$(1): prepare-host-dirs-$(1) $(DEBUGGER_SCRIPTS_ALL)
174+
$$(Q)$$(PREPARE_BIN_CMD) $(DEBUGGER_BIN_SCRIPTS_ABS) $$(PREPARE_DEST_BIN_DIR)
175+
$$(Q)$$(PREPARE_LIB_CMD) $(DEBUGGER_RUSTLIB_ETC_SCRIPTS_ABS) $$(PREPARE_DEST_LIB_DIR)/rustlib/etc
176+
172177
$$(foreach tool,$$(PREPARE_TOOLS), \
173178
$$(foreach host,$$(CFG_HOST), \
174179
$$(eval $$(call DEF_PREPARE_HOST_TOOL,$$(tool),$$(PREPARE_STAGE),$$(host),$(1)))))

src/etc/rust-lldb

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
#!/bin/sh
2+
# Copyright 2014 The Rust Project Developers. See the COPYRIGHT
3+
# file at the top-level directory of this distribution and at
4+
# http://rust-lang.org/COPYRIGHT.
5+
#
6+
# Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
7+
# http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
8+
# <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
9+
# option. This file may not be copied, modified, or distributed
10+
# except according to those terms.
11+
12+
# Exit if anything fails
13+
set -e
14+
15+
# Create a tempfile containing the LLDB script we want to execute on startup
16+
TMPFILE=`mktemp /tmp/rust-lldb-commands.XXXXXX`
17+
18+
# Make sure to delete the tempfile no matter what
19+
trap "rm -f $TMPFILE; exit" INT TERM EXIT
20+
21+
# Find out where to look for the pretty printer Python module
22+
RUSTC_SYSROOT=`rustc -Zprint-sysroot`
23+
24+
# Write the LLDB script to the tempfile
25+
echo "command script import \"$RUSTC_SYSROOT/lib/rustlib/etc/lldb_rust_formatters.py\"" >> $TMPFILE
26+
echo "type summary add --no-value --python-function lldb_rust_formatters.print_val -x \".*\" --category Rust" >> $TMPFILE
27+
echo "type category enable Rust" >> $TMPFILE
28+
29+
# Call LLDB with the script added to the argument list
30+
lldb --source-before-file="$TMPFILE" "$@"

0 commit comments

Comments
 (0)