)]}'
{
  "commit": "5079bf895955c6f7f40c1846ae38ecb26cde1be6",
  "tree": "95facd122e55df8e2d7ae15010d451ee9d1a201b",
  "parents": [
    "6ca8915c61a396e433b952b946626481acc020fe"
  ],
  "author": {
    "name": "Jens Remus",
    "email": "jremus@linux.ibm.com",
    "time": "Wed Oct 15 17:45:48 2025 +0200"
  },
  "committer": {
    "name": "Jens Remus",
    "email": "jremus@linux.ibm.com",
    "time": "Wed Oct 15 17:45:48 2025 +0200"
  },
  "message": "gas: sframe: Represent .cfi_undefined RA as FRE without offsets\n\nIn DWARF CFI an \"undefined\" register rule for the return address (RA)\nregister indicates that there is no return address and the stack trace\nis complete.\n\nRepresent DW_CFA_undefined as SFrame FRE without any offsets, so that a\nstack tracer implementation can use this as indication that an outermost\nframe has been reached and the stack trace is complete.\n\nThis representation is backward compatible, as existing stack tracers\nshould already deal with the case, that an SFrame FRE a so far invalid\noffset count of zero and stop the trace.\n\ninclude/\n\t* sframe.h (SFRAME_V2_FRE_RA_UNDEFINED_P): New macro to test\n\tFRE info word for RA undefined (FRE without any offsets).\n\nbinutils/\n\t* NEWS: Mention SFrame can represent an undefined RA as FRE\n\twithout\tany offsets.\n\ngas/\n\t* gen-sframe.h (struct sframe_row_entry): Add ra_undefined_p\n\tflag.\n\t* gen-sframe.c (sframe_row_entry_new): Initialize ra_undefined_p\n\tflag to not set.\n\t(sframe_row_entry_initialize): Treat ra_undefined_p flag as\n\tsticky.\n\t(sframe_fre_set_ra_track): Reset ra_undefined_p flag.\n\t(sframe_xlate_do_restore): Reset ra_undefined_p flag to saved\n\tstate.\n\t(sframe_xlate_do_same_value): Reset ra_undefined_p flag.\n\t(sframe_xlate_do_cfi_undefined): For RA set ra_undefined_p flag.\n\t(output_sframe_row_entry): Represent RA undefined as SFrame FRE\n\twithout any offsets and FRE info word fields zeroed.\n\t* NEWS: Mention assembler represents .cfi_undefined RA in SFrame\n\tas FRE without any offsets.\n\nlibsframe/\n\t* doc/sframe-spec.texi (Changes from Version 1 to Version 2):\n\tMention that a SFrame FRE without any offsets flag indicates an\n\toutermost frame with an undefined RA.\n\t(fre_offset_count): Document that a FRE offset count of zero\n\tindicates an outermost frame with an undefined RA.\n\t* sframe.c (sframe_get_fre_ra_undefined_p): Use macro\n\tSFRAME_V2_FRE_RA_UNDEFINED_P.\n\t(sframe_fre_get_fp_offset, sframe_fre_get_ra_offset): Do not\n\treturn fixed FP/RA offset if RA undefined.\n\t* sframe-dump.c (dump_sframe_func_with_fres): Show FRE without\n\tany offsets as \"RA undefined\".\n\ngas/testsuite/\n\t* gas/cfi-sframe/cfi-sframe.exp: Run tests for .cfi_undefined RA\n\ton AArch64, s390x, and x86-64.\n\t* gas/cfi-sframe/cfi-sframe-aarch64-ra-undefined-1.d: Add test\n\tfor .cfi_undefined RA on AArch64.\n\t* gas/cfi-sframe/cfi-sframe-aarch64-ra-undefined-1.s: Likewise.\n\t* as/cfi-sframe/cfi-sframe-s390x-ra-undefined-1.d: Add test\n\tfor .cfi_undefined RA on s390x.\n\t* gas/cfi-sframe/cfi-sframe-s390x-ra-undefined-1.s: Likewise.\n\t* gas/cfi-sframe/cfi-sframe-x86_64-ra-undefined-1.d: Add test\n\tfor .cfi_undefined RA on x86-64.\n\t* gas/cfi-sframe/cfi-sframe-x86_64-ra-undefined-1.s: Likewise.\n\nSigned-off-by: Jens Remus \u003cjremus@linux.ibm.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "0a4ed3bcc430bb6890311ed88550b87fbac2bf4c",
      "old_mode": 33188,
      "old_path": "binutils/NEWS",
      "new_id": "c7c44a708d278336f50f98fa95d69c09a16b209b",
      "new_mode": 33188,
      "new_path": "binutils/NEWS"
    },
    {
      "type": "modify",
      "old_id": "4de0cfbcc916c73e0b8beb688b276c488062a7d4",
      "old_mode": 33188,
      "old_path": "gas/NEWS",
      "new_id": "4bd3d747aa5b7c5ab115c67d97364d133db01775",
      "new_mode": 33188,
      "new_path": "gas/NEWS"
    },
    {
      "type": "modify",
      "old_id": "8643ee8731e85f5c391c2b23d4a7cfe7d4221b08",
      "old_mode": 33188,
      "old_path": "gas/gen-sframe.c",
      "new_id": "b1aa8072410b4d9c8dc4beee64da875d323de55a",
      "new_mode": 33188,
      "new_path": "gas/gen-sframe.c"
    },
    {
      "type": "modify",
      "old_id": "8ad521b5cbee2e4d22ec0fffd176dfd51348f6ca",
      "old_mode": 33188,
      "old_path": "gas/gen-sframe.h",
      "new_id": "cf9f5987bf5fd5ce8c28d43070fd22809b8944a4",
      "new_mode": 33188,
      "new_path": "gas/gen-sframe.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "f6bd6d71008bcba331b1c247385be7445c72ca3e",
      "new_mode": 33188,
      "new_path": "gas/testsuite/gas/cfi-sframe/cfi-sframe-aarch64-ra-undefined-1.d"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "7b28ab8f6528dae32a00a7b1fcf6e555e7075eb2",
      "new_mode": 33188,
      "new_path": "gas/testsuite/gas/cfi-sframe/cfi-sframe-aarch64-ra-undefined-1.s"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "dfd47e30bbe9caba9b39350efecbcb65a225ec63",
      "new_mode": 33188,
      "new_path": "gas/testsuite/gas/cfi-sframe/cfi-sframe-s390x-ra-undefined-1.d"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "2117a4ca2f04bf1cd0ef8a4d992e5b6a3ddd5832",
      "new_mode": 33188,
      "new_path": "gas/testsuite/gas/cfi-sframe/cfi-sframe-s390x-ra-undefined-1.s"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "a635c3cd9cbf273afc0fd0c70ffbf4cb8b6bdc9f",
      "new_mode": 33188,
      "new_path": "gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-ra-undefined-1.d"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "0f5b9c71715f93350bc979c66a2a249b2ab367f9",
      "new_mode": 33188,
      "new_path": "gas/testsuite/gas/cfi-sframe/cfi-sframe-x86_64-ra-undefined-1.s"
    },
    {
      "type": "modify",
      "old_id": "7c93164c4c63b19e6604456f72eb274f72bc2ef3",
      "old_mode": 33188,
      "old_path": "gas/testsuite/gas/cfi-sframe/cfi-sframe.exp",
      "new_id": "208285165469ad78cf8ffef6a352803ee672fe51",
      "new_mode": 33188,
      "new_path": "gas/testsuite/gas/cfi-sframe/cfi-sframe.exp"
    },
    {
      "type": "modify",
      "old_id": "7523adbef3a879abbdf644132cb33339f6c69ff7",
      "old_mode": 33188,
      "old_path": "include/sframe.h",
      "new_id": "127bf375057701188b6c7543d479bf056f9c48e6",
      "new_mode": 33188,
      "new_path": "include/sframe.h"
    },
    {
      "type": "modify",
      "old_id": "73060ff8451e9964c821cd3a0815c100f6474532",
      "old_mode": 33188,
      "old_path": "libsframe/doc/sframe-spec.texi",
      "new_id": "689cc28add7fd62f7d5b7aeb3a320688b0df2887",
      "new_mode": 33188,
      "new_path": "libsframe/doc/sframe-spec.texi"
    },
    {
      "type": "modify",
      "old_id": "d55d3847194e47227023f91b9a1161d8370d249f",
      "old_mode": 33188,
      "old_path": "libsframe/sframe-dump.c",
      "new_id": "1290966439f2a5e395c71f365eaf0881f541fca9",
      "new_mode": 33188,
      "new_path": "libsframe/sframe-dump.c"
    },
    {
      "type": "modify",
      "old_id": "bd39780a9135ae521a2c772f507ed40e6398e2e9",
      "old_mode": 33188,
      "old_path": "libsframe/sframe.c",
      "new_id": "9d20f2e2d711096b413d4cbdac3b5a1599125c06",
      "new_mode": 33188,
      "new_path": "libsframe/sframe.c"
    }
  ]
}
