From e77d4b8d7e73a708329e14c7045c35184635dea0 Mon Sep 17 00:00:00 2001 From: Jeremy Fitzhardinge Date: Mon, 15 Dec 2003 09:00:21 +0000 Subject: [PATCH] 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. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@2114 --- corecheck/tests/fdleak_cmsg.stderr.exp | 14 +++--- corecheck/tests/fdleak_creat.stderr.exp | 2 +- corecheck/tests/fdleak_dup.stderr.exp | 4 +- corecheck/tests/fdleak_dup2.stderr.exp | 6 +-- corecheck/tests/fdleak_fcntl.stderr.exp | 4 +- corecheck/tests/fdleak_ipv4.stderr.exp | 6 +-- corecheck/tests/fdleak_open.stderr.exp | 2 +- corecheck/tests/fdleak_pipe.stderr.exp | 4 +- corecheck/tests/fdleak_socketpair.stderr.exp | 4 +- coregrind/vg_symtab2.c | 47 +++++++++++++++++--- glibc-2.1.supp | 18 ++++---- glibc-2.2.supp | 28 ++++++------ glibc-2.3.supp | 39 ++++++++++++---- helgrind/tests/deadlock.stderr.exp | 4 +- memcheck/tests/fwrite.stderr.exp | 2 +- memcheck/tests/weirdioctl.stderr.exp | 2 +- memcheck/tests/writev.stderr.exp | 6 +-- 17 files changed, 125 insertions(+), 67 deletions(-) diff --git a/corecheck/tests/fdleak_cmsg.stderr.exp b/corecheck/tests/fdleak_cmsg.stderr.exp index 8d7f2fee8..512fda042 100644 --- a/corecheck/tests/fdleak_cmsg.stderr.exp +++ b/corecheck/tests/fdleak_cmsg.stderr.exp @@ -2,19 +2,19 @@ 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) Open file descriptor .: . @@ -31,15 +31,15 @@ ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0) 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 .: - at 0x........: __socket (in /...libc...) + at 0x........: socket (in /...libc...) by 0x........: main (fdleak_cmsg.c:174) Open file descriptor .: . diff --git a/corecheck/tests/fdleak_creat.stderr.exp b/corecheck/tests/fdleak_creat.stderr.exp index 2b2d0fdb9..66bcc392f 100644 --- a/corecheck/tests/fdleak_creat.stderr.exp +++ b/corecheck/tests/fdleak_creat.stderr.exp @@ -3,7 +3,7 @@ FILE DESCRIPTORS: 4 open at exit. Open file descriptor .: /tmp/file - at 0x........: __libc_creat (...libc...) + at 0x........: creat (in /...libc...) by 0x........: __libc_start_main (...libc...) by 0x........: ... diff --git a/corecheck/tests/fdleak_dup.stderr.exp b/corecheck/tests/fdleak_dup.stderr.exp index 554e023ef..3fe6ffb01 100644 --- a/corecheck/tests/fdleak_dup.stderr.exp +++ b/corecheck/tests/fdleak_dup.stderr.exp @@ -2,12 +2,12 @@ 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........: ... diff --git a/corecheck/tests/fdleak_dup2.stderr.exp b/corecheck/tests/fdleak_dup2.stderr.exp index 6c811ce38..81eb34206 100644 --- a/corecheck/tests/fdleak_dup2.stderr.exp +++ b/corecheck/tests/fdleak_dup2.stderr.exp @@ -2,17 +2,17 @@ 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........: ... diff --git a/corecheck/tests/fdleak_fcntl.stderr.exp b/corecheck/tests/fdleak_fcntl.stderr.exp index 3e2a22531..12faca737 100644 --- a/corecheck/tests/fdleak_fcntl.stderr.exp +++ b/corecheck/tests/fdleak_fcntl.stderr.exp @@ -2,11 +2,11 @@ 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........: ... diff --git a/corecheck/tests/fdleak_ipv4.stderr.exp b/corecheck/tests/fdleak_ipv4.stderr.exp index b3e88b111..374960ca5 100644 --- a/corecheck/tests/fdleak_ipv4.stderr.exp +++ b/corecheck/tests/fdleak_ipv4.stderr.exp @@ -2,11 +2,11 @@ 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) Open file descriptor .: . @@ -23,7 +23,7 @@ ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0) 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) Open file descriptor .: . diff --git a/corecheck/tests/fdleak_open.stderr.exp b/corecheck/tests/fdleak_open.stderr.exp index 85d67ae26..f24a5effe 100644 --- a/corecheck/tests/fdleak_open.stderr.exp +++ b/corecheck/tests/fdleak_open.stderr.exp @@ -2,7 +2,7 @@ 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........: ... diff --git a/corecheck/tests/fdleak_pipe.stderr.exp b/corecheck/tests/fdleak_pipe.stderr.exp index 41f9d8fd5..4ac5afc02 100644 --- a/corecheck/tests/fdleak_pipe.stderr.exp +++ b/corecheck/tests/fdleak_pipe.stderr.exp @@ -2,12 +2,12 @@ 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........: ... diff --git a/corecheck/tests/fdleak_socketpair.stderr.exp b/corecheck/tests/fdleak_socketpair.stderr.exp index a63e4d644..a60040ba5 100644 --- a/corecheck/tests/fdleak_socketpair.stderr.exp +++ b/corecheck/tests/fdleak_socketpair.stderr.exp @@ -2,12 +2,12 @@ FILE DESCRIPTORS: 5 open at exit. Open AF_UNIX socket .: - at 0x........: __socketpair (in /...libc...) + at 0x........: socketpair (in /...libc...) by 0x........: __libc_start_main (...libc...) by 0x........: ... Open AF_UNIX socket .: - at 0x........: __socketpair (in /...libc...) + at 0x........: socketpair (in /...libc...) by 0x........: __libc_start_main (...libc...) by 0x........: ... diff --git a/coregrind/vg_symtab2.c b/coregrind/vg_symtab2.c index de7ee53b6..5dd363e9a 100644 --- a/coregrind/vg_symtab2.c +++ b/coregrind/vg_symtab2.c @@ -398,6 +398,46 @@ static Int compare_RiSym(void *va, void *vb) { return a->addr - b->addr; } +/* 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 ) { @@ -427,12 +467,7 @@ void canonicaliseSymtab ( SegInfo* si ) && si->symtab[i].size == si->symtab[i+1].size) { 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 { si->symtab[si->symtab_used++] = si->symtab[i]; diff --git a/glibc-2.1.supp b/glibc-2.1.supp index b318e202f..c7d778a6b 100644 --- a/glibc-2.1.supp +++ b/glibc-2.1.supp @@ -37,17 +37,17 @@ ##----------------------------------------------------------------------## { - __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:* } @@ -68,10 +68,10 @@ } { - 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 } @@ -164,7 +164,7 @@ } { - socketcall.connect(serv_addr)/__libc_connect/*(Param) + socketcall.connect(serv_addr)/connect/*(Param) Addrcheck,Memcheck:Param socketcall.connect(serv_addr) obj:*libc-2.1.3.so @@ -174,10 +174,10 @@ ##----------------------------------------------------------------------## ## 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 } diff --git a/glibc-2.2.supp b/glibc-2.2.supp index afc65c340..ff1a9bdce 100644 --- a/glibc-2.2.supp +++ b/glibc-2.2.supp @@ -173,25 +173,25 @@ #-------- 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 } @@ -345,10 +345,10 @@ #------------------- { - socketcall.connect(serv_addr)/__libc_connect/* + socketcall.connect(serv_addr)/connect/* Addrcheck,Memcheck:Param socketcall.connect(serv_addr) - fun:__libc_connect + fun:connect fun:* } { @@ -361,10 +361,10 @@ #---------------------- { - 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 } @@ -378,10 +378,10 @@ } #{ -# 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 #} @@ -413,11 +413,11 @@ ##----------------------------------------------------------------------## ## 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 } diff --git a/glibc-2.3.supp b/glibc-2.3.supp index 72b346a4f..7e1f34c51 100644 --- a/glibc-2.3.supp +++ b/glibc-2.3.supp @@ -106,40 +106,63 @@ fun:dl_open_worker } +#-------- 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 } ##----------------------------------------------------------------------## ## 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 } ##----------------------------------------------------------------------## diff --git a/helgrind/tests/deadlock.stderr.exp b/helgrind/tests/deadlock.stderr.exp index a60d08713..050d00878 100644 --- a/helgrind/tests/deadlock.stderr.exp +++ b/helgrind/tests/deadlock.stderr.exp @@ -1,13 +1,13 @@ 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:...) by 0x........: do__quit (vg_scheduler.c:...) 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:...) by 0x........: do__quit (vg_scheduler.c:...) diff --git a/memcheck/tests/fwrite.stderr.exp b/memcheck/tests/fwrite.stderr.exp index 4cf2593c2..76f922190 100644 --- a/memcheck/tests/fwrite.stderr.exp +++ b/memcheck/tests/fwrite.stderr.exp @@ -1,5 +1,5 @@ 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........: ... Address 0x........ is 0 bytes inside a block of size 10 alloc'd diff --git a/memcheck/tests/weirdioctl.stderr.exp b/memcheck/tests/weirdioctl.stderr.exp index 42ea90a2e..37a24aac1 100644 --- a/memcheck/tests/weirdioctl.stderr.exp +++ b/memcheck/tests/weirdioctl.stderr.exp @@ -1,5 +1,5 @@ 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........: ... Address 0x........ is on thread 1's stack diff --git a/memcheck/tests/writev.stderr.exp b/memcheck/tests/writev.stderr.exp index acbd5f3c2..e2347325e 100644 --- a/memcheck/tests/writev.stderr.exp +++ b/memcheck/tests/writev.stderr.exp @@ -1,19 +1,19 @@ 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 Received EFAULT as expected 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 Received EINVAL as expected 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 Received EINVAL as expected