const Elf_Rela *rela;
 
        for (rela = start; rela < stop; rela++) {
+               Elf_Sym *tsym;
                Elf_Addr taddr, r_offset;
                unsigned int r_type, r_sym;
 
                r_offset = TO_NATIVE(rela->r_offset);
                get_rel_type_and_sym(elf, rela->r_info, &r_type, &r_sym);
 
-               taddr = TO_NATIVE(rela->r_addend);
+               tsym = elf->symtab_start + r_sym;
+               taddr = tsym->st_value + TO_NATIVE(rela->r_addend);
 
                switch (elf->hdr->e_machine) {
                case EM_RISCV:
                        break;
                }
 
-               check_section_mismatch(mod, elf, elf->symtab_start + r_sym,
+               check_section_mismatch(mod, elf, tsym,
                                       fsecndx, fromsec, r_offset, taddr);
        }
 }