--- rts/StgCRunAsm.S.orig
+++ rts/StgCRunAsm.S
@@ -6,7 +6,7 @@
 #if !defined(USE_MINIINTERPRETER)

-#if defined(powerpc64le_HOST_ARCH)
-# if defined(linux_HOST_OS)
+#if defined(powerpc64le_HOST_ARCH) || defined(powerpc64_HOST_ARCH)
+# if defined(linux_HOST_OS) || defined(freebsd_HOST_OS)
 /* 64-bit PowerPC ELF V2 ABI Revision 1.4
  *
  * Stack frame organization (see Figure 2.18, ELF V2 ABI Revision 1.4, p 31)
@@ -66,6 +66,94 @@
         addi 12,1,-(8*18)
         bl _restgpr1_14
         b _restfpr_14
+#  if defined(freebsd_HOST_OS)
+/* GNU ld synthesizes the ELFv2 out-of-line register save/restore
+ * routines that StgRun/StgReturn call above; clang/lld do not.  Provide
+ * them here.  Bodies match the GNU ld (binutils 2.44) synthesis. */
+_savegpr1_14:
+	std 14,-144(12)
+	std 15,-136(12)
+	std 16,-128(12)
+	std 17,-120(12)
+	std 18,-112(12)
+	std 19,-104(12)
+	std 20,-96(12)
+	std 21,-88(12)
+	std 22,-80(12)
+	std 23,-72(12)
+	std 24,-64(12)
+	std 25,-56(12)
+	std 26,-48(12)
+	std 27,-40(12)
+	std 28,-32(12)
+	std 29,-24(12)
+	std 30,-16(12)
+	std 31,-8(12)
+	blr
+_savefpr_14:
+	stfd 14,-144(1)
+	stfd 15,-136(1)
+	stfd 16,-128(1)
+	stfd 17,-120(1)
+	stfd 18,-112(1)
+	stfd 19,-104(1)
+	stfd 20,-96(1)
+	stfd 21,-88(1)
+	stfd 22,-80(1)
+	stfd 23,-72(1)
+	stfd 24,-64(1)
+	stfd 25,-56(1)
+	stfd 26,-48(1)
+	stfd 27,-40(1)
+	stfd 28,-32(1)
+	stfd 29,-24(1)
+	stfd 30,-16(1)
+	stfd 31,-8(1)
+	std 0,16(1)
+	blr
+_restgpr1_14:
+	ld 14,-144(12)
+	ld 15,-136(12)
+	ld 16,-128(12)
+	ld 17,-120(12)
+	ld 18,-112(12)
+	ld 19,-104(12)
+	ld 20,-96(12)
+	ld 21,-88(12)
+	ld 22,-80(12)
+	ld 23,-72(12)
+	ld 24,-64(12)
+	ld 25,-56(12)
+	ld 26,-48(12)
+	ld 27,-40(12)
+	ld 28,-32(12)
+	ld 29,-24(12)
+	ld 30,-16(12)
+	ld 31,-8(12)
+	blr
+_restfpr_14:
+	lfd 14,-144(1)
+	lfd 15,-136(1)
+	lfd 16,-128(1)
+	lfd 17,-120(1)
+	lfd 18,-112(1)
+	lfd 19,-104(1)
+	lfd 20,-96(1)
+	lfd 21,-88(1)
+	lfd 22,-80(1)
+	lfd 23,-72(1)
+	lfd 24,-64(1)
+	lfd 25,-56(1)
+	lfd 26,-48(1)
+	lfd 27,-40(1)
+	lfd 28,-32(1)
+	ld 0,16(1)
+	lfd 29,-24(1)
+	mtlr 0
+	lfd 30,-16(1)
+	lfd 31,-8(1)
+	blr
+#  endif
 # else // linux_HOST_OS
 # error Only Linux support for power64 little endian right now.
 # endif
