gnustep-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: libobjc2-clang


From: David Chisnall
Subject: Re: libobjc2-clang
Date: Thu, 18 Jun 2020 13:42:36 +0100

Thanks!

> On 18 Jun 2020, at 12:52, Riccardo Mottola <riccardo.mottola@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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]