File: debuglink.sh

package info (click to toggle)
rustc-web 1.85.0%2Bdfsg3-1~deb12u3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm-proposed-updates
  • size: 1,759,988 kB
  • sloc: xml: 158,127; python: 35,830; javascript: 19,497; cpp: 19,002; sh: 17,245; ansic: 13,127; asm: 4,376; makefile: 1,056; lisp: 29; perl: 29; ruby: 19; sql: 11
file content (75 lines) | stat: -rwxr-xr-x 2,106 bytes parent folder | download | duplicates (15)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#!/bin/bash

# Debuglink tests.
# We build crates/debuglink and then move its debuginfo around
# and test that it can still find the debuginfo.

set -ex

cratedir=`pwd`/crates/debuglink
exefile=crates/debuglink/target/debug/debuglink

# Baseline; no separate debug
cargo build --manifest-path crates/debuglink/Cargo.toml
$exefile $cratedir

# Separate debug in same dir
debugfile1=`dirname $exefile`/debuglink.debug
objcopy --only-keep-debug $exefile $debugfile1
strip -g $exefile
(cd `dirname $exefile` && objcopy --add-gnu-debuglink=debuglink.debug debuglink)
$exefile $cratedir

# Separate debug in .debug subdir
debugfile2=`dirname $exefile`/.debug/debuglink.debug
mkdir -p `dirname $debugfile2`
mv $debugfile1 $debugfile2
$exefile $cratedir

# Separate debug in /usr/lib/debug subdir
debugfile3="/usr/lib/debug/$cratedir/target/debug/debuglink.debug"
mkdir -p `dirname $debugfile3`
mv $debugfile2 $debugfile3
$exefile $cratedir

# Separate debug in /usr/lib/debug/.build-id subdir
id=`readelf -n $exefile | grep '^    Build ID: [0-9a-f]' | cut -b 15-`
idfile="/usr/lib/debug/.build-id/${id:0:2}/${id:2}.debug"
mkdir -p `dirname $idfile`
mv $debugfile3 $idfile
$exefile $cratedir

# Replace idfile with a symlink (this is the usual arrangement)
mv $idfile $debugfile3
ln -s $debugfile3 $idfile
$exefile $cratedir

# Supplementary object file using relative path
dwzfile="/usr/lib/debug/.dwz/debuglink.debug"
mkdir -p `dirname $dwzfile`
cp $debugfile3 $debugfile3.copy
dwz -m $dwzfile -rh $debugfile3 $debugfile3.copy
rm $debugfile3.copy
$exefile $cratedir

# Supplementary object file using build ID
dwzid=`readelf -n $dwzfile | grep '^    Build ID: [0-9a-f]' | cut -b 15-`
dwzidfile="/usr/lib/debug/.build-id/${dwzid:0:2}/${dwzid:2}.debug"
mkdir -p `dirname $dwzidfile`
mv $dwzfile $dwzidfile
$exefile $cratedir
mv $dwzidfile $dwzfile

# Missing debug should fail
mv $debugfile3 $debugfile3.tmp
! $exefile $cratedir
mv $debugfile3.tmp $debugfile3

# Missing dwz should fail
mv $dwzfile $dwzfile.tmp
! $exefile $cratedir
mv $dwzfile.tmp $dwzfile

# Cleanup
rm $idfile $debugfile3 $dwzfile
echo Success