[devel] [Sisyphus-cybertalk] I: Sisyphus-20060519 dup_elf_symbols: +55 -46 (57838)
Alexey Tourbin
=?iso-8859-1?q?at_=CE=C1_altlinux=2Eru?=
Пт Май 19 20:09:49 MSD 2006
On Fri, May 19, 2006 at 05:52:07PM +0400, Pavlov Konstantin wrote:
> > 55 NEW dup_elf_symbols added to the list
> > ffmpeg /usr/bin/ffmpeg fftv /usr/bin/ffmpeg-fftv 2
> и прочее, вполне нормально с учетом дублежа кода ffmpeg. Его почти все таскают
> с собой.
Кстати, 2 -- это слишком мало, на уровне кажимости, а 8 -- это слишком
много, примерно как молотком по голове. Разъяснение приаттачено.
> > liballegro /usr/lib/liballeg-4.2.0.so atanks /usr/games/atanks 8
> > liballegro /usr/lib/liballeg-4.2.0.so dumb_0.9.2 /usr/bin/dumbplay 8
----------- следующая часть -----------
#!/bin/sh -ef
export LC_ALL=C
cd "${workdir:?}"
[ -n "$*" ] || set -- -ap
rpmelfsym "$@" >sym
awk -F'\t' '$3~/[DT]/' sym >def
sort -t$'\t' -k4 -o def def
# avoid most frequent symbols
nelf=`sort -u -k2,2 def |wc -l`
cut -f4 def |uniq -cd |sort -n >freq
awk -v n=$nelf '$1<sqrt(3*n){print$NF}' freq |grep -vf /dev/fd/3 >defsym 3<<'__EOF__'
__cxa_
__cxxabiv1
__gnu_cxx
__gxx_personality
^__dynamic_cast$
^_Znwj$
^_ZdlPv$
^_Znaj$
^_ZdaPv$
^_ZNSt[0-9]
^_ZNKSt[0-9]
^_ZSt[0-9]
^_Unwind_
^__register_frame
^yy[a-z_]
__EOF__
sort -o defsym -u defsym
join -t$'\t' -14 -21 -o '1.1 1.2 1.3 1.4' def defsym >xdef
# product ::= pkg1 elf1 pkg2 elf2 symtype symname
join -t$'\t' -j 4 -o '1.1 1.2 1.3 2.1 2.2 2.3 0' xdef xdef |
awk -F'\t' 'function prio(f) {
if (f~"^/lib/lib[^/]+[.]so[^/]*$") return 1
if (f~"^/usr/lib/lib[^/]+[.]so[^/]*$") return 2
if (f~"^/usr/X11R./lib/lib[^/]+[.]so[^/]*$") return 3
if (f~"lib/lib[^/]+[.]so[^/]*$") return 4
if (f~"/lib[^/]+[.]so[^/]*$") return 5
if (f~"[^/][.]so[^/]*$") return 6
return 9
}
($2<$5 && $3==$6) {
OFS="\t"
pd = prio($2)-prio($5)
if (pd<0 || pd==0 && length($2)<=length($5))
print $1,$2,$4,$5,$6,$7
else
print $4,$5,$1,$2,$6,$7 }' >product
# suspect ::= pkg1 elf1 pkg2 elf2 log2(nsym)
# I need logarithmic scale here to facilitate diffing
# 3-5 symbols (approx. 4) log2 = 2
# 6-11 symbols (approx. 8) log2 = 3
# 12-22 symbols (approx. 16) log2 = 4
# 23-45 symbols (approx. 32) log2 = 5
# 46-90 symbols (approx. 64) log2 = 6
# 91-181 symbols (approx. 128) log2 = 7
# 182-362 symbols (approx. 256) log2 = 8
cut -f-4 product |sort |uniq -cd |sed 's/^ *\([0-9]\+\) \+\(.\+\)$/\2\t\1/' |
awk -F'\t' 'BEGIN{OFS=FS}($NF=int(log($NF)/log(2)+0.5))>1' >suspect
sort -o suspect -u suspect
cat suspect
cd - >/dev/null
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип : application/pgp-signature
Размер : 189 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url : <http://lists.altlinux.org/pipermail/devel/attachments/20060519/e2097694/attachment-0001.bin>
Подробная информация о списке рассылки Devel