update tables for 1.1.8
[musl-tools.git] / so_cmp.sh
blob206515b1eed0df67903856bf20d726dd2a29160c
1 #!/bin/sh
3 export LC_ALL=C
5 D=data
6 M=../musl/lib
7 G=/lib
9 # list symbol info in tab separated format:
10 # name versioning type visibility addr size Ndx lib
11 syms() {
12 readelf -W -d -s $1 |awk -v lib=$1 '
13 /^ *[0-9]*:/ && $5 != "LOCAL" && $7 !~ /UND|ABS/ {
14 sub(/@/," @")
15 ver = $9
16 if ($10)
17 ver = ver " " $10
18 print $8 "\t" ver "\t" $4 "\t" $5 "\t" $2 "\t" $3 "\t" $7 "\t" lib
19 }' | sort |uniq
22 # all symbol info
23 syms $M/libc.so >$D/so_syms_musl
24 while read lib
26 syms $G/$lib
27 done <<EOF | sort >$D/so_syms_glibc
28 libanl.so.1
29 libc.so.6
30 libcidn.so.1
31 libcrypt.so.1
32 libdl.so.2
33 libm.so.6
34 libnsl.so.1
35 libnss_compat.so.2
36 libnss_dns.so.2
37 libnss_files.so.2
38 libnss_hesiod.so.2
39 libnss_nis.so.2
40 libnss_nisplus.so.2
41 libpthread.so.0
42 libresolv.so.2
43 librt.so.1
44 libutil.so.1
45 EOF
47 # symbol name only
48 awk -F'\t' '{print $1}' $D/so_syms_glibc |uniq >$D/so_syms_glibc_1
49 awk -F'\t' '{print $1}' $D/so_syms_musl |uniq >$D/so_syms_musl_1
51 # difference between musl and glibc symbols
52 diff $D/so_syms_glibc_1 $D/so_syms_musl_1 >$D/so_syms_1.diff
53 sed -n '/^< /s/< //p' $D/so_syms_1.diff >$D/so_syms_glibc_1_extra
54 sed -n '/^> /s/> //p' $D/so_syms_1.diff >$D/so_syms_musl_1_extra
56 # select symbol info of extra symbols only
57 selsym() {
58 awk -v syms=$1 '
59 BEGIN {
60 while (getline < syms == 1)
61 a[$1] = a[$1] $0 "\n"
63 {printf("%s",a[$1])}
64 ' $2
66 selsym $D/so_syms_glibc $D/so_syms_glibc_1_extra >$D/so_syms_glibc_extra
67 selsym $D/so_syms_musl $D/so_syms_musl_1_extra >$D/so_syms_musl_extra