)]}'
{
  "commit": "554cfd2cbecb799d7b3a1f5de05487c5ffa60259",
  "tree": "64ffdf7239e7f9e6bd6068bb1c32e6c63b8bd419",
  "parents": [
    "5f3d2e8e3121fdb55c77b1df8cf7cb9b22cbe1f1"
  ],
  "author": {
    "name": "Matt Turner",
    "email": "mattst88@gmail.com",
    "time": "Sat Aug 29 13:07:36 2026 -0600"
  },
  "committer": {
    "name": "Jeff Law",
    "email": "jeffrey.law@oss.qualcomm.com",
    "time": "Sat Aug 29 13:07:36 2026 -0600"
  },
  "message": "[PATCH 2/3] alpha: enable -fstack-protector\n\nFRAME_GROWS_DOWNWARD was left commented out in alpha.h, so it defaulted\nto 0 and -fstack-protector was rejected outright:\n\n    cc1: warning: \u0027-fstack-protector\u0027 not supported for this target\n\nThe stack protector needs a downward-growing frame.  cfgexpand allocates\nthe canary slot before it reorders the local arrays, so with an\nupward-growing frame the canary would land below the buffers it is meant\nto guard.  Define FRAME_GROWS_DOWNWARD when the stack protector is in\nuse, as rs6000 and xtensa do, and resolve the soft frame pointer to the\nhigh end of the local variables in that case.\n\nDefault code generation is unaffected: FRAME_GROWS_DOWNWARD is zero\nwhenever flag_stack_protect is zero.  Compiling gcc.c-torture/compile\nwith and without this change at -O0 and at -O2 gives byte-identical\nassembly for all 1625 files.\n\nglibc already provides everything the generic expansion needs on Alpha:\n__stack_chk_guard from ld.so and __stack_chk_fail from libc, both since\nGLIBC_2.4.  There is no TCB stack guard on Alpha, so no\n-mstack-protector-guard\u003d option is added.\n\nThe OpenVMS elimination offsets get the same treatment for consistency,\nbut that path is untested.\n\ngcc/ChangeLog:\n\n\t* config/alpha/alpha.h (FRAME_GROWS_DOWNWARD): Define.\n\t* config/alpha/alpha.cc (alpha_initial_elimination_offset): Resolve\n\tFRAME_POINTER_REGNUM to the high end of the local variables when\n\tFRAME_GROWS_DOWNWARD.\n\t(alpha_vms_initial_elimination_offset): Likewise.\n\ngcc/testsuite/ChangeLog:\n\n\t* gcc.dg/fstack-protector-strong.c: Run on alpha*-*-*.  Expect\n\ttwice as many stack_chk_fail matches there, since Alpha names the\n\tcallee once for !literal and once for !lituse_jsr.\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "be5e1776150885df0f001d5e135a52223ee7786a",
      "old_mode": 33188,
      "old_path": "gcc/config/alpha/alpha.cc",
      "new_id": "e80844ed853927e3b6bd2ce71e1f0e6689626c4d",
      "new_mode": 33188,
      "new_path": "gcc/config/alpha/alpha.cc"
    },
    {
      "type": "modify",
      "old_id": "96087cc481caeb82bd1c6ff2b7b9d322e5f23025",
      "old_mode": 33188,
      "old_path": "gcc/config/alpha/alpha.h",
      "new_id": "405e40fcee06b1f5fb1102e8a56dfc4e7e3c8938",
      "new_mode": 33188,
      "new_path": "gcc/config/alpha/alpha.h"
    },
    {
      "type": "modify",
      "old_id": "52485b5252ddbddba4506ef491cdc92a52356925",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/gcc.dg/fstack-protector-strong.c",
      "new_id": "306aa905ef4ecc882b59c3768a7b652ac452fa8a",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.dg/fstack-protector-strong.c"
    }
  ]
}
