Don't store the size of the symbol. (elf_parser_lookup_symbol): Look it up

Fri Feb  9 16:16:34 2007  Søren Sandmann  <sandmann@redhat.com>

       * elfparser.c (struct ElfSym): Don't store the size of the symbol.
       (elf_parser_lookup_symbol): Look it up here instaed.

       * binfile.c (bin_file_free): Use pre-decrement instead of
       post-decrement.
       (bin_file_check_inode): Clarify the warning a little


svn path=/trunk/; revision=349
This commit is contained in:
Søren Sandmann
2007-02-09 21:30:01 +00:00
committed by Søren Sandmann Pedersen
parent e8c2a59906
commit c1025c6b44
4 changed files with 26 additions and 11 deletions

View File

@ -1,3 +1,12 @@
Fri Feb 9 16:16:34 2007 Søren Sandmann <sandmann@redhat.com>
* elfparser.c (struct ElfSym): Don't store the size of the symbol.
(elf_parser_lookup_symbol): Look it up here instaed.
* binfile.c (bin_file_free): Use pre-decrement instead of
post-decrement.
(bin_file_check_inode): Clarify the warning a little
Mon Jan 22 17:42:29 2007 Søren Sandmann <sandmann@redhat.com> Mon Jan 22 17:42:29 2007 Søren Sandmann <sandmann@redhat.com>
* sysprof-icon-32.png * sysprof-icon-32.png

View File

@ -269,7 +269,6 @@ bin_file_new (const char *filename)
else else
{ {
bf->elf = elf_parser_new (filename, NULL); bf->elf = elf_parser_new (filename, NULL);
#if 0 #if 0
if (!bf->elf) if (!bf->elf)
g_print ("Could not parse file %s\n", filename); g_print ("Could not parse file %s\n", filename);
@ -313,7 +312,7 @@ bin_file_new (const char *filename)
void void
bin_file_free (BinFile *bin_file) bin_file_free (BinFile *bin_file)
{ {
if (bin_file->ref_count-- == 0) if (--bin_file->ref_count == 0)
{ {
g_hash_table_remove (bin_files, bin_file->filename); g_hash_table_remove (bin_files, bin_file->filename);
@ -364,8 +363,8 @@ bin_file_lookup_symbol (BinFile *bin_file,
} }
gboolean gboolean
bin_file_check_inode (BinFile *bin_file, bin_file_check_inode (BinFile *bin_file,
ino_t inode) ino_t inode)
{ {
if (bin_file->inode == inode) if (bin_file->inode == inode)
return TRUE; return TRUE;
@ -375,7 +374,7 @@ bin_file_check_inode (BinFile *bin_file,
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: Inode mismatch for %s (disk: %lld, memory: %lld)\n",
bin_file->filename, bin_file->filename,
(guint64)bin_file->inode, (guint64)inode); (guint64)bin_file->inode, (guint64)inode);

View File

@ -11,7 +11,6 @@ struct ElfSym
{ {
gulong offset; gulong offset;
gulong address; gulong address;
gulong size;
}; };
struct Section struct Section
@ -381,8 +380,6 @@ read_table (ElfParser *parser,
{ {
parser->symbols[n_functions].address = addr; parser->symbols[n_functions].address = addr;
parser->symbols[n_functions].offset = offset; parser->symbols[n_functions].offset = offset;
parser->symbols[n_functions].size =
bin_record_get_uint (symbol, "st_size");
n_functions++; n_functions++;
} }
@ -485,9 +482,19 @@ elf_parser_lookup_symbol (ElfParser *parser,
} }
#endif #endif
if (result && result->address + result->size <= address) if (result)
result = NULL; {
gulong size;
BinRecord *record;
record = bin_parser_get_record (parser->parser, parser->sym_format, result->offset);
size = bin_record_get_uint (record, "st_size");
bin_record_free (record);
if (result->address + size <= address)
result = NULL;
}
return result; return result;
} }

View File

@ -61,7 +61,7 @@ dump_data (Application *app)
} }
} }
void static void
signal_handler (int signo, signal_handler (int signo,
gpointer data) gpointer data)
{ {