Commit b3ecf620de718d9cc56b00d145dbd569db2c4a62
1 parent
a9049a07
Thumb symbol lookup (Paul Brook)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1581 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
8 additions
and
2 deletions
disas.c
... | ... | @@ -279,6 +279,7 @@ const char *lookup_symbol(target_ulong orig_addr) |
279 | 279 | /* Hack, because we know this is x86. */ |
280 | 280 | Elf32_Sym *sym; |
281 | 281 | struct syminfo *s; |
282 | + target_ulong addr; | |
282 | 283 | |
283 | 284 | for (s = syminfos; s; s = s->next) { |
284 | 285 | sym = s->disas_symtab; |
... | ... | @@ -290,8 +291,13 @@ const char *lookup_symbol(target_ulong orig_addr) |
290 | 291 | if (ELF_ST_TYPE(sym[i].st_info) != STT_FUNC) |
291 | 292 | continue; |
292 | 293 | |
293 | - if (orig_addr >= sym[i].st_value | |
294 | - && orig_addr < sym[i].st_value + sym[i].st_size) | |
294 | + addr = sym[i].st_value; | |
295 | +#ifdef TARGET_ARM | |
296 | + /* The bottom address bit marks a Thumb symbol. */ | |
297 | + addr &= ~(target_ulong)1; | |
298 | +#endif | |
299 | + if (orig_addr >= addr | |
300 | + && orig_addr < addr + sym[i].st_size) | |
295 | 301 | return s->disas_strtab + sym[i].st_name; |
296 | 302 | } |
297 | 303 | } | ... | ... |