)]}'
{
  "commit": "32a7e94f84a3df0bcd08a2835e2c316f5ed07f77",
  "tree": "6f735e90f33c43a2a979081e82e686096d7f0a36",
  "parents": [
    "855c095795252680815c96e91668bd482dd5ff26"
  ],
  "author": {
    "name": "Ronald Hecht",
    "email": "ronald.hecht@gmx.de",
    "time": "Mon Jun 15 09:04:01 2026 +0200"
  },
  "committer": {
    "name": "Kevin Buettner",
    "email": "kevinb@redhat.com",
    "time": "Wed Jul 08 20:44:10 2026 -0700"
  },
  "message": "gdb: z80: Fix endless loop in frame unwinder and validate saved register types\n\nIn z80_frame_unwind_cache, the loop scanning for the frame base pointer\n(for (;; ++sp)) could run into an endless loop or scan too far if the\ntermination condition (sp \u003c this_base) was not met due to corrupted\nor unexpected stack layouts. This patch introduces a loop_count to\nlimit the scan to a maximum of 2 * addr_len iterations.\n\nAdditionally, when iterating through saved registers to adjust their\noffsets into concrete addresses, the code now explicitly checks if\nthe register actually holds an address using is_addr() before calling\naddr(). This prevents potential assertions or undefined behavior for\nregisters that do not contain valid address data.\n\ngdb/ChangeLog:\n\n\t* z80-tdep.c (z80_frame_unwind_cache): Limit stack scanning\n\tto 2 * addr_len iterations to prevent endless loops. Check\n\tis_addr() before adjusting saved register addresses.\n\nApproved-By: Kevin Buettner \u003ckevinb@redhat.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "7359f9bcfb6de23a664bb0e364a00ea3aee711e3",
      "old_mode": 33188,
      "old_path": "gdb/z80-tdep.c",
      "new_id": "6b995e74d9fb7a9b29994014f8800d2f9c9db367",
      "new_mode": 33188,
      "new_path": "gdb/z80-tdep.c"
    }
  ]
}
