Initialize Tizen 2.3
[external/prelink.git] / testsuite / quick1.sh
1 #!/bin/bash
2 . `dirname $0`/functions.sh
3 check_one() {
4   cnt=0
5   log=$1
6   echo -n . >> quick1.log
7   text="$2"
8   shift 2
9   while [ $# -gt 0 ]; do
10     grep -q "^$text .*$1" $log || exit 40
11     cnt=$((++cnt))
12     shift
13   done
14   [ `grep "^$text " $log | wc -l` = $cnt ] || exit 41
15 }
16 check_log() {
17   log=$1
18   echo -n "Checking $1 " >> quick1.log
19   check_one $log 'Checking executable' $CHECKE
20   check_one $log 'Checking shared library' $CHECKL
21   check_one $log 'Assuming prelinked' $ASSUME
22   check_one $log 'Prelinking' $PREL
23   echo >> quick1.log
24 }
25
26 PRELINK=`echo $PRELINK \
27          | sed -e 's, \./\(prelink\.\(cache\|conf\)\), quick1.tree/etc/\1,g' \
28                -e 's,path=\.,path=quick1.tree/lib:quick1.tree/usr/lib,' \
29                -e 's,linker=\./,linker=quick1.tree/lib/,'`
30 CCLINK=`echo $CCLINK \
31         | sed -e 's,linker=\./,linker=quick1.tree/lib/,'`
32 rm -rf quick1.tree
33 rm -f quick1.log
34 mkdir -p quick1.tree/{lib,etc,usr/lib,usr/bin}
35 $CC -shared -O2 -fpic -o quick1.tree/usr/lib/lib1.so $srcdir/reloc1lib1.c
36 $CC -shared -O2 -fpic -o quick1.tree/usr/lib/lib2.so $srcdir/reloc1lib2.c \
37     -L quick1.tree/usr/lib -l1
38 $CC -shared -O2 -fpic -o quick1.tree/usr/lib/lib3.so $srcdir/quick1lib1.c
39 $CC -shared -O2 -fpic -o quick1.tree/usr/lib/lib2.later.so \
40     $srcdir/quick1lib2.c -L quick1.tree/usr/lib -l1 -l3
41 echo 'int foo;' | $CC -shared -O2 -fpic -o quick1.tree/usr/lib/lib4.so -xc -
42 $CC -shared -O2 -fpic -o quick1.tree/usr/lib/lib5.so $srcdir/quick1lib3.c \
43     -L quick1.tree/usr/lib -Wl,--rpath-link,quick1.tree/usr/lib -l2
44 $CC -shared -O2 -fpic -o quick1.tree/usr/lib/lib6.so $srcdir/quick1lib4.c \
45     -L quick1.tree/usr/lib -Wl,--rpath-link,quick1.tree/usr/lib -l5
46 echo 'int baz;' | $CC -shared -O2 -fpic -o quick1.tree/usr/lib/lib7.so -xc - \
47     -L quick1.tree/usr/lib -Wl,--rpath-link,quick1.tree/usr/lib -l6
48 echo 'int baz;' | $CC -shared -O2 -fpic -o quick1.tree/usr/lib/lib7.later.so \
49     -xc - -L quick1.tree/usr/lib -Wl,--rpath-link,quick1.tree/usr/lib -l2
50 for lib in `cat syslib.list`; do
51   cp -p $lib.orig quick1.tree/lib/$lib
52   cp -p $lib.orig quick1.tree/lib/$lib.orig
53 done
54 for lib in `cat syslnk.list`; do
55   cp -dp $lib quick1.tree/lib
56 done
57 $CCLINK -o quick1.tree/usr/bin/bin1 $srcdir/reloc1.c \
58     -Wl,--rpath-link,quick1.tree/usr/lib -L quick1.tree/usr/lib -l2
59 echo 'int main () { extern int foo; return foo; }' \
60   | $CCLINK -o quick1.tree/usr/bin/bin2 -xc - -xnone \
61     -L quick1.tree/usr/lib -l4
62 $CCLINK -o quick1.tree/usr/bin/bin3 $srcdir/reloc1.c \
63     -Wl,--rpath-link,quick1.tree/usr/lib -L quick1.tree/usr/lib -l7
64 $CCLINK -o quick1.tree/usr/bin/bin4 $srcdir/quick1.c \
65     -Wl,--rpath-link,quick1.tree/usr/lib -L quick1.tree/usr/lib -l2
66 $CCLINK -o quick1.tree/usr/bin/bin5 $srcdir/quick1.c \
67     -Wl,--rpath-link,quick1.tree/usr/lib -L quick1.tree/usr/lib -l7
68 echo 'int main () { return 0; }' \
69   | $CCLINK -o quick1.tree/usr/bin/bin6 -xc - -xnone \
70     -Wl,--rpath-link,quick1.tree/usr/lib -L quick1.tree/usr/lib -l6
71 cat > quick1.tree/etc/prelink.conf <<EOF
72 quick1.tree/usr/bin
73 quick1.tree/lib
74 quick1.tree/usr/lib
75 EOF
76 LIBS="quick1.tree/usr/lib/lib1.so quick1.tree/usr/lib/lib2.so"
77 LIBS="$LIBS quick1.tree/usr/lib/lib3.so quick1.tree/usr/lib/lib4.so"
78 LIBS="$LIBS quick1.tree/usr/lib/lib5.so quick1.tree/usr/lib/lib6.so"
79 LIBS="$LIBS quick1.tree/usr/lib/lib7.so"
80 LIBS="$LIBS `sed 's|^|quick1.tree/lib/|' syslib.list`"
81 BINS="quick1.tree/usr/bin/bin1 quick1.tree/usr/bin/bin2"
82 BINS="$BINS quick1.tree/usr/bin/bin3 quick1.tree/usr/bin/bin4"
83 BINS="$BINS quick1.tree/usr/bin/bin5 quick1.tree/usr/bin/bin6"
84 savelibs
85 chmod 644 `ls $BINS | sed 's|$|.orig|'`
86 # Make sure prelinked binaries and libraries will have different ctimes
87 # than mtimes
88 sleep 3s
89 # lib2.later.so needs different timestamps than lib2.so for the tests below
90 touch quick1.tree/usr/lib/lib2.later.so
91 cp -p quick1.tree/usr/lib/lib2.later.so{,.orig}
92 # lib7.later.so needs different timestamps than lib7.so for the tests below
93 touch quick1.tree/usr/lib/lib7.later.so
94 cp -p quick1.tree/usr/lib/lib7.later.so{,.orig}
95 echo $PRELINK ${PRELINK_OPTS--vm} -avvvvv > quick1.log
96 $PRELINK ${PRELINK_OPTS--vm} -avvvvv > quick1.tree/etc/log1 2>&1 || exit 1
97 cat quick1.tree/etc/log1 >> quick1.log
98 echo $PRELINK ${PRELINK_OPTS--vm} -aqvvvvv >> quick1.log
99 $PRELINK ${PRELINK_OPTS--vm} -aqvvvvv > quick1.tree/etc/log2 2>&1 || exit 2
100 cat quick1.tree/etc/log2 >> quick1.log
101 stat quick1.tree/usr/lib/lib2.so >> quick1.log
102 echo chmod 644 quick1.tree/usr/lib/lib2.so >> quick1.log
103 chmod 644 quick1.tree/usr/lib/lib2.so
104 sleep 3s
105 echo chmod 755 quick1.tree/usr/lib/lib2.so >> quick1.log
106 chmod 755 quick1.tree/usr/lib/lib2.so
107 stat quick1.tree/usr/lib/lib2.so >> quick1.log
108 echo $PRELINK ${PRELINK_OPTS--vm} -aqvvvvv >> quick1.log
109 $PRELINK ${PRELINK_OPTS--vm} -aqvvvvv > quick1.tree/etc/log3 2>&1 || exit 3
110 cat quick1.tree/etc/log3 >> quick1.log
111 echo $PRELINK ${PRELINK_OPTS--vm} -aqvvvvv >> quick1.log
112 $PRELINK ${PRELINK_OPTS--vm} -aqvvvvv > quick1.tree/etc/log4 2>&1 || exit 4
113 cat quick1.tree/etc/log4 >> quick1.log
114 LD_LIBRARY_PATH=quick1.tree/lib:quick1.tree/usr/lib quick1.tree/usr/bin/bin1 || exit 5
115 LD_LIBRARY_PATH=quick1.tree/lib:quick1.tree/usr/lib quick1.tree/usr/bin/bin2 || exit 6
116 LD_LIBRARY_PATH=quick1.tree/lib:quick1.tree/usr/lib quick1.tree/usr/bin/bin3 || exit 7
117 LD_LIBRARY_PATH=quick1.tree/lib:quick1.tree/usr/lib quick1.tree/usr/bin/bin4 || exit 8
118 LD_LIBRARY_PATH=quick1.tree/lib:quick1.tree/usr/lib quick1.tree/usr/bin/bin5 || exit 9
119 LD_LIBRARY_PATH=quick1.tree/lib:quick1.tree/usr/lib quick1.tree/usr/bin/bin6 || exit 10
120 readelf -a quick1.tree/usr/bin/bin1 >> quick1.log 2>&1 || exit 11
121 readelf -a quick1.tree/usr/bin/bin3 >> quick1.log 2>&1 || exit 12
122 readelf -a quick1.tree/usr/bin/bin4 >> quick1.log 2>&1 || exit 13
123 readelf -a quick1.tree/usr/bin/bin5 >> quick1.log 2>&1 || exit 14
124 readelf -a quick1.tree/usr/bin/bin6 >> quick1.log 2>&1 || exit 15
125 BINS="quick1.tree/usr/bin/bin1 quick1.tree/usr/bin/bin3"
126 BINS="$BINS quick1.tree/usr/bin/bin4 quick1.tree/usr/bin/bin5"
127 BINS="$BINS quick1.tree/usr/bin/bin6"
128 LIBS="quick1.tree/usr/lib/lib2.so quick1.tree/usr/lib/lib7.so"
129 comparelibs >> quick1.log 2>&1 || exit 16
130 for l in 2 7; do
131   mv -f quick1.tree/usr/lib/lib$l.so{,.old}
132   mv -f quick1.tree/usr/lib/lib$l.so{,.old}.orig
133   cp -p quick1.tree/usr/lib/lib$l{.later,}.so
134   cp -p quick1.tree/usr/lib/lib$l{.later,}.so.orig
135 done
136 for b in 1 3 4 5 6; do
137   cp -p quick1.tree/usr/bin/bin$b{,.old}
138   chmod 644 quick1.tree/usr/bin/bin$b.old
139 done
140 echo $PRELINK ${PRELINK_OPTS--vm} -aqvvvvv >> quick1.log
141 $PRELINK ${PRELINK_OPTS--vm} -aqvvvvv > quick1.tree/etc/log5 2>&1 || exit 17
142 cat quick1.tree/etc/log5 >> quick1.log
143 LD_LIBRARY_PATH=quick1.tree/lib:quick1.tree/usr/lib quick1.tree/usr/bin/bin1 || exit 18
144 LD_LIBRARY_PATH=quick1.tree/lib:quick1.tree/usr/lib quick1.tree/usr/bin/bin2 || exit 19
145 LD_LIBRARY_PATH=quick1.tree/lib:quick1.tree/usr/lib quick1.tree/usr/bin/bin3 || exit 20
146 LD_LIBRARY_PATH=quick1.tree/lib:quick1.tree/usr/lib quick1.tree/usr/bin/bin4 || exit 21
147 LD_LIBRARY_PATH=quick1.tree/lib:quick1.tree/usr/lib quick1.tree/usr/bin/bin5 || exit 22
148 LD_LIBRARY_PATH=quick1.tree/lib:quick1.tree/usr/lib quick1.tree/usr/bin/bin6 || exit 23
149 readelf -a quick1.tree/usr/bin/bin1 >> quick1.log 2>&1 || exit 24
150 readelf -a quick1.tree/usr/bin/bin3 >> quick1.log 2>&1 || exit 25
151 readelf -a quick1.tree/usr/bin/bin4 >> quick1.log 2>&1 || exit 26
152 readelf -a quick1.tree/usr/bin/bin5 >> quick1.log 2>&1 || exit 27
153 readelf -a quick1.tree/usr/bin/bin6 >> quick1.log 2>&1 || exit 28
154 grep -q ^`echo $PRELINK | sed 's/ .*$/: /'` quick1.log && exit 29
155 L=quick1.tree/usr/lib/lib
156 L1=${L}1.so; L2=${L}2.so; L3=${L}3.so; L4=${L}4.so
157 L5=${L}5.so; L6=${L}6.so; L7=${L}7.so
158 B=quick1.tree/usr/bin/bin
159 B1=${B}1; B2=${B}2; B3=${B}3; B4=${B}4; B5=${B}5; B6=${B}6
160 SL=`grep -f syslib.list quick1.tree/etc/log1 \
161     | sed -n '/^Prelinking/s|^.*\(quick1.tree/lib/\)|\1|p'`
162 CHECKE="$B1 $B2 $B3 $B4 $B5 $B6"; CHECKL="$SL $L1 $L2 $L4 $L5 $L6 $L7" PREL="$CHECKE $CHECKL"; ASSUME=""
163 check_log quick1.tree/etc/log1
164 CHECKE=""; CHECKL=""; PREL=""; ASSUME="$B1 $B2 $B3 $B4 $B5 $B6 $SL $L1 $L2 $L4 $L5 $L6 $L7"
165 check_log quick1.tree/etc/log2
166 CHECKE="$B1 $B3 $B4 $B5 $B6"; CHECKL="$SL $L1 $L2 $L5 $L6 $L7"; PREL=""; ASSUME="$B2 $L4"
167 check_log quick1.tree/etc/log3
168 CHECKE=""; CHECKL=""; PREL=""; ASSUME="$B1 $B2 $B3 $B4 $B5 $B6 $SL $L1 $L2 $L4 $L5 $L6 $L7"
169 check_log quick1.tree/etc/log4
170 CHECKE="$B1 $B3 $B4 $B5 $B6"; CHECKL="$SL $L1 $L2 $L3 $L5 $L7 $L7"; PREL="$B1 $B3 $B4 $B5 $B6 $L2 $L3 $L5 $L6 $L7"; ASSUME="$B2 $L4"
171 check_log quick1.tree/etc/log5
172 BINS="$B1 $B2 $B3 $B4 $B5 $B6"
173 LIBS="$SL $L1 $L2 $L3 $L4 $L5 $L6 $L7 $L2.old"
174 comparelibs >> quick1.log 2>&1 || exit 30
175 for i in $BINS $SL $L1 $L2 $L3 $L4 $L5 $L6 $L7; do
176   cp -p $i $i.prelinked
177 done
178 for i in $BINS; do
179   chmod 644 $i.prelinked
180 done
181 echo $PRELINK -uavvvvvv >> quick1.log
182 $PRELINK -uavvvvvv >> quick1.log 2>&1 || exit 31
183 for i in $BINS $SL $L1 $L2 $L3 $L4 $L5 $L6 $L7; do
184   cmp -s $i.orig $i || exit 32
185   mv -f $i.prelinked $i
186 done
187 chmod 755 $BINS
188 exit 0