)]}'
{
  "commit": "1127a49b3242844d45d90658c7bfa886cd742ef1",
  "tree": "a304584cbadb93df024c5df62075c9b1f19a3d7c",
  "parents": [
    "dab5aee6dc3a8b19d5058f7c1b24d632a78a7adf"
  ],
  "author": {
    "name": "Zoran Zaric",
    "email": "Zoran.Zaric@amd.com",
    "time": "Mon Dec 07 19:00:31 2020 +0000"
  },
  "committer": {
    "name": "Simon Marchi",
    "email": "simon.marchi@polymtl.ca",
    "time": "Tue Dec 08 11:16:21 2020 -0500"
  },
  "message": "Add support for nested composite locations\n\nAfter allowing a location description to be placed on a DWARF stack,\nin an effort to achieve a full composability of the DWARF expression,\nit is necessary to enable forming of a nested composite location\ndescriptions.\n\nTo be able do this, a new operation DW_OP_LLVM_piece_end needs to be\nintroduced, along with some additional rules on the way how the\ncomposite location description is formed using the existing DW_OP_piece\nand DW_OP_bit_piece operations. These new rules are fully compatible\nwith the composite forming rules from the DWARF 5 standard.\n\nMore details on the new operation and added rules can be found here:\n\nhttps://llvm.org/docs/AMDGPUDwarfExtensionsForHeterogeneousDebugging.html\n\ngdb/ChangeLog:\n\n\t* compile/compile-loc2c.c (compute_stack_depth_worker): Add new\n\tDW_OP_LLVM_piece_end operation support.\n\t* dwarf2/expr.c (class dwarf_value): Add copy constructor.\n\t(class dwarf_location): Add copy constructor.\n\t(class dwarf_undefined): Add copy constructor.\n\t(class dwarf_memory): Add copy constructor.\n\t(class dwarf_register): Add copy constructor.\n\t(class dwarf_implicit): Add copy constructor.\n\t(class dwarf_implicit_pointer): Add copy constructor.\n\t(class dwarf_composite): Add copy constructor.\n\t(read_from_location): Add composite completed check.\n\t(write_to_location): Add composite completed check.\n\t(read_value_contents_from_location): New function.\n\t(dwarf_entry_factory::copy_entry): New method.\n\t(rw_closure_value): Now calls read_value_contents_from_location\n\tfunction.\n\t(dwarf_expr_context::add_piece): Use new composite forming\n\trules.\n\t(dwarf_expr_context::execute_stack_op): Add new\n\tDW_OP_LLVM_piece_end operation support.\n\t* dwarf2/loc.c (dwarf2_get_symbol_read_needs): Add new\n\tDW_OP_LLVM_piece_end operation support.\n\ninclude/ChangeLog:\n\n\t* dwarf2.def (DW_OP_DUP): Add new DW_OP_LLVM_piece_end\n          enumeration.\n\ngdb/testsuite/ChangeLog:\n\n\t* gdb.dwarf2/dw2-llvm-piece-end.exp: New test.\n\nChange-Id: Ib0b25e5de3f23df89d7d9e86aad56029c7d173df\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "e9698a758e659adbd3e809d1baa419948554a957",
      "old_mode": 33188,
      "old_path": "gdb/compile/compile-loc2c.c",
      "new_id": "fd28f2cd4ed618862f1ff97aaa65fd9c51807f37",
      "new_mode": 33188,
      "new_path": "gdb/compile/compile-loc2c.c"
    },
    {
      "type": "modify",
      "old_id": "a65d18d492a9bc6ca3615e48a0b7fb313e1c9533",
      "old_mode": 33188,
      "old_path": "gdb/dwarf2/expr.c",
      "new_id": "647bf8810a5cc801be832e7d1132bd74fa20d6a4",
      "new_mode": 33188,
      "new_path": "gdb/dwarf2/expr.c"
    },
    {
      "type": "modify",
      "old_id": "1a903ce123332753f93d935640560e404b10ff25",
      "old_mode": 33188,
      "old_path": "gdb/dwarf2/loc.c",
      "new_id": "e98d6fb39d6843ac95be775ec8661a84536680b7",
      "new_mode": 33188,
      "new_path": "gdb/dwarf2/loc.c"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "3da739ea7203061737ddf6986f8018f28df910eb",
      "new_mode": 33188,
      "new_path": "gdb/testsuite/gdb.dwarf2/dw2-llvm-piece-end.exp"
    },
    {
      "type": "modify",
      "old_id": "b58560296d6e4ba100a32bd939d7ec14d2541c85",
      "old_mode": 33188,
      "old_path": "include/dwarf2.def",
      "new_id": "fa6c20a9ef0c07329a75ba8a5c87207397a8962e",
      "new_mode": 33188,
      "new_path": "include/dwarf2.def"
    }
  ]
}
