gnudatalanguage / gdl

GDL - GNU Data Language
GNU General Public License v2.0
277 stars 61 forks source link

test_save_restore segfaults on s390x #1655

Open opoplawski opened 1 year ago

opoplawski commented 1 year ago

This seems to be new with the latest weekly snapshot compared with 1.0.2 (or possibly some other dependency since it was last built in Fedora):

        Start 160: test_save_restore.pro
160: Test command: /builddir/build/BUILD/gdl-unstable-f29c1fa/build/src/gdl "-quiet" "-e" "if execute('test_save_restore') ne 1 then exit, status=1"
160: Working Directory: /builddir/build/BUILD/gdl-unstable-f29c1fa/build/testsuite
160: Environment variables: 
160:  LC_COLLATE=C
160:  GDL_PATH=/builddir/build/BUILD/gdl-unstable-f29c1fa/testsuite/:/builddir/build/BUILD/gdl-unstable-f29c1fa/src/pro/
160:  GDL_STARTUP=
160:  IDL_STARTUP=
160: Test timeout computed to be: 3600
160: % Compiled module: TEST_SAVE_RESTORE.
160: % Compiled module: GDL_IDL_FL.
160: % Compiled module: GIVE_LIST_NUMERIC.
160: % TEST_SAVE_NUMERIC: SAVE file <</tmp/GDL_save_test_numeric1.sav>>for numeric tests WRITTEN
160: % TEST_SAVE_NUMERIC: SAVE file <</tmp/GDL_save_test_numeric1_Z.sav>>for numeric tests WRITTEN
160: % RESTORE: Error Reading File: /tmp/GDL_save_test_numeric1.sav.
160/197 Test #160: test_save_restore.pro ..............***Exception: SegFault  0.22 sec

I'll see if I can get on a s390x machine later to try to get more information.

GillesDuvert commented 1 year ago

Thank @opoplawski , this is for a 32-bit machine, yes? In retrospect that may indicate that an #ifdef is lacking to avoid using 64 bit positioning as done in the last patch.

opoplawski commented 1 year ago

No, it's 64-bit, but it is big-endian.

GillesDuvert commented 1 year ago

Ah, well, indeed there is this 64 bit address composed from 2 32 bits integers, that's it.

GillesDuvert commented 1 year ago

@opoplawski please test current patch (PR #1666)

opoplawski commented 1 year ago

Thanks, but no luck:

        Start 160: test_save_restore.pro
160: Test command: /builddir/build/BUILD/gdl-unstable-f29c1fa/build/src/gdl "-quiet" "-e" "if execute('test_save_restore') ne 1 then exit, status=1"
160: Working Directory: /builddir/build/BUILD/gdl-unstable-f29c1fa/build/testsuite
160: Environment variables: 
160:  LC_COLLATE=C
160:  GDL_PATH=/builddir/build/BUILD/gdl-unstable-f29c1fa/testsuite/:/builddir/build/BUILD/gdl-unstable-f29c1fa/src/pro/
160:  GDL_STARTUP=
160:  IDL_STARTUP=
160: Test timeout computed to be: 3600
160: % Compiled module: TEST_SAVE_RESTORE.
160: % Compiled module: GDL_IDL_FL.
160: % Compiled module: GIVE_LIST_NUMERIC.
160: % TEST_SAVE_NUMERIC: SAVE file <</tmp/GDL_save_test_numeric1.sav>>for numeric tests WRITTEN
160: % TEST_SAVE_NUMERIC: SAVE file <</tmp/GDL_save_test_numeric1_Z.sav>>for numeric tests WRITTEN
160: % RESTORE: Error Reading File: /tmp/GDL_save_test_numeric1.sav.
160/197 Test #160: test_save_restore.pro ..............***Exception: SegFault  0.32 sec
GillesDuvert commented 1 year ago

hm, I'm not very good at 64 bit endianness.

GillesDuvert commented 1 year ago

retried with #1672

GillesDuvert commented 12 months ago

incidentally this permitted to question the code of saverestore.cpp and improve compatibility... with IDL, not nevessary bigEndian 64 bit machines.

Wonder if GDL pass tests on other big-endian machines? Other parts of code seem to endian-naive.

Wonder if you have also M1 linuxes in your test machines?(not a BE machine, but gives us a lot of trouble)