4 # We build crates/debuglink and then move its debuginfo around
5 # and test that it can still find the debuginfo.
9 cratedir
=`pwd`/crates
/debuglink
10 exefile
=crates
/debuglink
/target
/debug
/debuglink
12 # Baseline; no separate debug
13 cargo build
--manifest-path crates
/debuglink
/Cargo.toml
16 # Separate debug in same dir
17 debugfile1
=`dirname $exefile`/debuglink.debug
18 objcopy
--only-keep-debug $exefile $debugfile1
20 (cd `dirname $exefile` && objcopy
--add-gnu-debuglink=debuglink.debug debuglink
)
23 # Separate debug in .debug subdir
24 debugfile2
=`dirname $exefile`/.debug
/debuglink.debug
25 mkdir
-p `dirname $debugfile2`
26 mv $debugfile1 $debugfile2
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
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
42 # Replace idfile with a symlink (this is the usual arrangement)
43 mv $idfile $debugfile3
44 ln -s $debugfile3 $idfile
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
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
61 mv $dwzidfile $dwzfile
63 # Missing debug should fail
64 mv $debugfile3 $debugfile3.tmp
66 mv $debugfile3.tmp
$debugfile3
68 # Missing dwz should fail
69 mv $dwzfile $dwzfile.tmp
71 mv $dwzfile.tmp
$dwzfile
74 rm $idfile $debugfile3 $dwzfile