Илья Ермаков писал(а):
Это ошибка при сборке мусора. У Вас нарушена структура памяти.
Где-то "переиграно" с SYSTEM, возможно?
Это от прежних структур данных (до вызова запроса с BLOB)?
Я попробовал в LinKernel заменить ассемблерную вставку на закоментированный код на КП
Код:
   PROCEDURE Next (b: Block): Block;   (* next block in same cluster *)
      VAR size: INTEGER;
   BEGIN
      SYSTEM.GET(SYSTEM.VAL(INTEGER, b.tag) DIV 4 * 4, size);
      IF ODD(SYSTEM.VAL(INTEGER, b.tag) DIV 2) THEN INC(size, b.last - SYSTEM.ADR(b.last)) END;
      RETURN SYSTEM.VAL(Block, SYSTEM.VAL(INTEGER, b) + (size + 19) DIV 16 * 16)
   END Next;
(*
   PROCEDURE [code] Next (b: Block): Block   (* next block in same cluster *)
(*
   MOV   ECX,[EAX]   b.tag
   AND   CL,0FCH   b.tag DIV * 4
   MOV   ECX,[ECX]   size
   TESTB   [EAX],02H   ODD(b.tag DIV 2)
   JE   L1
   ADD   ECX,[EAX,4]   size + b.last
   SUB   ECX,EAX
   SUB   ECX,4   size + b.last - ADR(b.last)
   L1:
   ADD   ECX,19   size + 19
   AND   CL,0F0H   (size + 19) DIV 16 * 16
   ADD   EAX,ECX   b + size
*)
   08BH, 008H,
   080H, 0E1H, 0FCH,
   08BH, 009H,
   0F6H, 000H, 002H,
   074H, 008H,
   003H, 048H, 004H,
   029H, 0C1H,
   083H, 0E9H, 004H,
   083H, 0C1H, 013H,
   080H, 0E1H, 0F0H,
   001H, 0C8H;
*)
   
[/code]
Теперь на самый верх выходит Kernel.Next
[code]
****
* BlackBox
* illegal memory read [ad = 00000000]
- Kernel.Next  (pc=00002049, fp=BFAAF0E0)
- Kernel.CheckCandidates  (pc=000021E0, fp=BFAAF10C)
- Kernel.MarkLocals  (pc=000023BE, fp=BFAAF128)
- Kernel.FastCollect  (pc=0000286F, fp=BFAAF138)
- Kernel.NewBlock  (pc=00002A6C, fp=BFAAF15C)
- Kernel.NewArr  (pc=00000BFC, fp=BFAAF188)
- FibDriver.SetCacheSize  (pc=000004CC, fp=BFAAF1B0)
- FibDriver.InitCache  (pc=00000576, fp=BFAAF1C4)
- FibDriver.Driver.EndExec  (pc=00002A78, fp=BFAAF1E8)
- FibSqlDB.DoEndExec  (pc=00002419, fp=BFAAF210)
- FibSqlDB.StdTable.Exec  (pc=000029BA, fp=BFAAF2A8)
- MyjfsLinFiles.WriteNewFile  (pc=00000331, fp=BFAAF2F8)
****
Segmentation fault