The libclang_rt.tsan-s390x.so otherwise requires an executable stack.
I don't think so. First of all, this is on another architecture; and then I tried running this test on both x86_64 and s390x with your change, and it succeeded in both cases for me.
Looking at the test, I don't see any good reason for it to exit without producing any output.
The only thing is that there is no error checking for pthread_create(), pthread_join(), open(), write() and close() - maybe the test hit some of the ulimits and one of these failed?