+ fill_int3(s_text_obj.data + addr, end - addr);
+ }
+
+ // remove relocs
+ for (i = 0; i < s_text_obj.reloc_cnt; i++) {
+ addr = s_text_obj.relocs[i].r_vaddr;
+ sym = s_text_obj.relocs[i].r_symndx;
+ if (addr > s_text_obj.size - 4) {
+ printf("reloc addr OOR: %x\n", addr);
+ goto out;
+ }
+ if (sym >= raw_sym_cnt_obj) {
+ printf("reloc sym OOR: %d/%ld\n",
+ sym, raw_sym_cnt_obj);
+ goto out;
+ }
+#if 0
+ printf("r %08x -> %08x %s\n", base + addr,
+ raw_syms_obj[sym].addr,
+ raw_syms_obj[sym].name);
+#endif
+ t = (unsigned int *)(s_text_obj.data + addr);
+ if (t[0] == 0xcccccccc
+ || t[-1] == 0xcccccccc) { // jumptab of a func?
+ t[0] = 0xcccccccc;
+ memmove(&s_text_obj.relocs[i],
+ &s_text_obj.relocs[i + 1],
+ (s_text_obj.reloc_cnt - i - 1)
+ * sizeof(s_text_obj.relocs[0]));
+ i--;
+ s_text_obj.reloc_cnt--;
+ }
+ // note: branches/calls already linked,
+ // so only useful for dd refs
+ else if (raw_syms_obj[sym].is_text) {
+ addr2 = raw_syms_obj[sym].addr;
+ if (s_text_obj.data[addr2] == 0xcc) {
+ printf("warning: reloc %08x -> %08x "
+ "points to rm'd target '%s'\n",
+ base + addr, base + addr2,
+ raw_syms_obj[sym].name);
+ }
+ }