Skip to content
Snippets Groups Projects
  1. Jan 02, 2025
  2. Jan 03, 2024
  3. Jan 16, 2023
  4. Jan 03, 2022
  5. Jan 04, 2021
  6. Jan 01, 2020
  7. Jan 01, 2019
  8. Jan 03, 2018
  9. Jan 01, 2017
  10. Jan 04, 2016
  11. Jan 05, 2015
  12. Jan 02, 2014
  13. Feb 04, 2013
  14. Sep 27, 2010
    • Ian Lance Taylor's avatar
      common.opt (fsplit-stack): New option. · 7458026b
      Ian Lance Taylor authored
      gcc/:
      	* common.opt (fsplit-stack): New option.
      	* opts.c (decode_options): Set flag_split_stack to final value.
      	* target.def (supports_split_stack): New hook.
      	* gcc.c (STACK_SPLIT_SPEC): Define.
      	(LINK_COMMAND_SPEC): Use STACK_SPLIT_SPEC.
      	* doc/invoke.texi (Option Summary): Mention -fsplit-stack.
      	(Code Gen Options): Document -fsplit-stack.
      	* doc/extend.texi (Function Attributes): Mention no_split_stack.
      	(Function Attributes): Document no_split_stack.
      	* doc/tm.texi.in (Stack Smashing Protection): Add @hook
      	TARGET_SUPPORTS_SPLIT_STACK.
      	* doc/tm.texi: Rebuild.
      	* function.c (thread_prologue_and_epilogue_insns): If
      	flag_split_stack, add split stack prologue.
      	* explow.c (allocate_dynamic_stack_space): Support -fsplit-stack.
      	* varasm.c (saw_no_split_stack): New static variable.
      	(assemble_start_function): Set saw_no_split_stack if the function
      	has the no_split_stack attribute.
      	(file_end_indicate_split_stack): New function.
      	* output.h (file_end_indicate_split_stack): Declare.
      	* libgcc-std.ver (GCC_4.6.0): Add -fsplit-stack support variables
      	and function.
      	* doc/libgcc.texi (Miscellaneous routines): Document -fsplit-stack
      	routines.
      	* config/i386/i386.c (ix86_option_override_internal): Don't set
      	expand_builtin_va_start to NULL if -fsplit-stack.
      	(ix86_function_regparm): Reduce local regparm by 1 for 32-bit
      	-fsplit-stack.
      	(ix86_va_start): If -fsplit-stack, get overflow pointer	from
      	scratch register set by prologue.
      	(ix86_code_end): If -fsplit-stack, call
      	file_end_indicate_split_stack.
      	(ix86_supports_split_stack): New static function.
      	(SPLIT_STACK_AVAILABLE): Define.
      	(split_stack_prologue_scratch_regno): New static function.
      	(split_stack_fn): New static variable.
      	(ix86_expand_split_stack_prologue): New function.
      	(ix86_live_on_entry): New static function.
      	(ix86_legitimate_address_p): Handle UNSPEC_STACK_CHECK.
      	(output_pic_addr_const): Likewise.
      	(i386_asm_output_addr_const_extra): Likewise.
      	(ix86_expand_call): Change return type to rtx.  Return the new
      	call instruction.
      	(TARGET_SUPPORTS_SPLIT_STACK): Define.
      	(TARGET_EXTRA_LIVE_ON_ENTRY): Define.
      	* config/i386/i386.md (UNSPEC_STACK_CHECK): Define.
      	(split_stack_prologue, split_stack_return): New insns.
      	(split_stack_space_check): New insn.
      	* config/i386/i386.h (struct machine_function): Add
      	split_stack_varargs_pointer field.
      	* config/i386/linux.h (TARGET_CAN_SPLIT_STACK): Define.
      	(TARGET_THREAD_SPLIT_STACK_OFFSET): Define.
      	* config/i386/linux64.h (TARGET_CAN_SPLIT_STACK): Define.
      	(TARGET_THREAD_SPLIT_STACK_OFFSET): Define.
      	* config/i386/i386-protos.h (ix86_expand_split_stack_prologue):
      	Declare.
      	(ix86_expand_call): Update declaration.
      gcc/c-family/:
      	* c-common.c (c_common_attribute_table): Add no_split_stack.
      	(handle_no_split_stack_attribute): New static function.
      gcc/testsuite/:
      	* lib/target-supports.exp (check_effective_target_split_stack):
      	New procedure.
      	* gcc.dg/split-1.c: New test.
      	* gcc.dg/split-2.c: New test.
      	* gcc.dg/split-3.c: New test.
      	* gcc.dg/split-4.c: New test.
      libgcc/:
      	* generic-morestack.h: New file.
      	* generic-morestack.c: New file.
      	* generic-morestack-thread.c: New file.
      	* config/i386/morestack.S: New file.
      	* config/t-stack: New file.
      	* config/i386/t-stack-i386: New file.
      	* config.host (i[34567]86-*-linux* and friends): Add t-stack and
      	i386/t-stack-i386 to tmake_file.
      
      From-SVN: r164661
      7458026b
Loading