diff options
| author | Jean-Baptiste Queru <jbq@google.com> | 2010-12-14 13:32:45 -0800 |
|---|---|---|
| committer | Android Git Automerger <android-git-automerger@android.com> | 2010-12-14 13:32:45 -0800 |
| commit | 660c8b71952c4067fd9d9ae1d6def3d2a3127ddc (patch) | |
| tree | 0c48e49c64525bdeca1cd6380c5a7be393d0e3fa /debuggerd | |
| parent | 44659e90fe8df25c71195936eabe0cc9158c18a6 (diff) | |
| parent | cbb9257a872a0f35b0aa1018410ca6025e628c36 (diff) | |
| download | system_core-660c8b71952c4067fd9d9ae1d6def3d2a3127ddc.zip system_core-660c8b71952c4067fd9d9ae1d6def3d2a3127ddc.tar.gz system_core-660c8b71952c4067fd9d9ae1d6def3d2a3127ddc.tar.bz2 | |
am cbb9257a: Merge "Fix debuggerd (native crash dump)."
* commit 'cbb9257a872a0f35b0aa1018410ca6025e628c36':
Fix debuggerd (native crash dump).
Diffstat (limited to 'debuggerd')
| -rw-r--r-- | debuggerd/symbol_table.c | 29 |
1 files changed, 19 insertions, 10 deletions
diff --git a/debuggerd/symbol_table.c b/debuggerd/symbol_table.c index e76df33..fd008fe 100644 --- a/debuggerd/symbol_table.c +++ b/debuggerd/symbol_table.c @@ -94,17 +94,26 @@ struct symbol_table *symbol_table_create(const char *filename) table->name = strdup(filename); table->num_symbols = 0; - Elf32_Sym *dynsyms = (Elf32_Sym*)(base + shdr[dynsym_idx].sh_offset); - Elf32_Sym *syms = (Elf32_Sym*)(base + shdr[sym_idx].sh_offset); + Elf32_Sym *dynsyms = NULL; + Elf32_Sym *syms = NULL; + int dynnumsyms = 0; + int numsyms = 0; + char *dynstr = NULL; + char *str = NULL; - int dynnumsyms = shdr[dynsym_idx].sh_size / shdr[dynsym_idx].sh_entsize; - int numsyms = shdr[sym_idx].sh_size / shdr[sym_idx].sh_entsize; - - int dynstr_idx = shdr[dynsym_idx].sh_link; - int str_idx = shdr[sym_idx].sh_link; + if (dynsym_idx != -1) { + dynsyms = (Elf32_Sym*)(base + shdr[dynsym_idx].sh_offset); + dynnumsyms = shdr[dynsym_idx].sh_size / shdr[dynsym_idx].sh_entsize; + int dynstr_idx = shdr[dynsym_idx].sh_link; + dynstr = base + shdr[dynstr_idx].sh_offset; + } - char *dynstr = base + shdr[dynstr_idx].sh_offset; - char *str = base + shdr[str_idx].sh_offset; + if (sym_idx != -1) { + syms = (Elf32_Sym*)(base + shdr[sym_idx].sh_offset); + numsyms = shdr[sym_idx].sh_size / shdr[sym_idx].sh_entsize; + int str_idx = shdr[sym_idx].sh_link; + str = base + shdr[str_idx].sh_offset; + } int symbol_count = 0; int dynsymbol_count = 0; @@ -134,7 +143,7 @@ struct symbol_table *symbol_table_create(const char *filename) } // Now, create an entry in our symbol table structure for each symbol... - table->num_symbols += symbol_count + dynsymbol_count;; + table->num_symbols += symbol_count + dynsymbol_count; table->symbols = malloc(table->num_symbols * sizeof(struct symbol)); if(!table->symbols) { free(table); |
