aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>2003-06-15 22:50:44 +0000
committerbellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>2003-06-15 22:50:44 +0000
commit039de852ec1640ff65db641d27caaf2a88d0a10c (patch)
tree35a51a8cf7b3b6757e2c2d1c4810d20ea3c29eb3
parent144c345daf6275a4dd8c75a0cc888679805464da (diff)
fixed op_label computation on ppc
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@248 c046a42c-6fe2-441c-8c8c-71466251a162
-rw-r--r--dyngen.c7
1 files changed, 2 insertions, 5 deletions
diff --git a/dyngen.c b/dyngen.c
index be790d7056..7fac4033e3 100644
--- a/dyngen.c
+++ b/dyngen.c
@@ -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);