Commit 0974b794 by Jakub Jelinek Committed by Jakub Jelinek

re PR target/87414 (-mindirect-branch=thunk produces thunk with incorrect CFI on x86_64)

	PR target/87414
	* config/i386/i386.c: Include debug.h and dwarf2out.h.
	(output_indirect_thunk): Emit DW_CFA_def_cfa_offset after the
	call.

From-SVN: r264651
parent 1413a419
2018-09-26 Jakub Jelinek <jakub@redhat.com>
PR target/87414
* config/i386/i386.c: Include debug.h and dwarf2out.h.
(output_indirect_thunk): Emit DW_CFA_def_cfa_offset after the
call.
2018-09-25 Andrew Stubbs <ams@codesourcery.com>
* builtins.c (get_builtin_sync_mem): Force address mode conversion.
......
......@@ -89,6 +89,8 @@ along with GCC; see the file COPYING3. If not see
#include "ipa-fnsummary.h"
#include "wide-int-bitmask.h"
#include "tree-vector-builder.h"
#include "debug.h"
#include "dwarf2out.h"
/* This file should be included last. */
#include "target-def.h"
......@@ -10470,6 +10472,23 @@ output_indirect_thunk (unsigned int regno)
ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, indirectlabel2);
/* The above call insn pushed a word to stack. Adjust CFI info. */
if (flag_asynchronous_unwind_tables && dwarf2out_do_frame ())
{
if (! dwarf2out_do_cfi_asm ())
{
dw_cfi_ref xcfi = ggc_cleared_alloc<dw_cfi_node> ();
xcfi->dw_cfi_opc = DW_CFA_advance_loc4;
xcfi->dw_cfi_oprnd1.dw_cfi_addr = ggc_strdup (indirectlabel2);
vec_safe_push (cfun->fde->dw_fde_cfi, xcfi);
}
dw_cfi_ref xcfi = ggc_cleared_alloc<dw_cfi_node> ();
xcfi->dw_cfi_opc = DW_CFA_def_cfa_offset;
xcfi->dw_cfi_oprnd1.dw_cfi_offset = 2 * UNITS_PER_WORD;
vec_safe_push (cfun->fde->dw_fde_cfi, xcfi);
dwarf2out_emit_cfi (xcfi);
}
if (regno != INVALID_REGNUM)
{
/* MOV. */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment