[fpc-devel] c-blocks (darwin aarch64)

Dmitry Boyarintsev skalogryz.lists at gmail.com
Fri Apr 15 05:10:09 CEST 2016


Hello,

Does anyone know if cblocks are working for darwin-aarch64?

I'm trying to use GCController objects. The notification is based of blocks.

The code looks like this:
GCExtendedGamepad.inc
----
{$modeswitch cblocks}

type
  GCExtendedGamepadValueChangedHandler = reference to procedure (gamepad:
GCGamepad;
    element: GCControllerElement); cdecl;

type
  GCExtendedGamepad = objcclass external (NSObject)
  public
    ...
    procedure setValueChangedHandler(newValue:
GCExtendedGamepadValueChangedHandler); message 'setValueChangedHandler:';
    ...
  end;

---
maincode.pas
---
{$modeswitch cblocks}
...

procedure extendedGamePadChange(gamepad: GCGamepad; element:
GCControllerElement);
// calling convention cdecl is not specified
begin
  writeln('something changed');
end;

...
  // gc is GCController -  it's a valid object
  // gc.extendedGamepad  - exists and is avalid object
  gc.extendedGamepad.setValueChangedHandler(@extendedGamePadChange);
----

The problem is that code seems to be failing on "setValueCahngeHandler"
call.

libobjc.A.dylib`objc_msgSend:
    0x2469fa80 <+0>:  cbz    r0, 0x2469fabe            ; <+62>
    0x2469fa82 <+2>:  ldr.w  r9, [r0]
->  0x2469fa86 <+6>:  ldrh.w r12, [r9, #0xc]    ; EXC_BAD_ACCESS
    0x2469fa8a <+10>: ldr.w  r9, [r9, #0x8]
    0x2469fa8e <+14>: and.w  r12, r12, r1
    0x2469fa92 <+18>: add.w  r9, r9, r12, lsl #3
    0x2469fa96 <+22>: ldr.w  r12, [r9]
    0x2469fa9a <+26>: teq.w  r12, r1
    0x2469fa9e <+30>: bne    0x2469faa6                ; <+38>
    0x2469faa0 <+32>: ldr.w  r12, [r9, #0x4]
    0x2469faa4 <+36>: bx     r12
    0x2469faa6 <+38>: cmp.w  r12, #0x1
    0x2469faaa <+42>: blo    0x2469fab8                ; <+56>
    0x2469faac <+44>: it     eq
    0x2469faae <+46>: ldreq.w r9, [r9, #0x4]
    0x2469fab2 <+50>: ldr    r12, [r9, #8]!
    0x2469fab6 <+54>: b      0x2469fa9a                ; <+26>
    0x2469fab8 <+56>: ldr.w  r9, [r0]
    0x2469fabc <+60>: b      0x2469fd00                ;
_objc_msgSend_uncached
    0x2469fabe <+62>: mov.w  r1, #0x0
    0x2469fac2 <+66>: mov.w  r2, #0x0
    0x2469fac6 <+70>: mov.w  r3, #0x0
    0x2469faca <+74>: bx     lr
    0x2469facc <+76>: nop
    0x2469face <+78>: nop
    0x2469fad0 <+80>: nop
    0x2469fad2 <+82>: nop
    0x2469fad4 <+84>: nop
    0x2469fad6 <+86>: nop
    0x2469fad8 <+88>: nop
    0x2469fada <+90>: nop
    0x2469fadc <+92>: nop
    0x2469fade <+94>: nop

I wonder if it's related to aarch64, is block parameter passed
incorrectly?.
I'm also using fpc-trunk some 2015-Nov revision.
Should I just update to the latest fpc revision?

thanks,
Dmitry
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-devel/attachments/20160414/6db05878/attachment.html>


More information about the fpc-devel mailing list