Commit b80029cad1dad2caaaae61de334488a6847a087e
1 parent
43024c6a
Support for more SPARC relocations, by Martin Bochnig.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2407 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
2 changed files
with
30 additions
and
0 deletions
dyngen.c
| ... | ... | @@ -2349,6 +2349,33 @@ void gen_code(const char *name, host_ulong offset, host_ulong size, |
| 2349 | 2349 | reloc_offset, reloc_offset, name, addend, |
| 2350 | 2350 | reloc_offset); |
| 2351 | 2351 | break; |
| 2352 | + case R_SPARC_HH22: | |
| 2353 | + fprintf(outfile, | |
| 2354 | + " *(uint32_t *)(gen_code_ptr + %d) = " | |
| 2355 | + "((*(uint32_t *)(gen_code_ptr + %d)) " | |
| 2356 | + " & ~0x00000000) " | |
| 2357 | + " | (((%s + %d) >> 42) & 0x00000000);\n", | |
| 2358 | + reloc_offset, reloc_offset, name, addend); | |
| 2359 | + break; | |
| 2360 | + | |
| 2361 | + case R_SPARC_LM22: | |
| 2362 | + fprintf(outfile, | |
| 2363 | + " *(uint32_t *)(gen_code_ptr + %d) = " | |
| 2364 | + "((*(uint32_t *)(gen_code_ptr + %d)) " | |
| 2365 | + " & ~0x00000000) " | |
| 2366 | + " | (((%s + %d) >> 10) & 0x00000000);\n", | |
| 2367 | + reloc_offset, reloc_offset, name, addend); | |
| 2368 | + break; | |
| 2369 | + | |
| 2370 | + case R_SPARC_HM10: | |
| 2371 | + fprintf(outfile, | |
| 2372 | + " *(uint32_t *)(gen_code_ptr + %d) = " | |
| 2373 | + "((*(uint32_t *)(gen_code_ptr + %d)) " | |
| 2374 | + " & ~0x00000000) " | |
| 2375 | + " | ((((%s + %d) >> 32 & 0x3ff)) & 0x00000000);\n", | |
| 2376 | + reloc_offset, reloc_offset, name, addend); | |
| 2377 | + break; | |
| 2378 | + | |
| 2352 | 2379 | default: |
| 2353 | 2380 | error("unsupported sparc64 relocation (%d) for symbol %s", type, name); |
| 2354 | 2381 | } | ... | ... |
elf.h
| ... | ... | @@ -328,6 +328,9 @@ typedef struct { |
| 328 | 328 | #define R_SPARC_11 31 |
| 329 | 329 | #define R_SPARC_64 32 |
| 330 | 330 | #define R_SPARC_OLO10 33 |
| 331 | +#define R_SPARC_HH22 34 | |
| 332 | +#define R_SPARC_HM10 35 | |
| 333 | +#define R_SPARC_LM22 36 | |
| 331 | 334 | #define R_SPARC_WDISP16 40 |
| 332 | 335 | #define R_SPARC_WDISP19 41 |
| 333 | 336 | #define R_SPARC_7 43 | ... | ... |