)]}'
{
  "commit": "c2dfe9cf64ab960d65d72e1eb6aa7069fce9a137",
  "tree": "ca58b687da62b31049b8451ed49196805246220a",
  "parents": [
    "cff85e5a040b097508a13d20ee792292ccd0f296"
  ],
  "author": {
    "name": "Georg-Johann Lay",
    "email": "avr@gjlay.de",
    "time": "Sat Aug 22 13:06:03 2026 +0200"
  },
  "committer": {
    "name": "Georg-Johann Lay",
    "email": "avr@gjlay.de",
    "time": "Tue Aug 25 15:23:05 2026 +0200"
  },
  "message": "AVR: Output .gnu_attribute according to AS used for vtables.\n\nThis patch emits .gnu_attribute 4 (Tag_GNU_AVR_VTABLE_AS) according\nto the named address space used for C++ virtual tables.\n\nCurrently there are only two values possible:\n- Val_GNU_AVR_VTABLE_NONE: The unit doesn\u0027t use vtables.\n- Val_GNU_AVR_VTABLE_RAM:  There are vtables in the generic space.\n\nThe purpose of the patch is to tag object files with the vtable AS\nfor the case when future extensions support vtables in ASes other\nthan generic.\n\nThe patch has four parts:\n\n1) Add a configure test to define HAVE_AS_AVR_GNU_ATTRIBUTE\n   when Binutils support .gnu_attribute for AVR.\n   The test may return true for older Binutils versions that\n   effectively ignore the .gnu_attribute.\n\n2) Set avr_uses_vtable_p when the code invokes an indirect call\n   to a vtable entry.  This check is performed by the new mini\n   pass avr_pass_has that traverses gimple statements.\n\n3) avr_file_end() sets avr_uses_vtable_p when the varpool contains\n   a decl that represents a vtable.\n\n4) avr_file_end() emits .gnu_attribute 4 according to avr_uses_vtable_p.\n\ngcc/\n\t* configure.ac [avr] \u003cHAVE_AS_AVR_GNU_ATTRIBUTE\u003e: Set\n\taccording to gcc_GAS_CHECK_FEATURE for .gnu_attribute.\n\t* configure: Rebuild.\n\t* config.in: Rebuild.\n\t* config/avr/avr.h (avr_addrspace_t) \u003cgnu_attr_val\u003e: New field.\n\t* config/avr/avr.cc (avr_addrspace): Adjust initializer.\n\t(avr_uses_vtable_p): New global variable.\n\t(avr_file_end): Update avr_uses_vtable_p according to varpool,\n\tthen output .gnu_attribute 4 according to avr_uses_vtable_p.\n\t* config/avr/avr-passes.cc (gimple.h): Include.\n\t(gimple-iterator.h): Include.\n\t(avr_pass_data_has): New pass data.\n\t(avr_pass_has): New gimple pass.\n\t(make_avr_pass_has): New function.\n\t* config/avr/avr-passes.def (avr_pass_has): Insert pass.\n\t* config/avr/avr-protos.h (avr_uses_vtable_p): New global var.\n\t(class gimple_opt_pass): Declare.\n\t(make_avr_pass_has): New proto.\n\t* config/avr/avr.md (Tag_GNU_AVR_VTABLE_AS)\n\t(Val_GNU_AVR_VTABLE_NONE, Val_GNU_AVR_VTABLE_RAM)\n\t(Val_GNU_AVR_VTABLE_FLASH, Val_GNU_AVR_VTABLE_FLASH1)\n\t(Val_GNU_AVR_VTABLE_FLASH2, Val_GNU_AVR_VTABLE_FLASH3)\n\t(Val_GNU_AVR_VTABLE_FLASH4, Val_GNU_AVR_VTABLE_FLASH5)\n\t(Val_GNU_AVR_VTABLE_FLASHX): Define constants.\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "34ff1b1cb9953d9bafb3dff168b7d6dd1cdff8eb",
      "old_mode": 33188,
      "old_path": "gcc/config.in",
      "new_id": "b90caa0dd57a1e2bca48e85d23c09801ab53fd48",
      "new_mode": 33188,
      "new_path": "gcc/config.in"
    },
    {
      "type": "modify",
      "old_id": "f60298131642e432e44ce7299adcd1782193873d",
      "old_mode": 33188,
      "old_path": "gcc/config/avr/avr-passes.cc",
      "new_id": "13bc1b125dad0eb7cff19ef91e17e4164353f43f",
      "new_mode": 33188,
      "new_path": "gcc/config/avr/avr-passes.cc"
    },
    {
      "type": "modify",
      "old_id": "fd535e65401fa0478fffa4bfde0fc577e4c2da78",
      "old_mode": 33188,
      "old_path": "gcc/config/avr/avr-passes.def",
      "new_id": "d50285c3f896daf535ac78527816d5303dc1df5e",
      "new_mode": 33188,
      "new_path": "gcc/config/avr/avr-passes.def"
    },
    {
      "type": "modify",
      "old_id": "9013745d9144b9e64908ee3fc11d97d81c4b9803",
      "old_mode": 33188,
      "old_path": "gcc/config/avr/avr-protos.h",
      "new_id": "c91c6efc29b857eb017376f7f438a1bb84d6c7f1",
      "new_mode": 33188,
      "new_path": "gcc/config/avr/avr-protos.h"
    },
    {
      "type": "modify",
      "old_id": "084ee2d3715a843b09ecf96a37deaca16ef608b8",
      "old_mode": 33188,
      "old_path": "gcc/config/avr/avr.cc",
      "new_id": "0bdf7a5b90adcee99a57888c81375b4a351fcbcb",
      "new_mode": 33188,
      "new_path": "gcc/config/avr/avr.cc"
    },
    {
      "type": "modify",
      "old_id": "3c0b1b4283b2a67a43b5cbaa78218484dfd543b0",
      "old_mode": 33188,
      "old_path": "gcc/config/avr/avr.h",
      "new_id": "0923fa26196a60bfc24fb713ce8231fec1cf82bc",
      "new_mode": 33188,
      "new_path": "gcc/config/avr/avr.h"
    },
    {
      "type": "modify",
      "old_id": "eb344ea4e70fc1958d9c428472717190ba725b47",
      "old_mode": 33188,
      "old_path": "gcc/config/avr/avr.md",
      "new_id": "26ae9e501c9d51ffff7a3c3089942225d6bd7b22",
      "new_mode": 33188,
      "new_path": "gcc/config/avr/avr.md"
    },
    {
      "type": "modify",
      "old_id": "f85017814740b64ed70a7241dc2600f8cb7bae17",
      "old_mode": 33261,
      "old_path": "gcc/configure",
      "new_id": "43ca45144b88c25e9347478083d6ad65afc1ae35",
      "new_mode": 33261,
      "new_path": "gcc/configure"
    },
    {
      "type": "modify",
      "old_id": "1773706e70a9e81f68f96b09a5c6549e41dc86d2",
      "old_mode": 33188,
      "old_path": "gcc/configure.ac",
      "new_id": "075b6b68ffab9539e3aeb382a641974a4d7ad822",
      "new_mode": 33188,
      "new_path": "gcc/configure.ac"
    }
  ]
}
