All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [patch] Thumb symbol lookup
@ 2005-10-22  3:27 Paul Brook
  0 siblings, 0 replies; only message in thread
From: Paul Brook @ 2005-10-22  3:27 UTC (permalink / raw)
  To: qemu-devel

[-- Attachment #1: Type: text/plain, Size: 211 bytes --]

Some Arm ABIs use the low bit of a symbol address to mark thumb function 
symbols (instruction are always halfword aligned). The patch below makes 
lookup_symbol ignore this bit when comparing addresses.

Paul


[-- Attachment #2: patch.qemu_disas_taddr --]
[-- Type: text/x-diff, Size: 1009 bytes --]

Index: disas.c
===================================================================
RCS file: /cvsroot/qemu/qemu/disas.c,v
retrieving revision 1.25
diff -u -p -r1.25 disas.c
--- disas.c	23 Jul 2005 22:39:53 -0000	1.25
+++ disas.c	22 Oct 2005 03:23:10 -0000
@@ -279,6 +279,7 @@ const char *lookup_symbol(target_ulong o
     /* Hack, because we know this is x86. */
     Elf32_Sym *sym;
     struct syminfo *s;
+    target_ulong addr;
     
     for (s = syminfos; s; s = s->next) {
 	sym = s->disas_symtab;
@@ -290,8 +291,13 @@ const char *lookup_symbol(target_ulong o
 	    if (ELF_ST_TYPE(sym[i].st_info) != STT_FUNC)
 		continue;
 
-	    if (orig_addr >= sym[i].st_value
-		&& orig_addr < sym[i].st_value + sym[i].st_size)
+	    addr = sym[i].st_value;
+#ifdef TARGET_ARM
+            /* The bottom address bit marks a Thumb symbol.  */
+            addr &= ~(target_ulong)1;
+#endif
+	    if (orig_addr >= addr
+		&& orig_addr < addr + sym[i].st_size)
 		return s->disas_strtab + sym[i].st_name;
 	}
     }

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2005-10-22  3:28 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-10-22  3:27 [Qemu-devel] [patch] Thumb symbol lookup Paul Brook

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.