Index: bfd/elf-eh-frame.c
--- bfd/elf-eh-frame.c.orig	2024-08-04 01:00:00.000000000 +0200
+++ bfd/elf-eh-frame.c	2024-08-05 20:47:09.740282000 +0200
@@ -1045,10 +1045,12 @@
   goto success;
 
  free_no_table:
+#if 0
   _bfd_error_handler
     /* xgettext:c-format */
     (_("error in %pB(%pA); no .eh_frame_hdr table will be created"),
      abfd, sec);
+#endif
   hdr_info->u.dwarf.table = false;
   free (sec_info);
  success:
Index: bfd/elf.c
--- bfd/elf.c.orig	2024-08-04 01:00:00.000000000 +0200
+++ bfd/elf.c	2024-08-05 20:47:09.741591000 +0200
@@ -2843,6 +2843,11 @@
       ret = _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
       goto success;
 
+    case SHT_SUNW_syminfo:
+    /* case SHT_SUNW_signature: conflicts with new SHT_GNU_HASH in Binutils 2.18 */
+    case SHT_SUNW_dof:
+      goto success;
+
     case SHT_SHLIB:
       goto success;
 
@@ -6919,6 +6924,12 @@
   else
     i_ehdrp->e_type = ET_REL;
 
+  /* OpenPKG platform branding BEGIN */
+#if defined(OPENPKG_OS_FREEBSD)
+  i_ehdrp->e_ident[EI_OSABI] = ELFOSABI_FREEBSD;
+#endif
+  /* OpenPKG platform branding END */
+
   switch (bfd_get_arch (abfd))
     {
     case bfd_arch_unknown:
Index: bfd/elfxx-sparc.c
--- bfd/elfxx-sparc.c.orig	2024-08-04 01:00:00.000000000 +0200
+++ bfd/elfxx-sparc.c	2024-08-05 20:47:09.742025000 +0200
@@ -2785,12 +2785,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;
@@ -3449,6 +3451,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,
Index: include/elf/common.h
--- include/elf/common.h.orig	2024-08-05 20:47:09.742278000 +0200
+++ include/elf/common.h	2024-08-05 22:32:19.977514000 +0200
@@ -582,6 +582,9 @@
 #define SHT_SUNW_verdef	             0x6ffffffd	/* Versions defined by file */
 #define SHT_SUNW_verneed             0x6ffffffe	/* Versions needed by file */
 #define SHT_SUNW_versym	             0x6fffffff	/* Symbol versions */
+#define SHT_SUNW_syminfo             0x6ffffffc	/* Symbol information */
+#define SHT_SUNW_signature           0x6ffffff6	/* Solaris Cryptographic Framework: Digital Signature */
+#define SHT_SUNW_dof                 0x6ffffff4	/* Solaris DTrace Object Format */
 
 #define SHT_GNU_verdef	SHT_SUNW_verdef
 #define SHT_GNU_verneed	SHT_SUNW_verneed
Index: ld/Makefile.in
--- ld/Makefile.in.orig	2024-08-04 01:00:00.000000000 +0200
+++ ld/Makefile.in	2024-08-05 20:47:09.742618000 +0200
@@ -583,7 +583,7 @@
 # We put the scripts in the directory $(scriptdir)/ldscripts.
 # We can't put the scripts in $(datadir) because the SEARCH_DIR
 # directives need to be different for native and cross linkers.
-scriptdir = $(tooldir)/lib
+scriptdir = $(libdir)
 BASEDIR = $(srcdir)/..
 BFDDIR = $(BASEDIR)/bfd
 INCDIR = $(BASEDIR)/include
Index: ld/scripttempl/elf.sc
--- ld/scripttempl/elf.sc.orig	2024-08-04 01:00:00.000000000 +0200
+++ ld/scripttempl/elf.sc	2024-08-05 20:47:09.742747000 +0200
@@ -724,10 +724,10 @@
   ${DATA_SDATA-${SDATA}}
   ${DATA_SDATA-${OTHER_SDATA_SECTIONS}}
   ${RELOCATING+${SYMBOL_ABI_ALIGNMENT+. = ALIGN(${SYMBOL_ABI_ALIGNMENT});}}
-  ${RELOCATING+${DATA_END_SYMBOLS-${CREATE_SHLIB+PROVIDE (}$(def_symbol "_edata")${CREATE_SHLIB+)}; PROVIDE ($(def_symbol "edata"));}}
+  ${RELOCATING+${DATA_END_SYMBOLS-$(def_symbol "_edata"); PROVIDE ($(def_symbol "edata"));}}
   ${PERSISTENT}
   ${RELOCATING+. = ALIGN(ALIGNOF(NEXT_SECTION));}
-  ${RELOCATING+${CREATE_SHLIB+PROVIDE (}$(def_symbol "__bss_start")${CREATE_SHLIB+)};}
+  ${RELOCATING+$(def_symbol "__bss_start");}
   ${RELOCATING+${OTHER_BSS_SYMBOLS}}
   ${DATA_SDATA-${SBSS}}
   ${BSS_PLT+${PLT}}
@@ -764,7 +764,7 @@
   ${LARGE_BSS_AFTER_BSS-${LARGE_BSS}}
   ${RELOCATING+. = ALIGN(${ALIGNMENT});}
   ${RELOCATING+${OTHER_END_SYMBOLS}}
-  ${RELOCATING+${END_SYMBOLS-${CREATE_SHLIB+PROVIDE (}$(def_symbol "_end")${CREATE_SHLIB+)}; PROVIDE ($(def_symbol "end"));}}
+  ${RELOCATING+${END_SYMBOLS-$(def_symbol "_end"); PROVIDE ($(def_symbol "end"));}}
   ${RELOCATING+${DATA_SEGMENT_END}}
   ${TINY_DATA_SECTION}
   ${TINY_BSS_SECTION}
Index: libiberty/fibheap.c
--- libiberty/fibheap.c.orig	2024-08-04 01:00:00.000000000 +0200
+++ libiberty/fibheap.c	2024-08-05 20:47:09.742839000 +0200
@@ -34,8 +34,11 @@
 #include "libiberty.h"
 #include "fibheap.h"
 
-
+#ifdef LONG_MIN
 #define FIBHEAPKEY_MIN	LONG_MIN
+#else
+#define FIBHEAPKEY_MIN	(-0x7fffffffL - 1)
+#endif
 
 static void fibheap_ins_root (fibheap_t, fibnode_t);
 static void fibheap_rem_root (fibheap_t, fibnode_t);
