Revision e80cfcfc disas.c
b/disas.c | ||
---|---|---|
9 | 9 |
#include "disas.h" |
10 | 10 |
|
11 | 11 |
/* Filled in by elfload.c. Simplistic, but will do for now. */ |
12 |
unsigned int disas_num_syms; |
|
13 |
void *disas_symtab; |
|
14 |
const char *disas_strtab; |
|
12 |
struct syminfo *syminfos = NULL; |
|
15 | 13 |
|
16 | 14 |
/* Get LENGTH bytes from info's buffer, at target address memaddr. |
17 | 15 |
Transfer them to myaddr. */ |
... | ... | |
203 | 201 |
{ |
204 | 202 |
unsigned int i; |
205 | 203 |
/* Hack, because we know this is x86. */ |
206 |
Elf32_Sym *sym = disas_symtab; |
|
207 |
|
|
208 |
for (i = 0; i < disas_num_syms; i++) { |
|
209 |
if (sym[i].st_shndx == SHN_UNDEF |
|
210 |
|| sym[i].st_shndx >= SHN_LORESERVE) |
|
211 |
continue; |
|
212 |
|
|
213 |
if (ELF_ST_TYPE(sym[i].st_info) != STT_FUNC) |
|
214 |
continue; |
|
215 |
|
|
216 |
if ((long)orig_addr >= sym[i].st_value |
|
217 |
&& (long)orig_addr < sym[i].st_value + sym[i].st_size) |
|
218 |
return disas_strtab + sym[i].st_name; |
|
204 |
Elf32_Sym *sym; |
|
205 |
struct syminfo *s; |
|
206 |
|
|
207 |
for (s = syminfos; s; s = s->next) { |
|
208 |
sym = s->disas_symtab; |
|
209 |
for (i = 0; i < s->disas_num_syms; i++) { |
|
210 |
if (sym[i].st_shndx == SHN_UNDEF |
|
211 |
|| sym[i].st_shndx >= SHN_LORESERVE) |
|
212 |
continue; |
|
213 |
|
|
214 |
if (ELF_ST_TYPE(sym[i].st_info) != STT_FUNC) |
|
215 |
continue; |
|
216 |
|
|
217 |
if ((long)orig_addr >= sym[i].st_value |
|
218 |
&& (long)orig_addr < sym[i].st_value + sym[i].st_size) |
|
219 |
return s->disas_strtab + sym[i].st_name; |
|
220 |
} |
|
219 | 221 |
} |
220 | 222 |
return ""; |
221 | 223 |
} |
Also available in: Unified diff