sizeof renames
[musl-tables] / so_cmp.sh
1 #!/bin/sh
2
3 export LC_ALL=C
4
5 D=data
6 M=../musl/lib
7 G=/lib
8
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
20 }
21
22 # all symbol info
23 syms $M/libc.so >$D/so_syms_musl
24 while read lib
25 do
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
46
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
50
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
55
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"
62 }
63 {printf("%s",a[$1])}
64 ' $2
65 }
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