summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJean-Baptiste Queru <jbq@google.com>2010-12-14 13:21:11 -0800
committerAndroid Code Review <code-review@android.com>2010-12-14 13:21:11 -0800
commitcbb9257a872a0f35b0aa1018410ca6025e628c36 (patch)
tree7dd690ff64776034bced885722f1036eefe538b5
parentd3f59eab07d102b9506978aca9541dd62dcea919 (diff)
parent0b4836f2cd2f3312d4b4aa0c278c751b0784144c (diff)
downloadcore-tools_r8.tar.gz
Merge "Fix debuggerd (native crash dump)."tools_r9tools_r8froyo-plus-aosp
-rw-r--r--debuggerd/symbol_table.c29
1 files changed, 19 insertions, 10 deletions
diff --git a/debuggerd/symbol_table.c b/debuggerd/symbol_table.c
index e76df3355..fd008fe29 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);