All the mail mirrored from lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH] fix dyngen on HPPA hosts
@ 2008-04-14 13:51 Stuart Brady
  0 siblings, 0 replies; only message in thread
From: Stuart Brady @ 2008-04-14 13:51 UTC (permalink / raw
  To: qemu-devel

Hi,

The attached patch fixes an HPPA dyngen bug, whereby an incorrect op
size would be given in dyngen-opc.h for certain ops, causing parts of
those ops to be overwritten.

With this, mips-softmmu running the mips-test-0.2 image now works, and
i386-softmmu running the linux-0.2 test image now boots successfully
(although there is a panic upon shutdown).  I've also successfully
booted Win98 and Win3.1.

diff -urpN qemu-orig/dyngen.c qemu-new/dyngen.c
--- qemu-orig/dyngen.c	2008-04-14 04:18:35.000000000 +0100
+++ qemu-new/dyngen.c	2008-04-14 04:30:15.000000000 +0100
@@ -1759,7 +1759,36 @@ void gen_code(const char *name, host_ulo
     }
 
     if (gen_switch == 2) {
-        fprintf(outfile, "DEF(%s, %d, %d)\n", name + 3, nb_args, copy_size);
+
+#if defined(HOST_HPPA)
+	int op_size = copy_size;
+	int has_stubs = 0;
+	char relname[256];
+	int type, is_label;
+
+	for (i = 0, rel = relocs; i < nb_relocs; i++, rel++) {
+	    if (rel->r_offset >= start_offset &&
+		rel->r_offset < start_offset + copy_size) {
+		sym_name = get_rel_sym_name(rel);
+		sym_name = strtab + symtab[ELF32_R_SYM(rel->r_info)].st_name;
+		is_label = get_reloc_expr(relname, sizeof(relname), sym_name);
+		type = ELF32_R_TYPE(rel->r_info);
+
+		if (!is_label && type == R_PARISC_PCREL17F) {
+		    has_stubs = 1;
+		    op_size += 8; /* ldil and be,n instructions */
+		}
+	    }
+	}
+
+	if (has_stubs)
+	    op_size += 4; /* b,l,n instruction, to skip past the stubs */
+
+	fprintf(outfile, "DEF(%s, %d, %d)\n", name + 3, nb_args, op_size);
+#else
+	fprintf(outfile, "DEF(%s, %d, %d)\n", name + 3, nb_args, copy_size);
+#endif
+
     } else if (gen_switch == 1) {
 
         /* output C code */

Cheers,
-- 
Stuart Brady

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

only message in thread, other threads:[~2008-04-14 13:51 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-04-14 13:51 [Qemu-devel] [PATCH] fix dyngen on HPPA hosts Stuart Brady

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.