fix dyngen on HPPA hosts
(Stuart Brady) git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4227 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
parent
2408a5273f
commit
b29d8ae4d4
31
dyngen.c
31
dyngen.c
|
@ -1759,7 +1759,36 @@ void gen_code(const char *name, host_ulong offset, host_ulong size,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gen_switch == 2) {
|
if (gen_switch == 2) {
|
||||||
fprintf(outfile, "DEF(%s, %d, %d)\n", name + 3, nb_args, copy_size);
|
|
||||||
|
#if defined(HOST_HPPA)
|
||||||
|
int op_size = copy_size;
|
||||||
|
int has_stubs = 0;
|
||||||
|
char relname[256];
|
||||||
|
int type, is_label;
|
||||||
|
|
||||||
|
for (i = 0, rel = relocs; i < nb_relocs; i++, rel++) {
|
||||||
|
if (rel->r_offset >= start_offset &&
|
||||||
|
rel->r_offset < start_offset + copy_size) {
|
||||||
|
sym_name = get_rel_sym_name(rel);
|
||||||
|
sym_name = strtab + symtab[ELF32_R_SYM(rel->r_info)].st_name;
|
||||||
|
is_label = get_reloc_expr(relname, sizeof(relname), sym_name);
|
||||||
|
type = ELF32_R_TYPE(rel->r_info);
|
||||||
|
|
||||||
|
if (!is_label && type == R_PARISC_PCREL17F) {
|
||||||
|
has_stubs = 1;
|
||||||
|
op_size += 8; /* ldil and be,n instructions */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (has_stubs)
|
||||||
|
op_size += 4; /* b,l,n instruction, to skip past the stubs */
|
||||||
|
|
||||||
|
fprintf(outfile, "DEF(%s, %d, %d)\n", name + 3, nb_args, op_size);
|
||||||
|
#else
|
||||||
|
fprintf(outfile, "DEF(%s, %d, %d)\n", name + 3, nb_args, copy_size);
|
||||||
|
#endif
|
||||||
|
|
||||||
} else if (gen_switch == 1) {
|
} else if (gen_switch == 1) {
|
||||||
|
|
||||||
/* output C code */
|
/* output C code */
|
||||||
|
|
Loading…
Reference in New Issue