doom2d.org

Главная база плоских морпехов
It is currently 14 Jul 2024, 20:45

All times are UTC + 3 hours




Post new topic Reply to topic  [ 13 posts ] 
Author Message
PostPosted: 28 Sep 2023, 21:10 
Offline
Шерлок Холмс
User avatar

Joined: 19 Jun 2019, 23:28
Posts: 416
Location: Equestrian Wasteland.
На Android-устройствах с архитектурой процессора ARMv8 происходит вылет на картах с платформами при выполнении следующих действий:
1. Горизонтальные: вылетает моментально(?);
2. Прыгнуть на платформу/платформе, движущейся вертикально вверх.
Устройства с архитектурой процессора ARMv7 вылету не подвержены.

Проблему репортил ar888 от 22-го ноября 2022 г. (https://t.me/doom2d/463749):

<ar888> Какая-то фигня стало происходить с картами с платформами на Андроиде. Если автоматически они ездят по карте, то игра вылетает после запуска через секунду. Если запуск по активации триггера, то если прыгнуть на эту платформу.
<ar888> В логах ничего не пишется
<ar888> В ПК версии такого не замечал

<ar888> Изучил платформу на Fun_area. Она двигается вверх-вниз по нажатию. Просто подняться и опуститься выходит. Прыгнуть на платформу, когда она едет уже вниз тоже выходит. А когда я прыгаю на платформу, движущуюся вверх, игра вылетает.
<ar888> В общем, в логе всё нормально. Но игра всё равно вылетает
<ar888> На Торменте 2 платформы постоянно двигаются, но вылет только, если запрыгнуть на идущую вверх
<ar888> В общем, платформы движущиеся горизонталь, моментально вешают игру. Вертикальные в определённых случаях
<ar888> А ещё у меня так вышло сделать, хотя там стена:

Image


Лог-файлы игры не содержат стектрейсов при вылете.

_________________
aka TerminalHash.


Top
 Profile  
 
PostPosted: 16 Mar 2024, 06:40 
Offline
Принципиально неуничтожаем
User avatar

Joined: 18 Oct 2009, 04:01
Posts: 6689
Location: Владивосток
https://wiki.freepascal.org/ARM_compiler_options

Надо бы попробовать собрать с softfloat (-Cf soft) и проверить на arm8. Терминал - ты знаешь, на кого я рассчитываю.

_________________
Чёрный Думер, Чёрный Думер
С монстрами сражается.
Чёрный Думер, Чёрный Думер
Рокетланчер плавится.


Top
 Profile  
 
PostPosted: 16 Mar 2024, 16:10 
Offline
Приколист
User avatar

Joined: 04 Feb 2010, 14:42
Posts: 905
Location: Equestria
Зачем? ARMv8 гарантирует наличие vfpv3+


Top
 Profile  
 
PostPosted: 16 Mar 2024, 16:52 
Offline
Приколист
User avatar

Joined: 04 Feb 2010, 14:42
Posts: 905
Location: Equestria
Code:
03-16 16:43:01.491  8746  8746 F DEBUG   : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
03-16 16:43:01.491  8746  8746 F DEBUG   : Build fingerprint: 'Redmi/sunny_global/sunny:12/SKQ1.210908.001/V14.0.8.0.SKGMIXM:user/release-keys'
03-16 16:43:01.491  8746  8746 F DEBUG   : Revision: '0'
03-16 16:43:01.491  8746  8746 F DEBUG   : ABI: 'arm64'
03-16 16:43:01.491  8746  8746 F DEBUG   : Timestamp: 2024-03-16 16:43:00.535649467+0300
03-16 16:43:01.491  8746  8746 F DEBUG   : Process uptime: 0s
03-16 16:43:01.491  8746  8746 F DEBUG   : Cmdline: org.d2df.app
03-16 16:43:01.491  8746  8746 F DEBUG   : pid: 8455, tid: 8585, name: SDLThread  >>> org.d2df.app <<<
03-16 16:43:01.491  8746  8746 F DEBUG   : uid: 10265
03-16 16:43:01.491  8746  8746 F DEBUG   : signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0
03-16 16:43:01.491  8746  8746 F DEBUG   : Cause: null pointer dereference
03-16 16:43:01.491  8746  8746 F DEBUG   :     x0  0000000000000000  x1  00000000000001bc  x2  0000000000000000  x3  00000000000001cb
03-16 16:43:01.491  8746  8746 F DEBUG   :     x4  0000000000000000  x5  00000000fffffffe  x6  00000000000006af  x7  0000000000000186
03-16 16:43:01.491  8746  8746 F DEBUG   :     x8  0000000000000022  x9  0000000000000034  x10 0000007592802cf0  x11 0000000000000000
03-16 16:43:01.491  8746  8746 F DEBUG   :     x12 0000000000000000  x13 0000000000000000  x14 00000000000006a0  x15 0000000000000002
03-16 16:43:01.491  8746  8746 F DEBUG   :     x16 00000000000001b9  x17 0000000000000000  x18 0000007517e539f8  x19 0000000000000003
03-16 16:43:01.491  8746  8746 F DEBUG   :     x20 0000000000000000  x21 00000000000006d0  x22 00000000fffffffe  x23 0000000000000000
03-16 16:43:01.491  8746  8746 F DEBUG   :     x24 00000000000006af  x25 0000000000000186  x26 0000007592802dbc  x27 0000007592802dc0
03-16 16:43:01.491  8746  8746 F DEBUG   :     x28 0000000000000034  x29 0000007592802ca0
03-16 16:43:01.491  8746  8746 F DEBUG   :     lr  00000075901ba578  sp  0000007592802c70  pc  000000759008bba8  pst 0000000020000000
03-16 16:43:01.491  8746  8746 F DEBUG   : backtrace:
03-16 16:43:01.491  8746  8746 F DEBUG   :       #00 pc 000000000007eba8  /data/app/~~8stQXM5_RSQMCIHunerYfA==/org.d2df.app-9vWp-lNrlh1acQ6W0o2wXg==/lib/arm64/libDoom2DF.so (GEOM_$$_SWEEPAABB$crc61F541E7+832) (BuildId: 38bc327d002d0d6a1f5>

Карта viewtopic.php?f=48&t=2943&p=43522
Надо копать где-то в src/shared/geom.pas:173
Полного бэктрейса не даёт

Вызовов этой функции не много. Возможно из src/game/g_panel.pas:613 tryMPlatMove()


Top
 Profile  
 
PostPosted: 16 Mar 2024, 17:57 
Offline
Шерлок Холмс
User avatar

Joined: 19 Jun 2019, 23:28
Posts: 416
Location: Equestrian Wasteland.
Чёрный Думер wrote:
Надо бы попробовать собрать с softfloat (-Cf soft) и проверить на arm8. Терминал - ты знаешь, на кого я рассчитываю.

Если Советский Лошад готов кидаться апкахами - смогу тестить, а так у меня никакой среды не подготовлено (да и не будет вощем-тащемта) для сборки ведроверсий.

_________________
aka TerminalHash.


Top
 Profile  
 
PostPosted: 16 Mar 2024, 20:25 
Offline
Принципиально неуничтожаем
User avatar

Joined: 18 Oct 2009, 04:01
Posts: 6689
Location: Владивосток
DeaDDooMER» Зачем? ARMv8 гарантирует наличие vfpv3+
Так в том и была мысль, что для обычной аппаратной арифметики FPC может как-нибудь криво придумывать код.

DeaDDooMER» Полного бэктрейса не даёт
У нас в a_modes.inc по умолчанию стоит {$STACKFRAMES OFF}. По идее это может влиять, но я не удостоверялся.

_________________
Чёрный Думер, Чёрный Думер
С монстрами сражается.
Чёрный Думер, Чёрный Думер
Рокетланчер плавится.


Top
 Profile  
 
PostPosted: 17 Mar 2024, 02:48 
Offline
Приколист
User avatar

Joined: 04 Feb 2010, 14:42
Posts: 905
Location: Equestria
Исправлено. https://repo.or.cz/d2df-sdl.git/commit/f4c046a32ac8609cc016307679b22bf2fcca970b


Top
 Profile  
 
PostPosted: 17 Mar 2024, 07:38 
Offline
Принципиально неуничтожаем
User avatar

Joined: 18 Oct 2009, 04:01
Posts: 6689
Location: Владивосток
DeaDDooMER» Исправлено.
Очень хорошо. Ты не разобрался с причиной в итоге? Я вижу только, что там параметр в sweepAABB() стал передаваться как out, а не по указателю.
Не хотелось бы, чтобы это как-то ещё потом ненароком вылезло.

_________________
Чёрный Думер, Чёрный Думер
С монстрами сражается.
Чёрный Думер, Чёрный Думер
Рокетланчер плавится.


Top
 Profile  
 
PostPosted: 17 Mar 2024, 11:27 
Offline
Приколист
User avatar

Joined: 04 Feb 2010, 14:42
Posts: 905
Location: Equestria
Не знаю. Но явно что-то не так было с указателями. Было ведь разыменование nil.


Top
 Profile  
 
PostPosted: 17 Mar 2024, 18:15 
Offline
Принципиально неуничтожаем
User avatar

Joined: 18 Oct 2009, 04:01
Posts: 6689
Location: Владивосток
DeaDDooMER» Не знаю. Но явно что-то не так было с указателями. Было ведь разыменование nil.
По идее, nil в аргументах там мог появиться только от их значений по умолчанию. Вот сигнатура до твоего коммита:
Code:
function sweepAABB (mex0, mey0, mew, meh: Integer; medx, medy: Integer; itx0, ity0, itw, ith: Integer;
                    u0: PSingle=nil; hitedge: PSweepEdge=nil; u1: PSingle=nil;
                    hitx: PInteger=nil; hity: PInteger=nil): Boolean;

У меня есть одно подозрение. После параметра u0 там идёт указатель hitedge, который никогда не передаётся аргументом, то есть является всегда равным nil. В таком случае ему в начале функции присваивается адрес запасной переменной htt, чтобы не городить лишние if'ы непосредственно во вложенной функции axisOverlap() - из-за этого конвейер сбрасывается. Возможно, проблема в том, что переменная htt каким-то образом оказывается не выровнена, а в ARM с этим строго.

Если можешь - проверь, пожалуйста, так ли это. Достаточно, по идее, оба присваивания hitedge^ в axisOverlap() тупо заменить на Unaligned(hitedge)^. Или какой-нибудь {$PACKENUM 0} рядом воткнуть, я не знаю.

Другое предположение состоит в том, что компилятор при оптимизации может выкидывать переменную htt как assigned but never used. Либо же проблема действительно с выравниванием, но не у hitedge, а у @u0 при вызове этой функции. Ты заменил его на out - вот и работает теперь. Тоже можно проверить, заменив u0^ на Unaligned(u0)^. Просто хочется понять причину этого косяка, чтобы в дальнейшем подобного не допускать.

_________________
Чёрный Думер, Чёрный Думер
С монстрами сражается.
Чёрный Думер, Чёрный Думер
Рокетланчер плавится.


Top
 Profile  
 
PostPosted: 17 Mar 2024, 20:21 
Offline
Приколист
User avatar

Joined: 04 Feb 2010, 14:42
Posts: 905
Location: Equestria
Там выше прямо написано fault addr 0x0.
Так што компилятор где-то посчитал что какая-то переменная никогда не равна nil и выкинул if'ы. (предположение)
Или насрало в память. Там есть вложенная инлайн функция, которую могло неправильно заинлайнить. Или вообще что угодно.
Мы имеем дело с версией компилятора которая работает очень плохо.
Вертать взад и перепроверять мне лень.


Top
 Profile  
 
PostPosted: 18 Mar 2024, 18:27 
Offline
Site Admin
User avatar

Joined: 17 Oct 2009, 23:43
Posts: 7540
Location: \\HULK
DeaDDooMER wrote:

Вау. Просто вау. Один из самых задолбавших багов.

_________________
И неважно, что нет морей на Марсе, каждый морпех носит море в сердце.


Top
 Profile  
 
PostPosted: 24 Mar 2024, 13:29 
Offline
Приколист
User avatar

Joined: 04 Feb 2010, 14:42
Posts: 905
Location: Equestria
Фикс фикса. Из-за того что часть кода переписал, наделал ошибок которые сходу не заметил на медленно двигающихся платформах.
https://repo.or.cz/d2df-sdl.git/commit/e5625ba7e686e015d8f12febc883677533d782cb

Чёрный Думер wrote:
У нас в a_modes.inc по умолчанию стоит {$STACKFRAMES OFF}. По идее это может влиять, но я не удостоверялся.
Проверил - на ведройде не помогло.


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 13 posts ] 

All times are UTC + 3 hours


Who is online

Users browsing this forum: No registered users and 0 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
doom2d.org, since 2007