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?


  • l... Andreas Fink via Discussion list for the GNUstep programming environment
    • ... Andreas Fink via Discussion list for the GNUstep programming environment

Reply via email to