From: Jeremy F. <je...@go...> - 2003-12-15 09:01:02
|
CVS commit by fitzhardinge: When merging multiple symbols with the same address, rather than always choosing the longest symbol, choose the longest ignoring any of the libc junk prefixes like __libc_, __, __GI_*, etc. This makes the symbol presented to the user in messages and used in *.supp files more consistent and comprehensible. M +9 -9 glibc-2.1.supp 1.10 M +14 -14 glibc-2.2.supp 1.21 M +31 -8 glibc-2.3.supp 1.8 M +7 -7 corecheck/tests/fdleak_cmsg.stderr.exp 1.3 M +1 -1 corecheck/tests/fdleak_creat.stderr.exp 1.3 M +2 -2 corecheck/tests/fdleak_dup.stderr.exp 1.3 M +3 -3 corecheck/tests/fdleak_dup2.stderr.exp 1.3 M +2 -2 corecheck/tests/fdleak_fcntl.stderr.exp 1.3 M +3 -3 corecheck/tests/fdleak_ipv4.stderr.exp 1.3 M +1 -1 corecheck/tests/fdleak_open.stderr.exp 1.3 M +2 -2 corecheck/tests/fdleak_pipe.stderr.exp 1.3 M +2 -2 corecheck/tests/fdleak_socketpair.stderr.exp 1.3 M +41 -6 coregrind/vg_symtab2.c 1.63 M +2 -2 helgrind/tests/deadlock.stderr.exp 1.5 M +1 -1 memcheck/tests/fwrite.stderr.exp 1.9 M +1 -1 memcheck/tests/weirdioctl.stderr.exp 1.8 M +3 -3 memcheck/tests/writev.stderr.exp 1.5 --- valgrind/glibc-2.1.supp #1.9:1.10 @@ -38,15 +38,15 @@ { - __pthread_mutex_unlock/__register_frame_info_bases + pthread_mutex_unlock/__register_frame_info_bases core:PThread - fun:__pthread_mutex_unlock + fun:pthread_mutex_unlock fun:__register_frame_info_bases } { - socketcall.connect(serv_addr)/__libc_connect/*(Param) + socketcall.connect(serv_addr)/connect/*(Param) Addrcheck,Memcheck:Param socketcall.connect(serv_addr) - fun:__libc_connect + fun:connect fun:* } @@ -69,8 +69,8 @@ { - llseek(result)/__libc_lseek64/_IO_file_seek(Param) + llseek(result)/lseek64/_IO_file_seek(Param) Addrcheck,Memcheck:Param llseek(result) - fun:__libc_lseek64 + fun:lseek64 fun:_IO_file_seek } @@ -165,5 +165,5 @@ { - socketcall.connect(serv_addr)/__libc_connect/*(Param) + socketcall.connect(serv_addr)/connect/*(Param) Addrcheck,Memcheck:Param socketcall.connect(serv_addr) @@ -175,9 +175,9 @@ ## For a leak in Valgrind's own libpthread.so :( { - my_malloc/get_or_allocate_specifics_ptr/__pthread_key_create(Leak) + my_malloc/get_or_allocate_specifics_ptr/pthread_key_create(Leak) Memcheck:Leak fun:my_malloc fun:get_or_allocate_specifics_ptr - fun:__pthread_key_create + fun:pthread_key_create } --- valgrind/glibc-2.2.supp #1.20:1.21 @@ -174,23 +174,23 @@ # glibc 'knows' that destroying a locked mutex will unlock it { - pthread_error/__pthread_mutex_destroy/__closedir + pthread_error/pthread_mutex_destroy/__closedir core:PThread fun:pthread_error - fun:__pthread_mutex_destroy + fun:pthread_mutex_destroy fun:__closedir } { - pthread_error/__pthread_mutex_destroy/_IO_default_finish + pthread_error/pthread_mutex_destroy/_IO_default_finish core:PThread fun:pthread_error - fun:__pthread_mutex_destroy + fun:pthread_mutex_destroy fun:_IO_default_finish* } { - __pthread_mutex_unlock/_IO_funlockfile + pthread_mutex_unlock/_IO_funlockfile core:PThread - fun:__pthread_mutex_unlock + fun:pthread_mutex_unlock fun:_IO_funlockfile } @@ -346,8 +346,8 @@ #------------------- { - socketcall.connect(serv_addr)/__libc_connect/* + socketcall.connect(serv_addr)/connect/* Addrcheck,Memcheck:Param socketcall.connect(serv_addr) - fun:__libc_connect + fun:connect fun:* } @@ -362,8 +362,8 @@ #---------------------- { - write(buf)/__libc_write/libX11.so.6.2/libX11.so.6.2(Param) + write(buf)/write/libX11.so.6.2/libX11.so.6.2(Param) Addrcheck,Memcheck:Param write(buf) - fun:__libc_write + fun:write obj:/usr/X11R6/lib/libX11.so.6.2 obj:/usr/X11R6/lib/libX11.so.6.2 @@ -379,8 +379,8 @@ #{ -# llseek(result)/__libc_lseek64/_IO_file_seek(Param) +# llseek(result)/lseek64/_IO_file_seek(Param) # Param # llseek(result) -# fun:__libc_lseek64 +# fun:lseek64 # fun:_IO_file_seek #} @@ -414,9 +414,9 @@ ## For a leak in Valgrind's own libpthread.so :( { - my_malloc/get_or_allocate_specifics_ptr/__pthread_key_create(Leak) + my_malloc/get_or_allocate_specifics_ptr/pthread_key_create(Leak) Memcheck:Leak fun:my_malloc fun:get_or_allocate_specifics_ptr - fun:__pthread_key_create + fun:pthread_key_create } --- valgrind/glibc-2.3.supp #1.7:1.8 @@ -107,27 +107,50 @@ } +#-------- glibc 2.3.2/ Fedora Core 1 +{ + dl_relocate/dl_main + Memcheck:Cond + fun:_dl_relocate_object_internal + fun:dl_main +} + +#-------- Data races +{ + _dl_lookup_symbol_internal/fixup/_dl_runtime_resolve + Helgrind:Eraser + fun:_dl_lookup_symbol_internal + fun:fixup + fun:_dl_runtime_resolve +} +{ + _dl_lookup_versioned_symbol_internal/fixup/_dl_runtime_resolve + Helgrind:Eraser + fun:_dl_lookup_versioned_symbol_internal + fun:fixup + fun:_dl_runtime_resolve +} #-------- Threading bugs? # glibc 'knows' that destroying a locked mutex will unlock it { - pthread_error/__pthread_mutex_destroy/__closedir + pthread_error/pthread_mutex_destroy/__closedir core:PThread fun:pthread_error - fun:__pthread_mutex_destroy + fun:pthread_mutex_destroy fun:__closedir } { - pthread_error/__pthread_mutex_destroy/_IO_default_finish + pthread_error/pthread_mutex_destroy/_IO_default_finish core:PThread fun:pthread_error - fun:__pthread_mutex_destroy + fun:pthread_mutex_destroy fun:_IO_default_finish* } { - __pthread_mutex_unlock/_IO_funlockfile + pthread_mutex_unlock/_IO_funlockfile core:PThread - fun:__pthread_mutex_unlock + fun:pthread_mutex_unlock fun:_IO_funlockfile } @@ -136,9 +159,9 @@ ## For a leak in Valgrind's own libpthread.so :( { - my_malloc/get_or_allocate_specifics_ptr/__pthread_key_create(Leak) + my_malloc/get_or_allocate_specifics_ptr/pthread_key_create(Leak) Memcheck:Leak fun:my_malloc fun:get_or_allocate_specifics_ptr - fun:__pthread_key_create + fun:pthread_key_create } --- valgrind/corecheck/tests/fdleak_cmsg.stderr.exp #1.2:1.3 @@ -3,17 +3,17 @@ FILE DESCRIPTORS: 7 open at exit. Open AF_UNIX socket .: /tmp/sock - at 0x........: __libc_accept (...libc...) + at 0x........: accept (in /...libc...) by 0x........: main (fdleak_cmsg.c:170) Open AF_UNIX socket .: /tmp/sock - at 0x........: __socket (in /...libc...) + at 0x........: socket (in /...libc...) by 0x........: main (fdleak_cmsg.c:170) Open file descriptor .: /tmp/data2 - at 0x........: __libc_open (...libc...) + at 0x........: open (in /...libc...) by 0x........: main (fdleak_cmsg.c:170) Open file descriptor .: /tmp/data1 - at 0x........: __libc_open (...libc...) + at 0x........: open (in /...libc...) by 0x........: main (fdleak_cmsg.c:170) @@ -32,13 +32,13 @@ FILE DESCRIPTORS: 6 open at exit. Open file descriptor .: /tmp/data2 - at 0x........: __libc_recvmsg (...libc...) + at 0x........: recvmsg (in /...libc...) by 0x........: main (fdleak_cmsg.c:174) Open file descriptor .: /tmp/data1 - at 0x........: __libc_recvmsg (...libc...) + at 0x........: recvmsg (in /...libc...) by 0x........: main (fdleak_cmsg.c:174) Open AF_UNIX socket .: <unknown> - at 0x........: __socket (in /...libc...) + at 0x........: socket (in /...libc...) by 0x........: main (fdleak_cmsg.c:174) --- valgrind/corecheck/tests/fdleak_creat.stderr.exp #1.2:1.3 @@ -4,5 +4,5 @@ Open file descriptor .: /tmp/file - at 0x........: __libc_creat (...libc...) + at 0x........: creat (in /...libc...) by 0x........: __libc_start_main (...libc...) by 0x........: ... --- valgrind/corecheck/tests/fdleak_dup.stderr.exp #1.2:1.3 @@ -3,10 +3,10 @@ FILE DESCRIPTORS: 5 open at exit. Open file descriptor .: /dev/null - at 0x........: __dup (in /...libc...) + at 0x........: dup (in /...libc...) by 0x........: __libc_start_main (...libc...) by 0x........: ... Open file descriptor .: /dev/null - at 0x........: __libc_open (...libc...) + at 0x........: open (in /...libc...) by 0x........: __libc_start_main (...libc...) by 0x........: ... --- valgrind/corecheck/tests/fdleak_dup2.stderr.exp #1.2:1.3 @@ -3,15 +3,15 @@ FILE DESCRIPTORS: 6 open at exit. Open file descriptor .: /dev/null - at 0x........: __dup2 (in /...libc...) + at 0x........: dup2 (in /...libc...) by 0x........: __libc_start_main (...libc...) by 0x........: ... Open file descriptor .: /dev/null - at 0x........: __dup2 (in /...libc...) + at 0x........: dup2 (in /...libc...) by 0x........: __libc_start_main (...libc...) by 0x........: ... Open file descriptor .: /dev/null - at 0x........: __libc_open (...libc...) + at 0x........: open (in /...libc...) by 0x........: __libc_start_main (...libc...) by 0x........: ... --- valgrind/corecheck/tests/fdleak_fcntl.stderr.exp #1.2:1.3 @@ -3,9 +3,9 @@ FILE DESCRIPTORS: 5 open at exit. Open file descriptor .: /dev/null - at 0x........: __libc_fcntl (...libc...) + at 0x........: fcntl (in /...libc...) by 0x........: main (fdleak_fcntl.c:18) Open file descriptor .: /dev/null - at 0x........: __libc_open (...libc...) + at 0x........: open (in /...libc...) by 0x........: __libc_start_main (...libc...) by 0x........: ... --- valgrind/corecheck/tests/fdleak_ipv4.stderr.exp #1.2:1.3 @@ -3,9 +3,9 @@ FILE DESCRIPTORS: 5 open at exit. Open AF_INET socket 4: 127.0.0.1:... <-> 127.0.0.1:... - at 0x........: __libc_accept (...libc...) + at 0x........: accept (in /...libc...) by 0x........: main (fdleak_ipv4.c:100) Open AF_INET socket 3: 127.0.0.1:... <-> unbound - at 0x........: __socket (in /...libc...) + at 0x........: socket (in /...libc...) by 0x........: main (fdleak_ipv4.c:100) @@ -24,5 +24,5 @@ FILE DESCRIPTORS: 4 open at exit. Open AF_INET socket 3: 127.0.0.1:... <-> 127.0.0.1:... - at 0x........: __socket (in /...libc...) + at 0x........: socket (in /...libc...) by 0x........: main (fdleak_ipv4.c:104) --- valgrind/corecheck/tests/fdleak_open.stderr.exp #1.2:1.3 @@ -3,5 +3,5 @@ FILE DESCRIPTORS: 4 open at exit. Open file descriptor .: /dev/null - at 0x........: __libc_open (...libc...) + at 0x........: open (in /...libc...) by 0x........: __libc_start_main (...libc...) by 0x........: ... --- valgrind/corecheck/tests/fdleak_pipe.stderr.exp #1.2:1.3 @@ -3,10 +3,10 @@ FILE DESCRIPTORS: 5 open at exit. Open file descriptor .: - at 0x........: __pipe (in /...libc...) + at 0x........: pipe (in /...libc...) by 0x........: __libc_start_main (...libc...) by 0x........: ... Open file descriptor .: - at 0x........: __pipe (in /...libc...) + at 0x........: pipe (in /...libc...) by 0x........: __libc_start_main (...libc...) by 0x........: ... --- valgrind/corecheck/tests/fdleak_socketpair.stderr.exp #1.2:1.3 @@ -3,10 +3,10 @@ FILE DESCRIPTORS: 5 open at exit. Open AF_UNIX socket .: <unknown> - at 0x........: __socketpair (in /...libc...) + at 0x........: socketpair (in /...libc...) by 0x........: __libc_start_main (...libc...) by 0x........: ... Open AF_UNIX socket .: <unknown> - at 0x........: __socketpair (in /...libc...) + at 0x........: socketpair (in /...libc...) by 0x........: __libc_start_main (...libc...) by 0x........: ... --- valgrind/coregrind/vg_symtab2.c #1.62:1.63 @@ -399,4 +399,44 @@ static Int compare_RiSym(void *va, void } +/* Two symbols have the same address. Which name do we prefer? + + In general we prefer the longer name, but if the choice is between + __libc_X and X, then choose X (similarly with __GI__ and __ + prefixes). + */ +static RiSym *prefersym(RiSym *a, RiSym *b) +{ + Int pfx; + + /* rearrange so that a is the long one */ + if (VG_(strlen)(a->name) < VG_(strlen)(b->name)) { + RiSym *t; + + t = a; + a = b; + b = t; + } + + pfx = 0; + + if (VG_(memcmp)(a->name, "__GI___libc_", 12) == 0) + pfx = 12; + else if (VG_(memcmp)(a->name, "__libc_", 7) == 0) + pfx = 7; + else if (VG_(memcmp)(a->name, "__GI___", 7) == 0) + pfx = 7; + else if (VG_(memcmp)(a->name, "__GI__", 6) == 0) + pfx = 6; + else if (VG_(memcmp)(a->name, "__GI_", 5) == 0) + pfx = 5; + else if (VG_(memcmp)(a->name, "__", 2) == 0) + pfx = 2; + + if (pfx != 0 && VG_(strcmp)(a->name + pfx, b->name) == 0) + return b; + + return a; +} + static void canonicaliseSymtab ( SegInfo* si ) @@ -428,10 +468,5 @@ void canonicaliseSymtab ( SegInfo* si ) n_merged++; /* merge the two into one */ - if (VG_(strlen)(si->symtab[i].name) - > VG_(strlen)(si->symtab[i+1].name)) { - si->symtab[si->symtab_used++] = si->symtab[i]; - } else { - si->symtab[si->symtab_used++] = si->symtab[i+1]; - } + si->symtab[si->symtab_used++] = *prefersym(&si->symtab[i], &si->symtab[i+1]); i++; } else { --- valgrind/helgrind/tests/deadlock.stderr.exp #1.4:1.5 @@ -2,5 +2,5 @@ Thread 3: Mutex 0x........(m1) locked in inconsistent order - at 0x........: __pthread_mutex_lock (vg_libpthread.c:...) + at 0x........: pthread_mutex_lock (vg_libpthread.c:...) by 0x........: t2 (deadlock.c:20) by 0x........: thread_wrapper (vg_libpthread.c:...) @@ -8,5 +8,5 @@ while holding locks 0x........(m2) 0x........(m2) last locked at - at 0x........: __pthread_mutex_lock (vg_libpthread.c:...) + at 0x........: pthread_mutex_lock (vg_libpthread.c:...) by 0x........: t2 (deadlock.c:19) by 0x........: thread_wrapper (vg_libpthread.c:...) --- valgrind/memcheck/tests/fwrite.stderr.exp #1.8:1.9 @@ -1,4 +1,4 @@ Syscall param write(buf) contains uninitialised or unaddressable byte(s) - at 0x........: __libc_write (...libc...) + at 0x........: write (in /...libc...) by 0x........: __libc_start_main (...libc...) by 0x........: ... --- valgrind/memcheck/tests/weirdioctl.stderr.exp #1.7:1.8 @@ -1,4 +1,4 @@ Syscall param ioctl(TCSET{A,AW,AF}) contains uninitialised or unaddressable byte(s) - at 0x........: __ioctl (in /...libc...) + at 0x........: ioctl (in /...libc...) by 0x........: __libc_start_main (...libc...) by 0x........: ... --- valgrind/memcheck/tests/writev.stderr.exp #1.4:1.5 @@ -2,5 +2,5 @@ Test file created. Syscall param writev(vector[...]) contains uninitialised or unaddressable byte(s) - at 0x........: __libc_writev (...libc...) + at 0x........: writev (in /...libc...) by 0x........: main (writev.c:56) Address 0x........ is not stack'd, malloc'd or free'd @@ -8,5 +8,5 @@ Syscall param writev(vector) contains uninitialised or unaddressable byte(s) - at 0x........: __libc_writev (...libc...) + at 0x........: writev (in /...libc...) by 0x........: main (writev.c:68) Address 0x........ is not stack'd, malloc'd or free'd @@ -14,5 +14,5 @@ Syscall param readv(vector) contains uninitialised or unaddressable byte(s) - at 0x........: __libc_readv (...libc...) + at 0x........: readv (in /...libc...) by 0x........: main (writev.c:76) Address 0x........ is not stack'd, malloc'd or free'd |