1. 02 Oct, 2018 21 commits
  2. 01 Oct, 2018 19 commits
    • compiler: use the underlying type to build placeholder type for alias · b1d88684
          
          When asking for a placeholder type of an alias type, build a
          placeholder for the underlying type, instead of treating the
          alias as a named type and calling get_backend. The latter may
          fail as we may not be ready to build a complete backend type. We
          have already used a unified backend type for alias type and its
          underlying type. Do the same for placeholders as well.
          
          Reviewed-on: https://go-review.googlesource.com/138635
      
      From-SVN: r264773
      Ian Lance Taylor committed
    • libgo: support x32 as GOARCH=amd64p32 GOOS=linux · 44ef0300
          
          This is enough to let libgo build when configured using
          --with-multilib-list=m64,m32,mx32.  I don't have an x32-enabled kernel
          so I haven't tested whether it executes correctly.
          
          For https://gcc.gnu.org/PR87470
          
          Reviewed-on: https://go-review.googlesource.com/138817
      
      From-SVN: r264772
      Ian Lance Taylor committed
    • runtime: add arm64 version of AES hash code · 1b282533
          
          Rewrite the arm64 AES hashing code from gc assembler to C code using
          intrinsics.  The resulting code generates the same hash code for the
          same input as the gc code--that doesn't matter as such, but testing it
          ensures that the C code does something useful.
          
          Reviewed-on: https://go-review.googlesource.com/138535
      
      From-SVN: r264771
      Ian Lance Taylor committed
    • [libiberty] Use pipe inside pex_run · df1346b4
      https://gcc.gnu.org/ml/gcc-patches/2018-10/msg00039.html
      	* configure.ac (checkfuncs): Add pipe2.
      	* config.in, configure: Rebuilt.
      	* pex-unix.c (pex_unix_exec_child): Comminicate errors from child
      	to parent with a pipe, when possible.
      
      From-SVN: r264769
      Nathan Sidwell committed
    • * ru.po: Update. · 2649038c
      From-SVN: r264766
      Joseph Myers committed
    • Update, forgot to put the PR number in the Change Log. · 84eea0f7
      gcc/ChangeLog:
      
      2018-10-01  Carl Love  <cel@us.ibm.com>
      
      	PR 69431
      	* config/rs6000/rs6000-builtin.def (__builtin_mffsl): New.
      	(__builtin_mtfsb0): New.
      	(__builtin_mtfsb1): New.
      	( __builtin_set_fpscr_rn): New.
      	(__builtin_set_fpscr_drn): New.
      	* config/rs6000/rs6000.c (rs6000_expand_mtfsb_builtin): Add.
      	(rs6000_expand_set_fpscr_rn_builtin): Add.
      	(rs6000_expand_set_fpscr_drn_builtin): Add.
      	(rs6000_expand_builtin): Add case statement entries for
      	RS6000_BUILTIN_MTFSB0, RS6000_BUILTIN_MTFSB1,
      	RS6000_BUILTIN_SET_FPSCR_RN, RS6000_BUILTIN_SET_FPSCR_DRN,
      	RS6000_BUILTIN_MFFSL.
      	(rs6000_init_builtins): Add ftype initialization and def_builtin
      	calls for __builtin_mffsl, __builtin_mtfsb0, __builtin_mtfsb1,
      	__builtin_set_fpscr_rn, __builtin_set_fpscr_drn.
      	* config/rs6000.md (rs6000_mtfsb0, rs6000_mtfsb1, rs6000_mffscrn,
      	rs6000_mffscdrn): Add define_insn.
      	(rs6000_set_fpscr_rn, rs6000_set_fpscr_drn): Add define_expand.
      	* doc/extend.texi: Add documentation for the builtins.
      
      gcc/testsuite/ChangeLog:
      
      2018-10-01  Carl Love  <cel@us.ibm.com>
      
      	PR 69431
      	* gcc.target/powerpc/test_mffsl-p9.c: New file.
      	* gcc.target/powerpc/test_fpscr_rn_builtin.c: New file.
      	* gcc.target/powerpc/test_fpscr_drn_builtin.c: New file.
      	* gcc.target/powerpc/test_fpscr_rn_builtin_error.c: New file.
      	* gcc.target/powerpc/test_fpscr_drn_builtin_error.c: New file.
      
      From-SVN: r264764
      Carl Love committed
    • rs6000-builtin.def (__builtin_mffsl): New. · 2da14663
      gcc/ChangeLog:
      
      2018-10-01  Carl Love  <cel@us.ibm.com>
      
      	* config/rs6000/rs6000-builtin.def (__builtin_mffsl): New.
      	(__builtin_mtfsb0): New.
      	(__builtin_mtfsb1): New.
      	( __builtin_set_fpscr_rn): New.
      	(__builtin_set_fpscr_drn): New.
      	* config/rs6000/rs6000.c (rs6000_expand_mtfsb_builtin): Add.
      	(rs6000_expand_set_fpscr_rn_builtin): Add.
      	(rs6000_expand_set_fpscr_drn_builtin): Add.
      	(rs6000_expand_builtin): Add case statement entries for
      	RS6000_BUILTIN_MTFSB0, RS6000_BUILTIN_MTFSB1,
      	RS6000_BUILTIN_SET_FPSCR_RN, RS6000_BUILTIN_SET_FPSCR_DRN,
      	RS6000_BUILTIN_MFFSL.
      	(rs6000_init_builtins): Add ftype initialization and def_builtin
      	calls for __builtin_mffsl, __builtin_mtfsb0, __builtin_mtfsb1,
      	__builtin_set_fpscr_rn, __builtin_set_fpscr_drn.
      	* config/rs6000.md (rs6000_mtfsb0, rs6000_mtfsb1, rs6000_mffscrn,
      	rs6000_mffscdrn): Add define_insn.
      	(rs6000_set_fpscr_rn, rs6000_set_fpscr_drn): Add define_expand.
      	* doc/extend.texi: Add documentation for the builtins.
      
      gcc/testsuite/ChangeLog:
      
      2018-10-01  Carl Love  <cel@us.ibm.com>
      
      	* gcc.target/powerpc/test_mffsl-p9.c: New file.
      	* gcc.target/powerpc/test_fpscr_rn_builtin.c: New file.
      	* gcc.target/powerpc/test_fpscr_drn_builtin.c: New file.
      	* gcc.target/powerpc/test_fpscr_rn_builtin_error.c: New file.
      	* gcc.target/powerpc/test_fpscr_drn_builtin_error.c: New file.
      
      From-SVN: r264762
      Carl Love committed
    • allocator.xml: Adjust link to "Reconsidering Custom Memory Allocation". · 3553df86
      	* doc/xml/manual/allocator.xml: Adjust link to "Reconsidering
      	Custom Memory Allocation".
      
      From-SVN: r264761
      Gerald Pfeifer committed
    • Regenerate libstdc++ HTML pages · 8e4d333b
      	* doc/html/*: Regenerate.
      
      From-SVN: r264760
      Jonathan Wakely committed
    • re PR fortran/65677 (Incomplete assignment on deferred-length character variable) · b093d688
      2018-10-01  Paul Thomas  <pault@gcc.gnu.org>
      
      	PR fortran/65677
      	* trans-expr.c (gfc_trans_assignment_1): Set the 'identical'
      	flag in the call to gfc_check_dependency.
      
      
      2018-10-01  Paul Thomas  <pault@gcc.gnu.org>
      
      	PR fortran/65677
      	* gfortran.dg/dependency_52.f90 : Expand the test to check both
      	the call to adjustl and direct assignment of the substring.
      
      From-SVN: r264759
      Paul Thomas committed
    • re PR tree-optimization/87465 (Loop removal regression) · fd5c626c
      2018-10-01  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/87465
      	* tree-ssa-loop-ivcanon.c (tree_estimate_loop_size): Fix typo
      	causing branch miscounts.
      
      	* gcc.dg/tree-ssa/cunroll-15.c: New testcase.
      
      From-SVN: r264758
      Richard Biener committed
    • Validate and set default parameters for stack-clash. · 329130cc
      This patch defines the default parameters and validation for the aarch64
      stack clash probing interval and guard sizes.  It cleans up the previous
      implementation and insures that at no point the invalidate arguments are
      present in the pipeline for AArch64.  Currently they are only corrected once
      cc1 initalizes the back-end.
      
      The default for AArch64 is 64 KB for both of these and we only support 4 KB and 64 KB
      probes.  We also enforce that any value you set here for the parameters must be
      in sync.
      
      If an invalid value is specified an error will be generated and compilation aborted.
      
      gcc/
      
      	* common/config/aarch64/aarch64-common.c (TARGET_OPTION_DEFAULT_PARAM,
      	aarch64_option_default_param):	New.
      	(params.h): Include.
      	(TARGET_OPTION_VALIDATE_PARAM, aarch64_option_validate_param): New.
      	* config/aarch64/aarch64.c (aarch64_override_options_internal): Simplify
      	stack-clash protection validation code.
      
      From-SVN: r264757
      Tamar Christina committed
    • Update options framework for parameters to properly handle and validate configure time params. · f622a56b
      
      This patch changes it so that default parameters are validated during
      initialization. This change is needed to ensure parameters set via by the
      target specific common initialization routines still keep the parameters within
      the valid range.
      
      gcc/
      
      	* params.c (validate_param): New.
      	(add_params): Use it.
      	(set_param_value): Refactor param validation into validate_param.
      	(diagnostic.h): Include.
      	* diagnostic.h (diagnostic_ready_p): New.
      
      From-SVN: r264756
      Tamar Christina committed
    • Allow back-ends to be able to do custom validations on params. · 03ced4ab
      This patch adds the ability for backends to add custom constrains to the param
      values by defining a new hook option_validate_param.
      
      This hook is invoked on every set_param_value which allows the back-end to
      ensure that the parameters are always within it's desired state.
      
      gcc/
      
      	* params.c (set_param_value):
      	Add index of parameter being validated.
      	* common/common-target.def (option_validate_param): New.
      	* common/common-targhooks.h (default_option_validate_param): New.
      	* common/common-targhooks.c (default_option_validate_param): New.
      	* doc/tm.texi.in (TARGET_OPTION_VALIDATE_PARAM): New.
      	* doc/tm.texi: Regenerate.
      
      From-SVN: r264755
      Tamar Christina committed
    • Cleanup the AArch64 testsuite when stack-clash is on. · c98f502f
      This patch cleans up the testsuite when a run is done with stack clash
      protection turned on.
      
      Concretely this switches off -fstack-clash-protection for a couple of tests:
      
      * assembler scan: some tests are quite fragile in that they check for exact
             assembly output, e.g. check for exact amount of sub etc.  These won't
             match now.
      * vla: Some of the ubsan tests negative array indices. Because the arrays weren't
             used before the incorrect $sp wouldn't have been used. The correct value is
             restored on ret.  Now however we probe the $sp which causes a segfault.
      * params: When testing the parameters we have to skip these on AArch64 because of our
                custom constraints on them.  We already test them separately so this isn't a
                loss.
      
      Note that the testsuite is not entire clean due to gdb failure caused by alloca with
      stack clash. On AArch64 we output an incorrect .loc directive, but this is already the
      case with the current implementation in GCC and is a bug unrelated to this patch series.
      
      gcc/testsuite/
      
      	PR target/86486
      	* gcc.dg/pr82788.c: Skip for AArch64.
      	* gcc.dg/guality/vla-1.c: Turn off stack-clash.
      	* gcc.target/aarch64/subsp.c: Likewise.
      	* gcc.dg/params/blocksort-part.c: Skip stack-clash checks
      	on AArch64.
      	* gcc.dg/stack-check-10.c: Add AArch64 specific checks.
      	* gcc.dg/stack-check-12.c: ILP32 fixup.
      	* gcc.dg/stack-check-5.c: Add AArch64 specific checks.
      	* gcc.dg/stack-check-6a.c: Skip on AArch64, we don't support this.
      	* testsuite/lib/target-supports.exp
      	(check_effective_target_frame_pointer_for_non_leaf): AArch64 does not
      	require frame pointer for non-leaf functions.
      
      From-SVN: r264754
      Tamar Christina committed
    • Set default values for stack-clash and do basic validation in back-end. · fbe9af50
      
      This patch enforces that the default guard size for stack-clash protection for
      AArch64 be 64KB unless the user has overriden it via configure in which case
      the user value is used as long as that value is within the valid range.
      
      It also does some basic validation to ensure that the guard size is only 4KB or
      64KB and also enforces that for aarch64 the stack-clash probing interval is
      equal to the guard size.
      
      gcc/
      
      	PR target/86486
      	* config/aarch64/aarch64.c (aarch64_override_options_internal):
      	Add validation for stack-clash parameters and set defaults.
      
      From-SVN: r264753
      Tamar Christina committed
    • Allow setting of stack-clash via configure options. · 630b1e3a
      This patch defines a configure option to allow the setting of the default
      guard size via configure flags when building the target.
      
      The new flag is:
      
       * --with-stack-clash-protection-guard-size=<num>
      
      The patch defines a new macro DEFAULT_STK_CLASH_GUARD_SIZE which targets need
      to use explicitly is they want to support this configure flag and values that
      users may have set.
      
      gcc/
      
      	PR target/86486
      	* configure.ac: Add stack-clash-protection-guard-size.
      	* doc/install.texi: Document it.
      	* config.in (DEFAULT_STK_CLASH_GUARD_SIZE): New.
      	* params.def: Update comment for guard-size.
      	(PARAM_STACK_CLASH_PROTECTION_GUARD_SIZE,
      	PARAM_STACK_CLASH_PROTECTION_PROBE_INTERVAL): Update description.
      	* configure: Regenerate.
      
      From-SVN: r264752
      Tamar Christina committed
    • Ensure that outgoing argument size is at least 8 bytes when alloca and stack-clash. · 8c6e3b23
      This patch adds a requirement that the number of outgoing arguments for a
      function is at least 8 bytes when using stack-clash protection and alloca.
      
      By using this condition we can avoid a check in the alloca code and so have
      smaller and simpler code there.
      
      A simplified version of the AArch64 stack frames is:
      
         +-----------------------+                                              
         |                       |                                                 
         |                       |                                              
         |                       |                                              
         +-----------------------+                                              
         |LR                     |                                              
         +-----------------------+                                              
         |FP                     |                                              
         +-----------------------+                                              
         |dynamic allocations    | ----  expanding area which will push the outgoing
         +-----------------------+       args down during each allocation.
         |padding                |
         +-----------------------+
         |outgoing stack args    | ---- safety buffer of 8 bytes (aligned)
         +-----------------------+
      
      By always defining an outgoing argument, alloca(0) effectively is safe to probe
      at $sp due to the reserved buffer being there.  It will never corrupt the stack.
      
      This is also safe for alloca(x) where x is 0 or x % page_size == 0.  In the
      former it is the same case as alloca(0) while the latter is safe because any
      allocation pushes the outgoing stack args down:
      
         |FP                     |                                              
         +-----------------------+                                              
         |                       |
         |dynamic allocations    | ----  alloca (x)
         |                       |
         +-----------------------+
         |padding                |
         +-----------------------+
         |outgoing stack args    | ---- safety buffer of 8 bytes (aligned)
         +-----------------------+
      
      Which means when you probe for the residual, if it's 0 you'll again just probe
      in the outgoing stack args range, which we know is non-zero (at least 8 bytes).
      
      gcc/
      
      	PR target/86486
      	* config/aarch64/aarch64.h (STACK_CLASH_MIN_BYTES_OUTGOING_ARGS,
      	STACK_DYNAMIC_OFFSET): New.
      	* config/aarch64/aarch64.c (aarch64_layout_frame):
      	Update outgoing args size.
      	(aarch64_stack_clash_protection_alloca_probe_range,
      	TARGET_STACK_CLASH_PROTECTION_ALLOCA_PROBE_RANGE): New.
      
      gcc/testsuite/
      
      	PR target/86486
      	* gcc.target/aarch64/stack-check-alloca-1.c: New.
      	* gcc.target/aarch64/stack-check-alloca-10.c: New.
      	* gcc.target/aarch64/stack-check-alloca-2.c: New.
      	* gcc.target/aarch64/stack-check-alloca-3.c: New.
      	* gcc.target/aarch64/stack-check-alloca-4.c: New.
      	* gcc.target/aarch64/stack-check-alloca-5.c: New.
      	* gcc.target/aarch64/stack-check-alloca-6.c: New.
      	* gcc.target/aarch64/stack-check-alloca-7.c: New.
      	* gcc.target/aarch64/stack-check-alloca-8.c: New.
      	* gcc.target/aarch64/stack-check-alloca-9.c: New.
      	* gcc.target/aarch64/stack-check-alloca.h: New.
      	* gcc.target/aarch64/stack-check-14.c: New.
      	* gcc.target/aarch64/stack-check-15.c: New.
      
      From-SVN: r264751
      Tamar Christina committed
    • Add a hook to support telling the mid-end when to probe the stack. · 2c25083e
      This patch adds a hook to tell the mid-end about the probing requirements of the
      target.  On AArch64 we allow a specific range for which no probing needs to
      be done.  This same range is also the amount that will have to be probed up when
      a probe is needed after dropping the stack.
      
      Defining this probe comes with the extra requirement that the outgoing arguments
      size of any function that uses alloca and stack clash be at the very least 8
      bytes.  With this invariant we can skip doing the zero checks for alloca and
      save some code.
      
      A simplified version of the AArch64 stack frame is:
      
         +-----------------------+                                              
         |                       |                                                 
         |                       |                                              
         |                       |                                              
         +-----------------------+                                              
         |LR                     |                                              
         +-----------------------+                                              
         |FP                     |                                              
         +-----------------------+                                              
         |dynamic allocations    | -\      probe range hook effects these       
         +-----------------------+   --\   and ensures that outgoing stack      
         |padding                |      -- args is always > 8 when alloca.      
         +-----------------------+  ---/   Which means it's always safe to probe
         |outgoing stack args    |-/       at SP                                
         +-----------------------+                                              
                                                                                                                 
      
      This allows us to generate better code than without the hook without affecting
      other targets.
      
      With this patch I am also removing the stack_clash_protection_final_dynamic_probe
      hook which was added specifically for AArch64 but that is no longer needed.
      
      gcc/
      
      	PR target/86486
      	* explow.c (anti_adjust_stack_and_probe_stack_clash): Support custom
      	probe ranges.
      	* target.def (stack_clash_protection_alloca_probe_range): New.
      	(stack_clash_protection_final_dynamic_probe): Remove.
      	* targhooks.h (default_stack_clash_protection_alloca_probe_range) New.
      	(default_stack_clash_protection_final_dynamic_probe): Remove.
      	* targhooks.c: Likewise.
      	* doc/tm.texi.in (TARGET_STACK_CLASH_PROTECTION_ALLOCA_PROBE_RANGE): New.
      	(TARGET_STACK_CLASH_PROTECTION_FINAL_DYNAMIC_PROBE): Remove.
      	* doc/tm.texi: Regenerate.
      
      From-SVN: r264750
      Tamar Christina committed