Hello,
I've noticed that several NPTL tst-cancelx* tests fail on ARM, because functions invoking cancellable syscalls are compiled without -fasynchronous-unwind-tables making it impossible for the libgcc DWARF unwinder to unwind stack past the syscall and call the cleanup routine. They work on x86_64, because x86_64 gcc has -fasynchronous-unwind-tables enabled by default, and on xtensa because it uses custom unwinding code. I haven't checked, but AFAIU it should fail on other architectures that use DWARF unwinder. Can anybody confirm that?
I guess that at least all functions that invoke cancellable syscalls need to be built with -fasynchronous-unwind-tables in their CFLAGS. I've tried that with couple of functions and it fixes corresponding tests. And that's what glibc does in nptl/Makefile. Does that sound right for uClibc?
On September 14, 2015 4:02:56 AM GMT+02:00, Max Filippov jcmvbkbc@gmail.com wrote:
Hello,
I've noticed that several NPTL tst-cancelx* tests fail on ARM, because functions invoking cancellable syscalls are compiled without -fasynchronous-unwind-tables making it impossible for the libgcc DWARF unwinder to unwind stack past the syscall and call the cleanup routine. They work on x86_64, because x86_64 gcc has -fasynchronous-unwind-tables enabled by default, and on xtensa because it uses custom unwinding code. I haven't checked, but AFAIU it should fail on other architectures that use DWARF unwinder. Can anybody confirm that?
I guess that at least all functions that invoke cancellable syscalls need to be built with -fasynchronous-unwind-tables in their CFLAGS. I've tried that with couple of functions and it fixes corresponding tests. And that's what glibc does in nptl/Makefile. Does that sound right for uClibc?
It does. TIA,