Support for more SPARC relocations, by Martin Bochnig.

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2407 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
ths 2007-02-10 21:31:43 +00:00
parent 43024c6a2b
commit b80029cad1
2 changed files with 30 additions and 0 deletions

View File

@ -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);
}

3
elf.h
View File

@ -328,6 +328,9 @@ typedef struct {
#define R_SPARC_11 31
#define R_SPARC_64 32
#define R_SPARC_OLO10 33
#define R_SPARC_HH22 34
#define R_SPARC_HM10 35
#define R_SPARC_LM22 36
#define R_SPARC_WDISP16 40
#define R_SPARC_WDISP19 41
#define R_SPARC_7 43