Commit 039de852ec1640ff65db641d27caaf2a88d0a10c
1 parent
144c345d
fixed op_label computation on ppc
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@248 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
2 additions
and
5 deletions
dyngen.c
| ... | ... | @@ -654,7 +654,6 @@ void gen_code(const char *name, host_ulong offset, host_ulong size, |
| 654 | 654 | sym_name = strtab + sym->st_name; |
| 655 | 655 | if (strstart(sym_name, "__op_label", &p)) { |
| 656 | 656 | uint8_t *ptr; |
| 657 | - int addend; | |
| 658 | 657 | unsigned long offset; |
| 659 | 658 | |
| 660 | 659 | /* 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, |
| 663 | 662 | if (!ptr) |
| 664 | 663 | error("__op_labelN in invalid section"); |
| 665 | 664 | offset = sym->st_value; |
| 666 | - addend = 0; | |
| 665 | + val = *(target_ulong *)(ptr + offset); | |
| 667 | 666 | #ifdef ELF_USES_RELOCA |
| 668 | 667 | { |
| 669 | 668 | int reloc_shndx, nb_relocs1, j; |
| ... | ... | @@ -676,7 +675,7 @@ void gen_code(const char *name, host_ulong offset, host_ulong size, |
| 676 | 675 | rel = (ELF_RELOC *)sdata[reloc_shndx]; |
| 677 | 676 | for(j = 0; j < nb_relocs1; j++) { |
| 678 | 677 | if (rel->r_offset == offset) { |
| 679 | - addend = rel->r_addend; | |
| 678 | + val = rel->r_addend; | |
| 680 | 679 | break; |
| 681 | 680 | } |
| 682 | 681 | rel++; |
| ... | ... | @@ -684,8 +683,6 @@ void gen_code(const char *name, host_ulong offset, host_ulong size, |
| 684 | 683 | } |
| 685 | 684 | } |
| 686 | 685 | #endif |
| 687 | - val = *(target_ulong *)(ptr + offset); | |
| 688 | - val += addend; | |
| 689 | 686 | |
| 690 | 687 | if (val >= start_offset && val < start_offset + copy_size) { |
| 691 | 688 | n = strtol(p, NULL, 10); | ... | ... |