|
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
|