<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<style type="text/css" style="display:none;"><!-- P {margin-top:0;margin-bottom:0;} --></style>
</head>
<body dir="ltr">
<div id="divtagdefaultwrapper" style="font-size:12pt;color:#000000;font-family:Calibri,Arial,Helvetica,sans-serif;">
<p><br>
</p>
<p>We're using clang as compiler and ld.gold (from binutils 2.27) as linker.<br>
</p>
<p><br>
</p>
<p>Compiler options for library side where protocol declared are following:</p>
<p><span>/usr/bin/clang   -O2  -pipe -Wall  -fexceptions -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security    -fmessage-length=0 -march=armv7-a -mtune=cortex-a8  -mfpu=vfpv3 -mfloat-abi=softfp -D__SOFTFP__ -mthumb  -flto -O2  -ffixed-r9   
 -pthread -D_REENTRANT -DGST_EXT_EXIF_MODIFICATION -D__MMFILE_DYN_LOADING__  -Wall -fPIC -fconstant-string-class=NSConstantString -Wimplicit-function-declaration -fobjc-runtime=gnustep -fobjc-arc -fblocks -mfpu=neon-vfpv3 -mfloat-abi=softfp -fvisibility=hidden
 -Os   -D _GNU_SOURCE -D LINUX -D GCC_RUNTIME_3 -D __LITTLE_ENDIAN__ -D FORTIFY_SOURCE -D OPENSSL_NO_SSL2 -D __BLOCKS__ -D OS_OBJECT_USE_OBJC __ -Wno-nullability-completeness  -Wall -Werror -o CMakeFiles/AVFoundation.dir/Sources/AVPlayerItemOutput.m.o   -c
 /home/abuild/rpmbuild/BUILD/motte-1.0.0/Frameworks/AVFoundation/Sources/AVPlayerItemOutput.m</span><br>
</p>
<p><br>
</p>
<p>for application part.</p>
<p></p>
<div>-D__IPHONE_OS_VERSION_MIN_REQUIRED=__IPHONE_7_0<br>
-integrated-as<br>
-fconstant-string-class=NSConstantString<br>
-fobjc-runtime=gnustep<br>
-ObjC<br>
-D_DEFAULT_SOURCE<br>
-DLIBBSD_OVERLAY<br>
-D__extern_always_inline=inline<br>
-D_XOPEN_SOURCE=700<br>
-Dtypeof=__typeof__<br>
-DNS_BLOCKS_AVAILABLE<br>
-DTARGET_OS_IPHONE<br>
-D_GCC_NEXT_LIMITS_H<br>
-DOS_OBJECT_HAVE_OBJC_SUPPORT=1 <br>
-fdata-sections<br>
-ffunction-sections<br>
-fstack-protector<br>
--param=ssp-buffer-size=8<br>
-Wno-nullability-completeness<br>
-Wall<br>
-fstrict-aliasing <br>
-std=c99<br>
-fasm-blocks<br>
-Wnon-modular-include-in-framework-module<br>
-Werror=non-modular-include-in-framework-module<br>
-fmodules<br>
-fno-autolink<br>
-fobjc-exceptions<br>
-fno-objc-arc<br>
-fblocks<br>
-Wswitch<br>
-Wdeprecated-declarations<br>
-fmessage-length=0<br>
-ferror-limit=0 <br>
-target arm-linux-gnueabi<br>
-gcc-toolchain /Users/sdk/tools/smart-build-interface/../arm-linux-gnueabi-gcc-4.9/<br>
-ccc-gcc-name arm-linux-gnueabi-g++<br>
-march=armv7-a<br>
-mfloat-abi=softfp<br>
-mfpu=vfpv3-d16<br>
-mtune=cortex-a8<br>
-Wno-gnu   <br>
--sysroot="/Users/sdk/tools/smart-build-interface/../../platforms/mobile/rootstraps/mobile-2.4-device.core"<br>
-mthumb<br>
-fPIC <br>
-Os<br>
-ffixed-r9<br>
-fvisibility=hidden<br>
-flto<br>
</div>
<p></p>
<p><br>
</p>
<p>and linker options:</p>
<p></p>
<div>-Xlinker -lstdc++ -Xlinker -ObjC -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -mtune=cortex-a8 -Xlinker --as-needed -lpthread \<br>
    -Werror-implicit-function-declaration \<br>
    -Wl,--gc-sections \<br>
    -Xlinker -rpath="/opt/usr/apps/XY/lib" \<br>
    -march=armv7-a \<br>
    -mfloat-abi=softfp \<br>
    -mfpu=vfpv3-d16 \<br>
    -mtune=cortex-a8 \<br>
    -Xlinker --as-needed \<br>
    -Wl,-wrap=sysctl<br>
</div>
<p></p>
<p><br>
</p>
<p>I omitted -L and -I as no important here;<br>
</p>
<p><br>
</p>
<p>I link objects of libraries and application into one binary. I don't use static library for cocotron/chameleon parts,</p>
<p>due to issue with categories which are missed if they'r alone in linkage module.<br>
</p>
<p><br>
</p>
<p>and before link I've checked:</p>
<p><br>
</p>
<p><span>find Distribution\ -\ Production/ -name "*.o" -exec file {} +</span><br>
</p>
<p><br>
</p>
<p>and all objects are<br>
</p>
<p><span>LLVM IR bitcode</span></p>
<p><span><br>
</span></p>
<p><span>But in general you're right I have 2 kind of object (IR BC) files, one part was compiled in chroot (x86 i586) and</span></p>
<p><span>another part was compiled in MacOS X. But it's the same version of the same compiler, given by the same commit id and built (not downloaded from public domain).<br>
</span></p>
<p><br>
</p>
<p><br>
</p>
<p>BR,</p>
<p>Alexey<br>
</p>
<br>
<div style="color: rgb(0, 0, 0);">
<div>
<hr tabindex="-1" style="display:inline-block; width:98%">
<div id="x_divRplyFwdMsg" dir="ltr"><font style="font-size:11pt" face="Calibri, sans-serif" color="#000000"><b>От:</b> Dr D. Chisnall <dc552@hermes.cam.ac.uk> от имени David Chisnall <David.Chisnall@cl.cam.ac.uk><br>
<b>Отправлено:</b> 11 октября 2016 г. 14:21<br>
<b>Кому:</b> Perevalov Alexey<br>
<b>Копия:</b> Clang Dev<br>
<b>Тема:</b> Re: objc protocol: invalid pointer in property of protocol list inside binary with gnustep runtime (with lto)</font>
<div> </div>
</div>
</div>
<font size="2"><span style="font-size:10pt;">
<div class="PlainText">>Hello,<br>
<br>
>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?<br>
<br>
>David<br>
<br>
> On 11 Oct 2016, at 12:00, Perevalov Alexey <Alexey.Perevalov@hotmail.com> wrote:<br>
> <br>
> Hello,<br>
> <br>
> 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.<br>
> <br>
> <br>
> I've used clang 3.9.1 compiler and libobjc2 is based on <a href="https://github.com/gnustep/libobjc2" id="LPlnk110314" previewremoved="true">
https://github.com/gnustep/libobjc2</a>.
<div id="LPBorder_GT_14761856855360.32630893404993044" style="margin-bottom: 20px; overflow: auto; width: 100%; text-indent: 0px;">
<table id="LPContainer_14761856855300.8180407038549182" style="width: 90%; background-color: rgb(255, 255, 255); position: relative; overflow: auto; padding-top: 20px; padding-bottom: 20px; margin-top: 20px; border-top: 1px dotted rgb(200, 200, 200); border-bottom: 1px dotted rgb(200, 200, 200);" cellspacing="0">
<tbody>
<tr style="border-spacing: 0px;" valign="top">
<td id="ImageCell_14761856855320.17750415290387378" style="width: 250px; position: relative; display: table-cell; padding-right: 20px;" colspan="1">
<div id="LPImageContainer_14761856855320.5521719796415298" style="background-color: rgb(255, 255, 255); height: 250px; position: relative; margin: auto; display: table; width: 250px;">
<a id="LPImageAnchor_14761856855330.6097796948856516" style="display: table-cell; text-align: center;" href="https://github.com/gnustep/libobjc2" target="_blank"><img style="display: inline-block; max-width: 250px; max-height: 250px; height: 250px; width: 250px; border-width: 0px; vertical-align: bottom;" aria-label="Предварительный просмотр изображения с выделенной ссылкой. Чтобы открыть ссылку, коснитесь ее дважды." id="LPThumbnailImageID_14761856855330.5332542786968819" width="250" height="250" src="https://avatars1.githubusercontent.com/u/1449600?v=3&s=400"></a></div>
</td>
<td id="TextCell_14761856855330.08763754062248996" style="vertical-align: top; position: relative; padding: 0px; display: table-cell;" colspan="2">
<div id="LPRemovePreviewContainer_14761856855330.3872254240569196"></div>
<div id="LPTitle_14761856855340.4097200008592152" style="top: 0px; color: rgb(0, 120, 215); font-weight: 400; font-size: 21px; font-family: "wf_segoe-ui_light","Segoe UI Light","Segoe WP Light","Segoe UI","Segoe WP",Tahoma,Arial,sans-serif; line-height: 21px;">
<a id="LPUrlAnchor_14761856855340.7874907738514422" style="text-decoration: none;" href="https://github.com/gnustep/libobjc2" target="_blank">GitHub - gnustep/libobjc2</a></div>
<div id="LPMetadata_14761856855340.4523673609518929" style="margin: 10px 0px 16px; color: rgb(102, 102, 102); font-weight: 400; font-family: "wf_segoe-ui_normal","Segoe UI","Segoe WP",Tahoma,Arial,sans-serif; font-size: 14px; line-height: 14px;">
github.com</div>
<div id="LPDescription_14761856855350.32462476353157144" style="display: block; color: rgb(102, 102, 102); font-weight: 400; font-family: "wf_segoe-ui_normal","Segoe UI","Segoe WP",Tahoma,Arial,sans-serif; font-size: 14px; line-height: 20px; max-height: 100px; overflow: hidden;">
README.md GNUstep Objective-C Runtime. The GNUstep Objective-C runtime is designed as a drop-in replacement for the GCC runtime. It supports both a legacy ...</div>
</td>
</tr>
</tbody>
</table>
</div>
<br>
> target is arm-linux-gnueabi<br>
> <br>
> During protocol initialization, initiated from .objc_load_function<br>
> <br>
> I found following protocol in some of our compiled modules:<br>
> <br>
> it's in isEmptyProtocol<br>
> <br>
> p *p2<br>
> $1 = {isa = 0xb1f9ef88 <_OBJC_CLASS_Protocol2>, name = 0xb6e95115 "AVPlayerItemOutputPushDelegate", protocol_list = 0xb86cf000, instance_methods = 0xb86cf008,
<br>
>   class_methods = 0xb86cf008, optional_instance_methods = 0xb86cf008, optional_class_methods = 0xb86cf008, properties = 0x2, optional_properties = 0xb6f5d65e}<br>
> <br>
> As you can see field properties has value 0x2, sometimes it's 0xe, sometime 0x1.<br>
> <br>
> To exclude probability of runtime corruption I checked binary disassembler and found 0xe on the<br>
> referenced offset.<br>
> <br>
> .data:023B2538 unk_23B2538     DCB    3                ; DATA XREF: .data:023B2528o<br>
> .data:023B2539                 DCB    0<br>
> .data:023B253A                 DCB    0<br>
> .data:023B253B                 DCB    0<br>
> .data:023B253C                 DCD aAvplayeritemou     ; "AVPlayerItemOutputPushDelegate"<br>
> .data:023B2540                 DCD unk_34B2F70<br>
> .data:023B2544                 DCD unk_34B2F78<br>
> .data:023B2548                 DCD unk_34B2F78<br>
> .data:023B254C                 DCD unk_34B2F78<br>
> .data:023B2550                 DCD unk_34B2F78<br>
> .data:023B2554 unk_23B2554     DCB  0xE                ; DATA XREF: .data:023B06F0o<br>
> .data:023B2555                 DCB    0<br>
> .data:023B2556                 DCB    0<br>
> .data:023B2557                 DCB    0<br>
> <br>
> So looks like it's compiler issue, but it appears in that case after applying -flto optimization.<br>
> Before that I faced with issue when optional_properties was 0x1, as I know both properties and optional_properties is pointers.<br>
> <br>
> 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.<br>
<br>
</div>
</span></font></div>
</div>
</body>
</html>