gcc/gcc/doc
H.J. Lu c03a554103 x86: Add -mfunction-return=
Add -mfunction-return= option to convert function return to call and
return thunks.  The default is 'keep', which keeps function return
unmodified.  'thunk' converts function return to call and return thunk.
'thunk-inline' converts function return to inlined call and return thunk.
'thunk-extern' converts function return to external call and return
thunk provided in a separate object file.  You can control this behavior
for a specific function by using the function attribute function_return.

Function return thunk is the same as memory thunk for -mindirect-branch=
where the return address is at the top of the stack:

__x86_return_thunk:
	call L2
L1:
	pause
	lfence
	jmp L1
L2:
	lea 8(%rsp), %rsp|lea 4(%esp), %esp
	ret

and function return becomes

	jmp __x86_return_thunk

-mindirect-branch= tests are updated with -mfunction-return=keep to
avoid false test failures when -mfunction-return=thunk is added to
RUNTESTFLAGS for "make check".

gcc/

	Backport from mainline
	2018-01-14  H.J. Lu  <hongjiu.lu@intel.com>

	* config/i386/i386-protos.h (ix86_output_function_return): New.
	* config/i386/i386.c (ix86_set_indirect_branch_type): Also
	set function_return_type.
	(indirect_thunk_name): Add ret_p to indicate thunk for function
	return.
	(output_indirect_thunk_function): Pass false to
	indirect_thunk_name.
	(ix86_output_indirect_branch_via_reg): Likewise.
	(ix86_output_indirect_branch_via_push): Likewise.
	(output_indirect_thunk_function): Create alias for function
	return thunk if regno < 0.
	(ix86_output_function_return): New function.
	(ix86_handle_fndecl_attribute): Handle function_return.
	(ix86_attribute_table): Add function_return.
	* config/i386/i386.h (machine_function): Add
	function_return_type.
	* config/i386/i386.md (simple_return_internal): Use
	ix86_output_function_return.
	(simple_return_internal_long): Likewise.
	* config/i386/i386.opt (mfunction-return=): New option.
	(indirect_branch): Mention -mfunction-return=.
	* doc/extend.texi: Document function_return function attribute.
	* doc/invoke.texi: Document -mfunction-return= option.

gcc/testsuite/

	Backport from mainline
	2018-01-14  H.J. Lu  <hongjiu.lu@intel.com>

	* gcc.target/i386/indirect-thunk-1.c (dg-options): Add
	-mfunction-return=keep.
	* gcc.target/i386/indirect-thunk-2.c: Likewise.
	* gcc.target/i386/indirect-thunk-3.c: Likewise.
	* gcc.target/i386/indirect-thunk-4.c: Likewise.
	* gcc.target/i386/indirect-thunk-5.c: Likewise.
	* gcc.target/i386/indirect-thunk-6.c: Likewise.
	* gcc.target/i386/indirect-thunk-7.c: Likewise.
	* gcc.target/i386/indirect-thunk-attr-1.c: Likewise.
	* gcc.target/i386/indirect-thunk-attr-2.c: Likewise.
	* gcc.target/i386/indirect-thunk-attr-3.c: Likewise.
	* gcc.target/i386/indirect-thunk-attr-4.c: Likewise.
	* gcc.target/i386/indirect-thunk-attr-5.c: Likewise.
	* gcc.target/i386/indirect-thunk-attr-6.c: Likewise.
	* gcc.target/i386/indirect-thunk-attr-7.c: Likewise.
	* gcc.target/i386/indirect-thunk-attr-8.c: Likewise.
	* gcc.target/i386/indirect-thunk-bnd-1.c: Likewise.
	* gcc.target/i386/indirect-thunk-bnd-2.c: Likewise.
	* gcc.target/i386/indirect-thunk-bnd-3.c: Likewise.
	* gcc.target/i386/indirect-thunk-bnd-4.c: Likewise.
	* gcc.target/i386/indirect-thunk-extern-1.c: Likewise.
	* gcc.target/i386/indirect-thunk-extern-2.c: Likewise.
	* gcc.target/i386/indirect-thunk-extern-3.c: Likewise.
	* gcc.target/i386/indirect-thunk-extern-4.c: Likewise.
	* gcc.target/i386/indirect-thunk-extern-5.c: Likewise.
	* gcc.target/i386/indirect-thunk-extern-6.c: Likewise.
	* gcc.target/i386/indirect-thunk-extern-7.c: Likewise.
	* gcc.target/i386/indirect-thunk-inline-1.c: Likewise.
	* gcc.target/i386/indirect-thunk-inline-2.c: Likewise.
	* gcc.target/i386/indirect-thunk-inline-3.c: Likewise.
	* gcc.target/i386/indirect-thunk-inline-4.c: Likewise.
	* gcc.target/i386/indirect-thunk-inline-5.c: Likewise.
	* gcc.target/i386/indirect-thunk-inline-6.c: Likewise.
	* gcc.target/i386/indirect-thunk-inline-7.c: Likewise.
	* gcc.target/i386/ret-thunk-1.c: New test.
	* gcc.target/i386/ret-thunk-10.c: Likewise.
	* gcc.target/i386/ret-thunk-11.c: Likewise.
	* gcc.target/i386/ret-thunk-12.c: Likewise.
	* gcc.target/i386/ret-thunk-13.c: Likewise.
	* gcc.target/i386/ret-thunk-14.c: Likewise.
	* gcc.target/i386/ret-thunk-15.c: Likewise.
	* gcc.target/i386/ret-thunk-16.c: Likewise.
	* gcc.target/i386/ret-thunk-2.c: Likewise.
	* gcc.target/i386/ret-thunk-3.c: Likewise.
	* gcc.target/i386/ret-thunk-4.c: Likewise.
	* gcc.target/i386/ret-thunk-5.c: Likewise.
	* gcc.target/i386/ret-thunk-6.c: Likewise.
	* gcc.target/i386/ret-thunk-7.c: Likewise.
	* gcc.target/i386/ret-thunk-8.c: Likewise.
	* gcc.target/i386/ret-thunk-9.c: Likewise.

i386: Don't use ASM_OUTPUT_DEF for TARGET_MACHO

ASM_OUTPUT_DEF isn't defined for TARGET_MACHO.  Use ASM_OUTPUT_LABEL to
generate the __x86_return_thunk label, instead of the set directive.
Update testcase to remove the __x86_return_thunk label check.  Since
-fno-pic is ignored on Darwin, update testcases to sscan or "push"
only on Linux.

gcc/

	Backport from mainline
	2018-01-15  H.J. Lu  <hongjiu.lu@intel.com>

	PR target/83839
	* config/i386/i386.c (output_indirect_thunk_function): Use
	ASM_OUTPUT_LABEL, instead of ASM_OUTPUT_DEF, for TARGET_MACHO
	for  __x86.return_thunk.

gcc/testsuite/

	Backport from mainline
	2018-01-15  H.J. Lu  <hongjiu.lu@intel.com>

	PR target/83839
	* gcc.target/i386/indirect-thunk-1.c: Scan for "push" only on
	Linux.
	* gcc.target/i386/indirect-thunk-2.c: Likewise.
	* gcc.target/i386/indirect-thunk-3.c: Likewise.
	* gcc.target/i386/indirect-thunk-4.c: Likewise.
	* gcc.target/i386/indirect-thunk-7.c: Likewise.
	* gcc.target/i386/indirect-thunk-attr-1.c: Likewise.
	* gcc.target/i386/indirect-thunk-attr-2.c: Likewise.
	* gcc.target/i386/indirect-thunk-attr-5.c: Likewise.
	* gcc.target/i386/indirect-thunk-attr-6.c: Likewise.
	* gcc.target/i386/indirect-thunk-attr-7.c: Likewise.
	* gcc.target/i386/indirect-thunk-extern-1.c: Likewise.
	* gcc.target/i386/indirect-thunk-extern-2.c: Likewise.
	* gcc.target/i386/indirect-thunk-extern-3.c: Likewise.
	* gcc.target/i386/indirect-thunk-extern-4.c: Likewise.
	* gcc.target/i386/indirect-thunk-extern-7.c: Likewise.
	* gcc.target/i386/indirect-thunk-register-1.c: Likewise.
	* gcc.target/i386/indirect-thunk-register-3.c: Likewise.
	* gcc.target/i386/indirect-thunk-register-4.c: Likewise.
	* gcc.target/i386/ret-thunk-10.c: Likewise.
	* gcc.target/i386/ret-thunk-11.c: Likewise.
	* gcc.target/i386/ret-thunk-12.c: Likewise.
	* gcc.target/i386/ret-thunk-13.c: Likewise.
	* gcc.target/i386/ret-thunk-14.c: Likewise.
	* gcc.target/i386/ret-thunk-15.c: Likewise.
	* gcc.target/i386/ret-thunk-9.c: Don't check the
	__x86_return_thunk label.
	Scan for "push" only for Linux.

From-SVN: r256734
2018-01-16 03:10:44 -08:00
..
include Update copyright years. 2017-01-01 13:07:43 +01:00
avr-mmcu.texi Update copyright years. 2017-01-01 13:07:43 +01:00
bugreport.texi Update copyright years. 2017-01-01 13:07:43 +01:00
cfg.texi cfg.texi (Edges): Remove reference to Java. 2017-01-02 14:23:06 +00:00
collect2.texi Update copyright years. 2017-01-01 13:07:43 +01:00
compat.texi Update copyright years. 2017-01-01 13:07:43 +01:00
configfiles.texi Update copyright years. 2017-01-01 13:07:43 +01:00
configterms.texi Update copyright years. 2017-01-01 13:07:43 +01:00
contrib.texi Kill my doppelg\"anger 2017-03-19 01:30:40 +01:00
contribute.texi Update copyright years. 2017-01-01 13:07:43 +01:00
cpp.texi cpp.texi: Replace "stringify"/"stringification" with C standard terminology... 2017-02-11 19:57:21 -05:00
cppdiropts.texi cppdiropts.texi: Merge documentation of -I, -iquote, -isystem, and -idirafter. 2017-01-07 17:37:55 -05:00
cppenv.texi Update copyright years. 2017-01-01 13:07:43 +01:00
cppinternals.texi cpp.texi: Replace "stringify"/"stringification" with C standard terminology... 2017-02-11 19:57:21 -05:00
cppopts.texi re PR other/16519 (-pthread undocumented) 2017-01-08 21:39:24 -05:00
cppwarnopts.texi cppdiropts.texi: Merge documentation of -I, -iquote, -isystem, and -idirafter. 2017-01-07 17:37:55 -05:00
extend.texi x86: Add -mfunction-return= 2018-01-16 03:10:44 -08:00
fragments.texi Update copyright years. 2017-01-01 13:07:43 +01:00
frontends.texi Brig front-end 2017-01-24 13:45:56 +01:00
gcc.texi Document gcov-dump and fix installation of gcov-tool (PR gcov-profile/80081). 2017-03-21 14:41:11 +00:00
gccint.texi gcc.texi: Remove "up" link to (DIR). 2017-03-13 22:27:59 +00:00
gcov-dump.texi Backport r247376 2017-06-22 11:37:38 +00:00
gcov-tool.texi Backport r247376 2017-06-22 11:37:38 +00:00
gcov.texi Backport r254257 2017-11-21 16:01:16 +00:00
generic.texi Update copyright years. 2017-01-01 13:07:43 +01:00
gimple.texi Update copyright years. 2017-01-01 13:07:43 +01:00
gnu.texi
gty.texi Update copyright years. 2017-01-01 13:07:43 +01:00
headerdirs.texi Update copyright years. 2017-01-01 13:07:43 +01:00
hostconfig.texi Use the more formal "cannot" instead of the informal "can't." 2017-03-21 15:37:29 -06:00
implement-c.texi Update copyright years. 2017-01-01 13:07:43 +01:00
implement-cxx.texi Update copyright years. 2017-01-01 13:07:43 +01:00
install-old.texi Update copyright years. 2017-01-01 13:07:43 +01:00
install.texi install.texi (Options specification): Restore entry of --enable-sjlj-exceptions. 2017-05-29 21:08:29 +00:00
install.texi2html Update copyright years. 2017-01-01 13:07:43 +01:00
interface.texi Update copyright years. 2017-01-01 13:07:43 +01:00
invoke.texi x86: Add -mfunction-return= 2018-01-16 03:10:44 -08:00
languages.texi Update copyright years. 2017-01-01 13:07:43 +01:00
libgcc.texi Update copyright years. 2017-01-01 13:07:43 +01:00
loop.texi Use the more formal "cannot" instead of the informal "can't." 2017-03-21 15:37:29 -06:00
lto.texi Fix typo in LTO documentation (PR lto/50345). 2017-04-19 12:00:47 +00:00
makefile.texi makefile.texi (profiledbootstrap): Refer to the installation instructions only in textual form. 2017-02-10 22:06:01 +00:00
match-and-simplify.texi Update copyright years. 2017-01-01 13:07:43 +01:00
md.texi re PR target/80123 (libgomp tests pr66199-2.c and pr66199-5.c fail with -mcpu=power9) 2017-03-22 12:47:55 -05:00
objc.texi Use the more formal "cannot" instead of the informal "can't." 2017-03-21 15:37:29 -06:00
optinfo.texi Miscellaneous optimization group fixes 2017-02-28 09:42:06 +01:00
options.texi [-fcompare-debug] var tracking options are not optimization options 2017-01-07 19:53:13 +00:00
passes.texi Update copyright years. 2017-01-01 13:07:43 +01:00
plugins.texi Update copyright years. 2017-01-01 13:07:43 +01:00
portability.texi Update copyright years. 2017-01-01 13:07:43 +01:00
rtl.texi Use the more formal "cannot" instead of the informal "can't." 2017-03-21 15:37:29 -06:00
service.texi Update copyright years. 2017-01-01 13:07:43 +01:00
sourcebuild.texi backport: sourcebuild.texi (ARM-specific attributes): Document new arm_neon_ok_no_float_abi effective target. 2017-09-27 17:40:39 +02:00
standards.texi standards.texi (Standards): Update reference to Objective-C 2.0. 2017-02-12 14:37:46 +00:00
tm.texi re PR tree-optimization/79390 (10% performance drop in SciMark2 LU after r242550) 2017-04-04 19:52:27 +02:00
tm.texi.in re PR tree-optimization/79390 (10% performance drop in SciMark2 LU after r242550) 2017-04-04 19:52:27 +02:00
tree-ssa.texi Update copyright years. 2017-01-01 13:07:43 +01:00
trouble.texi Use the more formal "cannot" instead of the informal "can't." 2017-03-21 15:37:29 -06:00