to answer my own point. The issue was caused by a older runtime build of
gnustep-base which was still lingering around.
When linking with -lgnustep-base the problem occured. Without
-lgnustep-base,it didnt.
Maybe it would be smart to ignore the library or put up a more
descriptive error than just segfaulting.
On 25.11.2025 04:53, Andreas Fink via Discussion list for the GNUstep
programming environment wrote:
Hello
I am porting my code to Debian13 after running sucessfully running for
years under Debian 11 and 12.
So I compiled the whole gnustep stack with not much hassle. When I try
to compile my own code however, it fails already at ./configure
And it seems to be that ./configure runs a simple test to see if its
cross compiling or not where it fails.
It boils down to this command line
clang -o conftest -fPIC -DLINUX -D_XOPEN_SOURCE=700 -D_POSIX_SOURCE
-D_DEFAULT_SOURCE -fobjc-arc -MMD -MP -DGNUSTEP
-DGNUSTEP_BASE_LIBRARY=1 -DGNU_GUI_LIBRARY=1 -DGNUSTEP_RUNTIME=1
-D_NONFRAGILE_ABI=1 -DGNUSTEP_BASE_LIBRARY=1 -fno-strict-aliasing
-fexceptions -fobjc-exceptions -D_NATIVE_OBJC_EXCEPTIONS -pthread
-fPIC -Wall -DGSWARN -DGSDIAGNOSE -Wno-import -I //include -fblocks
-fobjc-runtime=gnustep-2.2 -fblocks
-fconstant-string-class=NSConstantString -I.
-I/Users/afink/GNUstep/Library/Headers -I/usr/local/include
-I/usr/include -DHAVE_OPENSSL=1 -pthread -fexceptions -rdynamic
-fobjc-runtime=gnustep-2.2 -fblocks
-L/Users/afink/GNUstep/Library/Libraries -L/usr/local/lib -L/usr/lib
-lgnustep-base -lpthread -l:libobjc.so.4.6 -lm -lssl -lcrypto
conftest.c -ldl -ldl
a simple program in conftest.c:
int main() { return 0; }
compiling works but running produces a SIGSEGV.
LLDB points to this line in the code
(lldb) run
Process 99524 launched: '/Users/afink/development/git/ulib/conftest'
(aarch64)
Process 99524 stopped
* thread #1, name = 'conftest', stop reason = signal SIGSEGV: address
not mapped to object (fault address: 0x0)
frame #0: 0x0000fffff7859088
libobjc.so.4.6`upgradePropertyList(l=0x0000fffff6e80402) at
legacy.c:328:11
325 }
326 size_t data_size = l->count * sizeof(struct objc_property);
327 struct objc_property_list *n = calloc(1, sizeof(struct
objc_property_list) + data_size);
-> 328 n->count = l->count;
329 n->size = sizeof(struct objc_property);
330 for (int i=0 ; i<l->count ; i++)
331 {
sizeof(struct objc_property_list) = 16
sizeof(struct objc_property) = 40;
(lldb) print *l
(objc_property_list_gsv1) {
count = 712114218
next = 0x304036314900383a
properties = {}
}
so calloc fails with 712114218 * 40 * 16 bytes = 455GB...
something is clearly not initialized
Backtrace is this:
frame #0: 0x0000fffff7859088
libobjc.so.4.6`upgradePropertyList(l=0x0000fffff6e80402) at
legacy.c:328:11
frame #1: 0x0000fffff7858ecc
libobjc.so.4.6`objc_upgrade_class(oldClass=<unavailable>) at
legacy.c:357:20
* frame #2: 0x0000fffff78528cc
libobjc.so.4.6`__objc_exec_class(module=<unavailable>) at loader.c:352:19
frame #3: 0x0000fffff7fc1b4c
ld-linux-aarch64.so.1`___lldb_unnamed_symbol61 + 236
frame #4: 0x0000fffff7fc1c60
ld-linux-aarch64.so.1`___lldb_unnamed_symbol62 + 120
frame #5: 0x0000fffff7fd8360
ld-linux-aarch64.so.1`___lldb_unnamed_symbol236 + 96
349 // Load the classes from this module
350 for (unsigned short i=0 ; i<symbols->class_count ; i++)
351 {
-> 352 objc_load_class(objc_upgrade_class(symbols->definitions[defs++]));
353 }
These is what ccmake reports
BUILD_STATIC_LIBOBJC ON
CMAKE_BUILD_TYPE RelWithDebInfo
CMAKE_INSTALL_PREFIX /usr
CPACK_GENERATOR TGZ
CPACK_STRIP_FILES ON
DEBUG_ARC_COMPAT OFF
EMBEDDED_BLOCKS_RUNTIME ON
ENABLE_OBJCXX ON
ENABLE_TRACING OFF
FETCHCONTENT_BASE_DIR
/Users/afink/development/gnustep_build/libobjc2/build/_deps
FETCHCONTENT_FULLY_DISCONNECTE OFF
FETCHCONTENT_QUIET ON
FETCHCONTENT_UPDATES_DISCONNEC OFF
GNUSTEP_CONFIG /usr/bin/gnustep-config
GNUSTEP_INSTALL_TYPE SYSTEM
INCLUDE_DIRECTORY objc
LEGACY_COMPAT OFF
LIBOBJC_NAME objc
M_LIBRARY /usr/lib/aarch64-linux-gnu/libm.so
OLDABI_COMPAT ON
STRICT_APPLE_COMPATIBILITY OFF
TESTS OFF
TYPE_DEPENDENT_DISPATCH ON
tsl-robin-map_DIR /usr/share/cmake/tsl-robin-map
I tried with OLDABI_COMPAT OFF and then it breaks at
* thread #1, name = 'conftest', stop reason = signal SIGSEGV: address
not mapped to object (fault address: 0x0)
frame #0: 0x0000fffff785e774 libobjc.so.4.6`selector_lookup(char
const*, char const*) [inlined]
tsl::rh::power_of_two_growth_policy<2ul>::bucket_for_hash(this=0x0000000000000000,
hash=18399730721004063734) const at robin_growth_policy.h:125:19
122 * If bucket_count() is 0, it must always return 0.
123 */
124 std::size_t bucket_for_hash(std::size_t hash) const
noexcept {
-> 125 return hash & m_mask;
126 }
127
128 /**
libobjc was built with the following command line
export CC="/usr/bin/clang"
export CXX="/usr/bin/clang++"
export PREFIX="/"
export
PATH="/usr/GNUstep/System/Tools:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin"
export
PKG_CONFIG_PATH="/usr/lib/pkgconfig/:/usr/local/lib/pkgconfig/"
export RUNTIME_VERSION="gnustep-2.0"
export OBJCFLAGS="-fblocks"
export CFLAGS="-I ${PREFIX}/include"
export GNUSTEP_INSTALLATION_DOMAIN="SYSTEM"
cmake .. -DCMAKE_BUILD_TYPE=RelWithDebInfo
-DBUILD_STATIC_LIBOBJC=1 -DCMAKE_C_COMPILER=${CC}
-DCMAKE_CXX_COMPILER=${CXX} -DCMAKE_INSTALL_PREFIX=/usr
I tried with clang17,18,19 with same results
anyone have an idea whats going rouge here?