Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 11 Jun 2026 07:48:25 +0000
From:      Piotr Kubaj <pkubaj@FreeBSD.org>
To:        ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org
Subject:   git: 0ba22c657d00 - main - lang/libobjc2: update to 2.3, add msdSend for powerpc64*
Message-ID:  <6a2a6849.1fde0.30c1d8e8@gitrepo.freebsd.org>

index | next in thread | raw e-mail

The branch main has been updated by pkubaj:

URL: https://cgit.FreeBSD.org/ports/commit/?id=0ba22c657d00fa5006765f2eaf5062d6961299e1

commit 0ba22c657d00fa5006765f2eaf5062d6961299e1
Author:     Piotr Kubaj <pkubaj@FreeBSD.org>
AuthorDate: 2026-06-08 11:30:59 +0000
Commit:     Piotr Kubaj <pkubaj@FreeBSD.org>
CommitDate: 2026-06-11 07:47:57 +0000

    lang/libobjc2: update to 2.3, add msdSend for powerpc64*
    
    Changelog:      https://github.com/gnustep/libobjc2/releases/tag/v2.3
---
 lang/libobjc2/Makefile                             |  19 +-
 lang/libobjc2/distinfo                             |   6 +-
 lang/libobjc2/files/patch-CMakeLists.txt           |  21 +-
 lang/libobjc2/files/patch-objc__msgSend.S          |  11 +
 .../libobjc2/files/patch-objc__msgSend.powerpc64.S | 301 +++++++++++++++++++++
 lang/libobjc2/files/patch-objc_message.h           |  12 +
 lang/libobjc2/pkg-plist                            |   5 +
 7 files changed, 345 insertions(+), 30 deletions(-)

diff --git a/lang/libobjc2/Makefile b/lang/libobjc2/Makefile
index 957eff74d84d..90c436fb0970 100644
--- a/lang/libobjc2/Makefile
+++ b/lang/libobjc2/Makefile
@@ -1,6 +1,6 @@
 PORTNAME=	libobjc2
 DISTVERSIONPREFIX=v
-DISTVERSION=	2.2.1
+DISTVERSION=	2.3
 CATEGORIES=	lang devel gnustep
 
 MAINTAINER=	pkubaj@FreeBSD.org
@@ -10,7 +10,7 @@ LICENSE=	MIT
 
 BUILD_DEPENDS=	${LOCALBASE}/include/tsl/robin_map.h:devel/robin-map
 
-USES=		cmake compiler objc:compiler
+USES=		cmake:testing compiler objc:compiler
 
 USE_GITHUB=	yes
 GH_ACCOUNT=	gnustep
@@ -19,10 +19,9 @@ USE_LDCONFIG=	yes
 
 LDFLAGS+=	-lm
 
-TEST_TARGET=	test
-
 CMAKE_ARGS+=	-DLIB_INSTALL_PATH=lib \
 		-DLOCALBASE=${LOCALBASE}
+CMAKE_TESTING_ON=	TESTS
 
 LDFLAGS_armv7=	-Wl,-znotext
 SSP_UNSAFE=	yes
@@ -32,17 +31,7 @@ PLIST_SUB+=	SHLIB_MAJOR=${SHLIB_MAJOR} SHLIB_MINOR=${SHLIB_MINOR}
 SHLIB_MAJOR=	4
 SHLIB_MINOR=	6
 
-.include <bsd.port.pre.mk>
-
-.if ${ARCH:Mpowerpc*} || ${ARCH:Mriscv64*}
-CMAKE_ARGS+=	-DTESTS:BOOL=OFF
-.endif
-
-.if ${CHOSEN_COMPILER_TYPE} == gcc
-CXXFLAGS+=	-stdlib=libstdc++
-.endif
-
 post-install:
 	${LN} -sf libobjc.so.${SHLIB_MAJOR}.${SHLIB_MINOR} ${STAGEDIR}${PREFIX}/lib/libobjc.so.${SHLIB_MAJOR}
 
-.include <bsd.port.post.mk>
+.include <bsd.port.mk>
diff --git a/lang/libobjc2/distinfo b/lang/libobjc2/distinfo
index 9b8b43d151de..78eafc9ed5b7 100644
--- a/lang/libobjc2/distinfo
+++ b/lang/libobjc2/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1717156055
-SHA256 (gnustep-libobjc2-v2.2.1_GH0.tar.gz) = 768ea8c5bd0999a29b5d15781125494f986456c1dc5c51d370fb31852cd31ea1
-SIZE (gnustep-libobjc2-v2.2.1_GH0.tar.gz) = 205087
+TIMESTAMP = 1780915583
+SHA256 (gnustep-libobjc2-v2.3_GH0.tar.gz) = 5ead2276b42a534ac40437ce53b2231320b985539dc325453d93874be8d92869
+SIZE (gnustep-libobjc2-v2.3_GH0.tar.gz) = 213139
diff --git a/lang/libobjc2/files/patch-CMakeLists.txt b/lang/libobjc2/files/patch-CMakeLists.txt
index ad0d5232999b..99cfac956e02 100644
--- a/lang/libobjc2/files/patch-CMakeLists.txt
+++ b/lang/libobjc2/files/patch-CMakeLists.txt
@@ -1,18 +1,15 @@
---- CMakeLists.txt.orig	2024-03-21 16:06:36 UTC
+--- CMakeLists.txt.orig	2026-06-08 10:48:43 UTC
 +++ CMakeLists.txt
-@@ -29,9 +29,10 @@ INCLUDE (FetchContent)
- INCLUDE (CheckCXXSourceCompiles)
+@@ -30,6 +30,8 @@ INCLUDE (CheckSymbolExists)
  INCLUDE (FetchContent)
+ INCLUDE (CheckSymbolExists)
  
 +include_directories(${LOCALBASE}/include)
 +
  set(libobjc_VERSION 4.6)
  
--
- if (MSVC)
- 	set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /EHas")
- 	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHas")
-@@ -128,17 +129,6 @@ endif ()
+ 
+@@ -112,17 +114,6 @@ endif ()
  	list(APPEND libobjc_C_SRCS eh_personality.c)
  endif ()
  
@@ -22,7 +19,7 @@
 -	FetchContent_Declare(
 -		robinmap
 -		GIT_REPOSITORY https://github.com/Tessil/robin-map/
--		GIT_TAG        v1.2.1)
+-		GIT_TAG        v1.4.0)
 -
 -	FetchContent_MakeAvailable(robinmap)
 -endif()
@@ -30,12 +27,12 @@
  if (WIN32)
  	set(OLD_ABI_COMPAT_DEFAULT false)
  else()
-@@ -255,8 +245,6 @@ endif()
+@@ -269,8 +260,6 @@ endif()
  if (WIN32 AND NOT MINGW)
- 	target_link_libraries(objc ntdll.dll)
+ 	target_link_libraries(objc PUBLIC ntdll.dll)
  endif()
 -
--target_link_libraries(objc tsl::robin_map)
+-target_link_libraries(objc PRIVATE tsl::robin_map)
  
  set_target_properties(objc PROPERTIES
  	LINKER_LANGUAGE C
diff --git a/lang/libobjc2/files/patch-objc__msgSend.S b/lang/libobjc2/files/patch-objc__msgSend.S
new file mode 100644
index 000000000000..443ea4d608bb
--- /dev/null
+++ b/lang/libobjc2/files/patch-objc__msgSend.S
@@ -0,0 +1,11 @@
+--- objc_msgSend.S.orig	2025-09-16 15:03:00 UTC
++++ objc_msgSend.S
+@@ -12,6 +12,8 @@
+ #include "objc_msgSend.riscv64.S"
+ #elif defined(__mips_n64) || defined(__mips_n32)
+ #include "objc_msgSend.mips.S"
++#elif defined(__powerpc64__) && _CALL_ELF == 2
++#include "objc_msgSend.powerpc64.S"
+ #else
+ #warning objc_msgSend() not implemented for your architecture
+ #endif
diff --git a/lang/libobjc2/files/patch-objc__msgSend.powerpc64.S b/lang/libobjc2/files/patch-objc__msgSend.powerpc64.S
new file mode 100644
index 000000000000..9e03cade637a
--- /dev/null
+++ b/lang/libobjc2/files/patch-objc__msgSend.powerpc64.S
@@ -0,0 +1,301 @@
+--- objc_msgSend.powerpc64.S.orig	2026-06-08 11:30:27 UTC
++++ objc_msgSend.powerpc64.S
+@@ -0,0 +1,298 @@
++/* objc_msgSend.powerpc64.S - PowerPC64 ELFv2 fast-path dispatch for GNUstep libobjc2.
++ *
++ * Included from objc_msgSend.S after common.S and asmconstants.h.
++ * Works for both ppc64le (LE) and ppc64 BE with the ELFv2 ABI.
++ *
++ * Dispatch overview:
++ *   Fast path (no frame): nil-check → small-obj-check → isa → dtable lookup → IMP → bctr
++ *   Slow path (frame + spill): for nil slots (cache miss), calls slowMsgLookup
++ *
++ * ELFv2 frame layout used on the slow path (FRAME_SIZE = 208):
++ *   +0   back chain   +8  CR save   +24  TOC (r2)
++ *   +32  r3  +40  r4  +48  r5  +56  r6  +64  r7  +72  r8  +80  r9  +88  r10
++ *   +96  f1  ...  +192  f13
++ *   LR saved at (FRAME_SIZE+16)(r1) = old_sp+16 per ELFv2 convention.
++ */
++
++#define FRAME_SIZE 208
++
++.globl CDECL(objc_msgSend)
++TYPE_DIRECTIVE(CDECL(objc_msgSend), %function)
++.globl CDECL(objc_msgSend_fpret)
++TYPE_DIRECTIVE(CDECL(objc_msgSend_fpret), %function)
++
++CDECL(objc_msgSend_fpret):
++CDECL(objc_msgSend):
++.Lgep_objc_msgSend:
++	.cfi_startproc
++	addis	2, 12, .TOC.-.Lgep_objc_msgSend@ha
++	addi	2, 2, .TOC.-.Lgep_objc_msgSend@l
++.localentry CDECL(objc_msgSend), .-.Lgep_objc_msgSend
++
++	/* Nil receiver */
++	cmpdi	cr0, 3, 0
++	beq-	cr0, .Lnil_msgSend
++
++	/* Small-object check: r3 & SMALLOBJ_MASK → r11, sets CR0 */
++	andi.	11, 3, SMALLOBJ_MASK
++	bne-	cr0, .Lsmall_msgSend
++
++	/* Load isa from normal receiver */
++	ld	11, 0(3)
++
++.LclassLoaded:
++	/* dtable → r11; sel->index (uint32_t) → r12; dtable->shift → r0 */
++	ld	11, DTABLE_OFFSET(11)
++	lwz	12, 0(4)
++	lwz	0, SHIFT_OFFSET(11)
++
++	/* Three-level sparse-array lookup.
++	 * Each rlwinm extracts one byte of the selector index and scales by 8.
++	 * shift=0: single level (8-bit);  shift=8: two levels (16-bit);
++	 * anything else: three levels (24-bit, the common case). */
++	cmpwi	cr0, 0, 8
++	beq-	cr0, .Ldtable16
++	cmpwi	cr0, 0, 0
++	beq-	cr0, .Ldtable8
++
++	/* Level 1: bits [23:16] of index, scaled by 8 */
++	rlwinm	0, 12, 19, 21, 28		/* r0 = (index >> 16 & 0xFF) << 3 */
++	add	11, 11, 0			/* r11 = dtable + offset (r0 can't be mem base) */
++	ld	11, DATA_OFFSET(11)
++
++.Ldtable16:
++	/* Level 2: bits [15:8] */
++	rlwinm	0, 12, 27, 21, 28		/* r0 = (index >> 8 & 0xFF) << 3 */
++	add	11, 11, 0
++	ld	11, DATA_OFFSET(11)
++
++.Ldtable8:
++	/* Level 3: bits [7:0] → slot pointer */
++	rlwinm	0, 12, 3, 21, 28		/* r0 = (index & 0xFF) << 3 */
++	add	11, 11, 0
++	ld	11, DATA_OFFSET(11)
++
++	cmpdi	cr0, 11, 0
++	beq-	cr0, .Lslow_msgSend
++
++	/* Load IMP from slot, tail-call (r12 = entry for ELFv2 global-entry TOC setup) */
++	ld	12, SLOT_OFFSET(11)
++	mtctr	12
++	bctr
++
++.Lnil_msgSend:
++	/* Nil receiver: zero integer (r3:r4) and FP (f1:f2) return registers.
++	 * objc_msgSend_fpret shares this entry, so a nil send returning
++	 * float/double must yield 0.0 — clear f1:f2 via the ELFv2 red zone. */
++	li	3, 0
++	li	4, 0
++	std	3, -8(1)
++	lfd	1, -8(1)
++	lfd	2, -8(1)
++	blr
++
++.Lslow_msgSend:
++	/* Slow path: spill all argument registers around the lookup call.
++	 * CFI lets exceptions from +initialize (run inside slowMsgLookup)
++	 * unwind through this frame. */
++	.cfi_remember_state
++	mflr	0
++	stdu	1, -FRAME_SIZE(1)
++	.cfi_def_cfa_offset FRAME_SIZE
++	std	0, (FRAME_SIZE + 16)(1)
++	.cfi_offset 65, 16
++	std	2, 24(1)
++	std	3, 32(1)			/* self at +32; &self = r1+32 for slowMsgLookup */
++	std	4, 40(1)
++	std	5, 48(1)
++	std	6, 56(1)
++	std	7, 64(1)
++	std	8, 72(1)
++	std	9, 80(1)
++	std	10, 88(1)
++	stfd	1,  96(1)
++	stfd	2,  104(1)
++	stfd	3,  112(1)
++	stfd	4,  120(1)
++	stfd	5,  128(1)
++	stfd	6,  136(1)
++	stfd	7,  144(1)
++	stfd	8,  152(1)
++	stfd	9,  160(1)
++	stfd	10, 168(1)
++	stfd	11, 176(1)
++	stfd	12, 184(1)
++	stfd	13, 192(1)
++
++	/* slowMsgLookup(id *receiver, SEL cmd) — may modify *receiver for forwarding */
++	addi	3, 1, 32
++	/* r4 = sel (already set) */
++	bl	CDECL(slowMsgLookup)
++	nop					/* linker patches to: ld 2, 24(1) */
++
++	mr	12, 3
++	ld	3, 32(1)			/* reload (possibly-modified) self */
++	ld	4, 40(1)
++	ld	5, 48(1)
++	ld	6, 56(1)
++	ld	7, 64(1)
++	ld	8, 72(1)
++	ld	9, 80(1)
++	ld	10, 88(1)
++	lfd	1,  96(1)
++	lfd	2,  104(1)
++	lfd	3,  112(1)
++	lfd	4,  120(1)
++	lfd	5,  128(1)
++	lfd	6,  136(1)
++	lfd	7,  144(1)
++	lfd	8,  152(1)
++	lfd	9,  160(1)
++	lfd	10, 168(1)
++	lfd	11, 176(1)
++	lfd	12, 184(1)
++	lfd	13, 192(1)
++	addi	1, 1, FRAME_SIZE
++	ld	0, 16(1)
++	mtlr	0
++	mtctr	12
++	bctr
++	.cfi_restore_state
++
++.Lsmall_msgSend:
++	/* r11 = receiver & SMALLOBJ_MASK = tag (1-7); look up class in global array */
++	addis	12, 2, CDECL(SmallObjectClasses)@toc@ha
++	addi	12, 12, CDECL(SmallObjectClasses)@toc@l
++	sldi	11, 11, 3			/* tag * 8 (pointer size) */
++	ldx	11, 12, 11			/* r11 = SmallObjectClasses[tag] */
++	b	.LclassLoaded
++
++	.cfi_endproc
++
++
++.globl CDECL(objc_msgSend_stret)
++TYPE_DIRECTIVE(CDECL(objc_msgSend_stret), %function)
++
++/* stret: r3 = hidden struct ptr, r4 = self, r5 = sel */
++CDECL(objc_msgSend_stret):
++.Lgep_objc_msgSend_stret:
++	.cfi_startproc
++	addis	2, 12, .TOC.-.Lgep_objc_msgSend_stret@ha
++	addi	2, 2, .TOC.-.Lgep_objc_msgSend_stret@l
++.localentry CDECL(objc_msgSend_stret), .-.Lgep_objc_msgSend_stret
++
++	cmpdi	cr0, 4, 0
++	beq-	cr0, .Lnil_stret
++
++	andi.	11, 4, SMALLOBJ_MASK
++	bne-	cr0, .Lsmall_stret
++
++	ld	11, 0(4)
++
++.LclassLoaded_stret:
++	ld	11, DTABLE_OFFSET(11)
++	lwz	12, 0(5)			/* sel index from r5 */
++	lwz	0, SHIFT_OFFSET(11)
++
++	cmpwi	cr0, 0, 8
++	beq-	cr0, .Ldtable16_stret
++	cmpwi	cr0, 0, 0
++	beq-	cr0, .Ldtable8_stret
++
++	rlwinm	0, 12, 19, 21, 28
++	add	11, 11, 0
++	ld	11, DATA_OFFSET(11)
++
++.Ldtable16_stret:
++	rlwinm	0, 12, 27, 21, 28
++	add	11, 11, 0
++	ld	11, DATA_OFFSET(11)
++
++.Ldtable8_stret:
++	rlwinm	0, 12, 3, 21, 28
++	add	11, 11, 0
++	ld	11, DATA_OFFSET(11)
++
++	cmpdi	cr0, 11, 0
++	beq-	cr0, .Lslow_stret
++
++	ld	12, SLOT_OFFSET(11)
++	mtctr	12
++	bctr
++
++.Lnil_stret:
++	blr
++
++.Lslow_stret:
++	/* See .Lslow_msgSend for why this frame carries CFI. */
++	.cfi_remember_state
++	mflr	0
++	stdu	1, -FRAME_SIZE(1)
++	.cfi_def_cfa_offset FRAME_SIZE
++	std	0, (FRAME_SIZE + 16)(1)
++	.cfi_offset 65, 16
++	std	2, 24(1)
++	std	3, 32(1)			/* struct ptr */
++	std	4, 40(1)			/* self at +40; &self = r1+40 */
++	std	5, 48(1)			/* sel */
++	std	6, 56(1)
++	std	7, 64(1)
++	std	8, 72(1)
++	std	9, 80(1)
++	std	10, 88(1)
++	stfd	1,  96(1)
++	stfd	2,  104(1)
++	stfd	3,  112(1)
++	stfd	4,  120(1)
++	stfd	5,  128(1)
++	stfd	6,  136(1)
++	stfd	7,  144(1)
++	stfd	8,  152(1)
++	stfd	9,  160(1)
++	stfd	10, 168(1)
++	stfd	11, 176(1)
++	stfd	12, 184(1)
++	stfd	13, 192(1)
++
++	addi	3, 1, 40			/* r3 = &self */
++	mr	4, 5				/* r4 = sel */
++	bl	CDECL(slowMsgLookup)
++	nop
++
++	mr	12, 3
++	ld	3, 32(1)
++	ld	4, 40(1)			/* reload (possibly-modified) self */
++	ld	5, 48(1)
++	ld	6, 56(1)
++	ld	7, 64(1)
++	ld	8, 72(1)
++	ld	9, 80(1)
++	ld	10, 88(1)
++	lfd	1,  96(1)
++	lfd	2,  104(1)
++	lfd	3,  112(1)
++	lfd	4,  120(1)
++	lfd	5,  128(1)
++	lfd	6,  136(1)
++	lfd	7,  144(1)
++	lfd	8,  152(1)
++	lfd	9,  160(1)
++	lfd	10, 168(1)
++	lfd	11, 176(1)
++	lfd	12, 184(1)
++	lfd	13, 192(1)
++	addi	1, 1, FRAME_SIZE
++	ld	0, 16(1)
++	mtlr	0
++	mtctr	12
++	bctr
++	.cfi_restore_state
++
++.Lsmall_stret:
++	addis	12, 2, CDECL(SmallObjectClasses)@toc@ha
++	addi	12, 12, CDECL(SmallObjectClasses)@toc@l
++	sldi	11, 11, 3
++	ldx	11, 12, 11
++	b	.LclassLoaded_stret
++
++	.cfi_endproc
diff --git a/lang/libobjc2/files/patch-objc_message.h b/lang/libobjc2/files/patch-objc_message.h
new file mode 100644
index 000000000000..a28a84ee1f88
--- /dev/null
+++ b/lang/libobjc2/files/patch-objc_message.h
@@ -0,0 +1,12 @@
+--- objc/message.h.orig	2025-09-16 15:03:00 UTC
++++ objc/message.h
+@@ -10,7 +10,8 @@
+     defined(__mips_n64) || defined(__mips_n32) ||                              \
+     defined(__ARM_ARCH_ISA_A64) ||                                             \
+     (defined(__riscv) && __riscv_xlen == 64 &&                                 \
+-     defined(__riscv_float_abi_double))
++     defined(__riscv_float_abi_double)) ||                                     \
++    (defined(__powerpc64__) && _CALL_ELF == 2)
+ 
+ // Define __GNUSTEP_MSGSEND__ if available
+ #ifndef __GNUSTEP_MSGSEND__
diff --git a/lang/libobjc2/pkg-plist b/lang/libobjc2/pkg-plist
index 01d049d3c663..8d814850eeec 100644
--- a/lang/libobjc2/pkg-plist
+++ b/lang/libobjc2/pkg-plist
@@ -14,6 +14,7 @@ include/objc/objc-api.h
 include/objc/objc-arc.h
 include/objc/objc-auto.h
 include/objc/objc-class.h
+include/objc/objc-config.h
 include/objc/objc-exception.h
 include/objc/objc-runtime.h
 include/objc/objc-visibility.h
@@ -21,6 +22,10 @@ include/objc/objc.h
 include/objc/runtime-deprecated.h
 include/objc/runtime.h
 include/objc/slot.h
+lib/cmake/libobjc/libobjcConfig.cmake
+lib/cmake/libobjc/libobjcConfigVersion.cmake
+lib/cmake/libobjc/libobjcTargets-%%CMAKE_BUILD_TYPE%%.cmake
+lib/cmake/libobjc/libobjcTargets.cmake
 lib/libobjc.so
 lib/libobjc.so.%%SHLIB_MAJOR%%
 lib/libobjc.so.%%SHLIB_MAJOR%%.%%SHLIB_MINOR%%


home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?6a2a6849.1fde0.30c1d8e8>