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]

Re: [PATCH] nptl: Add test for callee-saved register restore in pthread_exit


On 12/31/2017 11:24 AM, Florian Weimer wrote:
> GCC PR 83641 results in a miscompilation of libpthread, which
> causes pthread_exit not to restore callee-saved registers before
> running destructors for objects on the stack.  This test detects
> this situation:
> 
> info: unsigned int, direct pthread_exit call
> tst-thread-exit-clobber.cc:80: numeric comparison failure
>    left: 4148288912 (0xf741dd90); from: value
>   right: 1600833940 (0x5f6ac994); from: magic_values.v2
> info: double, direct pthread_exit call
> info: unsigned int, indirect pthread_exit call
> info: double, indirect pthread_exit call
> error: 1 test failures
> 
> 2017-12-31  Florian Weimer  <fweimer@redhat.com>
> 
> 	* nptl/tst-thread-exit-clobber.cc: New file.
> 	* nptl/Makefile (CFLAGS-tst-thread-exit-clobber.o): Compile in
> 	C++11 mode.
> 	(LDLIBS-tst-thread-exit-clobber): Link with libstdc++.
> 	(tests): Add tst-thread-exit-clobber.
> 	[!CXX] (tests-unsupported): Add tst-thread-exit-clobber.
> 

OK, with comment expansion in the test case.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>

> +/* These constants are magic values which are used to detect whether
> +   registers have been clobbered.  The idea is that these values are
> +   hidden behind a compiler barrier and only present in .rodata
> +   initially, so that it is less likely that they are in a register by
> +   accident.  */
This comment needs to be expanded to explain *how* the test detects the
registers have been clobbered.

-- 
Cheers,
Carlos.


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