]> Git Repo - qemu.git/blobdiff - dyngen.c
Implement --cpu for ARM.
[qemu.git] / dyngen.c
index bcfb86ea0dded612d51562e23cef3fe90041980a..953b36c114433d1238a9ebea1b6394b8a3a18a36 100644 (file)
--- a/dyngen.c
+++ b/dyngen.c
@@ -148,11 +148,11 @@ typedef uint64_t host_ulong;
 
 #ifdef CONFIG_FORMAT_COFF
 
-#include "a.out.h"
-
 typedef int32_t host_long;
 typedef uint32_t host_ulong;
 
+#include "a.out.h"
+
 #define FILENAMELEN 256
 
 typedef struct coff_sym {
@@ -1740,7 +1740,7 @@ void gen_code(const char *name, host_ulong offset, host_ulong size,
         {
             EXE_SYM *sym;
             const char *sym_name, *p;
-            unsigned long val;
+            host_ulong val;
             int n;
 
             for(i = 0, sym = symtab; i < nb_syms; i++, sym++) {
@@ -1772,7 +1772,7 @@ void gen_code(const char *name, host_ulong offset, host_ulong size,
 #ifdef CONFIG_FORMAT_MACH
                     offset -= section_hdr[sym->n_sect-1].addr;
 #endif
-                    val = *(unsigned long *)(ptr + offset);
+                    val = *(host_ulong *)(ptr + offset);
 #ifdef ELF_USES_RELOCA
                     {
                         int reloc_shndx, nb_relocs1, j;
@@ -2349,6 +2349,33 @@ void gen_code(const char *name, host_ulong offset, host_ulong size,
                                     reloc_offset, reloc_offset, name, addend,
                                    reloc_offset);
                             break;
+                        case R_SPARC_HH22:
+                            fprintf(outfile,
+                                   "    *(uint32_t *)(gen_code_ptr + %d) = "
+                                   "((*(uint32_t *)(gen_code_ptr + %d)) "
+                                   " & ~0x00000000) "
+                                   " | (((%s + %d) >> 42) & 0x00000000);\n",
+                                    reloc_offset, reloc_offset, name, addend);
+                             break;
+
+                       case R_SPARC_LM22:
+                            fprintf(outfile,
+                                   "    *(uint32_t *)(gen_code_ptr + %d) = "
+                                   "((*(uint32_t *)(gen_code_ptr + %d)) "
+                                   " & ~0x00000000) "
+                                   " | (((%s + %d) >> 10) & 0x00000000);\n",
+                                    reloc_offset, reloc_offset, name, addend);
+                           break;
+
+                       case R_SPARC_HM10:
+                            fprintf(outfile,
+                                   "    *(uint32_t *)(gen_code_ptr + %d) = "
+                                   "((*(uint32_t *)(gen_code_ptr + %d)) "
+                                   " & ~0x00000000) "
+                                   " | ((((%s + %d) >> 32 & 0x3ff)) & 0x00000000);\n",
+                                    reloc_offset, reloc_offset, name, addend);
+                           break;
+
                         default:
                            error("unsupported sparc64 relocation (%d) for symbol %s", type, name);
                         }
This page took 0.025195 seconds and 4 git commands to generate.