<div dir="ltr">Hello,<div><br></div><div>Does anyone know if cblocks are working for darwin-aarch64?</div><div><br></div><div>I'm trying to use GCController objects. The notification is based of blocks.</div><div><br></div><div>The code looks like this:</div><div>GCExtendedGamepad.inc<br></div><div>----</div><div>{$modeswitch cblocks}<br></div><div><br></div><div><div>type</div><div>  GCExtendedGamepadValueChangedHandler = reference to procedure (gamepad: GCGamepad;<br></div><div>    element: GCControllerElement); cdecl;</div></div><div><br></div><div><div>type<br></div><div><div>  GCExtendedGamepad = objcclass external (NSObject)</div><div>  public</div><div>    ...</div><div>    procedure setValueChangedHandler(newValue: GCExtendedGamepadValueChangedHandler); message 'setValueChangedHandler:';  <br></div></div></div><div>    ...</div><div>  end;</div><div><br></div><div>---</div><div>maincode.pas</div><div>---</div><div><div>{$modeswitch cblocks}<br></div></div><div>...</div><div><br></div><div><div>procedure extendedGamePadChange(gamepad: GCGamepad; element: GCControllerElement);</div><div>// calling convention cdecl is not specified</div><div>begin</div><div>  writeln('something changed');</div><div>end;</div></div><div><br></div><div>...</div><div>  // gc is GCController -  it's a valid object</div><div>  // gc.extendedGamepad  - exists and is avalid object</div><div><div>  gc.extendedGamepad.setValueChangedHandler(@extendedGamePadChange);</div></div><div>----</div><div><br></div><div>The problem is that code seems to be failing on "setValueCahngeHandler" call.</div><div><br></div><div><div>libobjc.A.dylib`objc_msgSend:</div><div>    0x2469fa80 <+0>:  cbz    r0, 0x2469fabe            ; <+62></div><div>    0x2469fa82 <+2>:  ldr.w  r9, [r0]</div><div>->  0x2469fa86 <+6>:  ldrh.w r12, [r9, #0xc]    ; EXC_BAD_ACCESS</div><div>    0x2469fa8a <+10>: ldr.w  r9, [r9, #0x8]</div><div>    0x2469fa8e <+14>: and.w  r12, r12, r1</div><div>    0x2469fa92 <+18>: add.w  r9, r9, r12, lsl #3</div><div>    0x2469fa96 <+22>: ldr.w  r12, [r9]</div><div>    0x2469fa9a <+26>: teq.w  r12, r1</div><div>    0x2469fa9e <+30>: bne    0x2469faa6                ; <+38></div><div>    0x2469faa0 <+32>: ldr.w  r12, [r9, #0x4]</div><div>    0x2469faa4 <+36>: bx     r12</div><div>    0x2469faa6 <+38>: cmp.w  r12, #0x1</div><div>    0x2469faaa <+42>: blo    0x2469fab8                ; <+56></div><div>    0x2469faac <+44>: it     eq</div><div>    0x2469faae <+46>: ldreq.w r9, [r9, #0x4]</div><div>    0x2469fab2 <+50>: ldr    r12, [r9, #8]!</div><div>    0x2469fab6 <+54>: b      0x2469fa9a                ; <+26></div><div>    0x2469fab8 <+56>: ldr.w  r9, [r0]</div><div>    0x2469fabc <+60>: b      0x2469fd00                ; _objc_msgSend_uncached</div><div>    0x2469fabe <+62>: mov.w  r1, #0x0</div><div>    0x2469fac2 <+66>: mov.w  r2, #0x0</div><div>    0x2469fac6 <+70>: mov.w  r3, #0x0</div><div>    0x2469faca <+74>: bx     lr</div><div>    0x2469facc <+76>: nop    </div><div>    0x2469face <+78>: nop    </div><div>    0x2469fad0 <+80>: nop    </div><div>    0x2469fad2 <+82>: nop    </div><div>    0x2469fad4 <+84>: nop    </div><div>    0x2469fad6 <+86>: nop    </div><div>    0x2469fad8 <+88>: nop    </div><div>    0x2469fada <+90>: nop    </div><div>    0x2469fadc <+92>: nop    </div><div>    0x2469fade <+94>: nop    </div></div><div><br></div><div>I wonder if it's related to aarch64, is block parameter passed incorrectly?.  </div><div>I'm also using fpc-trunk some 2015-Nov revision. </div><div>Should I just update to the latest fpc revision?<br></div><div><br></div><div>thanks,</div><div>Dmitry</div></div>