]> git.proxmox.com Git - rustc.git/blob - vendor/backtrace/ci/debuglink.sh
New upstream version 1.64.0+dfsg1
[rustc.git] / vendor / backtrace / ci / debuglink.sh
1 #!/bin/bash
2
3 # Debuglink tests.
4 # We build crates/debuglink and then move its debuginfo around
5 # and test that it can still find the debuginfo.
6
7 set -ex
8
9 cratedir=`pwd`/crates/debuglink
10 exefile=crates/debuglink/target/debug/debuglink
11
12 # Baseline; no separate debug
13 cargo build --manifest-path crates/debuglink/Cargo.toml
14 $exefile $cratedir
15
16 # Separate debug in same dir
17 debugfile1=`dirname $exefile`/debuglink.debug
18 objcopy --only-keep-debug $exefile $debugfile1
19 strip -g $exefile
20 (cd `dirname $exefile` && objcopy --add-gnu-debuglink=debuglink.debug debuglink)
21 $exefile $cratedir
22
23 # Separate debug in .debug subdir
24 debugfile2=`dirname $exefile`/.debug/debuglink.debug
25 mkdir -p `dirname $debugfile2`
26 mv $debugfile1 $debugfile2
27 $exefile $cratedir
28
29 # Separate debug in /usr/lib/debug subdir
30 debugfile3="/usr/lib/debug/$cratedir/target/debug/debuglink.debug"
31 mkdir -p `dirname $debugfile3`
32 mv $debugfile2 $debugfile3
33 $exefile $cratedir
34
35 # Separate debug in /usr/lib/debug/.build-id subdir
36 id=`readelf -n $exefile | grep '^ Build ID: [0-9a-f]' | cut -b 15-`
37 idfile="/usr/lib/debug/.build-id/${id:0:2}/${id:2}.debug"
38 mkdir -p `dirname $idfile`
39 mv $debugfile3 $idfile
40 $exefile $cratedir
41
42 # Replace idfile with a symlink (this is the usual arrangement)
43 mv $idfile $debugfile3
44 ln -s $debugfile3 $idfile
45 $exefile $cratedir
46
47 # Supplementary object file using relative path
48 dwzfile="/usr/lib/debug/.dwz/debuglink.debug"
49 mkdir -p `dirname $dwzfile`
50 cp $debugfile3 $debugfile3.copy
51 dwz -m $dwzfile -rh $debugfile3 $debugfile3.copy
52 rm $debugfile3.copy
53 $exefile $cratedir
54
55 # Supplementary object file using build ID
56 dwzid=`readelf -n $dwzfile | grep '^ Build ID: [0-9a-f]' | cut -b 15-`
57 dwzidfile="/usr/lib/debug/.build-id/${dwzid:0:2}/${dwzid:2}.debug"
58 mkdir -p `dirname $dwzidfile`
59 mv $dwzfile $dwzidfile
60 $exefile $cratedir
61 mv $dwzidfile $dwzfile
62
63 # Missing debug should fail
64 mv $debugfile3 $debugfile3.tmp
65 ! $exefile $cratedir
66 mv $debugfile3.tmp $debugfile3
67
68 # Missing dwz should fail
69 mv $dwzfile $dwzfile.tmp
70 ! $exefile $cratedir
71 mv $dwzfile.tmp $dwzfile
72
73 # Cleanup
74 rm $idfile $debugfile3 $dwzfile
75 echo Success