)]}'
{
  "commit": "7412b0a35c72921f9d84a2f6b07219f7cb6acd6d",
  "tree": "aeb8111bf10c9e1260f8accae1a27052cf78e33d",
  "parents": [
    "6fb5a51c4084d5734e2da524b9fc023db49a57c5"
  ],
  "author": {
    "name": "Nick Alcock",
    "email": "nick.alcock@oracle.com",
    "time": "Mon Sep 22 21:07:11 2025 +0100"
  },
  "committer": {
    "name": "Nick Alcock",
    "email": "nick.alcock@oracle.com",
    "time": "Thu Sep 25 05:42:27 2025 +0100"
  },
  "message": "libctf: fix querying of large structures\n\nAfter GCC PR 121411 is fixed, large structures (with offsets \u003e 512MiB)\nare written correctly... but libctf cannot query them properly unless\nthey are even bigger (\u003e 4GiB), because it checks to see if the ctt_size\nis CTF_LSIZE_SENT to decide whether to use a ctf_lmember_t or a\nctf_member_t to encode the structure members.  But the structure member\noffsets are in *bits*, not bytes: the right value to check is\nCTF_LSTRUCT_THRESH, which is 1/8th the size.\n\n(Thanks to Martin Pirker \u003cmartin.pirker1@chello.at\u003e for the diagnosis\nand fix.)\n\nTesting this is a bit fun, because we don\u0027t want to emit an error if the\ncompiler is broken: but we cannot tell whether the compiler is broken\nusing the existing lookup harness, because its input is passed through\nthe linker (and thus the broken ld).  So add another sort of link mode,\n\"objects\", which keeps the constituent object files around and passes\nboth the final linker output and the object files that make it up to the\nlookup program.  Our testcase can then check the linker input to see if\nthe compiler is buggy, and only if it isn\u0027t check the linker output and\nfail if things aren\u0027t right.\n\nlibctf/\n\tPR libctf/33339\n\t* ctf-types.c (ctf_struct_member): Check CTF_LSTRUCT_THRESH, not\n\tCTF_LSIZE_SENT.\n\t* testsuite/lib/ctf-lib.exp (run_lookup_test): New \u0027objects\u0027\n\tlink option.\n\t* testsuite/libctf-lookup/big-struct-corruption.*: New test.\n\t* testsuite/libctf-lookup/big-struct-ctf.c: New test input.\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "044a1852c1a5f7d3739aeb3ba1433e10487e9083",
      "old_mode": 33188,
      "old_path": "libctf/ctf-types.c",
      "new_id": "d08d4542dc197936043e0086c983a8addbc577e6",
      "new_mode": 33188,
      "new_path": "libctf/ctf-types.c"
    },
    {
      "type": "modify",
      "old_id": "4df6619606b99ee75b6d7ceb10b42f80b610b3bd",
      "old_mode": 33188,
      "old_path": "libctf/testsuite/lib/ctf-lib.exp",
      "new_id": "7175e14c30a286b154b7970fa7982d7fa91feeb9",
      "new_mode": 33188,
      "new_path": "libctf/testsuite/lib/ctf-lib.exp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "2cc05be79cc1ed56a0250ac24225cf21fa14b8c4",
      "new_mode": 33188,
      "new_path": "libctf/testsuite/libctf-lookup/big-struct-corruption.c"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "980cb0bcecc8a94d5071e5ea30ab1da3fb45d949",
      "new_mode": 33188,
      "new_path": "libctf/testsuite/libctf-lookup/big-struct-corruption.lk"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "fc99a3e5878957116cd38e691d21ffbfbf0d8883",
      "new_mode": 33188,
      "new_path": "libctf/testsuite/libctf-lookup/big-struct-ctf.c"
    }
  ]
}
