--- bfd/elfxx-sparc.c.orig 2021-07-08 13:37:19.000000000 +0200 +++ bfd/elfxx-sparc.c 2021-07-21 09:32:51.373421000 +0200 @@ -2784,12 +2784,14 @@ Elf_Internal_Rela *relend; int num_relocs; bool is_vxworks_tls; + const struct elf_backend_data *bed; htab = _bfd_sparc_elf_hash_table (info); BFD_ASSERT (htab != NULL); symtab_hdr = &elf_symtab_hdr (input_bfd); sym_hashes = elf_sym_hashes (input_bfd); local_got_offsets = elf_local_got_offsets (input_bfd); + bed = get_elf_backend_data (output_bfd); if (elf_hash_table (info)->hgot == NULL) got_base = 0; @@ -3448,6 +3450,8 @@ bfd_set_error (bfd_error_bad_value); return false; } + if (bed->elf_osabi == ELFOSABI_FREEBSD) + outrel.r_addend -= osec->vma; } outrel.r_info = SPARC_ELF_R_INFO (htab, rel, indx,