gnudatalanguage / gdl

GDL - GNU Data Language
GNU General Public License v2.0
278 stars 62 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 1 year 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)