1
1
# ignore-cross-compile
2
2
include ../tools.mk
3
3
4
+ export HERE := $(shell pwd)
5
+
4
6
all : off packed unpacked
5
7
6
8
ifeq ($(UNAME ) ,Darwin)
11
13
[ ! -d $( TMPDIR) /foo.dSYM ]
12
14
13
15
# Packed by default, but only if debuginfo is requested
14
- packed :
15
- rm -rf $(TMPDIR ) /* .dSYM
16
- $(RUSTC ) foo.rs
17
- [ ! -d $( TMPDIR) /foo.dSYM ]
18
- rm -rf $(TMPDIR ) /* .dSYM
19
- $(RUSTC ) foo.rs -g
16
+ packed : packed-remapped-scope packed-remapped-wrong-scope
17
+
18
+ # - Debuginfo in binary file
19
+ # - `.o` deleted
20
+ # - `.dSYM` present
21
+ # - in binary, paths from `N_SO` (source files) and `N_OSO` (object files) shouldn be remapped
22
+ packed-remapped-scope :
23
+ $(RUSTC ) $(UNSTABLEOPTS ) -C split-debuginfo=packed -C debuginfo=2 \
24
+ --remap-path-prefix $(TMPDIR ) =/a \
25
+ --remap-path-prefix $(HERE ) =/b \
26
+ -Z remap-path-scope=object foo.rs -g
27
+ ls $(TMPDIR ) /* .o && exit 1 || exit 0
20
28
[ -d $( TMPDIR) /foo.dSYM ]
21
- rm -rf $(TMPDIR ) /* .dSYM
22
- $(RUSTC ) foo.rs -g -C split-debuginfo=packed
29
+ # As of 2023-12, `OSO` should be the only thing that cannot be trimmed. See rust-lang/rust#116948
30
+ dsymutil -s $(TMPDIR ) /foo | grep $(TMPDIR ) || exit 1 # expected: `grep $(TMPDIR)` to exit 1
31
+ dsymutil -s $(TMPDIR ) /foo | (! grep $( HERE) ) || exit 1
32
+ rm -rf $(TMPDIR ) /foo.dSYM
33
+ rm $(TMPDIR ) /$(call BIN,foo)
34
+
35
+ # - Debuginfo in binary file
36
+ # - `.o` deleted
37
+ # - `.dSYM` present
38
+ # - in binary, paths from `N_SO` (source files) and `N_OSO` (object files) shouldn't be remapped
39
+ packed-remapped-wrong-scope :
40
+ $(RUSTC ) $(UNSTABLEOPTS ) -C split-debuginfo=packed -C debuginfo=2 \
41
+ --remap-path-prefix $(TMPDIR ) =/a \
42
+ --remap-path-prefix $(HERE ) =/b \
43
+ -Z remap-path-scope=macro foo.rs -g
44
+ ls $(TMPDIR ) /* .o && exit 1 || exit 0
23
45
[ -d $( TMPDIR) /foo.dSYM ]
24
- rm -rf $(TMPDIR ) /* .dSYM
46
+ dsymutil -s $(TMPDIR ) /foo | grep ' N_OSO' | grep $(TMPDIR ) || exit 1
47
+ dsymutil -s $(TMPDIR ) /foo | grep ' N_SO' | grep $(HERE ) || exit 1
48
+ rm -rf $(TMPDIR ) /foo.dSYM
49
+ rm $(TMPDIR ) /$(call BIN,foo)
25
50
26
51
# Object files are preserved with unpacked and `dsymutil` isn't run
27
- unpacked :
28
- $(RUSTC ) foo.rs -g -C split-debuginfo=unpacked
52
+ unpacked : unpacked-remapped-scope unpacked-remapped-wrong-scope
53
+
54
+ # - Debuginfo in object files
55
+ # - `.o` present
56
+ # - `.dSYM` never created
57
+ # - in binary, paths from `N_SO` (source files) and `N_OSO` (object files) should be remapped
58
+ unpacked-remapped-scope :
59
+ $(RUSTC ) $(UNSTABLEOPTS ) -C split-debuginfo=unpacked -C debuginfo=2 \
60
+ --remap-path-prefix $(TMPDIR ) =/a \
61
+ --remap-path-prefix $(HERE ) =/b \
62
+ -Z remap-path-scope=object foo.rs -g
63
+ ls $(TMPDIR ) /* .o
64
+ [ ! -d $( TMPDIR) /foo.dSYM ]
65
+ # As of 2023-12, `OSO` should be the only thing that cannot be trimmed. See rust-lang/rust#116948
66
+ dsymutil -s $(TMPDIR ) /foo | grep $(TMPDIR ) || exit 1 # expected: `grep $(TMPDIR)` to exit 1
67
+ dsymutil -s $(TMPDIR ) /foo | (! grep $( HERE) ) || exit 1
68
+ rm $(TMPDIR ) /* .o
69
+ rm $(TMPDIR ) /$(call BIN,foo)
70
+
71
+ # - Debuginfo in object files
72
+ # - `.o` present,
73
+ # - `.dSYM` never created
74
+ # - in binary, paths from `N_SO` (source files) and `N_OSO` (object files) shouldn't be remapped
75
+ unpacked-remapped-wrong-scope :
76
+ $(RUSTC ) $(UNSTABLEOPTS ) -C split-debuginfo=unpacked -C debuginfo=2 \
77
+ --remap-path-prefix $(TMPDIR ) =/a \
78
+ --remap-path-prefix $(HERE ) =/b \
79
+ -Z remap-path-scope=macro foo.rs -g
29
80
ls $(TMPDIR ) /* .o
30
81
[ ! -d $( TMPDIR) /foo.dSYM ]
82
+ dsymutil -s $(TMPDIR ) /foo | grep ' N_OSO' | (grep $( TMPDIR) ) || exit 1
83
+ dsymutil -s $(TMPDIR ) /foo | grep ' N_SO' | (grep $( HERE) ) || exit 1
84
+ rm $(TMPDIR ) /* .o
85
+ rm $(TMPDIR ) /$(call BIN,foo)
86
+
31
87
else
32
88
ifdef IS_WINDOWS
33
89
# Windows only supports packed debuginfo - nothing to test.
@@ -113,8 +169,12 @@ packed-remapped: packed-remapped-split packed-remapped-single packed-remapped-sc
113
169
# - `.dwp` present
114
170
packed-remapped-split :
115
171
$(RUSTC ) $(UNSTABLEOPTS ) -C split-debuginfo=packed -C debuginfo=2 \
116
- -Z split-dwarf-kind=split --remap-path-prefix $(TMPDIR ) =/a foo.rs -g
117
- objdump -Wi $(TMPDIR ) /foo | grep DW_AT_GNU_dwo_name | (! grep $( TMPDIR) ) || exit 1
172
+ -Z split-dwarf-kind=split \
173
+ --remap-path-prefix $(TMPDIR ) =/a \
174
+ --remap-path-prefix $(HERE ) =/b \
175
+ foo.rs -g
176
+ readelf -wi $(TMPDIR ) /foo | (! grep $( TMPDIR) ) || exit 1
177
+ readelf -wi $(TMPDIR ) /foo | (! grep $( HERE) ) || exit 1
118
178
ls $(TMPDIR ) /* .o && exit 1 || exit 0
119
179
ls $(TMPDIR ) /* .dwo && exit 1 || exit 0
120
180
rm $(TMPDIR ) /foo.dwp
@@ -127,8 +187,12 @@ packed-remapped-split:
127
187
# - `.dwp` present
128
188
packed-remapped-single :
129
189
$(RUSTC ) $(UNSTABLEOPTS ) -C split-debuginfo=packed -C debuginfo=2 \
130
- -Z split-dwarf-kind=single --remap-path-prefix $(TMPDIR ) =/a foo.rs -g
131
- objdump -Wi $(TMPDIR ) /foo | grep DW_AT_GNU_dwo_name | (! grep $( TMPDIR) ) || exit 1
190
+ -Z split-dwarf-kind=single \
191
+ --remap-path-prefix $(TMPDIR ) =/a \
192
+ --remap-path-prefix $(HERE ) =/b \
193
+ foo.rs -g
194
+ readelf -wi $(TMPDIR ) /foo | (! grep $( TMPDIR) ) || exit 1
195
+ readelf -wi $(TMPDIR ) /foo | (! grep $( HERE) ) || exit 1
132
196
ls $(TMPDIR ) /* .o && exit 1 || exit 0
133
197
ls $(TMPDIR ) /* .dwo && exit 1 || exit 0
134
198
rm $(TMPDIR ) /foo.dwp
@@ -141,9 +205,12 @@ packed-remapped-single:
141
205
# - `.dwp` present
142
206
packed-remapped-scope :
143
207
$(RUSTC ) $(UNSTABLEOPTS ) -C split-debuginfo=packed -C debuginfo=2 \
144
- -Z split-dwarf-kind=single --remap-path-prefix $(TMPDIR ) =/a \
145
- -Z remap-path-scope=split-debuginfo-path foo.rs -g
146
- objdump -Wi $(TMPDIR ) /foo | grep DW_AT_GNU_dwo_name | (! grep $( TMPDIR) ) || exit 1
208
+ -Z split-dwarf-kind=single \
209
+ --remap-path-prefix $(TMPDIR ) =/a \
210
+ --remap-path-prefix $(HERE ) =/b \
211
+ -Z remap-path-scope=object foo.rs -g
212
+ readelf -wi $(TMPDIR ) /foo | (! grep $( TMPDIR) ) || exit 1
213
+ readelf -wi $(TMPDIR ) /foo | (! grep $( HERE) ) || exit 1
147
214
ls $(TMPDIR ) /* .o && exit 1 || exit 0
148
215
ls $(TMPDIR ) /* .dwo && exit 1 || exit 0
149
216
rm $(TMPDIR ) /foo.dwp
@@ -156,9 +223,12 @@ packed-remapped-scope:
156
223
# - `.dwp` present
157
224
packed-remapped-wrong-scope :
158
225
$(RUSTC ) $(UNSTABLEOPTS ) -C split-debuginfo=packed -C debuginfo=2 \
159
- -Z split-dwarf-kind=single --remap-path-prefix $(TMPDIR ) =/a \
226
+ -Z split-dwarf-kind=single \
227
+ --remap-path-prefix $(TMPDIR ) =/a \
228
+ --remap-path-prefix $(TMPDIR ) =/b \
160
229
-Z remap-path-scope=macro foo.rs -g
161
- objdump -Wi $(TMPDIR ) /foo | grep DW_AT_GNU_dwo_name | (grep $( TMPDIR) ) || exit 1
230
+ readelf -wi $(TMPDIR ) /foo | (grep $( TMPDIR) ) || exit 1
231
+ readelf -wi $(TMPDIR ) /foo | grep $(HERE ) || exit 1
162
232
ls $(TMPDIR ) /* .o && exit 1 || exit 0
163
233
ls $(TMPDIR ) /* .dwo && exit 1 || exit 0
164
234
rm $(TMPDIR ) /foo.dwp
@@ -269,8 +339,12 @@ unpacked-remapped: unpacked-remapped-split unpacked-remapped-single unpacked-rem
269
339
# - `.dwp` never created
270
340
unpacked-remapped-split :
271
341
$(RUSTC ) $(UNSTABLEOPTS ) -C split-debuginfo=unpacked -C debuginfo=2 \
272
- -Z split-dwarf-kind=split --remap-path-prefix $(TMPDIR ) =/a foo.rs -g
273
- objdump -Wi $(TMPDIR ) /foo | grep DW_AT_GNU_dwo_name | (! grep $( TMPDIR) ) || exit 1
342
+ -Z split-dwarf-kind=split \
343
+ --remap-path-prefix $(TMPDIR ) =/a \
344
+ --remap-path-prefix $(HERE ) =/b \
345
+ foo.rs -g
346
+ readelf -wi $(TMPDIR ) /foo | (! grep $( TMPDIR) ) || exit 1
347
+ readelf -wi $(TMPDIR ) /foo | (! grep $( HERE) ) || exit 1
274
348
ls $(TMPDIR ) /* .o && exit 1 || exit 0
275
349
rm $(TMPDIR ) /* .dwo
276
350
ls $(TMPDIR ) /* .dwp && exit 1 || exit 0
@@ -283,8 +357,12 @@ unpacked-remapped-split:
283
357
# - `.dwp` never created
284
358
unpacked-remapped-single :
285
359
$(RUSTC ) $(UNSTABLEOPTS ) -C split-debuginfo=unpacked -C debuginfo=2 \
286
- -Z split-dwarf-kind=single --remap-path-prefix $(TMPDIR ) =/a foo.rs -g
287
- objdump -Wi $(TMPDIR ) /foo | grep DW_AT_GNU_dwo_name | (! grep $( TMPDIR) ) || exit 1
360
+ -Z split-dwarf-kind=single \
361
+ --remap-path-prefix $(TMPDIR ) =/a \
362
+ --remap-path-prefix $(HERE ) =/b \
363
+ foo.rs -g
364
+ readelf -wi $(TMPDIR ) /foo | (! grep $( TMPDIR) ) || exit 1
365
+ readelf -wi $(TMPDIR ) /foo | (! grep $( HERE) ) || exit 1
288
366
rm $(TMPDIR ) /* .o
289
367
ls $(TMPDIR ) /* .dwo && exit 1 || exit 0
290
368
ls $(TMPDIR ) /* .dwp && exit 1 || exit 0
@@ -297,9 +375,12 @@ unpacked-remapped-single:
297
375
# - `.dwp` never created
298
376
unpacked-remapped-scope :
299
377
$(RUSTC ) $(UNSTABLEOPTS ) -C split-debuginfo=unpacked -C debuginfo=2 \
300
- -Z split-dwarf-kind=single --remap-path-prefix $(TMPDIR ) =/a \
301
- -Z remap-path-scope=split-debuginfo-path foo.rs -g
302
- objdump -Wi $(TMPDIR ) /foo | grep DW_AT_GNU_dwo_name | (! grep $( TMPDIR) ) || exit 1
378
+ -Z split-dwarf-kind=single \
379
+ --remap-path-prefix $(TMPDIR ) =/a \
380
+ --remap-path-prefix $(HERE ) =/b \
381
+ -Z remap-path-scope=object foo.rs -g
382
+ readelf -wi $(TMPDIR ) /foo | (! grep $( TMPDIR) ) || exit 1
383
+ readelf -wi $(TMPDIR ) /foo | (! grep $( HERE) ) || exit 1
303
384
rm $(TMPDIR ) /* .o
304
385
ls $(TMPDIR ) /* .dwo && exit 1 || exit 0
305
386
ls $(TMPDIR ) /* .dwp && exit 1 || exit 0
@@ -312,9 +393,12 @@ unpacked-remapped-scope:
312
393
# - `.dwp` never created
313
394
unpacked-remapped-wrong-scope :
314
395
$(RUSTC ) $(UNSTABLEOPTS ) -C split-debuginfo=unpacked -C debuginfo=2 \
315
- -Z split-dwarf-kind=single --remap-path-prefix $(TMPDIR ) =/a \
396
+ -Z split-dwarf-kind=single \
397
+ --remap-path-prefix $(TMPDIR ) =/a \
398
+ --remap-path-prefix $(HERE ) =/b \
316
399
-Z remap-path-scope=macro foo.rs -g
317
- objdump -Wi $(TMPDIR ) /foo | grep DW_AT_GNU_dwo_name | (grep $( TMPDIR) ) || exit 1
400
+ readelf -wi $(TMPDIR ) /foo | grep $(TMPDIR ) || exit 1
401
+ readelf -wi $(TMPDIR ) /foo | grep $(HERE ) || exit 1
318
402
rm $(TMPDIR ) /* .o
319
403
ls $(TMPDIR ) /* .dwo && exit 1 || exit 0
320
404
ls $(TMPDIR ) /* .dwp && exit 1 || exit 0
0 commit comments