From 5be1676206f83dc603a8746de8026b3f966b1b97 Mon Sep 17 00:00:00 2001 From: malc Date: Mon, 9 Jun 2008 06:06:28 +0000 Subject: [PATCH] R_PPC_REL24 safety net git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4706 c046a42c-6fe2-441c-8c8c-71466251a162 --- dyngen.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/dyngen.c b/dyngen.c index c38d12386f..880d641a56 100644 --- a/dyngen.c +++ b/dyngen.c @@ -1963,6 +1963,14 @@ void gen_code(const char *name, host_ulong offset, host_ulong size, break; case R_PPC_REL24: /* warning: must be at 32 MB distancy */ + fprintf(outfile, "{\n" + " long disp = (%s - (long)(gen_code_ptr + %d) + %d);\n" + " if ((disp << 6) >> 6 != disp) {;\n" + " fprintf(stderr, \"Branch target is too far away\\n\");" + " abort();\n" + " }\n" + "}\n", + relname, reloc_offset, addend); fprintf(outfile, " *(uint32_t *)(gen_code_ptr + %d) = (*(uint32_t *)(gen_code_ptr + %d) & ~0x03fffffc) | ((%s - (long)(gen_code_ptr + %d) + %d) & 0x03fffffc);\n", reloc_offset, reloc_offset, relname, reloc_offset, addend); break; -- 2.11.4.GIT