soporte que borrar bloqueo apple activacion ios c delphi pascal delphi-xe6

ios - borrar - que es bloqueo de activacion iphone



Código de enlace Delphi XE6 C en iOS (1)

Creé una aplicación en Android usando Delphi XE6 que requiere código C. Sin embargo, en iOS no puedo hacer que funcione. Sospecho que el problema está relacionado con el estado del brazo / pulgar, pero no estoy seguro. No hay ningún problema en ninguno de los sistemas para llamar al código C de Pascal. Pero si el código C vuelve a llamar a un procedimiento Pascal, iOS genera una "bad system call (12)"

Aquí está el código pascal:

function testarm(a,b:integer):integer; cdecl; external "testC.o"; Procedure testC; Begin testarm(1,2); end; function BackToPascal(a,b:integer): integer; cdecl; Begin result := a+b; end; ...... exports BackToPascal;

Y aquí está el código C:

extern int BackToPascal(int a,int b); extern int testarm(int a,int b) { int i; i = BackToPascal(a,b); return i+1; }

En Android, así es como estoy compilando (está funcionando):

..."arm-linux-androideabi-gcc.exe" -c test.c -o test.o -O3 -mfloat-abi=softfp -mfpu=neon -marm -march=armv7-a -mtune=cortex-a8

En ios:

xcrun -sdk iphoneos clang -c -arch armv7 test.c -O3 -mfpu=neon -mtune=cortex-a8 -marm -march=armv7-a -mfloat-abi=softfp

Sospecho que mi configuración de xcode es incorrecta, pero no puedo entender por qué.

Cuando depuro, el error se produce al llamar a testC en testarm cuando se llama a BackToPascal (en "bl 0x8b8390 Xgobj.BackToPascal (int, int)"). En Android funciona perfecto, sin embargo, el bl no llama directamente a BackToPascal , pero el siguiente código:

75A82D94 12C68FE2 add r12, pc, #18874368 ; 0x1200000 75A82D98 73CA8CE2 add r12, r12, #471040 ; 0x73000 75A82D9C 40F2BCE5 ldr pc, [r12, #576]! ; 0x240

Que entran en BackToPascal


El código parece correcto y su manejo de convención de llamadas es, a mis ojos, perfectamente correcto.

Creo que es posible que hayas topado con un error posible / rumorado en el sonido ARM de Apple, donde llamar a una función estática (que puede suceder detrás de las escenas, por ejemplo, para la conversión de tipo) de una función estática puede causar daños en la pila. No lo está haciendo directamente, pero las funciones externas pueden implementarse a través de un stub que llama a una función estática anónima que contiene la implementación.

Puede intentar que su función externa sea un contenedor que solo llame a una función de implementación no estática.