[cfe-dev] objc protocol: invalid pointer in property of protocol list inside binary with gnustep runtime (with lto)

David Chisnall via cfe-dev cfe-dev at lists.llvm.org
Tue Oct 11 04:21:25 PDT 2016


Hello,

Please can you let me know the precise compiler flags that you specified?  This looks as if you have a mixture of GCC and GNUstep ABIs.  You said that you’re using LTO: did you ensure that you compiled all Objective-C compilation units with the same ABI?

David

> On 11 Oct 2016, at 12:00, Perevalov Alexey <Alexey.Perevalov at hotmail.com> wrote:
> 
> Hello,
> 
> I faced with issue when while loading module and registering classes/categories/protocols, some protocol has corrupted fields, and gnustep-libobjc2 doesn't recognize it.
> 
> 
> I've used clang 3.9.1 compiler and libobjc2 is based on https://github.com/gnustep/libobjc2.
> target is arm-linux-gnueabi
> 
> During protocol initialization, initiated from .objc_load_function
> 
> I found following protocol in some of our compiled modules:
> 
> it's in isEmptyProtocol
> 
> p *p2
> $1 = {isa = 0xb1f9ef88 <_OBJC_CLASS_Protocol2>, name = 0xb6e95115 "AVPlayerItemOutputPushDelegate", protocol_list = 0xb86cf000, instance_methods = 0xb86cf008, 
>   class_methods = 0xb86cf008, optional_instance_methods = 0xb86cf008, optional_class_methods = 0xb86cf008, properties = 0x2, optional_properties = 0xb6f5d65e}
> 
> As you can see field properties has value 0x2, sometimes it's 0xe, sometime 0x1.
> 
> To exclude probability of runtime corruption I checked binary disassembler and found 0xe on the
> referenced offset.
> 
> .data:023B2538 unk_23B2538     DCB    3                ; DATA XREF: .data:023B2528o
> .data:023B2539                 DCB    0
> .data:023B253A                 DCB    0
> .data:023B253B                 DCB    0
> .data:023B253C                 DCD aAvplayeritemou     ; "AVPlayerItemOutputPushDelegate"
> .data:023B2540                 DCD unk_34B2F70
> .data:023B2544                 DCD unk_34B2F78
> .data:023B2548                 DCD unk_34B2F78
> .data:023B254C                 DCD unk_34B2F78
> .data:023B2550                 DCD unk_34B2F78
> .data:023B2554 unk_23B2554     DCB  0xE                ; DATA XREF: .data:023B06F0o
> .data:023B2555                 DCB    0
> .data:023B2556                 DCB    0
> .data:023B2557                 DCB    0
> 
> So looks like it's compiler issue, but it appears in that case after applying -flto optimization.
> Before that I faced with issue when optional_properties was 0x1, as I know both properties and optional_properties is pointers.
> 
> Unfortunately, I don't have minimal compiled sample for that issue. I tried to search the same issue in bugzilla, but didn't find something about it.




More information about the cfe-dev mailing list