diff options
author | Søren Sandmann <sandmann@redhat.com> | 2007-02-09 21:30:01 +0000 |
---|---|---|
committer | Søren Sandmann Pedersen <ssp@src.gnome.org> | 2007-02-09 21:30:01 +0000 |
commit | c1025c6b445574bc680b1d31ed737873b90abb6d (patch) | |
tree | 271c318a9003806593e47e37dcd1dabfd0488b03 | |
parent | e8c2a59906a526439965eaa01ccf6e9d45f067b9 (diff) |
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
-rw-r--r-- | ChangeLog | 9 | ||||
-rw-r--r-- | binfile.c | 9 | ||||
-rw-r--r-- | elfparser.c | 17 | ||||
-rw-r--r-- | sysprof-text.c | 2 |
4 files changed, 26 insertions, 11 deletions
@@ -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> * sysprof-icon-32.png @@ -269,7 +269,6 @@ bin_file_new (const char *filename) else { bf->elf = elf_parser_new (filename, NULL); - #if 0 if (!bf->elf) g_print ("Could not parse file %s\n", filename); @@ -313,7 +312,7 @@ bin_file_new (const char *filename) void 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); @@ -364,8 +363,8 @@ bin_file_lookup_symbol (BinFile *bin_file, } gboolean -bin_file_check_inode (BinFile *bin_file, - ino_t inode) +bin_file_check_inode (BinFile *bin_file, + ino_t inode) { if (bin_file->inode == inode) return TRUE; @@ -375,7 +374,7 @@ bin_file_check_inode (BinFile *bin_file, 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, (guint64)bin_file->inode, (guint64)inode); diff --git a/elfparser.c b/elfparser.c index a9ec0d1..2dfcaf4 100644 --- a/elfparser.c +++ b/elfparser.c @@ -11,7 +11,6 @@ struct ElfSym { gulong offset; gulong address; - gulong size; }; struct Section @@ -381,8 +380,6 @@ read_table (ElfParser *parser, { parser->symbols[n_functions].address = addr; parser->symbols[n_functions].offset = offset; - parser->symbols[n_functions].size = - bin_record_get_uint (symbol, "st_size"); n_functions++; } @@ -485,9 +482,19 @@ elf_parser_lookup_symbol (ElfParser *parser, } #endif - if (result && result->address + result->size <= address) - result = NULL; + if (result) + { + 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; } diff --git a/sysprof-text.c b/sysprof-text.c index e142169..23c72bb 100644 --- a/sysprof-text.c +++ b/sysprof-text.c @@ -61,7 +61,7 @@ dump_data (Application *app) } } -void +static void signal_handler (int signo, gpointer data) { |