# workaround for https://github.com/dyninst/dyninst/issues/396 --- ./dyninst-9.3.2/symtabAPI/src/Object-elf.C.sv 2017-09-27 21:43:18.399429243 -0400 +++ ./dyninst-9.3.2/symtabAPI/src/Object-elf.C 2017-09-27 21:56:14.485125928 -0400 @@ -1445,6 +1445,24 @@ if (fbt_iter == -1) { // Create new relocation entry. relocationEntry re( next_plt_entry_addr, offset, targ_name, NULL, type ); + if (type == R_X86_64_IRELATIVE) { + vector funcs; + dyn_hash_map >::iterator iter; + // find the resolver function and use that as the + // caller function symbol. The resolver has not run + // so we don't know the ultimate destination. + // Since the funcsByOffset map hasn't been setup yet + // we cannot call associated_symtab->findFuncByEntryOffset + for (iter = symbols_.begin(); iter != symbols_.end(); ++iter) { + std::string name = iter->first; + Symbol *sym = iter->second[0]; + if (sym->getOffset() == (Offset)addend) { + // Use dynsym_list.push_back(sym) instead? + re.addDynSym(sym); + break; + } + } + } re.setAddend(addend); re.setRegionType(rtype); if (dynsym_list.size() > 0)