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