diff options
author | bellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162> | 2003-06-15 22:50:44 +0000 |
---|---|---|
committer | bellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162> | 2003-06-15 22:50:44 +0000 |
commit | 039de852ec1640ff65db641d27caaf2a88d0a10c (patch) | |
tree | 35a51a8cf7b3b6757e2c2d1c4810d20ea3c29eb3 /dyngen.c | |
parent | 144c345daf6275a4dd8c75a0cc888679805464da (diff) |
fixed op_label computation on ppc
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@248 c046a42c-6fe2-441c-8c8c-71466251a162
Diffstat (limited to 'dyngen.c')
-rw-r--r-- | dyngen.c | 7 |
1 files changed, 2 insertions, 5 deletions
@@ -654,7 +654,6 @@ void gen_code(const char *name, host_ulong offset, host_ulong size, sym_name = strtab + sym->st_name; if (strstart(sym_name, "__op_label", &p)) { uint8_t *ptr; - int addend; unsigned long offset; /* test if the variable refers to a label inside @@ -663,7 +662,7 @@ void gen_code(const char *name, host_ulong offset, host_ulong size, if (!ptr) error("__op_labelN in invalid section"); offset = sym->st_value; - addend = 0; + val = *(target_ulong *)(ptr + offset); #ifdef ELF_USES_RELOCA { int reloc_shndx, nb_relocs1, j; @@ -676,7 +675,7 @@ void gen_code(const char *name, host_ulong offset, host_ulong size, rel = (ELF_RELOC *)sdata[reloc_shndx]; for(j = 0; j < nb_relocs1; j++) { if (rel->r_offset == offset) { - addend = rel->r_addend; + val = rel->r_addend; break; } rel++; @@ -684,8 +683,6 @@ void gen_code(const char *name, host_ulong offset, host_ulong size, } } #endif - val = *(target_ulong *)(ptr + offset); - val += addend; if (val >= start_offset && val < start_offset + copy_size) { n = strtol(p, NULL, 10); |