I noticed that there are many places using relocation types without #ifdef architecture protection, such as in create-diff-object.c:
return (rela_toc && rela_toc->sym->type == STT_FUNC &&
!rela_toc->sym->parent &&
rela_toc->addend == (int)rela_toc->sym->sym.st_value &&
(rela->type == R_X86_64_32S ||
rela->type == R_PPC64_TOC16_HA ||
rela->type == R_PPC64_TOC16_LO_DS));
All architectures relocation types use same number space. R_X86_64_32S value is 11. This value for PPC is R_PPC_REL14, for arm is R_ARM_THM_PC8. Could this break the code?