[PATCH] hppa: Fix syscall cancellation
John David Anglin
dave.anglin@bell.net
Mon Sep 12 00:17:00 GMT 2016
The attached patch fixes syscall cancellation on hppa and the 2.24 regressions mentioned by Aurelien below.
The problem was the forced unwind crashed in the syscall routine due to incorrect CFI offsets. The big problem
was the stack offset was recorded as 64 after the stack pointer was bumped by 64. The new CFA offset should have
been -64. Some register save offsets were also wrong and didn't reflect their correct position in the frame.
I removed the cfi directives that previously recorded PIC register saves and restores, and the epilogue directives
as these aren't needed by the unwinder.
A test build is here:
https://buildd.debian.org/status/fetch.php?pkg=glibc&arch=hppa&ver=2.24-2%2Bb1&stamp=1473631746
As can be seen, the cancellation tests now all pass.
Please install if okay.
Thanks,
Dave Anglin
PS: The nptl/tst-default-attr, rt/tst-timer4 and rt/tst-timer5 fails were addressed in a separate patch.
On 2016-08-05, at 6:23 PM, Aurelien Jarno wrote:
> Dear HPPA porters,
>
> We would like to push glibc 2.24 currently in experimental into sid in
> the next weeks. It is going to be the version we ship in Stretch.
>
> I have looked at the testsuite results from the latest uploads, there
> are 9 real regressions (ie not new tests) mostly related to NPTL:
>
> * FAIL: nptl/tst-default-attr
> original exit status 22
> stacksize test
> guardsize test
> sched test
> tst-default-attr.c:101: pthread_create returned 22 (errno = 22)
> tst-default-attr.c:371: do_sched_test returned 22 (errno = 22)
>
> The test hasn't changed recently.
>
>
> * FAIL: rt/tst-timer4
> original exit status 1
> clock_gettime returned timespec = { 1469505650, 981046459 }
> clock_getres returned timespec = { 0, 4000000 }
> Timed out: killed the child process
>
> * FAIL: rt/tst-timer5
> original exit status 1
> clock_gettime returned timespec = { 1665713, 650390357 }
> clock_getres returned timespec = { 0, 4000000 }
> Timed out: killed the child process
>
> The above two seems related.
>
>
> * FAIL: nptl/tst-cancel-self
> original exit status 1
> Didn't expect signal from child: got `Segmentation fault'
>
> * FAIL: nptl/tst-cancel-self-cancelstate
> original exit status 1
> Didn't expect signal from child: got `Segmentation fault'
>
> * FAIL: nptl/tst-cancel12
> original exit status 1
> Didn't expect signal from child: got `Segmentation fault'
>
> * FAIL: nptl/tst-cancel14
> original exit status 1
> Didn't expect signal from child: got `Segmentation fault'
>
> * FAIL: nptl/tst-cancelx12
> original exit status 1
> Didn't expect signal from child: got `Segmentation fault'
>
> * FAIL: nptl/tst-cancelx14
> original exit status 1
> Didn't expect signal from child: got `Segmentation fault'
>
> The above 6 failures appeared when switching from GCC 5 to GCC 6 and
> looks like quite worrisome.
>
>
> Given that GCC 5 is going to be removed soon, we have to build the GNU
> libc with GCC 6. Could you please have a look at the issues?
>
> Thanks,
> Aurelien
>
> --
> Aurelien Jarno GPG: 4096R/1DDD8C9B
> aurelien@aurel32.net http://www.aurel32.net
>
>
--
John David Anglin dave.anglin@bell.net
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: sysdeps-cancel.d.txt
URL: <http://sourceware.org/pipermail/libc-alpha/attachments/20160912/eaa6ae66/attachment.txt>
More information about the Libc-alpha
mailing list