mirror of
https://github.com/Zenithsiz/ftmemsim-valgrind.git
synced 2026-02-04 02:18:37 +00:00
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
This commit is contained in:
parent
eb1ea76873
commit
e77d4b8d7e
@ -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 .: <unknown>
|
||||
at 0x........: __socket (in /...libc...)
|
||||
at 0x........: socket (in /...libc...)
|
||||
by 0x........: main (fdleak_cmsg.c:174)
|
||||
|
||||
Open file descriptor .: .
|
||||
|
||||
@ -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........: ...
|
||||
|
||||
|
||||
@ -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........: ...
|
||||
|
||||
|
||||
@ -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........: ...
|
||||
|
||||
|
||||
@ -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........: ...
|
||||
|
||||
|
||||
@ -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 .: .
|
||||
|
||||
@ -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........: ...
|
||||
|
||||
|
||||
@ -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........: ...
|
||||
|
||||
|
||||
@ -2,12 +2,12 @@
|
||||
|
||||
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........: ...
|
||||
|
||||
|
||||
@ -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];
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
##----------------------------------------------------------------------##
|
||||
|
||||
@ -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:...)
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user