Thanks! > On 18 Jun 2020, at 12:52, Riccardo Mottola <riccardo.mott...@libero.it> wrote: > > you guessed correctly and the protocol is also a very common one, NSCopying
So, part of the question is whether this is the first time we’re seeing this or not. Can you stick a watchpoint on the isa pointer and restart it, see if it’s modified before here? > (gdb) p *protocols > $4 = {next = 0x0, count = 2, list = 0x7b8aa32ea1c0 <objc_protocol_list+16>} > > (gdb) p i > $1 = 0 > (gdb) p aProto > $2 = (struct objc_protocol *) 0x7b8aa39138b8 <._OBJC_PROTOCOL_NSCopying> > > > version is small: > (gdb) p version > $3 = 0 That’s very odd. Here’s the definition of the enum: https://github.com/gnustep/libobjc2/blob/369c84db35a6a1e94f8a4689a695fabdac056166/protocol.h#L26 The isa pointer for each protocol is initially set to one of those enum values (2, 3, or 4) by the compiler and is then set to a proper Objective-C class. It should never end up 0. It’s possible that something has corrupted memory or that we’ve just read the low 32 bits this has been set to a 64-bit address that happens to have nothing in the low 32 bits, but it seems quite unlikely. >> Can you also confirm whether you’ve built with OLDABI_COMPAT enabled? If >> you didn’t, then you’ll see this message if you try to load any code that >> isn’t compiled with the v2 ABI. > > I confirm OLDABI_COMPAT is on. I did not touch it. LEGACY_COMPAT is off. > > I only changed the linker option and then the build type. > > Further question: this is a from-scratch install, all compiled with the same > version of clang, can I assume that all libraryes have the same ABI or not? > maybe there is a makefile issue somewhere? Should be. You can see if __objc_exec_class is called - that’s the entry point used by old ABI code. David