Mirsad Todorovac wrote:
BUT THE GOOD NEWS is that there are no longer "Killed" error messages, so I think we've found the murderer: it was Linux's PAX kernel extension!
chpax has following options, so you will see why it could have affected nonlocal gotos:
-E emulate trampolines -e do not emulate trampolines -M restrict mprotect() -m do not restrict mprotect()
I wrote previously about nonlocal gotos. But now I think that the problem is with trampolines (problems with nonlocal gotos and trampolines are frequently related). Description of PAX extension makes clear that by default trampolines do not work if the extension is active, and the affected tests use trampolines. On other (non-Linux) platforms the compiler emits 'mprotect' calls to allows trampolines to work (on Linux trampolines are supposed to work even without 'mprotect' call). So, the best solution would be to modify gcc so that 'mprotect' gets called and to tell PAX to respect 'mprotect' calls.
This far we have located fault on PAX process killer, so I think the further work is the question whether to allow post-processing command to be executed in test_run script in a general manner, so chpax could be safely executed whenever $PC is.
Some time ago I modified test_run script to allow a runner program: instead of running test directly we would call runner program giving it the name of executable and the argument list. This was needed for testing cross-compilers (so that runner could launch apropriate emulator), in particular I used this to test djgpp and mingw ports (using dosemu and wine). I could probably dig out (or recreate) the patch, but I am not sure if such change is worth including in the standard version.