mirror of
https://github.com/varun-r-mallya/sysprof.git
synced 2026-02-10 15:10:53 +00:00
Set inode for vdso to 0.
2006-11-23 Soren Sandmann <sandmann@daimi.au.dk> * process.c (read_maps): Set inode for vdso to 0. * binfile.c (read_inode): Return -1 on error, 0 on vdso (bin_file_new): Only read the inode if the file actually exists and is an elf file. (bin_file_check_inode): Return FALSE if there is no file.
This commit is contained in:
committed by
Søren Sandmann Pedersen
parent
973d92eb4d
commit
4ba672ee9f
@ -1,3 +1,12 @@
|
|||||||
|
2006-11-23 Soren Sandmann <sandmann@daimi.au.dk>
|
||||||
|
|
||||||
|
* process.c (read_maps): Set inode for vdso to 0.
|
||||||
|
|
||||||
|
* binfile.c (read_inode): Return -1 on error, 0 on vdso
|
||||||
|
(bin_file_new): Only read the inode if the file actually exists
|
||||||
|
and is an elf file.
|
||||||
|
(bin_file_check_inode): Return FALSE if there is no file.
|
||||||
|
|
||||||
2006-11-22 Soren Sandmann <sandmann@daimi.au.dk>
|
2006-11-22 Soren Sandmann <sandmann@daimi.au.dk>
|
||||||
|
|
||||||
* sfile.c (sfile_load): Use GMappedFile instead
|
* sfile.c (sfile_load): Use GMappedFile instead
|
||||||
|
|||||||
24
binfile.c
24
binfile.c
@ -54,16 +54,17 @@ struct BinFile
|
|||||||
ino_t inode;
|
ino_t inode;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* FIXME: error handling */
|
|
||||||
static ino_t
|
static ino_t
|
||||||
read_inode (const char *filename)
|
read_inode (const char *filename)
|
||||||
{
|
{
|
||||||
struct stat statbuf;
|
struct stat statbuf;
|
||||||
|
|
||||||
if (strcmp (filename, "[vdso]") == 0)
|
if (strcmp (filename, "[vdso]") == 0)
|
||||||
|
return (ino_t)0;
|
||||||
|
|
||||||
|
if (stat (filename, &statbuf) < 0)
|
||||||
return (ino_t)-1;
|
return (ino_t)-1;
|
||||||
|
|
||||||
stat (filename, &statbuf);
|
|
||||||
return statbuf.st_ino;
|
return statbuf.st_ino;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -242,6 +243,13 @@ bin_file_new (const char *filename)
|
|||||||
{
|
{
|
||||||
bf = g_new0 (BinFile, 1);
|
bf = g_new0 (BinFile, 1);
|
||||||
|
|
||||||
|
bf->inode_check = FALSE;
|
||||||
|
bf->filename = g_strdup (filename);
|
||||||
|
bf->undefined_name = g_strdup_printf ("In file %s", filename);
|
||||||
|
bf->ref_count = 1;
|
||||||
|
|
||||||
|
g_hash_table_insert (bin_files, bf->filename, bf);
|
||||||
|
|
||||||
if (strcmp (filename, "[vdso]") == 0)
|
if (strcmp (filename, "[vdso]") == 0)
|
||||||
{
|
{
|
||||||
gsize length;
|
gsize length;
|
||||||
@ -295,15 +303,8 @@ bin_file_new (const char *filename)
|
|||||||
else
|
else
|
||||||
g_print (" opened the original elf file\n");
|
g_print (" opened the original elf file\n");
|
||||||
#endif
|
#endif
|
||||||
|
bf->inode = read_inode (filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
bf->inode_check = FALSE;
|
|
||||||
bf->inode = read_inode (filename);
|
|
||||||
bf->filename = g_strdup (filename);
|
|
||||||
bf->undefined_name = g_strdup_printf ("In file %s", filename);
|
|
||||||
bf->ref_count = 1;
|
|
||||||
|
|
||||||
g_hash_table_insert (bin_files, bf->filename, bf);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return bf;
|
return bf;
|
||||||
@ -369,6 +370,9 @@ bin_file_check_inode (BinFile *bin_file,
|
|||||||
if (bin_file->inode == inode)
|
if (bin_file->inode == inode)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
|
if (!bin_file->elf)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
if (!bin_file->inode_check)
|
if (!bin_file->inode_check)
|
||||||
{
|
{
|
||||||
g_print ("warning: %s has inode %lld. It should be %lld\n",
|
g_print ("warning: %s has inode %lld. It should be %lld\n",
|
||||||
|
|||||||
@ -106,10 +106,12 @@ read_maps (int pid, int *n_maps)
|
|||||||
{
|
{
|
||||||
/* For the vdso, the kernel reports 'offset' as the
|
/* For the vdso, the kernel reports 'offset' as the
|
||||||
* the same as the mapping addres. This doesn't make
|
* the same as the mapping addres. This doesn't make
|
||||||
* any sense to me, so we just zero it here.
|
* any sense to me, so we just zero it here. There
|
||||||
|
* is code in binfile.c (read_inode) that returns 0
|
||||||
|
* for [vdso].
|
||||||
*/
|
*/
|
||||||
map.offset = 0;
|
map.offset = 0;
|
||||||
map.inode = -1;
|
map.inode = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user