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 | } | ... | ... |