This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] hppa: Fix syscall cancellation


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


Attachment: sysdeps-cancel.d.txt
Description: Text document


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]