glibc/sysdeps/x86/bits
H.J. Lu e27f41ba2b Add <bits/indirect-return.h>
Add <bits/indirect-return.h> and include it in <ucontext.h>.
__INDIRECT_RETURN defined in <bits/indirect-return.h> indicates if
swapcontext requires special compiler treatment.  The default
__INDIRECT_RETURN is empty.

On x86, when shadow stack is enabled, __INDIRECT_RETURN is defined
with indirect_return attribute, which has been added to GCC 9, to
indicate that swapcontext returns via indirect branch.  Otherwise
__INDIRECT_RETURN is defined with returns_twice attribute.

When shadow stack is enabled, remove always_inline attribute from
prepare_test_buffer in string/tst-xbzero-opt.c to avoid:

tst-xbzero-opt.c: In function ‘prepare_test_buffer’:
tst-xbzero-opt.c:105:1: error: function ‘prepare_test_buffer’ can never be inlined because it uses setjmp
 prepare_test_buffer (unsigned char *buf)

when indirect_return attribute isn't available.

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

	* bits/indirect-return.h: New file.
	* misc/sys/cdefs.h (__glibc_has_attribute): New.
	* sysdeps/x86/bits/indirect-return.h: Likewise.
	* stdlib/Makefile (headers): Add bits/indirect-return.h.
	* stdlib/ucontext.h: Include <bits/indirect-return.h>.
	(swapcontext): Add __INDIRECT_RETURN.
	* string/tst-xbzero-opt.c (ALWAYS_INLINE): New.
	(prepare_test_buffer): Use it.
2018-07-24 07:55:47 -07:00
..
endian.h Use the same bits/endian.h for i386/x86_64 2012-05-30 14:50:32 -07:00
floatn.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
flt-eval-method.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
fp-logb.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
indirect-return.h Add <bits/indirect-return.h> 2018-07-24 07:55:47 -07:00
link.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
select.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
semaphore.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
setjmp.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
wordsize.h Define wordsize.h macros everywhere 2016-11-04 09:37:44 -07:00
xtitypes.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00