diff options
Diffstat (limited to 'main/gcc/0001-i386-Move-struct-ix86_frame-to-machine_function.patch')
-rw-r--r-- | main/gcc/0001-i386-Move-struct-ix86_frame-to-machine_function.patch | 241 |
1 files changed, 0 insertions, 241 deletions
diff --git a/main/gcc/0001-i386-Move-struct-ix86_frame-to-machine_function.patch b/main/gcc/0001-i386-Move-struct-ix86_frame-to-machine_function.patch deleted file mode 100644 index ecec2bad66..0000000000 --- a/main/gcc/0001-i386-Move-struct-ix86_frame-to-machine_function.patch +++ /dev/null @@ -1,241 +0,0 @@ -From b1d2df5090abc9202a7bf2d224ac90de22908d21 Mon Sep 17 00:00:00 2001 -From: hjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4> -Date: Mon, 15 Jan 2018 11:27:24 +0000 -Subject: [PATCH 01/13] i386: Move struct ix86_frame to machine_function - -Make ix86_frame available to i386 code generation. This is needed to -backport the patch set of -mindirect-branch= to mitigate variant #2 of -the speculative execution vulnerabilities on x86 processors identified -by CVE-2017-5715, aka Spectre. - - Backport from mainline - 2017-06-01 Bernd Edlinger <bernd.edlinger@hotmail.de> - - * config/i386/i386.c (ix86_frame): Moved to ... - * config/i386/i386.h (ix86_frame): Here. - (machine_function): Add frame. - * config/i386/i386.c (ix86_compute_frame_layout): Repace the - frame argument with &cfun->machine->frame. - (ix86_can_use_return_insn_p): Don't pass &frame to - ix86_compute_frame_layout. Copy frame from cfun->machine->frame. - (ix86_can_eliminate): Likewise. - (ix86_expand_prologue): Likewise. - (ix86_expand_epilogue): Likewise. - (ix86_expand_split_stack_prologue): Likewise. ---- - gcc/config/i386/i386.c | 68 ++++++++++---------------------------------------- - gcc/config/i386/i386.h | 53 ++++++++++++++++++++++++++++++++++++++- - 2 files changed, 65 insertions(+), 56 deletions(-) - -diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c -index 8b5faac5129..a1ff32b648b 100644 ---- a/gcc/config/i386/i386.c -+++ b/gcc/config/i386/i386.c -@@ -2434,53 +2434,6 @@ struct GTY(()) stack_local_entry { - struct stack_local_entry *next; - }; - --/* Structure describing stack frame layout. -- Stack grows downward: -- -- [arguments] -- <- ARG_POINTER -- saved pc -- -- saved static chain if ix86_static_chain_on_stack -- -- saved frame pointer if frame_pointer_needed -- <- HARD_FRAME_POINTER -- [saved regs] -- <- regs_save_offset -- [padding0] -- -- [saved SSE regs] -- <- sse_regs_save_offset -- [padding1] | -- | <- FRAME_POINTER -- [va_arg registers] | -- | -- [frame] | -- | -- [padding2] | = to_allocate -- <- STACK_POINTER -- */ --struct ix86_frame --{ -- int nsseregs; -- int nregs; -- int va_arg_size; -- int red_zone_size; -- int outgoing_arguments_size; -- -- /* The offsets relative to ARG_POINTER. */ -- HOST_WIDE_INT frame_pointer_offset; -- HOST_WIDE_INT hard_frame_pointer_offset; -- HOST_WIDE_INT stack_pointer_offset; -- HOST_WIDE_INT hfp_save_offset; -- HOST_WIDE_INT reg_save_offset; -- HOST_WIDE_INT sse_reg_save_offset; -- -- /* When save_regs_using_mov is set, emit prologue using -- move instead of push instructions. */ -- bool save_regs_using_mov; --}; -- - /* Which cpu are we scheduling for. */ - enum attr_cpu ix86_schedule; - -@@ -2572,7 +2525,7 @@ static unsigned int ix86_function_arg_boundary (machine_mode, - const_tree); - static rtx ix86_static_chain (const_tree, bool); - static int ix86_function_regparm (const_tree, const_tree); --static void ix86_compute_frame_layout (struct ix86_frame *); -+static void ix86_compute_frame_layout (void); - static bool ix86_expand_vector_init_one_nonzero (bool, machine_mode, - rtx, rtx, int); - static void ix86_add_new_builtins (HOST_WIDE_INT); -@@ -10944,7 +10897,8 @@ ix86_can_use_return_insn_p (void) - if (crtl->args.pops_args && crtl->args.size >= 32768) - return 0; - -- ix86_compute_frame_layout (&frame); -+ ix86_compute_frame_layout (); -+ frame = cfun->machine->frame; - return (frame.stack_pointer_offset == UNITS_PER_WORD - && (frame.nregs + frame.nsseregs) == 0); - } -@@ -11355,8 +11309,8 @@ ix86_can_eliminate (const int from, const int to) - HOST_WIDE_INT - ix86_initial_elimination_offset (int from, int to) - { -- struct ix86_frame frame; -- ix86_compute_frame_layout (&frame); -+ ix86_compute_frame_layout (); -+ struct ix86_frame frame = cfun->machine->frame; - - if (from == ARG_POINTER_REGNUM && to == HARD_FRAME_POINTER_REGNUM) - return frame.hard_frame_pointer_offset; -@@ -11395,8 +11349,9 @@ ix86_builtin_setjmp_frame_value (void) - /* Fill structure ix86_frame about frame of currently computed function. */ - - static void --ix86_compute_frame_layout (struct ix86_frame *frame) -+ix86_compute_frame_layout (void) - { -+ struct ix86_frame *frame = &cfun->machine->frame; - unsigned HOST_WIDE_INT stack_alignment_needed; - HOST_WIDE_INT offset; - unsigned HOST_WIDE_INT preferred_alignment; -@@ -12702,7 +12657,8 @@ ix86_expand_prologue (void) - m->fs.sp_offset = INCOMING_FRAME_SP_OFFSET; - m->fs.sp_valid = true; - -- ix86_compute_frame_layout (&frame); -+ ix86_compute_frame_layout (); -+ frame = m->frame; - - if (!TARGET_64BIT && ix86_function_ms_hook_prologue (current_function_decl)) - { -@@ -13379,7 +13335,8 @@ ix86_expand_epilogue (int style) - bool using_drap; - - ix86_finalize_stack_realign_flags (); -- ix86_compute_frame_layout (&frame); -+ ix86_compute_frame_layout (); -+ frame = m->frame; - - m->fs.sp_valid = (!frame_pointer_needed - || (crtl->sp_is_unchanging -@@ -13876,7 +13833,8 @@ ix86_expand_split_stack_prologue (void) - gcc_assert (flag_split_stack && reload_completed); - - ix86_finalize_stack_realign_flags (); -- ix86_compute_frame_layout (&frame); -+ ix86_compute_frame_layout (); -+ frame = cfun->machine->frame; - allocate = frame.stack_pointer_offset - INCOMING_FRAME_SP_OFFSET; - - /* This is the label we will branch to if we have enough stack -diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h -index 8113f83c7fd..54144166172 100644 ---- a/gcc/config/i386/i386.h -+++ b/gcc/config/i386/i386.h -@@ -2427,9 +2427,56 @@ enum avx_u128_state - - #define FASTCALL_PREFIX '@' - -+#ifndef USED_FOR_TARGET -+/* Structure describing stack frame layout. -+ Stack grows downward: -+ -+ [arguments] -+ <- ARG_POINTER -+ saved pc -+ -+ saved static chain if ix86_static_chain_on_stack -+ -+ saved frame pointer if frame_pointer_needed -+ <- HARD_FRAME_POINTER -+ [saved regs] -+ <- regs_save_offset -+ [padding0] -+ -+ [saved SSE regs] -+ <- sse_regs_save_offset -+ [padding1] | -+ | <- FRAME_POINTER -+ [va_arg registers] | -+ | -+ [frame] | -+ | -+ [padding2] | = to_allocate -+ <- STACK_POINTER -+ */ -+struct GTY(()) ix86_frame -+{ -+ int nsseregs; -+ int nregs; -+ int va_arg_size; -+ int red_zone_size; -+ int outgoing_arguments_size; -+ -+ /* The offsets relative to ARG_POINTER. */ -+ HOST_WIDE_INT frame_pointer_offset; -+ HOST_WIDE_INT hard_frame_pointer_offset; -+ HOST_WIDE_INT stack_pointer_offset; -+ HOST_WIDE_INT hfp_save_offset; -+ HOST_WIDE_INT reg_save_offset; -+ HOST_WIDE_INT sse_reg_save_offset; -+ -+ /* When save_regs_using_mov is set, emit prologue using -+ move instead of push instructions. */ -+ bool save_regs_using_mov; -+}; -+ - /* Machine specific frame tracking during prologue/epilogue generation. */ - --#ifndef USED_FOR_TARGET - struct GTY(()) machine_frame_state - { - /* This pair tracks the currently active CFA as reg+offset. When reg -@@ -2475,6 +2522,9 @@ struct GTY(()) machine_function { - int varargs_fpr_size; - int optimize_mode_switching[MAX_386_ENTITIES]; - -+ /* Cached initial frame layout for the current function. */ -+ struct ix86_frame frame; -+ - /* Number of saved registers USE_FAST_PROLOGUE_EPILOGUE - has been computed for. */ - int use_fast_prologue_epilogue_nregs; -@@ -2554,6 +2604,7 @@ struct GTY(()) machine_function { - #define ix86_current_function_calls_tls_descriptor \ - (ix86_tls_descriptor_calls_expanded_in_cfun && df_regs_ever_live_p (SP_REG)) - #define ix86_static_chain_on_stack (cfun->machine->static_chain_on_stack) -+#define ix86_red_zone_size (cfun->machine->frame.red_zone_size) - - /* Control behavior of x86_file_start. */ - #define X86_FILE_START_VERSION_DIRECTIVE false --- -2.16.3 - |