i386: Don't generate alias for function return thunk
commite1e9d6e77f69b565a8d777d8e2d1da61219ffcbc
authorhjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 15 Mar 2018 17:54:40 +0000 (15 17:54 +0000)
committerhjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 15 Mar 2018 17:54:40 +0000 (15 17:54 +0000)
treea8229da1eb51aaa17f500762fbad39c6fb9611ac
parente57bcc462390a2e88a5d78c107b7a9f9c5f26c9d
i386: Don't generate alias for function return thunk

Function return thunks shouldn't be aliased to indirect branch thunks
since indirect branch thunks are placed in COMDAT section and a COMDAT
section with indirect branch may not have function return thunk.  This
patch generates function return thunks directly.

gcc/

PR target/84574
* config/i386/i386.c (indirect_thunk_needed): Update comments.
(indirect_thunk_bnd_needed): Likewise.
(indirect_thunks_used): Likewise.
(indirect_thunks_bnd_used): Likewise.
(indirect_return_needed): New.
(indirect_return_bnd_needed): Likewise.
(output_indirect_thunk_function): Add a bool argument for
function return.
(output_indirect_thunk_function): Don't generate alias for
function return thunk.
(ix86_code_end): Call output_indirect_thunk_function to generate
function return thunks.
(ix86_output_function_return): Set indirect_return_bnd_needed
and indirect_return_needed instead of indirect_thunk_bnd_needed
and indirect_thunk_needed.

gcc/testsuite/

PR target/84574
* gcc.target/i386/ret-thunk-9.c: Expect __x86_return_thunk
label instead of __x86_indirect_thunk label.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@258569 138bc75d-0d04-0410-961f-82ee72b054a4
gcc/ChangeLog
gcc/config/i386/i386.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/ret-thunk-9.c