OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 28 Март, 2024 23:27

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 14 ] 
Автор Сообщение
СообщениеДобавлено: Воскресенье, 24 Апрель, 2011 21:56 

Зарегистрирован: Пятница, 25 Сентябрь, 2009 13:10
Сообщения: 1177
Откуда: Мариуполь
При попытке компиляции некоторых модулей версией компилятора для линукса происходит сбой при попытке чтения памяти:

HostFiles
Код:
Compiling Files.cp ...
 
****
* BlackBox
* illegal memory read [ad = 09FFDE70]
- CDevCPV486.Check  (pc=000013FE, fp=BF92D14C)
- CDevCPV486.Check  (pc=0000141D, fp=BF92D178)
- CDevCPV486.stat  (pc=00005C82, fp=BF92D218)
- CDevCPV486.procs  (pc=00006B1C, fp=BF92D340)
- CDevCPV486.Module  (pc=00006F7B, fp=BF92D474)
****

При этом, тот же компилятор для виндоус компилирует успешно (в Wine), в той же директории. Что весьма странно.
Ввиду отсутствия в составе модуля StdDebug (ещё не перенесён), пока нет возможности увидеть состояние сбоя как в Блэкбоксе. С точки зрения отличия платформ - они в файлах LinDl, LinLibc, Kernel, HostFiles, основанных на файлах проекта OpenBUGS. Исходные коды на сайте проекта cp-dev @sf.net в хранилище SVN. А отличия от изначальной версии компилятора ББ касаются только внешнего интерфейса и они незначительны.

Что посоветуете?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 24 Апрель, 2011 22:37 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Вам в распечатке сбоя указывается адрес в коде (в квадратных скобах). В DevDebug есть некая процедурина, которая позволяет увидеть по такому адресу место в исходном тексте. Я использовал, только она для вызова с коммандера не годится, навернуть команду надо.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 30 Апрель, 2011 18:25 

Зарегистрирован: Пятница, 25 Сентябрь, 2009 13:10
Сообщения: 1177
Откуда: Мариуполь
Никак не соображу как локализовать ошибку. Сбивает с толку факт, что в Windows компиляция происходит успешно. Наверно, модуль Kernel был неполноценно перенесён на Линукс.

Вот такой код сбоит компиляцию в Линуксе (основан на модуле Files):
Код:
MODULE TestOop2;

   IMPORT Kernel;
   
   CONST copyleft* = "Copyleft";
 
   TYPE
      Name* = ARRAY 256 OF CHAR;
      Type* = ARRAY 16 OF CHAR;

      FileInfo* = POINTER TO RECORD
         next*: FileInfo;
         name*: Name;
         length*: INTEGER;
         type*: Type;
         modified*: RECORD year*, month*, day*, hour*, minute*, second*: INTEGER END;
         attr*: SET
      END;

      LocInfo* = POINTER TO RECORD
         next*: LocInfo;
         name*: Name;
         attr*: SET;
      END;

      Data* = POINTER TO ABSTRACT RECORD
         init: BOOLEAN;
         f1: INTEGER
      END;

      Locator* = POINTER TO ABSTRACT RECORD
      END;

      File* = POINTER TO ABSTRACT RECORD
         type-: Type;
         (*init: BOOLEAN;*)
      END;

      Rec = POINTER TO RECORD END;

   VAR
      (*d: Data;*)
      v, v2, v3, v4, v5, v6: ARRAY 1 OF INTEGER;

   PROCEDURE (s: Data) Init*, NEW;
   BEGIN
      ASSERT(s.f1 # 0, 20);
      s.init := TRUE;
      s.f1 := 100;
   END Init;

   PROCEDURE (l: Locator) This* (IN path: ARRAY OF CHAR): Locator, NEW, ABSTRACT;
 
   PROCEDURE (f: File) InitType* (type: Type), NEW;
   BEGIN
      f.type := type$
   END InitType;

   PROCEDURE (f: File) Length* (): INTEGER, NEW, ABSTRACT;
   (*PROCEDURE (f: File) Length* (): INTEGER, NEW; BEGIN RETURN 1 END Length;*)
   (*PROCEDURE (f: File) Length2* (): INTEGER, NEW, ABSTRACT;*)

END TestOop2.


Практически любое изменение в объявлении символов для экспорта или в теле процедур может привести к исчезновению сбоя. Есть ощущение, что есть зависимость от размера данных и количества экспортируемых символов от наличия сбоя.

Кроме того, мне удалось адаптировать модуль StdDebug для консольного режима и теперь я могу немнгого более подробно знать об ошибке. Но это пока не помогло в выявлении ошибки.
Код:
Trying to compile module TestOop2 ...
illegal memory read (ad = B7362DFAH)

 CDevCPV486.procs   [00006A81H]
   .ch   SHORTCHAR   "�"
   .end   INTEGER   163345872
   .i   INTEGER   -1220564312
   .j   INTEGER   0
   .n   CDevCPT.Node   IllegalAddress0000003CH
   .name   CDevCPT.Name   "�x56��d"   ...
"�x56��d", 0X, 0X, "����", 1X, "56��ۼ", 9X, 0X, 0X, 0X, 0X, "��?�", 1CX, "���", 0CX, "���", 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, "��?�", 1CX, "���,���F�7�", 0X, 0X, 0X, 0X, 10X, 90X, "�", 9X, 0X, 0X, 0X, 0FX, "��?�", 1CX, "���H���F�7��", 8FX, "�", 9X, 90X, 8FX, "�", 9X, 0X, 0X, 0X, 0FX, "��?�", 1CX, "���d���F�7�0", 8FX, "�", 9X, 10X, 8FX, "�", 9X, 0X, 0X, 0X, 0FX, "��?�", 1CX, "���", 80X, "���F�7��", 8EX, "�", 9X, 90X, 8EX, "�", 9X, 0X, 0X, 0X, 0FX, "��?�", 1CX, "���", 9CX, "���F�7�0", 8EX, "�", 9X, 10X, 8EX, "�", 9X, 0X, 0X, 0X, 0FX, "��?�", 1CX, "����F�7��", 8DX, "�", 9X, 90X, 8DX, "�", 9X, "���", 0FX, "��?�", 1CX, "�������F�7�0", 8DX, "�", 9X, 0X, 0X, 0X, 0X, "��7���?�", 1CX, "�������F�7"   
   .obj   CDevCPT.Object   NIL
   .proc   CDevCPT.Object   NIL
   .useFpu   BOOLEAN   Undefined238
 CDevCPV486.Module   [00006F7AH]
   .aAd   INTEGER   163352240
   .end   INTEGER   0
   .n   CDevCPT.Node   NIL
   .name   CDevCPT.Name   "$$"   ...
"$$", 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, "h�", 8BX, "6�0", 8EX, "�", 9X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, "�", 0X, 9X, 0X, 9CX, "�", 8BX, "6��", 8DX, "�", 9X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, "������", 8BX, "6�0", 8DX, "�", 9X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, "0v�", 9X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 80X, "O", 4X, "�", 8BX, "6��u�", 9X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, 0X, " ��� ���m", 8DX, "6�Pu�", 9X, 80X, "m�", 9X, 1X, 3X, 7FX, 0X   
   .obj   CDevCPT.Object   NIL
   .p   CDevCPT.Object   NIL
   .prog   CDevCPT.Node   [09BC9D10H]
   .rAd   INTEGER   -1221162053
   .typ   CDevCPT.Struct   NIL
   .useFpu   BOOLEAN   FALSE


Что интересно, что сбой происходит если подключать модуль Kernel. Если же его не подключать, то всё скомпилируется без сбоя. Да и, вообще, сбой происходит именно в модулях с низкоуровневыми операциями. Во всех сбоях ловушка указывает на модуль CDevCPV486. Причём, именно на рекурсивных процедурах. Переполнение стека?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 30 Апрель, 2011 19:53 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Может это и оффтоп, но у меня есть такая же проблема (illegal memory read) с использованием Kernel только в другой профиль, при компилировании программы в простом BB1.6rc6.

Чем моя программа провинилась? Может это поможет отловить ошибку.

При 10 000 работает, а при 14 000 нет! При создании массива любого размера (проверял до 50 000) руками без NEW() проблемы нет, прекрасно все работает.
Код:
MODULE OglLessonBall;

   TYPE
      Vector = ARRAY 3 OF REAL;
      Ball = RECORD
         pos: Vector;
         r: REAL;
         active: BOOLEAN;
      END;
   VAR
      system: POINTER TO ARRAY OF Ball;

   PROCEDURE Main;
   BEGIN
      NEW(system, 14000);
   END Main;
BEGIN
   Main;
END OglLessonBall.


проблема решена
добавлением NEW(starter) где stater: POINTER TO RECORD END;
http://forum.oberoncore.ru/viewtopic.php?f=2&t=2001&p=62906#p62906

Спасибо Евгению Темиргалееву за наводку


Вложения:
Снимок.png
Снимок.png [ 7.54 КБ | Просмотров: 25782 ]


Последний раз редактировалось Иван Денисов Суббота, 30 Апрель, 2011 23:13, всего редактировалось 2 раз(а).
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 30 Апрель, 2011 21:11 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
у меня всё работает


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 30 Апрель, 2011 21:39 

Зарегистрирован: Пятница, 25 Сентябрь, 2009 13:10
Сообщения: 1177
Откуда: Мариуполь
Давайте лучше обсудим проблему в Линуксе. :?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 30 Апрель, 2011 21:43 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
divan писал(а):
При 10 000 работает, а при 14 000 нет!
посмотрите viewtopic.php?p=37250#p37250


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 30 Апрель, 2011 21:50 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Роман, кстати, попробуйте отказаться от линковки своего компилятора, а спакуйте его DevPacker.

Там что-то с порядком инициализации при статической линковке хитрое...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 30 Апрель, 2011 23:19 

Зарегистрирован: Пятница, 25 Сентябрь, 2009 13:10
Сообщения: 1177
Откуда: Мариуполь
Илья Ермаков писал(а):
Роман, кстати, попробуйте отказаться от линковки своего компилятора, а спакуйте его DevPacker.

Там что-то с порядком инициализации при статической линковке хитрое...

Разве DevPacker - не чисто решение для компоновки в исполняемые PE? Кроме того, DevLinker пока не умеет собирать исполняемые ELF (разве только неизвестным мне образом).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 01 Май, 2011 07:52 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Роман М. писал(а):
Разве DevPacker - не чисто решение для компоновки в исполняемые PE?
Не пойму точно что Вы имеете ввиду...
DevPacker приписывает к exe виртуальную ФС, файлы из которой просвечиваются на самом нижнем уровне (после вторичного и первичного каталогов). Модули оттуда динамически грузятся, как если бы лежали рядом в ФС. Итого разница --- в количестве файлов.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 01 Май, 2011 08:53 

Зарегистрирован: Пятница, 25 Сентябрь, 2009 13:10
Сообщения: 1177
Откуда: Мариуполь
Евгений Темиргалеев писал(а):
Роман М. писал(а):
Разве DevPacker - не чисто решение для компоновки в исполняемые PE?
Не пойму точно что Вы имеете ввиду...
DevPacker приписывает к exe виртуальную ФС, файлы из которой просвечиваются на самом нижнем уровне (после вторичного и первичного каталогов). Модули оттуда динамически грузятся, как если бы лежали рядом в ФС. Итого разница --- в количестве файлов.

Я о том, что мне нужно платформо-независимое решение. А, насколько мне известно, формат ELF не предназначен для хранения ресурсов.

Более того, каким образом помог бы DevPacker в решении вышеописанного вопроса касательно Линукса?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 01 Май, 2011 13:15 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Он легко доделывается до паковки в отдельный файл и монтирования его. Если нужно. Если уж дико хочется уменьшить количество файлов.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 23 Сентябрь, 2012 19:44 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 02:12
Сообщения: 473
Откуда: KZ
Роман, проблема до сих пор не решена?

У меня похожая проблема. Даже заново портировал модуль Kernel (с 1.6-rc6)...

Код:
compiling "Views"
================================
TRAP:
--------------------------------
sig = $0000000B, baseStack = $CFBDB434
GS  = $8BD70063, FS  = $0000005B, ES  = $850A0033, DS  = $CFBD0033
EDI = $8069A2B1, ESI = $7CB965E1, EBP = $CFBD8F60, EBX = $CFBD900C
EDX = $5D64DA95, ECX = $0000033E, EAX = $0000192C, EIP = $085A0D99
CS = $0000002B, EFLAGS = $00010202, ESP = $CFBD8F54, SS = $00000033
ONSTACK = $00000000, MASK = $00000000, TRAPNO = $00000006, ERR = $00000004
================================

****
* BlackBox
* illegal memory read [ad = 0000192C]
- DevCPT.FPrintTProcs  (pc=00001BE1, fp=CFBD8F60)
- DevCPT.FPrintTProcs  (pc=00001BE8, fp=CFBD8F78)
- DevCPT.FPrintTProcs  (pc=00001D33, fp=CFBD8F90)
- DevCPT.FPrintTProcs  (pc=00001D33, fp=CFBD8FA8)
- DevCPT.FPrintTProcs  (pc=00001BE8, fp=CFBD8FC0)
- DevCPT.FPrintTProcs  (pc=00001BE8, fp=CFBD8FD8)
- DevCPT.FPrintStr  (pc=00001F4D, fp=CFBD900C)
- DevCPT.InStruct  (pc=0000376D, fp=CFBD9058)
- DevCPT.InObj  (pc=0000395B, fp=CFBD9084)
- DevCPT.Import  (pc=0000404A, fp=CFBD90B0)
- DevCPP.Module  (pc=00006089, fp=CFBD93E0)
- DevCompiler.Module  (pc=00000082, fp=CFBD93F4)
****

Код:
TRAP:
--------------------------------
sig = $0000000B, baseStack = $CFBDC308
GS  = $00000063, FS  = $0000005B, ES  = $00000033, DS  = $00000033
EDI = $CFBD9DEC, ESI = $800EFEA0, EBP = $CFBD9F60, EBX = $CFBDB004
EDX = $36F79FA5, ECX = $00000000, EAX = $7FFFFED0, EIP = $00000000
CS = $0000002B, EFLAGS = $00010202, ESP = $CFBD9F54, SS = $00000033
ONSTACK = $00000000, MASK = $00000000, TRAPNO = $00000006, ERR = $00000004
================================
 
****
* BlackBox
* illegal memory read [ad = 00000000]
- (pc=00000000, fp=CFBD9F60)
- DevCPM.NewObj  (pc=0000230A, fp=CFBDA17C)
- DevCPV486.Module  (pc=00006D36, fp=CFBDA2B4)
- DevCompiler.Module  (pc=000000DA, fp=CFBDA2C8)
- DevCompiler.Do  (pc=00000419, fp=CFBDA52C)
- DevCompiler.CompileList  (pc=00000EED, fp=CFBDA860)
- DevCompiler.CompileThis  (pc=000010CC, fp=CFBDA888)
- Kernel.Call  (pc=00002175, fp=CFBDA8B4)
- Meta.Item.ParamCallVal  (pc=00002B5F, fp=CFBDAD14)
- StdInterpreter.CallProc  (pc=00000475, fp=CFBDAD7C)
- StdInterpreter.Command  (pc=00000A61, fp=CFBDAE14)
- StdInterpreter.CallHook.Call  (pc=00000B0F, fp=CFBDB004)
***


Проявляется не при каждом запуске тестовой программы.

Даже такое бывает:
Код:
================================
TRAP:
--------------------------------
sig = $00000004, baseStack = $CFBCC448
GS  = $00000063, FS  = $0000005B, ES  = $00000033, DS  = $00000033
EDI = $CFBCA7A2, ESI = $8357DB1E, EBP = $CFBCA774, EBX = $CFBCB144
EDX = $28F9F2B8, ECX = $000000F2, EAX = $0C8A4729, EIP = $0C89A544
CS = $0000002B, EFLAGS = $00010293, ESP = $CFBCA4CC, SS = $00000033
ONSTACK = $00000000, MASK = $00000000, TRAPNO = $00000000, ERR = $00000000
================================

****
* BlackBox
* invalid with
- HostFiles.Directory.Old  (pc=00002919, fp=CFBCA774)
- ConsCompiler.Do  (pc=000002BA, fp=CFBCA998)
- ConsCompiler.Compile  (pc=0000038C, fp=CFBCA9B8)
- Kernel.Call  (pc=00002175, fp=CFBCA9F4)
- Meta.Item.ParamCallVal  (pc=00002B5F, fp=CFBCAE54)
- StdInterpreter.CallProc  (pc=00000475, fp=CFBCAEBC)
- StdInterpreter.Command  (pc=00000A61, fp=CFBCAF54)
- StdInterpreter.CallHook.Call  (pc=00000B0F, fp=CFBCB144)
- Dialog.Call  (pc=00003644, fp=CFBCB16C)
- ConsInterp.Call1  (pc=000000CA, fp=CFBCB19C)
- ConsInterp.Call0  (pc=0000023D, fp=CFBCB1B8)
- ConsInterp.Call  (pc=0000032F, fp=CFBCB1D0)
****


Пробовал увеличить размер стека с 4096 КиБ до 32000 КиБ (ulimit -s 32000) -- не помогает.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 23 Сентябрь, 2012 21:20 

Зарегистрирован: Пятница, 25 Сентябрь, 2009 13:10
Сообщения: 1177
Откуда: Мариуполь
Проблема компиляции была решена установкой вершины стека с помощью SetKernelBaseStack по совету Темиргалеева, если не ошибаюсь. В моем варианте компилятор собирался в динамическую библиотеку.
Вот когда соберусь выпустить следующую версию фронтенда с патчем для Линукса, проверю компилятор на самосборке из исходников. А то последний раз падал на сборке Kernel.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 14 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB