Revision 76d83bde dyngen.c

b/dyngen.c
1495 1495
        p = (void *)(p_end - 2);
1496 1496
        if (p == p_start)
1497 1497
            error("empty code for %s", name);
1498
        if (get16((uint16_t *)p) != 0x07fe && get16((uint16_t *)p) != 0x07f4)
1499
            error("br %%r14 expected at the end of %s", name);
1498
        if ((get16((uint16_t *)p) & 0xfff0) != 0x07f0)
1499
            error("br expected at the end of %s", name);
1500 1500
        copy_size = p - p_start;
1501 1501
    }
1502 1502
#elif defined(HOST_ALPHA)
......
2120 2120
                            fprintf(outfile, "    *(uint8_t *)(gen_code_ptr + %d) = %s + %d;\n",
2121 2121
                                    reloc_offset, relname, addend);
2122 2122
                            break;
2123
                        case R_390_PC32DBL:
2124
                            if (ELF32_ST_TYPE(symtab[ELFW(R_SYM)(rel->r_info)].st_info) == STT_SECTION) {
2125
                                fprintf(outfile,
2126
                                        "    *(uint32_t *)(gen_code_ptr + %d) += "
2127
                                        "((long)&%s - (long)gen_code_ptr) >> 1;\n",
2128
                                        reloc_offset, name);
2129
                            }
2130
                            else
2131
                                fprintf(outfile,
2132
                                        "    *(uint32_t *)(gen_code_ptr + %d) = "
2133
                                        "(%s + %d - ((uint32_t)gen_code_ptr + %d)) >> 1;\n",
2134
                                        reloc_offset, relname, addend, reloc_offset);
2135
                            break;
2123 2136
                        default:
2124 2137
                            error("unsupported s390 relocation (%d)", type);
2125 2138
                        }

Also available in: Unified diff