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 .: .
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)
Open file descriptor .: .
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........: ...
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........: ...
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........: ...
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........: ...
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 .: .
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 .: .
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........: ...
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........: ...
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........: ...
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 )
{
&& 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];
##----------------------------------------------------------------------##
{
- __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:*
}
}
{
- 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
}
}
{
- 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
##----------------------------------------------------------------------##
## 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
}
#-------- 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
}
#-------------------
{
- socketcall.connect(serv_addr)/__libc_connect/*
+ socketcall.connect(serv_addr)/connect/*
Addrcheck,Memcheck:Param
socketcall.connect(serv_addr)
- fun:__libc_connect
+ fun:connect
fun:*
}
{
#----------------------
{
- 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
}
}
#{
-# 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
#}
##----------------------------------------------------------------------##
## 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
}
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
}
##----------------------------------------------------------------------##
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:...)
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
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
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