)]}'
{
  "log": [
    {
      "commit": "4ef47f84324e925051a55de10f9a4f44ef1da844",
      "tree": "d6440787ad6ea4768fea545ac1c0e73bc72fef89",
      "parents": [
        "7f9c031edfc6d2f6be1c6e25a0d1e746427ab14a"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Wed Jan 15 13:39:32 2025 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Wed Jan 15 13:40:10 2025 -0300"
      },
      "message": "Prep 1.29\n\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "7f9c031edfc6d2f6be1c6e25a0d1e746427ab14a",
      "tree": "46e4bff6df3aeedda7a1324e03c434eead04d3f1",
      "parents": [
        "24c655f17e87549264415a34d9ed8982ff3fd706"
      ],
      "author": {
        "name": "Ihor Solodrai",
        "email": "ihor.solodrai@pm.me",
        "time": "Fri Jan 10 02:31:41 2025 +0000"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Fri Jan 10 10:49:36 2025 -0300"
      },
      "message": "btf_encoder: Always initialize func_state to 0\n\nBPF CI caught a segfault on aarch64 and s390x [1] after recent merges\ninto the master branch.\n\nThe segfault happened at free(func_state-\u003eannots) in\nbtf_encoder__delete_saved_funcs().\n\nfunc_state-\u003eannots arrived there uninitialized because after patch [2]\nin some cases func_state may be allocated with a realloc, but was not\nzeroed out.\n\nFix this bug by always memset-ing a func_state to zero in\nbtf_encoder__alloc_func_state().\n\n[1] https://github.com/kernel-patches/bpf/actions/runs/12700574327\n[2] https://lore.kernel.org/dwarves/20250109185950.653110-11-ihor.solodrai@pm.me/\n\nTested-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nCc: Andrii Nakryiko \u003candrii@kernel.org\u003e\nCc: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nCc: Jiri Olsa \u003cjolsa@kernel.org\u003e\nCc: Mykola Lysenko \u003cmykolal@fb.com\u003e\nLink: https://lore.kernel.org/r/20250110023138.659519-1-ihor.solodrai@pm.me\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "24c655f17e87549264415a34d9ed8982ff3fd706",
      "tree": "417e484ff68fc72bc2b5d71487780de2c4cac171",
      "parents": [
        "e3545ca63e50c309e483db7938a43d04e955baf5"
      ],
      "author": {
        "name": "Ihor Solodrai",
        "email": "ihor.solodrai@pm.me",
        "time": "Thu Jan 09 19:00:54 2025 +0000"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Thu Jan 09 18:36:03 2025 -0300"
      },
      "message": "btf_encoder: Switch func_states from a list to an array\n\nWith only a single encoder, it\u0027s now easier to acummulate function\nstates into an array, and then sort it before merging the states and\nadding the functions to BTF.\n\nPreviously a list (per encoder) was collected, and because the sorting\nis required, the lists had to be converted into a temporary array in a\nseparate step.\n\nSigned-off-by: Ihor Solodrai \u003cihor.solodrai@pm.me\u003e\nCc: Alan Maguire \u003calan.maguire@oracle.com\u003e\nCc: Andrii Nakryiko \u003candrii@kernel.org\u003e\nCc: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nCc: Jiri Olsa \u003cjolsa@kernel.org\u003e\nCc: Mykola Lysenko \u003cmykolal@fb.com\u003e\nLink: https://lore.kernel.org/r/20250109185950.653110-11-ihor.solodrai@pm.me\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "e3545ca63e50c309e483db7938a43d04e955baf5",
      "tree": "1d73c3cfdb23ac6b14846aa01f06b23630768e8f",
      "parents": [
        "4c916259c3e7fd3edd06751e4db067daa39a37b1"
      ],
      "author": {
        "name": "Ihor Solodrai",
        "email": "ihor.solodrai@pm.me",
        "time": "Thu Jan 09 19:00:48 2025 +0000"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Thu Jan 09 18:36:03 2025 -0300"
      },
      "message": "btf_encoder: Clean up global encoders list\n\nWith multithreading moved entirely to the dwarf_loader, now there is\nonly one btf_encoder. Hence there is no need to maintain a global list\nof encoders anymore.\n\nSigned-off-by: Ihor Solodrai \u003cihor.solodrai@pm.me\u003e\nCc: Alan Maguire \u003calan.maguire@oracle.com\u003e\nCc: Andrii Nakryiko \u003candrii@kernel.org\u003e\nCc: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nCc: Jiri Olsa \u003cjolsa@kernel.org\u003e\nCc: Mykola Lysenko \u003cmykolal@fb.com\u003e\nLink: https://lore.kernel.org/r/20250109185950.653110-10-ihor.solodrai@pm.me\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "4c916259c3e7fd3edd06751e4db067daa39a37b1",
      "tree": "c8646d00c0da74ab6520c7f114e022404320f785",
      "parents": [
        "17c757110e5ff2f1f7c6b20d2b142cec056a6dd7"
      ],
      "author": {
        "name": "Ihor Solodrai",
        "email": "ihor.solodrai@pm.me",
        "time": "Thu Jan 09 19:00:41 2025 +0000"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Thu Jan 09 18:36:03 2025 -0300"
      },
      "message": "dwarf_loader: Multithreading with a job/worker model\n\nMultithreading is now contained in dwarf_loader.c, and is implemented\nusing a jobs queue and a pool of worker threads. As a consequence,\nmultithreading-related code is removed from pahole.c.\n\nA single-thread special case is removed: queueing setup works fine with\na single worker, which will switch between jobs as appropriate.\n\nCode supporting previous version of the multithreading, such as\ncu_state, thread_data and related functions, is also removed.\n\nThe reproducible_build flag is now moot: the BTF encoding is always\nreproducible with these changes.\n\nThe goal outlined in the RFC [1] - making parallel reproducible BTF\ngeneration as fast as non-reproducible - is achieved by implementing the\nrequirement of ordered CU encoding (stealing) directly in the job queue\nin dwarf_loader.c\n\nThe synchronization in the queue is implemented by a mutex (which\nensures consistency of queue state) and a job_added condition variable.\nMotivation behind using condition variables is a classic one: we want to\navoid the threads checking the state of the queue in a busy loop,\ncompeting for a single mutex.\n\nIn comparison to the previous version of this patch [2], job_taken\ncondition variable is removed. The number of decoded CUs in memory is\nnow limited by initial JOB_DECODE jobs. The enqueue/dequeue interface is\nchanged aiming to reduce locking. See relevant discussion [3].\n\n[1] https://lore.kernel.org/dwarves/20241128012341.4081072-1-ihor.solodrai@pm.me/\n[2] https://lore.kernel.org/dwarves/20241213223641.564002-11-ihor.solodrai@pm.me/\n[3] https://lore.kernel.org/dwarves/58dc053c9d47a18124d8711604b08acbc6400340.camel@gmail.com/\n\nCo-developed-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nSigned-off-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nSigned-off-by: Ihor Solodrai \u003cihor.solodrai@pm.me\u003e\nCc: Alan Maguire \u003calan.maguire@oracle.com\u003e\nCc: Andrii Nakryiko \u003candrii@kernel.org\u003e\nCc: Jiri Olsa \u003cjolsa@kernel.org\u003e\nCc: Mykola Lysenko \u003cmykolal@fb.com\u003e\nLink: https://lore.kernel.org/r/20250109185950.653110-9-ihor.solodrai@pm.me\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "17c757110e5ff2f1f7c6b20d2b142cec056a6dd7",
      "tree": "6a90289597b857df21815e3dc7ab8db3b190102a",
      "parents": [
        "419e37941c470d1fabf072c4b58169e7292db246"
      ],
      "author": {
        "name": "Ihor Solodrai",
        "email": "ihor.solodrai@pm.me",
        "time": "Thu Jan 09 19:00:33 2025 +0000"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Thu Jan 09 18:36:03 2025 -0300"
      },
      "message": "dwarf_loader: Introduce cu-\u003eid\n\nAdd an id member to the struct cu.\n\nAn id is an index of a CU, in order they are created in dwarf_loader.c\nThis allows for an easy identification of a CU, particularly when they\nneed to be processed in order.\n\nSigned-off-by: Ihor Solodrai \u003cihor.solodrai@pm.me\u003e\nCc: Alan Maguire \u003calan.maguire@oracle.com\u003e\nCc: Andrii Nakryiko \u003candrii@kernel.org\u003e\nCc: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nCc: Jiri Olsa \u003cjolsa@kernel.org\u003e\nCc: Mykola Lysenko \u003cmykolal@fb.com\u003e\nLink: https://lore.kernel.org/r/20250109185950.653110-8-ihor.solodrai@pm.me\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "419e37941c470d1fabf072c4b58169e7292db246",
      "tree": "d36802b2ccf2edaf3768663ec43254cf3ec10d2d",
      "parents": [
        "99e78ff34f8171f9c04cf88956c24b8876fe80cc"
      ],
      "author": {
        "name": "Ihor Solodrai",
        "email": "ihor.solodrai@pm.me",
        "time": "Thu Jan 09 19:00:27 2025 +0000"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Thu Jan 09 18:36:03 2025 -0300"
      },
      "message": "btf_encoder: Remove skip_encoding_inconsistent_proto\n\nThis flag is needed only for btf_encoder__add_saved_funcs(), so there is\nno reason to keep it in each btf_encoder.\n\nSigned-off-by: Ihor Solodrai \u003cihor.solodrai@pm.me\u003e\nCc: Alan Maguire \u003calan.maguire@oracle.com\u003e\nCc: Andrii Nakryiko \u003candrii@kernel.org\u003e\nCc: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nCc: Jiri Olsa \u003cjolsa@kernel.org\u003e\nCc: Mykola Lysenko \u003cmykolal@fb.com\u003e\nLink: https://lore.kernel.org/dwarves/e1df45360963d265ea5e0b3634f0a3dae0c9c343.camel@gmail.com/\nLink: https://lore.kernel.org/r/20250109185950.653110-7-ihor.solodrai@pm.me\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "99e78ff34f8171f9c04cf88956c24b8876fe80cc",
      "tree": "71a79a495cf9b5206c6bbadd5309b04c69588f73",
      "parents": [
        "61f37edc7d860191331794db4bce230ab4267404"
      ],
      "author": {
        "name": "Ihor Solodrai",
        "email": "ihor.solodrai@pm.me",
        "time": "Thu Jan 09 19:00:21 2025 +0000"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Thu Jan 09 18:36:03 2025 -0300"
      },
      "message": "btf_encoder: Introduce elf_functions_list\n\nIn case of processing of multiple DWARF modules, multiple ELFs are read.\nThis requires maintaining and elf_functions table per ELF.\n\nReplace btf_encoder.functions with btf_encoder.elf_functions_list, that\ncontains all necessary elf_functions tables.\n\nThe list is initialized when btf_encoder is created. When a new CU is\nassigned to the encoder in btf_encoder__encode_cu, an elf_functions\ntable will be created if the CU is coming from an unknown Elf.\n\nThis patch is a variant of [1], following a discussion at [2].\n\n[1] https://lore.kernel.org/bpf/20241213223641.564002-7-ihor.solodrai@pm.me/\n[2] https://lore.kernel.org/bpf/C82bYTvJaV4bfT15o25EsBiUvFsj5eTlm17933Hvva76CXjIcu3gvpaOCWPgeZ8g3cZ-RMa8Vp0y1o_QMR2LhPB-LEUYfZCGuCfR_HvkIP8\u003d@pm.me/\n\nSigned-off-by: Ihor Solodrai \u003cihor.solodrai@pm.me\u003e\nCc: Alan Maguire \u003calan.maguire@oracle.com\u003e\nCc: Andrii Nakryiko \u003candrii@kernel.org\u003e\nCc: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nCc: Jiri Olsa \u003cjolsa@kernel.org\u003e\nCc: Mykola Lysenko \u003cmykolal@fb.com\u003e\nLink: https://lore.kernel.org/r/20250109185950.653110-6-ihor.solodrai@pm.me\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "61f37edc7d860191331794db4bce230ab4267404",
      "tree": "2aadb9fe6acd85049e20a57ee0c145dd7d67618a",
      "parents": [
        "184dcaa47cd40444eddebc97530492fb10415d0b"
      ],
      "author": {
        "name": "Ihor Solodrai",
        "email": "ihor.solodrai@pm.me",
        "time": "Thu Jan 09 19:00:16 2025 +0000"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Thu Jan 09 18:36:03 2025 -0300"
      },
      "message": "btf_encoder: Introduce elf_functions struct type\n\nExtract elf_functions struct type from btf_encoder.\n\nReplace routines operating on functions table in btf_encoder by routines\noperating on elf_functions:\n\n- btf_encoder__collect_function -\u003e elf_functions__collect_function\n- btf_encoder__collect_symbols -\u003e elf_functions__collect\n\nNow these functions do not depend on btf_encoder being passed to them as\na parameter.\n\nSigned-off-by: Ihor Solodrai \u003cihor.solodrai@pm.me\u003e\nAcked-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nCc: Alan Maguire \u003calan.maguire@oracle.com\u003e\nCc: Andrii Nakryiko \u003candrii@kernel.org\u003e\nCc: Jiri Olsa \u003cjolsa@kernel.org\u003e\nCc: Mykola Lysenko \u003cmykolal@fb.com\u003e\nLink: https://lore.kernel.org/dwarves/20241128012341.4081072-6-ihor.solodrai@pm.me/\nLink: https://lore.kernel.org/dwarves/3MqWfdjBO9srtpr8kjweJgCkdwYKV6JC_-SN27S8Y9_J1SzssIgZs4Ptc5tEqpZ7w2vbSmTQ35J5CX35Yb4KMbw8wsTrB2IAf2SWU-k4Xi4\u003d@pm.me/\nLink: https://lore.kernel.org/r/20250109185950.653110-5-ihor.solodrai@pm.me\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "184dcaa47cd40444eddebc97530492fb10415d0b",
      "tree": "ea215ef1895cca07cfbf3c327f1a72a1d690f06d",
      "parents": [
        "13ae534068b9f518d0a34f001a0d360331588bdb"
      ],
      "author": {
        "name": "Alan Maguire",
        "email": "alan.maguire@oracle.com",
        "time": "Thu Jan 09 19:00:11 2025 +0000"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Thu Jan 09 18:35:56 2025 -0300"
      },
      "message": "btf_encoder: Separate ELF function, saved function representations\n\nHave saved function representation point back at immutable ELF function\ntable.  This will make sharing the ELF function table across encoders\neasier.  Simply accumulate saved functions for each encoder, and on\ncompletion combine them into a name-sorted list.  Then carry out\ncomparisons to check for inconsistent representations, skipping functions\nthat are inconsistent in their representation.\n\n/usr/bin/time samples with this change:\n  jobs 1, mem 837844 Kb, time 6.40 sec\n  jobs 2, mem 936204 Kb, time 3.88 sec\n  jobs 4, mem 1023120 Kb, time 2.75 sec\n  jobs 8, mem 1163824 Kb, time 2.31 sec\n  jobs 16, mem 1190588 Kb, time 2.08 sec\n  jobs 32, mem 1341180 Kb, time 2.36 sec\n\n/usr/bin/time samples on next (3ddadc1):\n  jobs 1, mem 834100 Kb, time 6.20 sec\n  jobs 2, mem 925048 Kb, time 3.81 sec\n  jobs 4, mem 1025424 Kb, time 2.88 sec\n  jobs 8, mem 1178480 Kb, time 2.21 sec\n  jobs 16, mem 1241780 Kb, time 2.07 sec\n  jobs 32, mem 1442316 Kb, time 2.33 sec\n\nLink: https://lore.kernel.org/dwarves/20241128012341.4081072-4-ihor.solodrai@pm.me/\n\nSigned-off-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nCo-developed-by: Ihor Solodrai \u003cihor.solodrai@pm.me\u003e\nSigned-off-by: Ihor Solodrai \u003cihor.solodrai@pm.me\u003e\nCc: Andrii Nakryiko \u003candrii@kernel.org\u003e\nCc: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nCc: Jiri Olsa \u003cjolsa@kernel.org\u003e\nCc: Mykola Lysenko \u003cmykolal@fb.com\u003e\nLink: https://lore.kernel.org/r/20250109185950.653110-4-ihor.solodrai@pm.me\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "13ae534068b9f518d0a34f001a0d360331588bdb",
      "tree": "fc14ae120cf0768ef436d609f4ada05e2380a82f",
      "parents": [
        "80e501122a180e45e3459c1885a8f1c45f1fea33"
      ],
      "author": {
        "name": "Ihor Solodrai",
        "email": "ihor.solodrai@pm.me",
        "time": "Thu Jan 09 19:00:04 2025 +0000"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Thu Jan 09 18:35:48 2025 -0300"
      },
      "message": "btf_encoder: Free encoder-\u003esecinfo in btf_encoder__delete()\n\nencoder-\u003esecinfo is allocated in btf_encoder__new() and is never freed.\nFix that.\n\nReviewed-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nSigned-off-by: Ihor Solodrai \u003cihor.solodrai@pm.me\u003e\nCc: Andrii Nakryiko \u003candrii@kernel.org\u003e\nCc: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nCc: Jiri Olsa \u003cjolsa@kernel.org\u003e\nCc: Mykola Lysenko \u003cmykolal@fb.com\u003e\nLink: https://lore.kernel.org/dwarves/YiiVvWJxHUyK75b4FqlvAOnHvX9WLzCsRLG-236zf_cPZy1jmgbUq2xM4ChxRob1kaTVUdtVljtcpL2Cs3v1wXPGcP8dPeASBiYVGH3jEaQ\u003d@pm.me/\nLink: https://lore.kernel.org/r/20250109185950.653110-3-ihor.solodrai@pm.me\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "80e501122a180e45e3459c1885a8f1c45f1fea33",
      "tree": "f4258bc28768fac34bf8d2b3d535b30a5b532128",
      "parents": [
        "bc3e337e5b3799352d4133acc0081dff7952c621"
      ],
      "author": {
        "name": "Alan Maguire",
        "email": "alan.maguire@oracle.com",
        "time": "Thu Jan 09 18:59:59 2025 +0000"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Thu Jan 09 18:21:32 2025 -0300"
      },
      "message": "btf_encoder: Simplify function encoding\n\nCurrently we have two modes of function encoding; one adds functions\nbased upon the first instance found and ignores inconsistent\nrepresentations.  The second saves function representations and later\nfinds inconsistencies.  The mode chosen is determined by\nconf_load-\u003eskip_encoding_btf_inconsistent_proto.\n\nThe knock-on effect is that we need to support two modes in\nbtf_encoder__add_func(); one for each case.  Simplify by using the \"save\nfunction\" approach for both cases; only difference is that we allow\ninconsistent representations if skip_encoding_btf_inconsistent_proto is\nnot set (it is set by default for upstream kernels and has been for a\nwhile).\n\nSigned-off-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nAcked-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nAcked-by: Jiri Olsa \u003cjolsa@kernel.org\u003e\nCc: Alan Maguire \u003calan.maguire@oracle.com\u003e\nCc: Andrii Nakryiko \u003candrii@kernel.org\u003e\nCc: Jiri Olsa \u003cjolsa@kernel.org\u003e\nCc: Mykola Lysenko \u003cmykolal@fb.com\u003e\nLink: https://lore.kernel.org/dwarves/20241128012341.4081072-2-ihor.solodrai@pm.me/\nLink: https://lore.kernel.org/r/20250109185950.653110-2-ihor.solodrai@pm.me\nSigned-off-by: Ihor Solodrai \u003cihor.solodrai@pm.me\u003e\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "bc3e337e5b3799352d4133acc0081dff7952c621",
      "tree": "5cd2b191c7fe981d7b7908648e78ed7fbef0a0d4",
      "parents": [
        "176864dfe42f9f855da480e44f1c670bdf3bacd9"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Dec 30 16:32:24 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Thu Jan 09 15:29:04 2025 -0300"
      },
      "message": "pfunct: Don\u0027t print functions twice when using -f\n\nWe print it in the pfunct_stealer, i.e. as soon as we load the CU\ncontaining the function information, and then, later, we were iterating\nall cus and printing the functions that matched.\n\nDo it just at the stealer.\n\nTested-by: Ihor Solodrai \u003cihor.solodrai@pm.me\u003e\nCc: Alan Maguire \u003calan.maguire@oracle.com\u003e\nCc: Andrii Nakryiko \u003candrii@kernel.org\u003e\nCc: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nCc: Mykola Lysenko \u003cmykolal@fb.com\u003e\nLink: https://lore.kernel.org/all/Z3LoTvt7PtUAbh5K@x1\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "176864dfe42f9f855da480e44f1c670bdf3bacd9",
      "tree": "d0a8f09cfb95d20c037aeeaa69c0a313cfef1062",
      "parents": [
        "e703e6ebe92c976a5da3c12590ba3b36c2357f62"
      ],
      "author": {
        "name": "Eduard Zingerman",
        "email": "eddyz87@gmail.com",
        "time": "Tue Dec 10 18:12:27 2024 -0800"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Thu Jan 09 13:04:43 2025 -0300"
      },
      "message": "tests: Verify that pfunct prints btf_decl_tags read from BTF\n\nWhen using BTF as a source, pfunct should now be able to print\nbtf_decl_tags for programs like below:\n\n  #define __tag(x) __attribute__((btf_decl_tag(#x)))\n  __tag(a) __tag(b) void foo(void) {}\n\nThis situation arises after recent kernel changes, where tags \u0027kfunc\u0027\nand \u0027bpf_fastcall\u0027 are added to some functions. To avoid dependency on\na recent kernel version test this by compiling a small C program using\nclang with --target\u003dbpf, which would instruct clang to generate .BTF\nsection.\n\nReviewed-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nSigned-off-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nTested-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nTested-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nCc: Alexei Starovoitov \u003cast@kernel.org\u003e\nCc: Andrii Nakryiko \u003candrii@kernel.org\u003e\nCc: Daniel Borkmann \u003cdaniel@iogearbox.net\u003e\nCc: Yonghong Song \u003cyonghong.song@linux.dev\u003e\nCc: kernel-team@fb.com\nLink: https://lore.kernel.org/r/20241211021227.2341735-2-eddyz87@gmail.com\n[ Add a message at the start of the test, like the other tests, instead of just printing \"Ok\", as suggested by Alan ]\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "e703e6ebe92c976a5da3c12590ba3b36c2357f62",
      "tree": "ba4dc89c526e8281844a5e19ad6c8139a1626a5a",
      "parents": [
        "8067a85bf88af92538eca8e00db977b1276c934d"
      ],
      "author": {
        "name": "Eduard Zingerman",
        "email": "eddyz87@gmail.com",
        "time": "Tue Dec 10 18:12:26 2024 -0800"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Thu Jan 09 13:04:43 2025 -0300"
      },
      "message": "btf_loader: Support for multiple BTF_DECL_TAGs pointing to same tag\n\nbtf_loader issues a warning when it sees several BTF_DECL_TAGs\npointing to the same type. Such situation is possible in practice\nafter patch [0], that marks certain functions with kfunc and\nbpf_fastcall tags. E.g.:\n\n  $ pfunct vmlinux -F btf -f bpf_rdonly_cast\nWARNING: still unsuported BTF_KIND_DECL_TAG(bpf_fastcall) for bpf_cast_to_kern_ctx already with attribute (bpf_kfunc), ignoring\nWARNING: still unsuported BTF_KIND_DECL_TAG(bpf_fastcall) for bpf_rdonly_cast already with attribute (bpf_kfunc), ignoring\n  bpf_kfunc void * bpf_rdonly_cast(const void  * obj__ign, u32 btf_id__k);\n\nThis commit extends \u0027struct tag\u0027 to allow attaching multiple\nattributes. Define \u0027struct attributes\u0027 as follows:\n\n  struct attributes {\n        uint64_t cnt;\n        const char *values[];\n  };\n\nIn order to avoid adding counter field in \u0027struct tag\u0027,\nas not many instances of \u0027struct tag\u0027 would have attributes.\n\nSame command after this patch:\n\n  $ pfunct vmlinux -F btf -f bpf_rdonly_cast\n  bpf_kfunc bpf_fastcall void * bpf_rdonly_cast(const void  * obj__ign, u32 btf_id__k);\n\n[0] https://lore.kernel.org/dwarves/094b626d44e817240ae8e44b6f7933b13c26d879.camel@gmail.com/T/#m8a6cb49a99d1b2ba38d616495a540ae8fc5f3a76\n\nCloses: https://lore.kernel.org/dwarves/Z1dFXVFYmQ-nHSVO@x1/\nReported-by: Arnaldo Carvalho de Melo \u003cacme@kernel.org\u003e\nReviewed-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nSigned-off-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nTested-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nTested-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nCc: Alexei Starovoitov \u003cast@kernel.org\u003e\nCc: Andrii Nakryiko \u003candrii@kernel.org\u003e\nCc: Daniel Borkmann \u003cdaniel@iogearbox.net\u003e\nCc: Yonghong Song \u003cyonghong.song@linux.dev\u003e\nCc: kernel-team@fb.com\nLink: https://lore.kernel.org/r/20241211021227.2341735-1-eddyz87@gmail.com\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "8067a85bf88af92538eca8e00db977b1276c934d",
      "tree": "7dd62890dfea6bf9ccb9db29b9887f0b014fb900",
      "parents": [
        "1cb4202ed2cbd591734f6b7fb1d2b8aa8eb5a1c3"
      ],
      "author": {
        "name": "Ihor Solodrai",
        "email": "ihor.solodrai@pm.me",
        "time": "Sat Dec 21 03:04:50 2024 +0000"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Thu Jan 09 13:03:50 2025 -0300"
      },
      "message": "dwarves: Increase cu-\u003eobstack chunk size to 128Kb\n\nIn dwarf_loader with growing nr_jobs the wall-clock time of BTF encoding\nstarts worsening after a certain point [1].\n\nWhile some overhead of additional threads is expected, it\u0027s not supposed\nto be noticeable unless nr_jobs is set to an unreasonably big value.\n\nIt turns out when there are \"too many\" threads decoding DWARF, they\nstart competing for memory allocation: significant number of cycles is\nspent in osq_lock - in the depth of malloc called within cu__zalloc.\nWhich suggests that many threads are trying to allocate memory at the\nsame time.\n\nSee an example on a perf flamegraph for run with -j240 [2]. This is\n12-core machine, so the effect is small. On machines with more cores\nthis problem is worse.\n\nIncreasing the chunk size of obstacks associated with CUs helps to\nreduce the performance penalty caused by this race condition.\n\n[1] https://lore.kernel.org/dwarves/C82bYTvJaV4bfT15o25EsBiUvFsj5eTlm17933Hvva76CXjIcu3gvpaOCWPgeZ8g3cZ-RMa8Vp0y1o_QMR2LhPB-LEUYfZCGuCfR_HvkIP8\u003d@pm.me/\n[2] https://gist.github.com/theihor/926af22417a78605fec8d85e1338920e\n\nCommitter notes:\n\nAlan asked and Ihor provided additional details:\n\n  \u003e Is this because starting with a larger obstack size means we don\u0027t have\n  \u003e to keep reallocating as the obstack grows?\n\n  Yes. Bigger obstack size leads to lower number of malloc calls. The\n  mallocs tend to happen at the same time between threads in the case of\n  DWARF decoding.\n\n  Curiously, setting a higher obstack chunk size (like 1Mb), does not\n  improve the overall wall-clock time, and can even make it worse.\n  This happens because the kernel takes a different code path to allocate\n  bigger chunks of memory. And also most CUs are not big (at least in case\n  of vmlinux), so a bigger chunk size probably increases wasted memory.\n\n  128Kb seems to be close to a sweet spot for the vmlinux.\n  The default is 4Kb\n\nReviewed-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nSigned-off-by: Ihor Solodrai \u003cihor.solodrai@pm.me\u003e\nTested-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nCc: Andrii Nakryiko \u003candrii@kernel.org\u003e\nCc: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nCc: Mykola Lysenko \u003cmykolal@fb.com\u003e\nLink: https://lore.kernel.org/r/20241221030445.33907-1-ihor.solodrai@pm.me\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "1cb4202ed2cbd591734f6b7fb1d2b8aa8eb5a1c3",
      "tree": "369573099224a82ca27ba6459352217306c3587e",
      "parents": [
        "3ddadc131586d6f3aa68775636adff5f7e7ff0f0"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Fri Dec 06 17:30:08 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Fri Dec 06 17:30:08 2024 -0300"
      },
      "message": "Prep 1.28\n\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "3ddadc131586d6f3aa68775636adff5f7e7ff0f0",
      "tree": "c9c8afb9a559417232a295798075eb5e1362f4dc",
      "parents": [
        "12ca11281912c272f931e836b9160ee827250716"
      ],
      "author": {
        "name": "Eduard Zingerman",
        "email": "eddyz87@gmail.com",
        "time": "Tue Nov 26 17:50:06 2024 -0800"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Thu Nov 28 17:04:45 2024 -0300"
      },
      "message": "btf_encoder: handle .BTF_ids section endianness\n\nbtf_encoder__tag_kfuncs() reads .BTF_ids section to identify a set of\nkfuncs present in the ELF file being processed.\n\nThis section consists of:\n\n- arrays of uint32_t elements;\n- arrays of records with the following structure:\n  struct btf_id_and_flag {\n      uint32_t id;\n      uint32_t flags;\n  };\n\nWhen endianness of a binary operated by pahole differs from the host\nsystem\u0027s endianness, these fields require byte-swapping before use.\nCurrently, this byte-swapping does not occur, resulting in kfuncs not\nbeing marked with declaration tags.\n\nThis commit resolves the issue by using elf_getdata_rawchunk() function\nto read .BTF_ids section data. When called with ELF_T_WORD as \u0027type\u0027\nparameter it does necessary byte order conversion (only if host and elf\nendianness do not match).\n\nFixes: 72e88f29c6f7e142 (\"pahole: Inject kfunc decl tags into BTF\")\nReviewed-by: Vadim Fedorenko \u003cvadim.fedorenko@linux.dev\u003e\nSigned-off-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nAcked-by: Jiri Olsa \u003cjolsa@kernel.org\u003e\nCc: Alan Maguire \u003calan.maguire@oracle.com\u003e\nCc: Alexei Starovoitov \u003cast@kernel.org\u003e\nCc: Andrii Nakryiko \u003candrii@kernel.org\u003e\nCc: Daniel Borkmann \u003cdaniel@iogearbox.net\u003e\nCc: Daniel Xu \u003cdxu@dxuuu.xyz\u003e\nCc: kernel-team@fb.com\nCc: Kumar Kartikeya Dwivedi \u003cmemxor@gmail.com\u003e\nCc: Vadim Fedorenko \u003cvadfed@meta.com\u003e\nCc: Yonghong Song \u003cyonghong.song@linux.dev\u003e\nLink: https://lore.kernel.org/r/20241127015006.2013050-2-eddyz87@gmail.com\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "12ca11281912c272f931e836b9160ee827250716",
      "tree": "6ed625650d328b75cc40f860ee43fbdbc88d9e27",
      "parents": [
        "a2abd948216237def9f20738a17eb8b4f7912fd0"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Nov 26 14:19:16 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Nov 26 14:24:05 2024 -0300"
      },
      "message": "CMakeLists.txt: Require cmake 3.5 or higher\n\nTo address this warning from cmake:\n\nCMake Deprecation Warning at CMakeLists.txt:1 (cmake_minimum_required):\n  Compatibility with CMake \u003c 3.5 will be removed from a future version of\n  CMake.\n\n  Update the VERSION argument \u003cmin\u003e value or use a ...\u003cmax\u003e suffix to tell\n  CMake that the project does not need compatibility with older versions.\n\nCc: Alan Maguire \u003calan.maguire@oracle.com\u003e\nCc: Andrii Nakryiko \u003candrii.nakryiko@gmail.com\u003e\nCc: Domenico Andreoli \u003ccavok@debian.org\u003e\nCc: Dominique Leuenberger \u003cdimstar@opensuse.org\u003e\nCc: Dominique Martinet \u003casmadeus@codewreck.org\u003e\nCc: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nCc: Guilherme Amadio \u003camadio@gentoo.org\u003e\nCc: Jan Alexander Steffens \u003cheftig@archlinux.org\u003e\nCc: Jiri Olsa \u003cjolsa@kernel.org\u003e\nCc: Matthias Schwarzott \u003czzam@gentoo.org\u003e\nLink: https://lore.kernel.org/all/Z0YEFABQejfGTyrj@x1\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "a2abd948216237def9f20738a17eb8b4f7912fd0",
      "tree": "f980277d19cfc2ef194cf11acd39281e4a46219a",
      "parents": [
        "98d1f018a8fc3fc368778e364705d39aa6d6396c"
      ],
      "author": {
        "name": "Ben Olson",
        "email": "matthew.olson@intel.com",
        "time": "Mon Nov 25 15:35:25 2024 -0600"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Nov 26 13:10:49 2024 -0300"
      },
      "message": "CMakeList.txt: Respect CMAKE_INSTALL_LIBDIR\n\nThis patch changes the `cmake` configuration to honor `CMAKE_INSTALL_LIBDIR`\nand use either `lib` or `lib64` by default so that installations match the\nconventional placement of libraries.\n\nFor example, it will now install `libdwarves.so` into `${PREFIX}/lib` or\n`${PREFIX}/lib64`, depending on the distribution.\n\nReviewed-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nSigned-off-by: Ben Olson \u003cmatthew.olson@intel.com\u003e\nTested-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nLink: https://lore.kernel.org/r/Z0TtnS-0iXq1Bc-0@bolson-desk\nSigned-off-by: Brandon Kammerdiener \u003cbrandon.kammerdiener@intel.com\u003e\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "98d1f018a8fc3fc368778e364705d39aa6d6396c",
      "tree": "2c862c3c78f249da8cf6ae8a12562fa686068730",
      "parents": [
        "031495f8a4b193bfdf107e4e7171d16d4b5fc815"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Nov 18 17:06:25 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Nov 19 17:19:57 2024 -0300"
      },
      "message": "tests default_vmlinux_btf: Cover the no args segfault too\n\n  root@x1:/home/acme/git/pahole# pahole --running_kernel_vmlinux\n  pahole: couldn\u0027t find a vmlinux that matches the running kernel\n  HINT: Maybe you\u0027re inside a container or missing a debuginfo package?\n  root@x1:/home/acme/git/pahole# tests/default_vmlinux_btf.sh\n  Default BTF on a system without BTF: FAILED\n  root@x1:/home/acme/git/pahole# pahole\n  Segmentation fault (core dumped)\n  root@x1:/home/acme/git/pahole#\n\nReported-by: Matthias Schwarzott \u003czzam@gentoo.org\u003e\nReviewed-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nTested-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nAcked-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nCc: Andrii Nakryiko \u003candrii@kernel.org\u003e\nCc: Jiri Olsa \u003cjolsa@kernel.org\u003e\nCc: Song Liu \u003csong@kernel.org\u003e\nCc: Yonghong Song \u003cyonghong.song@linux.dev\u003e\nLink: https://lore.kernel.org/all/ZzzQEdPoMDoGjI5z@x1\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "031495f8a4b193bfdf107e4e7171d16d4b5fc815",
      "tree": "9024235d1ecf2c13d176b3695e49ca10544a0687",
      "parents": [
        "9374bf455e5dcfab73e84881b6bc0a09d3b7f41c"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Nov 18 16:47:31 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Nov 19 17:19:46 2024 -0300"
      },
      "message": "tests default_vmlinux_btf: Introduce test for using BTF by default\n\nOn a system without any debugging info or when one specifies BTF as the\nonly BTF info desired but no BTF is available (or invalidated using\nPAHOLE_VMLINUX_BTF_FILENAME to an invalid/non-existent file), we\u0027re\ngetting a segfault:\n\n  root@x1:/home/acme/git/pahole# export PAHOLE_VMLINUX_BTF_FILENAME\u003dnon-existent\n  root@x1:/home/acme/git/pahole# pahole --running_kernel_vmlinux\n  pahole: couldn\u0027t find a vmlinux that matches the running kernel\n  HINT: Maybe you\u0027re inside a container or missing a debuginfo package?\n  root@x1:/home/acme/git/pahole# pahole\n  Segmentation fault (core dumped)\n  root@x1:/home/acme/git/pahole#\n\nSo add a test that checks for that.\n\n  root@x1:/home/acme/git/pahole# tests/default_vmlinux_btf.sh\n  Default BTF on a system without BTF: FAILED\n  root@x1:/home/acme/git/pahole#\n\nThis test was developed before the fixes, but was placed after the fixes\nso that we can have automated git bisection based on running\ntests/tests.\n\nReported-by: Matthias Schwarzott \u003czzam@gentoo.org\u003e\nReviewed-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nTested-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nAcked-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nCc: Andrii Nakryiko \u003candrii@kernel.org\u003e\nCc: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nCc: Jiri Olsa \u003cjolsa@kernel.org\u003e\nCc: Song Liu \u003csong@kernel.org\u003e\nCc: Yonghong Song \u003cyonghong.song@linux.dev\u003e\nLink: https://lore.kernel.org/all/ZzzP1BjCY-3_nCjZ@x1\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "9374bf455e5dcfab73e84881b6bc0a09d3b7f41c",
      "tree": "e3373ad840377ecd03d36b8e8b9a1ee47956dd62",
      "parents": [
        "e843385b66522ecb5e61558321d0f2d6814578a2"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Nov 18 17:10:55 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Nov 19 17:19:42 2024 -0300"
      },
      "message": "core, libctf: Check if constructor arguments are NULL before using them\n\n  # pahole\n  Segmentation fault (core dumped)\n  #\n\nNow we have:\n\n  # ls -la bla\n  ls: cannot access \u0027bla\u0027: No such file or directory\n  # export PAHOLE_VMLINUX_BTF_FILENAME\u003dbla\n  # pahole\n  pahole: couldn\u0027t find any debug information on this system.\n  # pahole list_head\n  pahole: couldn\u0027t find any debug information on this system.\n  # pahole -F btf list_head\n  pahole: couldn\u0027t find any btf debug information on this system.\n  # pahole -F dwarf list_head\n  pahole: couldn\u0027t find any dwarf debug information on this system.\n  #\n\nReported-by: Matthias Schwarzott \u003czzam@gentoo.org\u003e\nReviewed-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nTested-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nCc: Andrii Nakryiko \u003candrii@kernel.org\u003e\nCc: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nCc: Jiri Olsa \u003cjolsa@kernel.org\u003e\nCc: Song Liu \u003csong@kernel.org\u003e\nCc: Yonghong Song \u003cyonghong.song@linux.dev\u003e\nLink: https://lore.kernel.org/all/ZzzY9uwdCO9hezd6@x1\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "e843385b66522ecb5e61558321d0f2d6814578a2",
      "tree": "78cf8a18cfde668de78d8208441f0a2c933418b4",
      "parents": [
        "ce69ca108201836d7964e223ed5427da209ce37a"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Nov 18 16:33:26 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Nov 19 17:17:59 2024 -0300"
      },
      "message": "pahole: Honour exclusive BTF loading\n\nWhen we specify \u0027btf\u0027 and BTF info is available in the system, in the\n/sys/kernel/btf/vmlinux file, pahole will find it and use it to get the\ntype information asked for:\n\n  root@x1:~# perf trace -o /tmp/output -e openat pahole -F btf list_head ; tail -1 /tmp/output\n  struct list_head {\n  \tstruct list_head *         next;                 /*     0     8 */\n  \tstruct list_head *         prev;                 /*     8     8 */\n\n  \t/* size: 16, cachelines: 1, members: 2 */\n  \t/* last cacheline: 16 bytes */\n  };\n\n       1.579 ( 0.010 ms): pahole/764777 openat(dfd: CWD, filename: \"/sys/kernel/btf/vmlinux\", flags: RDONLY|CLOEXEC) \u003d 3\n  root@x1:~#\n\nBut, if the system doesn\u0027t have BTF info, which we now can simulate by using an\nenvironment variable it is tryng DWARF after failing for BTF, which isn\u0027t what\nthe user asked for having specified just btf in the -F pahole command line:\n\n  root@x1:~# export PAHOLE_VMLINUX_BTF_FILENAME\u003dnon-existent\n  root@x1:~# perf trace -o /tmp/output -e openat,access pahole -F btf list_head ; tail -12 /tmp/output\n  struct list_head {\n  \tstruct list_head *         next;                 /*     0     8 */\n  \tstruct list_head *         prev;                 /*     8     8 */\n\n  \t/* size: 16, cachelines: 1, members: 2 */\n  \t/* last cacheline: 16 bytes */\n  };\n\n  1.643 ( 0.003 ms): pahole/765220 access(filename: \"list_head\", mode: R)      \u003d -1 ENOENT (No such file or directory)\n  1.658 ( 0.002 ms): pahole/765220 access(filename: \"non-existent\", mode: R)   \u003d -1 ENOENT (No such file or directory)\n  1.697 ( 0.018 ms): pahole/765220 openat(dfd: CWD, filename: \"/sys/kernel/notes\") \u003d 3\n  1.801 ( 0.004 ms): pahole/765220 openat(dfd: CWD, filename: \"vmlinux\")       \u003d -1 ENOENT (No such file or directory)\n  1.807 ( 0.005 ms): pahole/765220 openat(dfd: CWD, filename: \"/boot/vmlinux\") \u003d -1 ENOENT (No such file or directory)\n  1.927 ( 0.005 ms): pahole/765220 openat(dfd: CWD, filename: \"/usr/lib/debug/lib/modules/6.11.6-200.fc40.x86_64/vmlinux\", flags: RDONLY|CLOEXEC) \u003d 3\n  root@x1:~#\n\nSo honour the request and fails when just BTF is asked and no BTF file is\nfound:\n\n  # export PAHOLE_VMLINUX_BTF_FILENAME\u003dnon-existent\n  # pahole -F btf list_head\n  pahole: couldn\u0027t find any btf debug information on this system.\n  #\n\nReported-by: Matthias Schwarzott \u003czzam@gentoo.org\u003e\nReviewed-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nTested-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nCc: Andrii Nakryiko \u003candrii@kernel.org\u003e\nCc: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nCc: Jiri Olsa \u003cjolsa@kernel.org\u003e\nCc: Song Liu \u003csong@kernel.org\u003e\nCc: Yonghong Song \u003cyonghong.song@linux.dev\u003e\nLink: https://lore.kernel.org/all/ZzzyvMO0jYLMQCVa@x1\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "ce69ca108201836d7964e223ed5427da209ce37a",
      "tree": "712b782178f4e8c3f1edaed35d16aaf5f67e9612",
      "parents": [
        "65b7fd68ccbb49904444cdf8be30a9a41f9d61df"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Nov 18 10:29:37 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Nov 19 17:17:51 2024 -0300"
      },
      "message": "core: Add method to get the vmlinux BTF filename, allow overriding it via env var\n\nIn systems where BTF isn\u0027t available there were reports that the\nsimplest pahole call, without any args, segfaults.\n\nTo have a proper test before fixing this problem, allow overriding the\n/sys/kernel/btf/vmlinux filename, so that even in systems with BTF we an\npoint it to a invalid location, making pahole think that there is no BTF\navailable and thus fallback to something that currently segfaults.\n\nUsing it:\n\n  $ pahole list_head\n  struct list_head {\n  \tstruct list_head *         next;                 /*     0     8 */\n  \tstruct list_head *         prev;                 /*     8     8 */\n\n  \t/* size: 16, cachelines: 1, members: 2 */\n  \t/* last cacheline: 16 bytes */\n  };\n  $\n  $ PAHOLE_VMLINUX_BTF_FILENAME\u003dfoobar pahole list_head\n  Segmentation fault (core dumped)\n  $\n\nReported-by: Matthias Schwarzott \u003czzam@gentoo.org\u003e\nReviewed-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nTested-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nTested-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nCc: Andrii Nakryiko \u003candrii@kernel.org\u003e\nCc: Jiri Olsa \u003cjolsa@kernel.org\u003e\nCc: Song Liu \u003csong@kernel.org\u003e\nCc: Yonghong Song \u003cyonghong.song@linux.dev\u003e\nLink: https://lore.kernel.org/all/ZzzPUhCaew6rHwL_@x1\nLink: https://lore.kernel.org/all/ZzzZpqA8ZH-6-Aj9@x1\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "65b7fd68ccbb49904444cdf8be30a9a41f9d61df",
      "tree": "8b8e4fffcdef1e0c921937030f67458ae74a6727",
      "parents": [
        "da2f7e56e7a69063b852f94db290102fcb17bdf6"
      ],
      "author": {
        "name": "Alan Maguire",
        "email": "alan.maguire@oracle.com",
        "time": "Fri Nov 15 11:36:05 2024 +0000"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Fri Nov 15 12:52:02 2024 -0300"
      },
      "message": "dwarf_loader: Use libdw__lock for dwarf_getlocation(s)\n\nEduard noticed [1] intermittent segmentation faults triggered by caching\ndone internally in dwarf_getlocation(s).\n\nA binary tree of location information is cached in the CU, and if\nmultiple threads access it concurrently we can get segmentation faults.\n\nIt is possible to compile elfutils with experimental thread-safe\nsupport, but safer for now to add locking to pahole.\n\nNo additional overhead in pahole encoding was observed\nas a result of these changes.\n\n[1] https://lore.kernel.org/dwarves/080794545d8eb3df3d6eba90ac621111ab7171f5.camel@gmail.com/\n\nReported-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nSuggested-by: Arnaldo Carvalho de Melo \u003cacme@kernel.org\u003e\nSigned-off-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nTested-by: Jiri Olsa \u003cjolsa@kernel.org\u003e\nAcked-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nAcked-by: Jiri Olsa \u003cjolsa@kernel.org\u003e\nCc: Alexei Starovoitov \u003cast@kernel.org\u003e\nCc: Andrii Nakryiko \u003candrii@kernel.org\u003e\nCc: Daniel Borkmann \u003cdaniel@iogearbox.net\u003e\nCc: Song Liu \u003csong@kernel.org\u003e\nCc: Yonghong Song \u003cyonghong.song@linux.dev\u003e\nLink: https://lore.kernel.org/r/20241115113605.1504796-3-alan.maguire@oracle.com\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "da2f7e56e7a69063b852f94db290102fcb17bdf6",
      "tree": "b8d31d78365bcfd250a6963cf6fef01598cc8f22",
      "parents": [
        "6b4d0e4fab8c66cfda02f936da36da10d1ef7a12"
      ],
      "author": {
        "name": "Eduard Zingerman",
        "email": "eddyz87@gmail.com",
        "time": "Fri Nov 15 11:36:04 2024 +0000"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Fri Nov 15 12:51:00 2024 -0300"
      },
      "message": "dwarf_loader: Check DW_OP_[GNU_]entry_value for possible parameter matching\n\nSong Liu reported that a kernel func (perf_event_read()) cannot be traced\nin certain situations since the func is not in vmlinux bTF. This happens\nin kernels 6.4, 6.9 and 6.11 and the kernel is built with pahole 1.27.\n\nThe perf_event_read() signature in kernel (kernel/events/core.c):\n   static int perf_event_read(struct perf_event *event, bool group)\n\nAdding \u0027-V\u0027 to pahole command line, and the following error msg can be found:\n   skipping addition of \u0027perf_event_read\u0027(perf_event_read) due to unexpected register used for parameter\n\nEventually the error message is attributed to the setting\n(parm-\u003eunexpected_reg \u003d 1) in parameter__new() function.\n\nThe following is the dwarf representation for perf_event_read():\n    0x0334c034:   DW_TAG_subprogram\n                DW_AT_low_pc    (0xffffffff812c6110)\n                DW_AT_high_pc   (0xffffffff812c640a)\n                DW_AT_frame_base        (DW_OP_reg7 RSP)\n                DW_AT_GNU_all_call_sites        (true)\n                DW_AT_name      (\"perf_event_read\")\n                DW_AT_decl_file (\"/rw/compile/kernel/events/core.c\")\n                DW_AT_decl_line (4641)\n                DW_AT_prototyped        (true)\n                DW_AT_type      (0x03324f6a \"int\")\n    0x0334c04e:     DW_TAG_formal_parameter\n                  DW_AT_location        (0x007de9fd:\n                     [0xffffffff812c6115, 0xffffffff812c6141): DW_OP_reg5 RDI\n                     [0xffffffff812c6141, 0xffffffff812c6323): DW_OP_reg14 R14\n                     [0xffffffff812c6323, 0xffffffff812c63fe): DW_OP_GNU_entry_value(DW_OP_reg5 RDI), DW_OP_stack_value\n                     [0xffffffff812c63fe, 0xffffffff812c6405): DW_OP_reg14 R14\n                     [0xffffffff812c6405, 0xffffffff812c640a): DW_OP_GNU_entry_value(DW_OP_reg5 RDI), DW_OP_stack_value)\n                  DW_AT_name    (\"event\")\n                  DW_AT_decl_file       (\"/rw/compile/kernel/events/core.c\")\n                  DW_AT_decl_line       (4641)\n                  DW_AT_type    (0x0333aac2 \"perf_event *\")\n    0x0334c05e:     DW_TAG_formal_parameter\n                  DW_AT_location        (0x007dea82:\n                     [0xffffffff812c6137, 0xffffffff812c63f2): DW_OP_reg12 R12\n                     [0xffffffff812c63f2, 0xffffffff812c63fe): DW_OP_GNU_entry_value(DW_OP_reg4 RSI), DW_OP_stack_value\n                     [0xffffffff812c63fe, 0xffffffff812c640a): DW_OP_reg12 R12)\n                  DW_AT_name    (\"group\")\n                  DW_AT_decl_file       (\"/rw/compile/kernel/events/core.c\")\n                  DW_AT_decl_line       (4641)\n                  DW_AT_type    (0x03327059 \"bool\")\n\nBy inspecting the binary, the second argument (\"bool group\") is used\nin the function. The following are the disasm code:\n    ffffffff812c6110 \u003cperf_event_read\u003e:\n    ffffffff812c6110: 0f 1f 44 00 00        nopl    (%rax,%rax)\n    ffffffff812c6115: 55                    pushq   %rbp\n    ffffffff812c6116: 41 57                 pushq   %r15\n    ffffffff812c6118: 41 56                 pushq   %r14\n    ffffffff812c611a: 41 55                 pushq   %r13\n    ffffffff812c611c: 41 54                 pushq   %r12\n    ffffffff812c611e: 53                    pushq   %rbx\n    ffffffff812c611f: 48 83 ec 18           subq    $24, %rsp\n    ffffffff812c6123: 41 89 f4              movl    %esi, %r12d\n    \u003c\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d NOTE that here \u0027%esi\u0027 is used and moved to \u0027%r12d\u0027.\n    ffffffff812c6126: 49 89 fe              movq    %rdi, %r14\n    ffffffff812c6129: 65 48 8b 04 25 28 00 00 00    movq    %gs:40, %rax\n    ffffffff812c6132: 48 89 44 24 10        movq    %rax, 16(%rsp)\n    ffffffff812c6137: 8b af a8 00 00 00     movl    168(%rdi), %ebp\n    ffffffff812c613d: 85 ed                 testl   %ebp, %ebp\n    ffffffff812c613f: 75 3f                 jne     0xffffffff812c6180 \u003cperf_event_read+0x70\u003e\n    ffffffff812c6141: 66 2e 0f 1f 84 00 00 00 00 00 nopw    %cs:(%rax,%rax)\n    ffffffff812c614b: 0f 1f 44 00 00        nopl    (%rax,%rax)\n    ffffffff812c6150: 49 8b 9e 28 02 00 00  movq    552(%r14), %rbx\n    ffffffff812c6157: 48 89 df              movq    %rbx, %rdi\n    ffffffff812c615a: e8 c1 a0 d7 00        callq   0xffffffff82040220 \u003c_raw_spin_lock_irqsave\u003e\n    ffffffff812c615f: 49 89 c7              movq    %rax, %r15\n    ffffffff812c6162: 41 8b ae a8 00 00 00  movl    168(%r14), %ebp\n    ffffffff812c6169: 85 ed                 testl   %ebp, %ebp\n    ffffffff812c616b: 0f 84 9a 00 00 00     je      0xffffffff812c620b \u003cperf_event_read+0xfb\u003e\n    ffffffff812c6171: 48 89 df              movq    %rbx, %rdi\n    ffffffff812c6174: 4c 89 fe              movq    %r15, %rsi\n    \u003c\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d NOTE: %rsi is overwritten\n    ......\n    ffffffff812c63f0: 41 5c                 popq    %r12\n    \u003c\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d POP r12\n    ffffffff812c63f2: 41 5d                 popq    %r13\n    ffffffff812c63f4: 41 5e                 popq    %r14\n    ffffffff812c63f6: 41 5f                 popq    %r15\n    ffffffff812c63f8: 5d                    popq    %rbp\n    ffffffff812c63f9: e9 e2 a8 d7 00        jmp     0xffffffff82040ce0 \u003c__x86_return_thunk\u003e\n    ffffffff812c63fe: 31 c0                 xorl    %eax, %eax\n    ffffffff812c6400: e9 be fe ff ff        jmp     0xffffffff812c62c3 \u003cperf_event_read+0x1b3\u003e\n\nIt is not clear why dwarf didn\u0027t encode %rsi in locations. But\nDW_OP_GNU_entry_value(DW_OP_reg4 RSI) tells us that RSI is live at the\nentry of perf_event_read().\n\nSo this patch tries to search DW_OP_GNU_entry_value/DW_OP_entry_value\nlocation/expression so if the expected parameter register matches the\nregister in DW_OP_GNU_entry_value/DW_OP_entry_value, then the original\nparameter is not optimized.\n\nFor one of internal 6.11 kernel, there are 62498 functions in BTF and\nperf_event_read() is not there. With this patch, there are 62552 functions\nin BTF and perf_event_read() is included.\n\nReported-by: Song Liu \u003csong@kernel.org\u003e\nSigned-off-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nTested-by: Jiri Olsa \u003cjolsa@kernel.org\u003e\nCc: Alexei Starovoitov \u003cast@kernel.org\u003e\nCc: Andrii Nakryiko \u003candrii@kernel.org\u003e\nCc: Daniel Borkmann \u003cdaniel@iogearbox.net\u003e\nLink: https://lore.kernel.org/r/20241115113605.1504796-2-alan.maguire@oracle.com\nSigned-off-by: Yonghong Song \u003cyonghong.song@linux.dev\u003e\nSigned-off-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "6b4d0e4fab8c66cfda02f936da36da10d1ef7a12",
      "tree": "eee10e629066135b44cd466deb7542fb2b1aba76",
      "parents": [
        "729fd9963df576a04f2ba371b033c5300ebf0a91"
      ],
      "author": {
        "name": "Alan Maguire",
        "email": "alan.maguire@oracle.com",
        "time": "Fri Nov 01 14:33:43 2024 +0000"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Nov 11 11:49:10 2024 -0300"
      },
      "message": "pahole: Sync with released libbpf-1.5\n\nNow that libbpf v1.5 is official, use that commit for syncing.\n\nSigned-off-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nLink: https://lore.kernel.org/r/20241101143343.1131182-1-alan.maguire@oracle.com\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "729fd9963df576a04f2ba371b033c5300ebf0a91",
      "tree": "520ba0a625ee042f27184e5dcc14ec1f496b9eec",
      "parents": [
        "58ba3891baf6285cb0085a9d026844905de3821a"
      ],
      "author": {
        "name": "Alan Maguire",
        "email": "alan.maguire@oracle.com",
        "time": "Fri Oct 25 18:15:53 2024 +0100"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Oct 28 17:47:42 2024 -0300"
      },
      "message": "pahole: Distilled_base btf_feature should be reported for libbpf \u003e 1.5\n\nAlexei ran into issues [1] generating distilled base BTF with pahole built\nagainst an older \u003c 1.5 libbpf.  For older libbpf, we cannot support\ndistilled base BTF (since the library API btf__distill_base() is not\npresent) so we should not report it as a feature in that case.\n\n[1] https://lore.kernel.org/bpf/CAADnVQKFjK8BnZ-rYzXKv-Zdw\u003dHBJRoJ7jo5PN+0P6+qpJOxNg@mail.gmail.com/\n\nReported-by: Alexei Starovoitov \u003calexei.starovoitov@gmail.com\u003e\nSigned-off-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nLink: https://lore.kernel.org/r/20241025171553.1850692-1-alan.maguire@oracle.com\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "58ba3891baf6285cb0085a9d026844905de3821a",
      "tree": "68c2542a670b16eddc363969ad88d87212774fd8",
      "parents": [
        "b77d88003eb53fa18dc502d2ccec6c7b576a5630"
      ],
      "author": {
        "name": "Alan Maguire",
        "email": "alan.maguire@oracle.com",
        "time": "Thu Oct 24 12:26:15 2024 +0100"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Thu Oct 24 10:14:38 2024 -0300"
      },
      "message": "tests/flexible_arrays: Print flex array struct from same vmlinux\n\nWe get a list of flexible array structs from $vmlinux; use the same\n$vmlinux to print each struct.\n\nFixes: 91bcd1d43e23e956 (\"tests: Add a test for the accounting of flexible arrays\")\nSigned-off-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nLink: https://lore.kernel.org/r/20241024112615.750704-3-alan.maguire@oracle.com\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "b77d88003eb53fa18dc502d2ccec6c7b576a5630",
      "tree": "6b1a696ed4a10fa32ee94ca743509b020be870d6",
      "parents": [
        "11b59c00770dbe26eac50b67b901c96c33819e4a"
      ],
      "author": {
        "name": "Alan Maguire",
        "email": "alan.maguire@oracle.com",
        "time": "Mon Oct 14 11:31:42 2024 +0100"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Wed Oct 23 11:27:18 2024 -0300"
      },
      "message": "btf_encoder: Use the ELF_C_READ_MMAP mode with elf_begin()\n\nThis reduces peak memory utilization during BTF vmlinux encoding,\nreplacing ELF section-sized malloc()s with mmap()s.\n\nFor -j1 peak memory resident set size drops from\n\n        Maximum resident set size (kbytes): 1069220\n\n...to:\n\n        Maximum resident set size (kbytes): 701888\n\n...with this patch.\n\nFor -j8, peak memory resident set size drops from\n\n        Maximum resident set size (kbytes): 1121172\n\n...to:\n\n        Maximum resident set size (kbytes): 963516\n\nSigned-off-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nTested-by: Ihor Solodrai \u003cihor.solodrai@pm.me\u003e\nCc: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nLink: https://lore.kernel.org/r/20241014103142.2280044-1-alan.maguire@oracle.com\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "11b59c00770dbe26eac50b67b901c96c33819e4a",
      "tree": "7cba468a51d2c9e65ab0d3c09198a52ab03d7a4c",
      "parents": [
        "0ee47254eae5ae26840befd457bf5e0284052c14"
      ],
      "author": {
        "name": "Alan Maguire",
        "email": "alan.maguire@oracle.com",
        "time": "Thu Oct 17 10:24:33 2024 +0100"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Wed Oct 23 11:27:18 2024 -0300"
      },
      "message": "tests/btf_functions: Redirect stderr for pfunct --format_path\u003dbtf\n\n...since otherwise we will see the following during test execution\n\n  WARNING: still unsuported BTF_KIND_DECL_TAG(bpf_fastcall) for bpf_iter_css_task_next already with attribute (bpf_kfunc), ignoring\n  WARNING: still unsuported BTF_KIND_DECL_TAG(bpf_fastcall) for bpf_iter_bits_new already with attribute (bpf_kfunc), ignoring\n\nSigned-off-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nCc: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nLink: https://lore.kernel.org/r/20241017092433.690192-2-alan.maguire@oracle.com\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "0ee47254eae5ae26840befd457bf5e0284052c14",
      "tree": "0ec44cf26c8f3c23360d0b4f344e35e1b5eec8be",
      "parents": [
        "e91433cb3bb5bf58661ca3079fd1887b4b310ec0"
      ],
      "author": {
        "name": "Alan Maguire",
        "email": "alan.maguire@oracle.com",
        "time": "Thu Oct 17 10:24:32 2024 +0100"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Wed Oct 23 11:27:18 2024 -0300"
      },
      "message": "btf_loader: Send warnings to stderr\n\nAmong other things, this helps simplify tests/btf_functions.sh.\n\nSigned-off-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nCc: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nLink: https://lore.kernel.org/r/20241017092433.690192-1-alan.maguire@oracle.com\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "e91433cb3bb5bf58661ca3079fd1887b4b310ec0",
      "tree": "02063dd68485eaa1945accbf707086de63b3c857",
      "parents": [
        "97f2f7ba055082730b0311d1767a21b1f72f1c36"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Oct 22 11:20:40 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Wed Oct 23 11:27:18 2024 -0300"
      },
      "message": "tests: Use PAHOLE_LANG_EXCLUDE\u003drust to skip Rust CUs\n\nUntil we have better support for Rust in both the DWARF loader and in\nthe BTF encoder we better just skip them to avoid needless warnings\n_and_ to test the language exclusion logic that is used in the Linux\nkernel build.\n\nAs per review/test from Alan Maguire, use \u0027export\u0027 to set\nPAHOLE_LANG_EXCLUDE, not doing so would only set it as a shell variable,\nnot adding it to the environment that is used by the subprocesses in the\ntest/ shell scripts.\n\nI must have thought it was working because while testing I had it\nexported, duh.\n\nCc: Alan Maguire \u003calan.maguire@oracle.com\u003e\nCc: Andrii Nakryiko \u003candrii.nakryiko@gmail.com\u003e\nCc: Jiri Olsa \u003cjolsa@kernel.org\u003e\nCc: Miguel Ojeda \u003cojeda@kernel.org\u003e\nCc: Stephen Brennan \u003cstephen.s.brennan@oracle.com\u003e\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "97f2f7ba055082730b0311d1767a21b1f72f1c36",
      "tree": "7d72f8fe722e3835d1859f5f7c35f8f4a46e6991",
      "parents": [
        "cbb1149c4eaf01b1f470a7e865f3774a6cc62a56"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Oct 22 11:14:53 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Wed Oct 23 11:27:18 2024 -0300"
      },
      "message": "pfunct: Use languages__init() to honour PAHOLE_LANG_EXCLUDE\n\n  $ echo $PAHOLE_LANG_EXCLUDE\n\n  $ pfunct -F dwarf `pahole --running_kernel_vmlinux` \u003e /dev/null\n  die__process_class: tag not supported 0x33 (variant_part) at \u003c7719ef8\u003e!\n  die__create_new_enumeration: DW_TAG_subprogram (0x2e) @ \u003c0x77370f1\u003e not handled in a rust CU!\n  tag__recode_dwarf_type: couldn\u0027t find name for function 0x77558a9, abstract_origin\u003d0, specification\u003d0x77370f1\n  ^C\n  $ export PAHOLE_LANG_EXCLUDE\u003drust\n  $ pfunct -F dwarf `pahole --running_kernel_vmlinux` \u003e /dev/null\n  $\n\nLater we need to make it also have --lang_exclude and friends to be just\nlike pahole, maybe even have all this in a common command line parsing\nset of routines, for now its enough to make it obey the env var in the\nscripts in tests/.\n\nCc: Alan Maguire \u003calan.maguire@oracle.com\u003e\nCc: Andrii Nakryiko \u003candrii.nakryiko@gmail.com\u003e\nCc: Jiri Olsa \u003cjolsa@kernel.org\u003e\nCc: Miguel Ojeda \u003cojeda@kernel.org\u003e\nCc: Stephen Brennan \u003cstephen.s.brennan@oracle.com\u003e\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "cbb1149c4eaf01b1f470a7e865f3774a6cc62a56",
      "tree": "aca409fd0b4b0f1ccaa0ffd551ebd37eef960794",
      "parents": [
        "fa7458521b6e421f681d1dac5d867d2ac35f536c"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Oct 22 11:06:45 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Wed Oct 23 11:27:18 2024 -0300"
      },
      "message": "languages: Introduce languages__cu_filtered() from pahole\u0027s cu__filter()\n\nTo use in other tools.\n\nCc: Alan Maguire \u003calan.maguire@oracle.com\u003e\nCc: Andrii Nakryiko \u003candrii.nakryiko@gmail.com\u003e\nCc: Jiri Olsa \u003cjolsa@kernel.org\u003e\nCc: Miguel Ojeda \u003cojeda@kernel.org\u003e\nCc: Stephen Brennan \u003cstephen.s.brennan@oracle.com\u003e\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "fa7458521b6e421f681d1dac5d867d2ac35f536c",
      "tree": "b58f300b1dee282461e7601be3bdf0ed271b4fb6",
      "parents": [
        "1f25386486e4d7b58206dc01a82f9591534c827d"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Oct 22 10:46:21 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Wed Oct 23 11:27:18 2024 -0300"
      },
      "message": "languages: Use PAHOLE_LANG_EXCLUDE env var if present, as a fallback\n\nIf the user doesn\u0027t specify --lang_exclude\u003dsomelangs and\nPAHOLE_LANG_EXCLUDE is set, use it.\n\nTo help in scripting and to have a global conf for all tools.\n\nTesting it:\n\n  $ echo $PAHOLE_LANG_EXCLUDE\n\n  $ pahole -V -F dwarf `pahole --running_kernel_vmlinux` \u003e /dev/null\n  die__process_class: tag not supported 0x33 (variant_part) at \u003c7719ef8\u003e!\n  die__create_new_enumeration: DW_TAG_subprogram (0x2e) @ \u003c0x77370f1\u003e not handled in a rust CU!\n  tag__recode_dwarf_type: couldn\u0027t find name for function 0x77558a9, abstract_origin\u003d0, specification\u003d0x77370f1\n  ^C\n  $ pahole -V -F dwarf --lang_exclude\u003drust `pahole --running_kernel_vmlinux` \u003e /dev/null\n  $ export PAHOLE_LANG_EXCLUDE\u003drust\n  $ pahole -V -F dwarf `pahole --running_kernel_vmlinux` \u003e /dev/null\n  $\n\nCc: Alan Maguire \u003calan.maguire@oracle.com\u003e\nCc: Andrii Nakryiko \u003candrii.nakryiko@gmail.com\u003e\nCc: Jiri Olsa \u003cjolsa@kernel.org\u003e\nCc: Miguel Ojeda \u003cojeda@kernel.org\u003e\nCc: Stephen Brennan \u003cstephen.s.brennan@oracle.com\u003e\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "1f25386486e4d7b58206dc01a82f9591534c827d",
      "tree": "cf63de5080d66a3dbb01fbe3f9e7c31bec756ed0",
      "parents": [
        "8fc09fd3315ce934735c72abc1268c1838d80634"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Oct 22 10:43:16 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Wed Oct 23 11:27:18 2024 -0300"
      },
      "message": "languages: Introduce language__init()\n\nWill also be used by pfunct and will be the place were we will check if\nwe have a PAHOLE_LANG_EXCLUDE env var, that will be used if the\nlanguages pointer is NULL or languages-\u003estr is NULL, meaning the command\nline use in the tool will override the env var if both are present.\n\nCc: Alan Maguire \u003calan.maguire@oracle.com\u003e\nCc: Andrii Nakryiko \u003candrii.nakryiko@gmail.com\u003e\nCc: Jiri Olsa \u003cjolsa@kernel.org\u003e\nCc: Miguel Ojeda \u003cojeda@kernel.org\u003e\nCc: Stephen Brennan \u003cstephen.s.brennan@oracle.com\u003e\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "8fc09fd3315ce934735c72abc1268c1838d80634",
      "tree": "2ae3a96dbee8c1a62020bc1ec29ec4dfcdffe029",
      "parents": [
        "b9a0283d24fe31c5db3887130cf11f483bbbe303"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Oct 22 10:38:06 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Wed Oct 23 11:27:18 2024 -0300"
      },
      "message": "core: Adopt the languages__parse(), languages__in() and \u0027struct languages\u0027 from pahole\n\nWe want to use this in other tools and also make it generally available\nvia a new PAHOLE_LANG_EXCLUDE env var.\n\nCc: Alan Maguire \u003calan.maguire@oracle.com\u003e\nCc: Andrii Nakryiko \u003candrii.nakryiko@gmail.com\u003e\nCc: Jiri Olsa \u003cjolsa@kernel.org\u003e\nCc: Miguel Ojeda \u003cojeda@kernel.org\u003e\nCc: Stephen Brennan \u003cstephen.s.brennan@oracle.com\u003e\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "b9a0283d24fe31c5db3887130cf11f483bbbe303",
      "tree": "d916c32ea2727d062c885af4e059780d9480f809",
      "parents": [
        "d9c3609d5eac98cd8511ae78a1d12d98018f193e"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Oct 22 10:31:32 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Wed Oct 23 11:27:18 2024 -0300"
      },
      "message": "languages: Start making \u0027struct languages\u0027 a class\n\nStop usinng the globals in the languages__parse() and language__in()\nmethods, pass a pointer to the object instance.\n\nCc: Alan Maguire \u003calan.maguire@oracle.com\u003e\nCc: Andrii Nakryiko \u003candrii.nakryiko@gmail.com\u003e\nCc: Jiri Olsa \u003cjolsa@kernel.org\u003e\nCc: Miguel Ojeda \u003cojeda@kernel.org\u003e\nCc: Stephen Brennan \u003cstephen.s.brennan@oracle.com\u003e\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "d9c3609d5eac98cd8511ae78a1d12d98018f193e",
      "tree": "a3ed58a4c8f051599b99c852f9424a6b2e7ffc10",
      "parents": [
        "34269334c76fb69053842a1ae8739725a31a76c7"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Oct 22 10:25:21 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Wed Oct 23 11:27:18 2024 -0300"
      },
      "message": "pahole: Add the tool name to languages_parse()\n\nStarting to make it reusable by other tools, initially by pfunct.\n\nCc: Alan Maguire \u003calan.maguire@oracle.com\u003e\nCc: Andrii Nakryiko \u003candrii.nakryiko@gmail.com\u003e\nCc: Jiri Olsa \u003cjolsa@kernel.org\u003e\nCc: Miguel Ojeda \u003cojeda@kernel.org\u003e\nCc: Stephen Brennan \u003cstephen.s.brennan@oracle.com\u003e\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "34269334c76fb69053842a1ae8739725a31a76c7",
      "tree": "95c47070019ff533d294f933af7892c11a68e1af",
      "parents": [
        "fb539071a5731788363fc54d7687ba888e91eef2"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Oct 22 10:08:39 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Wed Oct 23 11:27:18 2024 -0300"
      },
      "message": "dwarf_loader: Print the CU\u0027s language when a tag isn\u0027t supported\n\nTo help debug --lang_exclude, for instance, now, even with\n--lang_exclude\u003drust, we\u0027re getting this when processing a recent Fedora\n40 kernel:\n\n  $ uname -a\n  Linux toolbox 6.11.3-200.fc40.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Oct 10 22:31:19 UTC 2024 x86_64 GNU/Linux\n  $ pahole --running_kernel_vmlinux\n  /home/acme/.cache/debuginfod_client/8c97f87b685044733f5d1576eca82df1f3b7fa0c/debuginfo\n  acme@x1:~/git/pahole$ tests/btf_functions.sh\n  Validation of BTF encoding of functions; this may take some time: die__process_class: tag not supported 0x33 (variant_part) at \u003c7719ef8\u003e!\n  die__create_new_enumeration: DW_TAG_subprogram (0x2e) @ \u003c0x77370f1\u003e not handled in a rust CU!\n  tag__recode_dwarf_type: couldn\u0027t find name for function 0x77558a9, abstract_origin\u003d0, specification\u003d0x77370f1\n  ^C\n  $\n\nCc: Alan Maguire \u003calan.maguire@oracle.com\u003e\nCc: Andrii Nakryiko \u003candrii.nakryiko@gmail.com\u003e\nCc: Jiri Olsa \u003cjolsa@kernel.org\u003e\nCc: Miguel Ojeda \u003cojeda@kernel.org\u003e\nCc: Stephen Brennan \u003cstephen.s.brennan@oracle.com\u003e\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "fb539071a5731788363fc54d7687ba888e91eef2",
      "tree": "e9744c91194d92b2d8ddae4869147f5ae3e6aced",
      "parents": [
        "4c6a4d39eb0e6489ac83a402b8922cc6ad8e597b"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Oct 22 10:02:36 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Wed Oct 23 11:27:18 2024 -0300"
      },
      "message": "tests: Exclude rust CUs when encoding BTF\n\nNow that there are more kernels out there with Rust CUs, like first seen\nin Fedora 40 with:\n\nLinux toolbox 6.11.3-200.fc40.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Oct 10 22:31:19 UTC 2024 x86_64 GNU/Linux\n\nDo just like the kernel and use --lang_exclude\u003drust to skip those CUs\nand avoid expected warnings due lack of full support for such CUs.\n\nCc: Alan Maguire \u003calan.maguire@oracle.com\u003e\nCc: Andrii Nakryiko \u003candrii.nakryiko@gmail.com\u003e\nCc: Jiri Olsa \u003cjolsa@kernel.org\u003e\nCc: Miguel Ojeda \u003cojeda@kernel.org\u003e\nCc: Stephen Brennan \u003cstephen.s.brennan@oracle.com\u003e\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "4c6a4d39eb0e6489ac83a402b8922cc6ad8e597b",
      "tree": "9b0ac27298985d594ed656300ae56f67fd3e62ff",
      "parents": [
        "6096a8dcdd74400028fca267d4d6fb250b37615d"
      ],
      "author": {
        "name": "Alan Maguire",
        "email": "alan.maguire@oracle.com",
        "time": "Fri Oct 18 10:43:01 2024 +0100"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Wed Oct 23 11:26:27 2024 -0300"
      },
      "message": "btf_encoder: Filter var names before btf name check\n\n...as this means we avoid seeing multiple messages of the form\n\n  PAHOLE: Warning: Found invalid variable name when encoding btf, ignored (sym: \u0027__UNIQUE_ID___addressable__RNvXsa_NtCs2vSfyxKMEZc_4core4charNtB5_11EscapeDebugNtNtNtNtB7_4iter6traits10exact_size17ExactSizeIterator3len57\u0027).\n\nSuch symbols are filtered anyway due to the __UNIQUE_ID prefix, so\nwarning about them is not necessary; simply reordering the checks\nshould ensure we will not see these warnings.\n\nCommitter notes:\n\nMiguel mentioned that maybe we should have some debug way to tell that\nthose are being skipped.\n\nReported-by: Arnaldo Carvalho de Melo \u003cacme@kernel.org\u003e\nReviewed-by: Stephen Brennan \u003cstephen.s.brennan@oracle.com\u003e\nSigned-off-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nTested-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nTested-by: Miguel Ojeda \u003cojeda@kernel.org\u003e\nCc: Andrii Nakryiko \u003candrii.nakryiko@gmail.com\u003e\nCc: Jiri Olsa \u003cjolsa@kernel.org\u003e\nLink: https://lore.kernel.org/r/20241018094301.1550149-1-alan.maguire@oracle.com\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "6096a8dcdd74400028fca267d4d6fb250b37615d",
      "tree": "2db6d9a04f875dda692becfdc4133faa76a6a1f8",
      "parents": [
        "91bcd1d43e23e956cb664d6c9e4dddc60e4e982a"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Oct 21 11:28:52 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Oct 21 11:28:52 2024 -0300"
      },
      "message": "core: Add the debuginfod client cache directory to the vmlinux search path\n\nOne more place to find the vmlinux file:\n\n  root@x1:~# pahole --running_kernel_vmlinux\n  /root/.cache/debuginfod_client/8c97f87b685044733f5d1576eca82df1f3b7fa0c/debuginfo\n  root@x1:~#\n\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "91bcd1d43e23e956cb664d6c9e4dddc60e4e982a",
      "tree": "7c21c90b593351fcabb919246945584443b7c278",
      "parents": [
        "6ab5318f536927cb17d1f845f7010cb84e761b4f"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Oct 08 16:31:35 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Fri Oct 11 11:45:15 2024 -0300"
      },
      "message": "tests: Add a test for the accounting of flexible arrays\n\n  acme@x1:~/git/pahole$ tests/flexible_arrays.sh\n  Flexible arrays accounting: Ok\n  acme@x1:~/git/pahole$ VERBOSE\u003d1 tests/flexible_arrays.sh\n  Flexible arrays accounting: end: mem_cgroup: 2 2\n  middle: mem_cgroup: 3 3\n  end: pglist_data: 2 2\n  middle: pglist_data: 0 0\n  end: zone: 3 3\n  middle: zone: 0 0\n  end: cgroup: 1 1\n  middle: cgroup: 0 0\n  end: cgroup_root: 1 1\n  middle: cgroup_root: 1 1\n  end: page_counter: 2 2\n  middle: page_counter: 0 0\n  end: cpu_hw_events: 1 1\n  middle: cpu_hw_events: 0 0\n  end: crypto_shash: 1 1\n  middle: crypto_shash: 0 0\n  end: crypto_aead: 1 1\n  middle: crypto_aead: 0 0\n  end: crypto_ahash: 1 1\n  middle: crypto_ahash: 0 0\n  end: crypto_skcipher: 1 1\n  middle: crypto_skcipher: 0 0\n  end: crypto_sync_skcipher: 0 0\n  middle: crypto_sync_skcipher: 1 1\n  \u003cSNIP\u003e\n  end: bpf_ctx_convert: 2 2\n  middle: bpf_ctx_convert: 0 0\n  Ok\n  acme@x1:~/git/pahole$\n\nCc: \"Gustavo A. R. Silva\" \u003cgustavoars@kernel.org\u003e\nCc: Willy Tarreau \u003cw@1wt.eu\u003e\nLink: https://lore.kernel.org/all/20241008195209.1094299-4-acme@kernel.org\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "6ab5318f536927cb17d1f845f7010cb84e761b4f",
      "tree": "39db743309f531dc1c3c43ef73c6f654399ca29d",
      "parents": [
        "b1a4297aefe6f767527ddf206a24a30e8df3e708"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Oct 08 15:26:28 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Fri Oct 11 11:44:58 2024 -0300"
      },
      "message": "fprintf: Show statistics about members with flexible arrays\n\nFor instance, this one has embedded flexible arrays:\n\n  $ pahole lirc_fh\n  struct lirc_fh {\n  \tstruct list_head           list;                 /*     0    16 */\n  \tstruct rc_dev *            rc;                   /*    16     8 */\n  \tint                        carrier_low;          /*    24     4 */\n\n  \t/* XXX 4 bytes hole, try to pack */\n\n  \tstruct {\n  \t\tunion {\n  \t\t\tstruct __kfifo kfifo;            /*    32    24 */\n  \t\t\tunsigned int * type;             /*    32     8 */\n  \t\t\tconst unsigned int  * const_type; /*    32     8 */\n  \t\t\tchar *     rectype;              /*    32     8 */\n  \t\t\tunsigned int * ptr;              /*    32     8 */\n  \t\t\tconst unsigned int  * ptr_const; /*    32     8 */\n  \t\t};                                       /*    32    24 */\n  \t\tunsigned int       buf[];                /*    56     0 */\n  \t} rawir;                                         /*    32    24 */\n\n  \t/* XXX last struct has a flexible array */\n\n  \tstruct {\n  \t\tunion {\n  \t\t\tstruct __kfifo kfifo;            /*    56    24 */\n  \t\t\tstruct lirc_scancode * type;     /*    56     8 */\n  \t\t\tconst struct lirc_scancode  * const_type; /*    56     8 */\n  \t\t\tchar *     rectype;              /*    56     8 */\n  \t\t\tstruct lirc_scancode * ptr;      /*    56     8 */\n  \t\t\tconst struct lirc_scancode  * ptr_const; /*    56     8 */\n  \t\t};                                       /*    56    24 */\n  \t\t/* --- cacheline 1 boundary (64 bytes) was 16 bytes ago --- */\n  \t\tstruct lirc_scancode buf[];              /*    80     0 */\n  \t} scancodes;                                     /*    56    24 */\n\n  \t/* XXX last struct has a flexible array */\n\n  \twait_queue_head_t          wait_poll;            /*    80    24 */\n  \tu8                         send_mode;            /*   104     1 */\n  \tu8                         rec_mode;             /*   105     1 */\n\n  \t/* size: 112, cachelines: 2, members: 8 */\n  \t/* sum members: 102, holes: 1, sum holes: 4 */\n  \t/* padding: 6 */\n  \t/* flexible array members: end: 2 */\n  \t/* last cacheline: 48 bytes */\n  };\n  $\n\n\u0027end\u0027 means that the members with flexible arrays have them in the\n\"classical\" sense, i.e. the last member of those member types is a []\nmember.\n\nWhen \u0027middle\u0027 appears it means another level, just like the above\n\u0027struct lirc_fh\u0027 has multiple members in its midle that are flexible\narrays.\n\nIf we use \u0027pahole --with_embedded_flexible_array\u0027 we\u0027ll see quite a few\nin the Linux kernel (using BTF info from /sys/kernel/btf/vmlinux, mostly\navailable in most kernels these days), using --sizes so that we get just\none line per Linux kernel struct that have embedded flexible arrays (and\nits sizes and number of alignment holes, as bonuses):\n\n  $ pahole --sizes --with_embedded_flexible_array | head\n  mem_cgroup\t2240\t10\n  pglist_data\t175424\t7\n  zone\t1728\t5\n  cgroup\t1984\t3\n  cgroup_root\t6272\t1\n  page_counter\t192\t1\n  cpu_hw_events\t5200\t6\n  crypto_shash\t40\t1\n  crypto_aead\t40\t0\n  crypto_ahash\t48\t2\n  $\n\n  $ pahole crypto_shash\n  struct crypto_shash {\n  \tunsigned int               descsize;             /*     0     4 */\n\n  \t/* XXX 4 bytes hole, try to pack */\n\n  \tstruct crypto_tfm          base;                 /*     8    32 */\n\n  \t/* XXX last struct has a flexible array, 1 hole */\n\n  \t/* size: 40, cachelines: 1, members: 2 */\n  \t/* sum members: 36, holes: 1, sum holes: 4 */\n  \t/* member types with holes: 1, total: 1 */\n  \t/* flexible array members: end: 1 */\n  \t/* last cacheline: 40 bytes */\n  };\n  $\n\nIf we expand it all:\n\n  $ pahole -E crypto_shash\n  struct crypto_shash {\n  \tunsigned int               descsize;                                             /*     0     4 */\n\n  \t/* XXX 4 bytes hole, try to pack */\n\n  \tstruct crypto_tfm {\n  \t\t/* typedef refcount_t */ struct refcount_struct {\n  \t\t\t/* typedef atomic_t */ struct {\n  \t\t\t\tint counter;                                             /*     8     4 */\n  \t\t\t} refs; /*     8     4 */\n  \t\t} refcnt; /*     8     4 */\n  \t\t/* typedef u32 -\u003e __u32 */ unsigned int       crt_flags;                 /*    12     4 */\n  \t\tint                node;                                                 /*    16     4 */\n\n  \t\t/* XXX 4 bytes hole, try to pack */\n\n  \t\tvoid               (*exit)(struct crypto_tfm *);                         /*    24     8 */\n  \t\tstruct crypto_alg * __crt_alg;                                           /*    32     8 */\n  \t\tvoid *             __crt_ctx[];                                          /*    40     0 */\n  \t} base; /*     8    32 */\n\n  \t/* XXX last struct has a flexible array, 1 hole */\n\n  \t/* size: 40, cachelines: 1, members: 2 */\n  \t/* sum members: 36, holes: 1, sum holes: 4 */\n  \t/* member types with holes: 1, total: 1 */\n  \t/* flexible array members: end: 1 */\n  \t/* last cacheline: 40 bytes */\n  };\n  $\n\nInteresting, but we don\u0027t see the \"middle\" case...\n\nMaybe \u0027struct cgroup\u0027?\n\n  $ pahole cgroup | tail\n  \tstruct cgroup *            ancestors[];          /*  1984     0 */\n\n  \t/* size: 1984, cachelines: 31, members: 42 */\n  \t/* sum members: 1952, holes: 3, sum holes: 32 */\n  \t/* member types with holes: 3, total: 3 */\n  \t/* paddings: 1, sum paddings: 4 */\n  \t/* forced alignments: 1 */\n  \t/* flexible array members: end: 1 */\n  };\n\n  $\n\nHumm, maybe some data structure embeds \u0027struct cgroup\u0027? Lets see with:\n\n  $ pahole --contains cgroup\n  cgroup_root\n  $\n\nA-ha, finally that \u0027middle\u0027 stat:\n\n  $ pahole cgroup_root\n  struct cgroup_root {\n  \tstruct kernfs_root *       kf_root;              /*     0     8 */\n  \tunsigned int               subsys_mask;          /*     8     4 */\n  \tint                        hierarchy_id;         /*    12     4 */\n  \tstruct list_head           root_list;            /*    16    16 */\n  \tstruct callback_head       rcu;                  /*    32    16 */\n\n  \t/* XXX 16 bytes hole, try to pack */\n\n  \t/* --- cacheline 1 boundary (64 bytes) --- */\n  \tstruct cgroup              cgrp __attribute__((__aligned__(64))); /*    64  1984 */\n\n  \t/* XXX last struct has a flexible array, embedded flexible array(s), 3 holes */\n\n  \t/* --- cacheline 32 boundary (2048 bytes) --- */\n  \tstruct cgroup *            cgrp_ancestor_storage; /*  2048     8 */\n  \tatomic_t                   nr_cgrps;             /*  2056     4 */\n  \tunsigned int               flags;                /*  2060     4 */\n  \tchar                       release_agent_path[4096]; /*  2064  4096 */\n  \t/* --- cacheline 96 boundary (6144 bytes) was 16 bytes ago --- */\n  \tchar                       name[64];             /*  6160    64 */\n\n  \t/* size: 6272, cachelines: 98, members: 11 */\n  \t/* sum members: 6208, holes: 1, sum holes: 16 */\n  \t/* padding: 48 */\n  \t/* member types with holes: 1, total: 3 */\n  \t/* forced alignments: 1, forced holes: 1, sum forced holes: 16 */\n  \t/* flexible array members: end: 1, middle: 1 */\n  } __attribute__((__aligned__(64)));\n  $\n\nCc: \"Gustavo A. R. Silva\" \u003cgustavoars@kernel.org\u003e\nCc: Willy Tarreau \u003cw@1wt.eu\u003e\nLink: https://lore.kernel.org/all/20241008195209.1094299-3-acme@kernel.org\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "b1a4297aefe6f767527ddf206a24a30e8df3e708",
      "tree": "f874abba125ecab1da3ed2644be0fcd7d3a88e50",
      "parents": [
        "446c28d118b97380bb6245a3b9c3371e8700f282"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Oct 08 11:47:25 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Fri Oct 11 11:44:26 2024 -0300"
      },
      "message": "fprintf: Differentiate embedded flexible arrays from flexible arrays\n\nSe one case where a struct has embedded flexible arrays, that was not\nbeing notified as comments following those members:\n\n  acme@x1:~/git/pahole$ pahole lirc_fh\n  struct lirc_fh {\n  \tstruct list_head           list;                 /*     0    16 */\n  \tstruct rc_dev *            rc;                   /*    16     8 */\n  \tint                        carrier_low;          /*    24     4 */\n\n  \t/* XXX 4 bytes hole, try to pack */\n\n  \tstruct {\n  \t\tunion {\n  \t\t\tstruct __kfifo kfifo;            /*    32    24 */\n  \t\t\tunsigned int * type;             /*    32     8 */\n  \t\t\tconst unsigned int  * const_type; /*    32     8 */\n  \t\t\tchar *     rectype;              /*    32     8 */\n  \t\t\tunsigned int * ptr;              /*    32     8 */\n  \t\t\tconst unsigned int  * ptr_const; /*    32     8 */\n  \t\t};                                       /*    32    24 */\n  \t\tunsigned int       buf[];                /*    56     0 */\n  \t} rawir;                                         /*    32    24 */\n\n  \t/* XXX last struct has a flexible array */\n\n  \tstruct {\n  \t\tunion {\n  \t\t\tstruct __kfifo kfifo;            /*    56    24 */\n  \t\t\tstruct lirc_scancode * type;     /*    56     8 */\n  \t\t\tconst struct lirc_scancode  * const_type; /*    56     8 */\n  \t\t\tchar *     rectype;              /*    56     8 */\n  \t\t\tstruct lirc_scancode * ptr;      /*    56     8 */\n  \t\t\tconst struct lirc_scancode  * ptr_const; /*    56     8 */\n  \t\t};                                       /*    56    24 */\n  \t\t/* --- cacheline 1 boundary (64 bytes) was 16 bytes ago --- */\n  \t\tstruct lirc_scancode buf[];              /*    80     0 */\n  \t} scancodes;                                     /*    56    24 */\n\n  \t/* XXX last struct has a flexible array */\n\n  \twait_queue_head_t          wait_poll;            /*    80    24 */\n  \tu8                         send_mode;            /*   104     1 */\n  \tu8                         rec_mode;             /*   105     1 */\n\n  \t/* size: 112, cachelines: 2, members: 8 */\n  \t/* sum members: 102, holes: 1, sum holes: 4 */\n  \t/* padding: 6 */\n  \t/* last cacheline: 48 bytes */\n  };\n\nNow we need to count how many embedded flexible arrays are in a struct\nto print at the end stats, right before that \"last cacheline:\" comment\nline.\n\nCc: \"Gustavo A. R. Silva\" \u003cgustavoars@kernel.org\u003e\nCc: Willy Tarreau \u003cw@1wt.eu\u003e\nLink: https://lore.kernel.org/all/20241008195209.1094299-2-acme@kernel.org\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "446c28d118b97380bb6245a3b9c3371e8700f282",
      "tree": "14e88be394efacd37c39b1a73742a467e5fd7b80",
      "parents": [
        "9b838b824e6b415372a0b4d0a4a486860172f491"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Oct 07 17:08:24 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Fri Oct 11 11:44:13 2024 -0300"
      },
      "message": "pahole: Introduce --with_embedded_flexible_array\n\nTo print structs that have as one of its members a struct with a\nflexible array, i.e. the outer script has a flexible array in its\nmiddle, which is dangerous.\n\nOne example should illustrate this nicely:\n\n  ⬢[acme@toolbox pahole]$ pahole --with_embedded_flexible_array --sizes | wc -l\n  103\n  ⬢[acme@toolbox pahole]$ pahole --with_embedded_flexible_array --sizes | tail\n  acpi_nhlt_format_config\t44\t0\n  xts_request_ctx\t168\t0\n  dbc_port\t512\t1\n  ethtool_link_usettings\t96\t0\n  pci_setup_rom\t64\t1\n  lirc_fh\t112\t1\n  lrw_request_ctx\t96\t0\n  xt_standard_target\t40\t0\n  xt_error_target\t64\t0\n  bpf_ctx_convert\t7280\t0\n  ⬢[acme@toolbox pahole]$ pahole lirc_fh\n  struct lirc_fh {\n  \tstruct list_head           list;                 /*     0    16 */\n  \tstruct rc_dev *            rc;                   /*    16     8 */\n  \tint                        carrier_low;          /*    24     4 */\n\n  \t/* XXX 4 bytes hole, try to pack */\n\n  \tstruct {\n  \t\tunion {\n  \t\t\tstruct __kfifo kfifo;            /*    32    24 */\n  \t\t\tunsigned int * type;             /*    32     8 */\n  \t\t\tconst unsigned int  * const_type; /*    32     8 */\n  \t\t\tchar *     rectype;              /*    32     8 */\n  \t\t\tunsigned int * ptr;              /*    32     8 */\n  \t\t\tconst unsigned int  * ptr_const; /*    32     8 */\n  \t\t};                                       /*    32    24 */\n  \t\tunsigned int       buf[];                /*    56     0 */\n  \t} rawir;                                         /*    32    24 */\n  \tstruct {\n  \t\tunion {\n  \t\t\tstruct __kfifo kfifo;            /*    56    24 */\n  \t\t\tstruct lirc_scancode * type;     /*    56     8 */\n  \t\t\tconst struct lirc_scancode  * const_type; /*    56     8 */\n  \t\t\tchar *     rectype;              /*    56     8 */\n  \t\t\tstruct lirc_scancode * ptr;      /*    56     8 */\n  \t\t\tconst struct lirc_scancode  * ptr_const; /*    56     8 */\n  \t\t};                                       /*    56    24 */\n  \t\t/* --- cacheline 1 boundary (64 bytes) was 16 bytes ago --- */\n  \t\tstruct lirc_scancode buf[];              /*    80     0 */\n  \t} scancodes;                                     /*    56    24 */\n  \twait_queue_head_t          wait_poll;            /*    80    24 */\n  \tu8                         send_mode;            /*   104     1 */\n  \tu8                         rec_mode;             /*   105     1 */\n\n  \t/* size: 112, cachelines: 2, members: 8 */\n  \t/* sum members: 102, holes: 1, sum holes: 4 */\n  \t/* padding: 6 */\n  \t/* last cacheline: 48 bytes */\n  };\n\n  ⬢[acme@toolbox pahole]$\n\nAnother case:\n\n  ⬢[acme@toolbox pahole]$ pahole -E ethtool_link_usettings\n  struct ethtool_link_usettings {\n  \tstruct ethtool_link_settings {\n  \t\t/* typedef __u32 */ unsigned int       cmd;                              /*     0     4 */\n  \t\t/* typedef __u32 */ unsigned int       speed;                            /*     4     4 */\n  \t\t/* typedef __u8 */ unsigned char      duplex;                            /*     8     1 */\n  \t\t/* typedef __u8 */ unsigned char      port;                              /*     9     1 */\n  \t\t/* typedef __u8 */ unsigned char      phy_address;                       /*    10     1 */\n  \t\t/* typedef __u8 */ unsigned char      autoneg;                           /*    11     1 */\n  \t\t/* typedef __u8 */ unsigned char      mdio_support;                      /*    12     1 */\n  \t\t/* typedef __u8 */ unsigned char      eth_tp_mdix;                       /*    13     1 */\n  \t\t/* typedef __u8 */ unsigned char      eth_tp_mdix_ctrl;                  /*    14     1 */\n  \t\t/* typedef __s8 */ signed char        link_mode_masks_nwords;            /*    15     1 */\n  \t\t/* typedef __u8 */ unsigned char      transceiver;                       /*    16     1 */\n  \t\t/* typedef __u8 */ unsigned char      master_slave_cfg;                  /*    17     1 */\n  \t\t/* typedef __u8 */ unsigned char      master_slave_state;                /*    18     1 */\n  \t\t/* typedef __u8 */ unsigned char      rate_matching;                     /*    19     1 */\n  \t\t/* typedef __u32 */ unsigned int       reserved[7];                      /*    20    28 */\n  \t\t/* typedef __u32 */ unsigned int       link_mode_masks[];                /*    48     0 */\n  \t} base; /*     0    48 */\n  \tstruct {\n  \t\t/* typedef __u32 */ unsigned int       supported[4];                     /*    48    16 */\n  \t\t/* --- cacheline 1 boundary (64 bytes) --- */\n  \t\t/* typedef __u32 */ unsigned int       advertising[4];                   /*    64    16 */\n  \t\t/* typedef __u32 */ unsigned int       lp_advertising[4];                /*    80    16 */\n  \t} link_modes;                                                                    /*    48    48 */\n\n  \t/* size: 96, cachelines: 2, members: 2 */\n  \t/* last cacheline: 32 bytes */\n  };\n\n  ⬢[acme@toolbox pahole]$\n\nCc: \"Gustavo A. R. Silva\" \u003cgustavoars@kernel.org\u003e\nCc: Willy Tarreau \u003cw@1wt.eu\u003e\nLink: https://lore.kernel.org/all/20241007202531.942648-6-acme@kernel.org\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "9b838b824e6b415372a0b4d0a4a486860172f491",
      "tree": "d0ae8bec2c4a4fa6d7b0369ccb856eebb4ccda73",
      "parents": [
        "5485b3cf799cfca24e0c1b3f3bf49455c29ffd96"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Oct 07 16:23:08 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Fri Oct 11 11:43:54 2024 -0300"
      },
      "message": "fprintf: Add a comment if a member type has an embedded flexible array\n\nFor instance:\n\n  acme@x1:~/git/pahole$ pahole cgroup_root\n  struct cgroup_root {\n          struct kernfs_root *       kf_root;              /*     0     8 */\n          unsigned int               subsys_mask;          /*     8     4 */\n          int                        hierarchy_id;         /*    12     4 */\n          struct list_head           root_list;            /*    16    16 */\n          struct callback_head       rcu;                  /*    32    16 */\n\n          /* XXX 16 bytes hole, try to pack */\n\n          /* --- cacheline 1 boundary (64 bytes) --- */\n          struct cgroup              cgrp __attribute__((__aligned__(64))); /*    64  1984 */\n\n          /* XXX last struct has a flexible array, 3 holes */\n\n          /* --- cacheline 32 boundary (2048 bytes) --- */\n          struct cgroup *            cgrp_ancestor_storage; /*  2048     8 */\n          atomic_t                   nr_cgrps;             /*  2056     4 */\n          unsigned int               flags;                /*  2060     4 */\n          char                       release_agent_path[4096]; /*  2064  4096 */\n          /* --- cacheline 96 boundary (6144 bytes) was 16 bytes ago --- */\n          char                       name[64];             /*  6160    64 */\n\n          /* size: 6272, cachelines: 98, members: 11 */\n          /* sum members: 6208, holes: 1, sum holes: 16 */\n          /* padding: 48 */\n          /* member types with holes: 1, total: 3 */\n          /* forced alignments: 1, forced holes: 1, sum forced holes: 16 */\n  } __attribute__((__aligned__(64)));\n  acme@x1:~/git/pahole$\n\nAnd then:\n\n  acme@x1:~/git/pahole$ pahole cgroup | tail -20\n  \t/* XXX last struct has 1 hole */\n\n  \t/* --- cacheline 30 boundary (1920 bytes) was 32 bytes ago --- */\n  \tatomic_t                   congestion_count;     /*  1952     4 */\n  \tstruct cgroup_freezer_state freezer;             /*  1956    16 */\n\n  \t/* XXX last struct has 1 hole */\n  \t/* XXX 4 bytes hole, try to pack */\n\n  \tstruct bpf_local_storage * bpf_cgrp_storage;     /*  1976     8 */\n  \t/* --- cacheline 31 boundary (1984 bytes) --- */\n  \tstruct cgroup *            ancestors[];          /*  1984     0 */\n\n  \t/* size: 1984, cachelines: 31, members: 42 */\n  \t/* sum members: 1952, holes: 3, sum holes: 32 */\n  \t/* member types with holes: 3, total: 3 */\n  \t/* paddings: 1, sum paddings: 4 */\n  \t/* forced alignments: 1 */\n  };\n\n  acme@x1:~/git/pahole$\n\nCare must be taken on how to use that cgroup-\u003eancestors field since\ncgroup_root-\u003ecgrp is in the middle of \u0027struct cgroup_root\u0027, so accesses\nto cgroup-\u003eancestors[1] would be accessing other fields of cgroup_root\nafter cgrp, i.e. further analysis and checks in the code handling those\nstructs is needed.\n\nThis comes from discussions with Willy Tarreau after Gustavo A. R.\nSilva\u0027s presentation at Kernel Recipes\u00272024:\n\n  https://speakerdeck.com/ennael/enhancing-spatial-safety-fixing-thousands-of-wflex-array-member-not-at-end-warnings?slide\u003d11\n\nCc: \"Gustavo A. R. Silva\" \u003cgustavoars@kernel.org\u003e\nCc: Willy Tarreau \u003cw@1wt.eu\u003e\nLink: https://lore.kernel.org/all/20241007202531.942648-5-acme@kernel.org\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "5485b3cf799cfca24e0c1b3f3bf49455c29ffd96",
      "tree": "bcb19c415f561c8b9a3dc9c2a9f783b149db7bca",
      "parents": [
        "0d62f2fdf3faf625da3f6c3a69fc2b55c8b2d687"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Oct 07 16:01:34 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Fri Oct 11 11:43:36 2024 -0300"
      },
      "message": "core: Introduce class__has_embedded_flexible_array()\n\nThat we will use both when pretty printing structs, as a new comment,\nand with a \u0027pahole --with_embedded_flexible_array\u0027 to show structs with\nembedded structs that have flexible arrays and thus should be used with\nsuper extra care.\n\nCc: \"Gustavo A. R. Silva\" \u003cgustavoars@kernel.org\u003e\nCc: Willy Tarreau \u003cw@1wt.eu\u003e\nLink: https://lore.kernel.org/all/20241007202531.942648-4-acme@kernel.org\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "0d62f2fdf3faf625da3f6c3a69fc2b55c8b2d687",
      "tree": "c593b673265e0cd8e4b4f1b186075a99e2b6691d",
      "parents": [
        "86c2461c7505f669b9a20e0b061fe47c9ab85a17"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Fri Oct 04 10:39:16 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Fri Oct 11 11:43:07 2024 -0300"
      },
      "message": "core: Cache info about flexible arrays in class__has_flexible_array()\n\nJust saving some calculations, to be in line with class-\u003eholes_searched,\netc.\n\nCc: \"Gustavo A. R. Silva\" \u003cgustavoars@kernel.org\u003e\nCc: Willy Tarreau \u003cw@1wt.eu\u003e\nLink: https://lore.kernel.org/all/20241007202531.942648-3-acme@kernel.org\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "86c2461c7505f669b9a20e0b061fe47c9ab85a17",
      "tree": "bfd70bb9a0db71c926fae846c4fee3b02202ab77",
      "parents": [
        "d580a45c694b158adf3dd0aa95dbba0df61bf452"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Fri Oct 04 10:39:16 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Fri Oct 11 11:42:16 2024 -0300"
      },
      "message": "core: Move class__has_flexible_array() from pahole to the core\n\nWe want to cache that info, look if there are embedded fields of structs\nwith flexible arrays, etc.\n\nCc: \"Gustavo A. R. Silva\" \u003cgustavoars@kernel.org\u003e\nCc: Willy Tarreau \u003cw@1wt.eu\u003e\nLink: https://lore.kernel.org/all/20241007202531.942648-2-acme@kernel.org\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "d580a45c694b158adf3dd0aa95dbba0df61bf452",
      "tree": "399f5f72c2b8fb5f85acb445c2b0078113b5a314",
      "parents": [
        "ff34e733a0c23bf40a8baedebd6fa66a99280176"
      ],
      "author": {
        "name": "Stephen Brennan",
        "email": "stephen.s.brennan@oracle.com",
        "time": "Fri Oct 04 10:26:28 2024 -0700"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Oct 07 10:41:33 2024 -0300"
      },
      "message": "pahole: Add global_var BTF feature\n\nSo far, pahole has only encoded type information for percpu variables.\n\nHowever, there are several reasons why type information for all global\nvariables would be useful in the kernel:\n\n1. Runtime kernel debuggers like drgn could use the BTF to introspect\nkernel data structures without needing to install heavyweight DWARF.\n\n2. BPF programs using the \"__ksym\" annotation could declare the\nvariables using the correct type, rather than \"void\".\n\nIt makes sense to introduce a feature for this in pahole so that these\ncapabilities can be explored in the kernel.\n\nThe feature is non-default: when using \"--btf-features\u003ddefault\", it is\ndisabled. It must be explicitly requested, e.g. with\n\"--btf-features\u003d+global_var\".\n\nReviewed-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nSigned-off-by: Stephen Brennan \u003cstephen.s.brennan@oracle.com\u003e\nTested-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nAcked-by: Jiri Olsa \u003cjolsa@kernel.org\u003e\nLink: https://lore.kernel.org/r/20241004172631.629870-5-stephen.s.brennan@oracle.com\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "ff34e733a0c23bf40a8baedebd6fa66a99280176",
      "tree": "e739f44d47960e21d4e33049771a1c46c270fa72",
      "parents": [
        "5b5238c0aaff1dfd94972b8e7cf33862556aae5c"
      ],
      "author": {
        "name": "Stephen Brennan",
        "email": "stephen.s.brennan@oracle.com",
        "time": "Fri Oct 04 10:26:27 2024 -0700"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Oct 07 10:41:33 2024 -0300"
      },
      "message": "btf_encoder: Allow encoding VARs from many sections\n\nCurrently we maintain one buffer of DATASEC entries that describe the\noffsets for variables in the percpu ELF section.\n\nIn order to make it possible to output all global variables, we\u0027ll need\nto output a DATASEC for each ELF section containing variables, and we\u0027ll\nneed to control whether or not to encode variables on a per-section\nbasis.\n\nWith this change, the ability to emit VARs from multiple sections is\ntechnically present, but not enabled, so pahole still only emits percpu\nvariables.\n\nA subsequent change will enable emitting all global variables.\n\nReviewed-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nSigned-off-by: Stephen Brennan \u003cstephen.s.brennan@oracle.com\u003e\nAcked-by: Jiri Olsa \u003cjolsa@kernel.org\u003e\nLink: https://lore.kernel.org/r/20241004172631.629870-4-stephen.s.brennan@oracle.com\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "5b5238c0aaff1dfd94972b8e7cf33862556aae5c",
      "tree": "e13c85b085f312bb1b651984773f32ba28d91c7d",
      "parents": [
        "47dcb534e25313b2992b5d26125cdc2c99359391"
      ],
      "author": {
        "name": "Stephen Brennan",
        "email": "stephen.s.brennan@oracle.com",
        "time": "Fri Oct 04 10:26:26 2024 -0700"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Oct 07 10:41:33 2024 -0300"
      },
      "message": "btf_encoder: Explicitly check addr/size for u32 overflow\n\nThe addr is a uint64_t, and depending on the size of a data section,\nthere\u0027s no guarantee that it fits into a uint32_t, even after\nsubtracting out the section start address. Similarly, the variable size\nis a size_t which could exceed a uint32_t.\n\nCheck both for overflow, and if found, skip the variable with an error\nmessage. Use explicit casts when we cast to uint32_t so it\u0027s plain to\nsee that this is happening.\n\nReviewed-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nSigned-off-by: Stephen Brennan \u003cstephen.s.brennan@oracle.com\u003e\nAcked-by: Jiri Olsa \u003cjolsa@kernel.org\u003e\nLink: https://lore.kernel.org/r/20241004172631.629870-3-stephen.s.brennan@oracle.com\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "47dcb534e25313b2992b5d26125cdc2c99359391",
      "tree": "c74e0fbfed6e3cf9b68fe62e6e10bc486a281ad6",
      "parents": [
        "4536d74db7ad5378fbb3d49bf7360ac8a4dd429a"
      ],
      "author": {
        "name": "Stephen Brennan",
        "email": "stephen.s.brennan@oracle.com",
        "time": "Fri Oct 04 10:26:25 2024 -0700"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Oct 07 10:40:34 2024 -0300"
      },
      "message": "btf_encoder: Stop indexing symbols for VARs\n\nCurrently we index symbols from the percpu ELF section, and when\nprocessing DWARF variables for inclusion, we check whether the variable\nmatches an existing symbol. The matched symbol is used for three\npurposes:\n\n1. When no symbol of the same address is found, the variable is skipped.\n   This can occur because the symbol name was an invalid BTF\n   identifier, and so it did not get indexed. Or more commonly, it can\n   be because the variable is not stored in the per-cpu section, and\n   thus was not indexed.\n\n2. If the symbol offset is 0, then we compare the DWARF variable\u0027s name\n   against the symbol name to filter out \"special\" DWARF variables.\n\n3. We use the symbol size in the DATASEC entry for the variable.\n\nFor 1, we don\u0027t need the symbol table: we can simply check the DWARF\nvariable name directly, and we can use the variable address to determine\nthe ELF section it is contained in.\n\nFor 3, we also don\u0027t need the symbol table: we can use the variable\u0027s\nsize information from DWARF.\n\nIssue 2 is more complicated, but thanks to the addition of the\n\"artificial\" and \"top_level\" flags, many of the \"special\" DWARF\nvariables can be directly filtered out, and the few remaining\nproblematic variables can be filtered by name from a kernel-specific\nlist of patterns.\n\nThis allows the symbol table index to be removed. The benefit of\nremoving this index is twofold. First, handling variable addresses is\nsimplified, since we don\u0027t need to know whether the file is ET_REL.\n\nSecond, this will make it easier to output variables that aren\u0027t just\npercpu, since we won\u0027t need to index variables from all ELF sections.\n\nReviewed-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nSigned-off-by: Stephen Brennan \u003cstephen.s.brennan@oracle.com\u003e\nAcked-by: Jiri Olsa \u003cjolsa@kernel.org\u003e\nLink: https://lore.kernel.org/r/20241004172631.629870-2-stephen.s.brennan@oracle.com\nLink: https://lore.kernel.org/r/20241005000147.723515-1-stephen.s.brennan@oracle.com\n[ This includes the fixup in the second Link:, from Stephen ]\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "4536d74db7ad5378fbb3d49bf7360ac8a4dd429a",
      "tree": "9360d394ada6c3ab185ea0adb870031550af1bb1",
      "parents": [
        "d08775c932525c763090bd53c1aed6dcb56a8d68"
      ],
      "author": {
        "name": "Stephen Brennan",
        "email": "stephen.s.brennan@oracle.com",
        "time": "Wed Oct 02 16:52:43 2024 -0700"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Thu Oct 03 11:56:56 2024 -0300"
      },
      "message": "btf_encoder: Use bitfield to control var encoding\n\nWe will need more granularity in the future, in order to add support for\nencoding global variables as well.\n\nSo replace the skip_encoding_vars boolean with a flag variable named\n\"encode_vars\".\n\nThere is currently only one bit specified, and it is set when percpu\nvariables should be emitted.\n\nReviewed-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nSigned-off-by: Stephen Brennan \u003cstephen.s.brennan@oracle.com\u003e\nLink: https://lore.kernel.org/r/20241002235253.487251-2-stephen.s.brennan@oracle.com\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "d08775c932525c763090bd53c1aed6dcb56a8d68",
      "tree": "d04bf0695f344f811e83b4a79a4e94f99edeeb52",
      "parents": [
        "876f9c6fad88007f2256374a671fabf194f190d8"
      ],
      "author": {
        "name": "Alan Maguire",
        "email": "alan.maguire@oracle.com",
        "time": "Wed Oct 02 12:33:26 2024 +0100"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Thu Oct 03 11:54:44 2024 -0300"
      },
      "message": "tests/btf_functions: reduce verbosity of test\n\nwhen in non-verbose mode, emit a single line describing test + result.\n\nNon-verbose output now looks like this:\n\n  1: Validation of BTF encoding of functions; this may take some time: Ok\n\nCommitter testing:\n\n  acme@x1:~/git/pahole$ time tests/tests\n    1: Validation of BTF encoding of functions; this may take some time: Ok\n    2: Pretty printing of files using DWARF type information: Ok\n    3: Parallel reproducible DWARF Loading/Serial BTF encoding: Ok\n  /home/acme/git/pahole\n\n  real\t10m54.784s\n  user\t9m43.335s\n  sys\t5m14.034s\n  acme@x1:~/git/pahole$ grep -m1 \"model name\" /proc/cpuinfo\n  model name\t: 13th Gen Intel(R) Core(TM) i7-1365U\n  acme@x1:~/git/pahole$\n\nSuggested-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nSigned-off-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nTested-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nLink: https://lore.kernel.org/r/20241002113326.792495-3-alan.maguire@oracle.com\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "876f9c6fad88007f2256374a671fabf194f190d8",
      "tree": "613c6febc266355bda8fcc647a7f4fe8508358f5",
      "parents": [
        "2b3595765dfd2837d38753ca16f2638de92d1382"
      ],
      "author": {
        "name": "Alan Maguire",
        "email": "alan.maguire@oracle.com",
        "time": "Wed Oct 02 12:33:25 2024 +0100"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Thu Oct 03 11:27:31 2024 -0300"
      },
      "message": "tests/reproducible_build: Fix vmlinux finding logic\n\nIn updating the logic that finds the path for vmlinux, it is useful to\nsupport a few different options\n\n1. command-line parameter specification\n2. retrieval via pahole option\n3. environment variable based retrieval\n\nOptions 2 and 3 are useful for the case where the script is run via the\ntests script.  When adding support for 3 I incorrectly specified\n\nvmlinux\u003d${vmlinux:-1}\n\n...which should have been\n\nvmlinux\u003d${vmlinux:-$1}\n\ni.e. assign var vmlinux to the env var vmlinux if set, and if that is\nnot set, use the first parameter for the vmlinux value.  If neither are\nset we can then fall back to the pahole option.\n\nSigned-off-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nLink: https://lore.kernel.org/r/20241002113326.792495-2-alan.maguire@oracle.com\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "2b3595765dfd2837d38753ca16f2638de92d1382",
      "tree": "191ebadc566cf544c39f7981a43680683a33f6e0",
      "parents": [
        "3a29b13291b1516a78a28c36220b43c057d9c717"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Oct 01 16:34:14 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Oct 01 16:40:14 2024 -0300"
      },
      "message": "tests reproducible_build.sh: Try first to find a vmlinux using pahole --running_kernel_vmlinux\n\nOtherwise it stops working when called directly.\n\nCc: Alan Maguire \u003calan.maguire@oracle.com\u003e\nLink: https://lore.kernel.org/dwarves/ZvxP0n0W5b-5rxA_@x1\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "3a29b13291b1516a78a28c36220b43c057d9c717",
      "tree": "a82b43c6f15f67565453166cfd4c88e81028ae31",
      "parents": [
        "19460635885cf32c56d19bd8ee16c130482c0a9a"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Oct 01 15:23:28 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Oct 01 15:23:28 2024 -0300"
      },
      "message": "pahole: Show the CUs that are filtered via --lang_exclude when in verbose mode:\n\n  ⬢[acme@toolbox clang+thinlto+rust]$ pahole -V -j6 --btf_encode_detached\u003dtmp_vmlinux1.btf --btf_features\u003dencode_force,var,float,enum64,decl_tag,type_tag,optimized_func,consistent_func,decl_tag_kfuncs --lang_exclude\u003drust tmp_vmlinux1\n  Filtering CU /usr/lib/rustlib/src/rust/library/core/src/lib.rs/@/core.25793e9715209a7b-cgu.0 written in rust.\n  Filtering CU rust/compiler_builtins.rs/@/compiler_builtins.6f57a5fc13101438-cgu.0 written in rust.\n  Filtering CU /usr/lib/rustlib/src/rust/library/alloc/src/lib.rs/@/alloc.e373cb07bd07083a-cgu.0 written in rust.\n  Filtering CU rust/bindings/lib.rs/@/bindings.e4a37ad9e428c652-cgu.0 written in rust.\n  Filtering CU rust/kernel/lib.rs/@/kernel.f5c1c46b14036fc8-cgu.0 written in rust.\n  Filtering CU rust/uapi/lib.rs/@/uapi.52e8b2f8205e89f-cgu.0 written in rust.\n  \u003cSNIP\u003e\n\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "19460635885cf32c56d19bd8ee16c130482c0a9a",
      "tree": "945bbce1f1c2abfeff26427ac8184d088599c47a",
      "parents": [
        "b98565e7b17ec24daeb0b17f8f403c263dfcbd36"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Oct 01 15:22:56 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Oct 01 15:22:56 2024 -0300"
      },
      "message": "core: Add a id -\u003e string for DWARF language codes\n\nWe will need this for --lang_exclude debugging purposes.\n\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "b98565e7b17ec24daeb0b17f8f403c263dfcbd36",
      "tree": "7627a12fa72ee39c0c146b0acaee13f878a3844d",
      "parents": [
        "7a2b5008d97133347db77b4d3b6fe6943b55b2f2"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Oct 01 14:57:25 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Oct 01 14:57:25 2024 -0300"
      },
      "message": "dwarf_loader: Honour --lang_exclude when merging LTO built CUs\n\nWhen building kernels with clang, thin-LTO, the Rust DWARF tags were\nbeing added, which causes confusion as there has not been a concerted\neffort to check if what is being generated is useful/valid.\n\nAt least the Rust DWARF tags, when converted to BTF, were not causing\ncrashes, which is a good signal.\n\nFix it by passing a \u0027struct cu\u0027 with all fields zeroed except for the\nCU name and its language code. This is enough for the existing filter,\nin pahole (cu__filter) and will also allow us to, in verbose mode, show\nthe CU names being filtered.\n\nReported-by: Tom Stellard \u003ctstellar@redhat.com\u003e\nCc: Alan Maguire \u003calan.maguire@oracle.com\u003e\nCc: Don Zickus \u003cdzickus@redhat.com\u003e\nCc: Josh Stone \u003cjistone@redhat.com\u003e\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "7a2b5008d97133347db77b4d3b6fe6943b55b2f2",
      "tree": "48047333c0c079135a08409976dbf1ef070fc68b",
      "parents": [
        "6a275a088f90cba8f437e06d678e041f615bfba2"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Oct 01 14:51:39 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Oct 01 14:51:39 2024 -0300"
      },
      "message": "core: Constify cu-\u003ename\n\nNo need for it not to be const, and since we\u0027ll initialize it from\nattr_string(), it better be.\n\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "6a275a088f90cba8f437e06d678e041f615bfba2",
      "tree": "c9a197ef79f93f22cf56e7630b5f664ec2cbca18",
      "parents": [
        "1c5f0f53f1d094a574d494d0760b33db259587fc"
      ],
      "author": {
        "name": "Stephen Brennan",
        "email": "stephen.s.brennan@oracle.com",
        "time": "Fri Sep 20 01:19:00 2024 -0700"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Oct 01 11:51:57 2024 -0300"
      },
      "message": "btf_encoder: Cache all ELF section info\n\nTo handle outputting all variables generally, we\u0027ll need to store more\nsection data.\n\nCreate a table of ELF sections so we can refer to all the cached data,\nnot just the percpu section.\n\nSigned-off-by: Stephen Brennan \u003cstephen.s.brennan@oracle.com\u003e\nCc: Alan Maguire \u003calan.maguire@oracle.com\u003e\nLink: https://lore.kernel.org/r/20240920081903.13473-4-stephen.s.brennan@oracle.com\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "1c5f0f53f1d094a574d494d0760b33db259587fc",
      "tree": "807823d3c7129db8e1ae8cd781d2f3bc157109ae",
      "parents": [
        "ef01f78f693a4b3e418aa719ec4d4862240cf9c1"
      ],
      "author": {
        "name": "Stephen Brennan",
        "email": "stephen.s.brennan@oracle.com",
        "time": "Fri Sep 20 01:18:59 2024 -0700"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Oct 01 11:51:57 2024 -0300"
      },
      "message": "dwarf_loader: Add \"artificial\" and \"top_level\" variable flags\n\nThe \"artificial\" flag corresponds directly to DW_AT_artificial, which\nindicates a compiler-generated variable (e.g. __func__) which shouldn\u0027t\nbe included in the output.\n\nThe \"top_level\" flag is intended to be a better proxy for global scoped\nvariables. It indicates that a variable was a direct child of a\ncompilation unit, rather than a child of a subroutine or lexical block.\n\nCurrently, the DWARF loader examines the DWARF location expression, and\nif the location is found to be at a constant memory address (not stack,\nregister, etc), then the variable is assumed to be globally scoped.\n\nHowever, this includes a variety of variables that aren\u0027t truly globally\nscoped: most commonly, static local variables of functions. Their\nlocations may be static, but they\u0027re not globally accessible in any\nuseful way.\n\nThese flags will be used by the BTF encoder to select global variables.\n\nReviewed-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nSigned-off-by: Stephen Brennan \u003cstephen.s.brennan@oracle.com\u003e\nLink: https://lore.kernel.org/r/20240920081903.13473-3-stephen.s.brennan@oracle.com\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "ef01f78f693a4b3e418aa719ec4d4862240cf9c1",
      "tree": "2e6921895502afb588e95b7fb0718417a071d00c",
      "parents": [
        "135b37a04ce5a44003c9e548f3e9b61191605e14"
      ],
      "author": {
        "name": "Stephen Brennan",
        "email": "stephen.s.brennan@oracle.com",
        "time": "Fri Sep 20 01:18:58 2024 -0700"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Oct 01 11:51:57 2024 -0300"
      },
      "message": "dutil: Return ELF section name when looked up by index\n\nReviewed-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nSigned-off-by: Stephen Brennan \u003cstephen.s.brennan@oracle.com\u003e\nLink: https://lore.kernel.org/r/20240920081903.13473-2-stephen.s.brennan@oracle.com\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "135b37a04ce5a44003c9e548f3e9b61191605e14",
      "tree": "c7b917a4a24d5321bd642f557432a46cb8355934",
      "parents": [
        "57e485cf1cac88a925dd6a02d8931cf9a6e77988"
      ],
      "author": {
        "name": "Alan Maguire",
        "email": "alan.maguire@oracle.com",
        "time": "Tue Oct 01 12:46:29 2024 +0100"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Oct 01 11:51:57 2024 -0300"
      },
      "message": "tests: Distinguish between failed/skipped tests\n\nWhen a test returns 2, it indicates it had to be skipped; distinguish\nbetween this and other non-zero failures; the latter should result in\ntests returning 1 to indicate something failed.\n\nCommiter testing:\n\n  ⬢[acme@toolbox pahole]$ tests/tests\n    1: pahole: couldn\u0027t find a vmlinux that matches the running kernel\n  HINT: Maybe you\u0027re inside a container or missing a debuginfo package?\n  Please specify a vmlinux file to operate on\n  skipping...\n    2: Pretty printing of files using DWARF type information: pahole: type \u0027perf_event_type\u0027 not found\n  skip: /home/acme/bin/perf doesn\u0027t have \u0027enum perf_event_type\u0027 type info\n  skipping...\n    3: 1 file not available, please specify another\n  skipping...\n  /home/acme/git/pahole\n  ⬢[acme@toolbox pahole]$\n\nSigned-off-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nTested-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nLink: https://lore.kernel.org/r/20241001114629.3947401-5-alan.maguire@oracle.com\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "57e485cf1cac88a925dd6a02d8931cf9a6e77988",
      "tree": "e485c6183ca99f37eca4c61ad83c5c00d22d2b4d",
      "parents": [
        "5ea9d3fbccb2b1859ad8162751cf046448fb1fb8"
      ],
      "author": {
        "name": "Alan Maguire",
        "email": "alan.maguire@oracle.com",
        "time": "Tue Oct 01 12:46:28 2024 +0100"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Oct 01 11:51:57 2024 -0300"
      },
      "message": "tests/reproducible_build: Return 2 (skipped) if no vmlinux available\n\nDistinguish between test skipping (2) and test failure (1).\n\nSigned-off-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nLink: https://lore.kernel.org/r/20241001114629.3947401-4-alan.maguire@oracle.com\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "5ea9d3fbccb2b1859ad8162751cf046448fb1fb8",
      "tree": "cc7a8963c694bed5ba9e413dc84e13ad3fc9ada6",
      "parents": [
        "8344141695722f5f1e478abeadeb7c2fab31e595"
      ],
      "author": {
        "name": "Alan Maguire",
        "email": "alan.maguire@oracle.com",
        "time": "Tue Oct 01 12:46:27 2024 +0100"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Oct 01 11:51:57 2024 -0300"
      },
      "message": "tests/btf_functions: Return 2 to indicate test had to be skipped\n\nWhen vmlinux is not available, return 2 to indicate test is skipped.\n\nSigned-off-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nLink: https://lore.kernel.org/r/20241001114629.3947401-3-alan.maguire@oracle.com\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "8344141695722f5f1e478abeadeb7c2fab31e595",
      "tree": "c1dc2e6404355dd6e863cc44ac620cfbe5a4b9ef",
      "parents": [
        "c06310c689fe842ad5c7bc10a63f807f6468f528"
      ],
      "author": {
        "name": "Alan Maguire",
        "email": "alan.maguire@oracle.com",
        "time": "Tue Oct 01 12:46:26 2024 +0100"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Oct 01 11:51:57 2024 -0300"
      },
      "message": "tests/reproducible_builds: Support envvar-specified vmlinux\n\nFor running \"tests\" script on systems on which vmlinux is not locatable\nvia pahole, it is useful to be able to specify a path to vmlinux that\nworks across tests like this:\n\n  $ vmlinux\u003d/path2/vmlinux bash ./tests\n\nCommitter testing:\n\n  ⬢[acme@toolbox pahole]$ vmlinux\u003d/home/acme/git/pahole/vmlinux-v6.9.0-rc7 sh -x tests/reproducible_build.sh\n  + vmlinux\u003d/home/acme/git/pahole/vmlinux-v6.9.0-rc7\n  + \u0027[\u0027 -z /home/acme/git/pahole/vmlinux-v6.9.0-rc7 \u0027]\u0027\n  + \u0027[\u0027 \u0027!\u0027 -f /home/acme/git/pahole/vmlinux-v6.9.0-rc7 \u0027]\u0027\n  ++ mktemp -d /tmp/reproducible_build.sh.XXXXXX\n  + outdir\u003d/tmp/reproducible_build.sh.FVrTC7\n  + echo -n \u0027Parallel reproducible DWARF Loading/Serial BTF encoding: \u0027\n  Parallel reproducible DWARF Loading/Serial BTF encoding: + test -n \u0027\u0027\n  + pahole --btf_features\u003ddefault --btf_encode_detached\u003d/tmp/reproducible_build.sh.FVrTC7/vmlinux.btf.serial /home/acme/git/pahole/vmlinux-v6.9.0-rc7\n  ^C\n  ⬢[acme@toolbox pahole]$\n\nSigned-off-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nTested-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nLink: https://lore.kernel.org/r/20241001114629.3947401-2-alan.maguire@oracle.com\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "c06310c689fe842ad5c7bc10a63f807f6468f528",
      "tree": "8bf24707d571839908b53662317ae1c887af824d",
      "parents": [
        "dafd8e085f31d05beca0b68a420cb63e2eeb31fb"
      ],
      "author": {
        "name": "Eduard Zingerman",
        "email": "eddyz87@gmail.com",
        "time": "Mon Sep 16 02:19:21 2024 -0700"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Oct 01 11:51:57 2024 -0300"
      },
      "message": "pahole: Generate \"bpf_fastcall\" decl tags for eligible kfuncs\n\nFor kfuncs marked with KF_FASTCALL flag generate the following pair of\ndecl tags:\n\n    $ bpftool btf dump file vmlinux\n    ...\n    [A] FUNC \u0027bpf_rdonly_cast\u0027 type_id\u003d...\n    ...\n    [B] DECL_TAG \u0027bpf_kfunc\u0027 type_id\u003dA component_idx\u003d-1\n    [C] DECL_TAG \u0027bpf_fastcall\u0027 type_id\u003dA component_idx\u003d-1\n\nSo that bpftool could find \u0027bpf_fastcall\u0027 decl tag and generate\nappropriate C declarations for such kfuncs, e.g.:\n\n    #ifndef __VMLINUX_H__\n    #define __VMLINUX_H__\n    ...\n    #define __bpf_fastcall __attribute__((bpf_fastcall))\n    ...\n    __bpf_fastcall extern void *bpf_rdonly_cast(...) ...;\n\nFor additional information about \u0027bpf_fastcall\u0027 attribute, see the\nfollowing commit in the LLVM source tree:\n\n  64e464349bfc (\"[BPF] introduce __attribute__((bpf_fastcall))\")\n\nAnd the following Linux kernel commit:\n\n  52839f31cece (\"Merge branch \u0027no_caller_saved_registers-attribute-for-helper-calls\u0027\")\n\nReviewed-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nSigned-off-by: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nAcked-by: Andrii Nakryiko \u003candrii@kernel.org\u003e\nCc: Alexei Starovoitov \u003cast@kernel.org\u003e\nCc: Daniel Borkmann \u003cdaniel@iogearbox.net\u003e\nCc: Martin KaFai Lau \u003cmartin.lau@linux.dev\u003e\nCc: Yonghong Song \u003cyonghong.song@linux.dev\u003e\nCc: bpf@vger.kernel.org\nCc: kernel-team@fb.com\nLink: https://lore.kernel.org/r/20240916091921.2929615-1-eddyz87@gmail.com\n[ Added btf__ prefix to add_kfunc_decl_tag() to follow convention ]\n[ Fixed up minor conflict with 5205d02d8e84a775 (\"btf_encoder: record BTF-centric function state instead of DWARF-centric\") ]\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "dafd8e085f31d05beca0b68a420cb63e2eeb31fb",
      "tree": "2ff859ad051a41fdc06c6f7cfbd65c8b32003b92",
      "parents": [
        "4d3e050c1871e98d89e698f5fda01a73dd9aab6a"
      ],
      "author": {
        "name": "Alan Maguire",
        "email": "alan.maguire@oracle.com",
        "time": "Mon Sep 30 09:17:25 2024 +0100"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Oct 01 11:51:57 2024 -0300"
      },
      "message": "tests: Improve btf_functions.sh by reducing greps/pipes\n\nReduce number of greps/pipes to minimize overhead of test; in my\nmeasurements this shaves ~1min off test run time to be approximately\n4 minutes.\n\nSigned-off-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nAcked-by: Jiri Olsa \u003cjolsa@kernel.org\u003e\nCc: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nCc: Jiri Slaby \u003cjirislaby@kernel.org\u003e\nCc: Sedat Dilek \u003csedat.dilek@gmail.com\u003e\nCc: Shung-Hsi Yu \u003cshung-hsi.yu@suse.com\u003e\nCc: Willy Tarreau \u003cw@1wt.eu\u003e\nCc: dwarves@vger.kernel.org\nLink: https://lore.kernel.org/r/20240930081725.2465825-3-alan.maguire@oracle.com\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "4d3e050c1871e98d89e698f5fda01a73dd9aab6a",
      "tree": "669ca1c2128248627fa4fd1d1d896bd63beb216d",
      "parents": [
        "0a3b73d6a5fc3c64a6517862aeece7b0c096b827"
      ],
      "author": {
        "name": "Alan Maguire",
        "email": "alan.maguire@oracle.com",
        "time": "Mon Sep 30 09:17:24 2024 +0100"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Oct 01 11:51:57 2024 -0300"
      },
      "message": "btf_encoder: Fix strncpy issues, other issues identified in code review\n\n- Fixed checks of func-\u003estate since it is always non-NULL and removed\n  now-unneeded fields from dwarves.h; added assertions that either\n  ELF or DWARF data is present for func encoding (Jiri)\n\n- Fixed strncpy() issues, improved equality comparions between types\n  (Eduard)\n\nSigned-off-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nAcked-by: Jiri Olsa \u003cjolsa@kernel.org\u003e\nCc: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nCc: Jiri Slaby \u003cjirislaby@kernel.org\u003e\nCc: Sedat Dilek \u003csedat.dilek@gmail.com\u003e\nCc: Shung-Hsi Yu \u003cshung-hsi.yu@suse.com\u003e\nCc: Willy Tarreau \u003cw@1wt.eu\u003e\nLink: https://lore.kernel.org/r/20240930081725.2465825-2-alan.maguire@oracle.com\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "0a3b73d6a5fc3c64a6517862aeece7b0c096b827",
      "tree": "bd79b5d5b65b039d2c8b22dfb76cb99ebc261988",
      "parents": [
        "dfc38c09ce4f94bf25e252ec3d211ac836d1388c"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Fri Sep 27 15:04:03 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Oct 01 11:51:51 2024 -0300"
      },
      "message": "pahole: Add --padding N to show only structs with N bytes of padding at its end\n\nExample usage:\n\n  $ pahole --padding 4 --with_flexible_array\n  \u003cSNIP\u003e\n  struct netprio_map {\n          struct callback_head       rcu;                  /*     0    16 */\n          u32                        priomap_len;          /*    16     4 */\n          u32                        priomap[];            /*    20     0 */\n\n          /* size: 24, cachelines: 1, members: 3 */\n          /* padding: 4 */\n          /* last cacheline: 24 bytes */\n  };\n  \u003cSNIP\u003e\n\nAcked-by: \"Gustavo A. R. Silva\" \u003cgustavoars@kernel.org\u003e\nAcked-by: Willy Tarreau \u003cw@1wt.eu\u003e\nLink: https://lore.kernel.org/dwarves/20240927185958.37310-3-acme@kernel.org\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "dfc38c09ce4f94bf25e252ec3d211ac836d1388c",
      "tree": "80bff4fc40662565fb85e4e465f590db7a9e39e0",
      "parents": [
        "b56cf57f25daf8806966944240a86bfb19cc0275"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Fri Sep 27 15:04:03 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Oct 01 11:50:55 2024 -0300"
      },
      "message": "pahole: Add --padding_ge N to show only structs with at least N bytes of padding at its end\n\nExample usage:\n\n  $ pahole --padding_ge 4 --with_flexible_array\n  \u003cSNIP\u003e\n  struct netprio_map {\n          struct callback_head       rcu;                  /*     0    16 */\n          u32                        priomap_len;          /*    16     4 */\n          u32                        priomap[];            /*    20     0 */\n\n          /* size: 24, cachelines: 1, members: 3 */\n          /* padding: 4 */\n          /* last cacheline: 24 bytes */\n  };\n  \u003cSNIP\u003e\n\nOne can combine with -x/--exclude to remove from the output common\npatterns such as \u0027struct trace_event_\u0027 structs:\n\n  $ pahole --with_flexible_array --padding_ge 4 --exclude trace_event_ | grep ^struct\n  struct rseq {\n  struct mem_cgroup {\n  struct netprio_map {\n  struct qdisc_size_table {\n  struct sysinfo {\n  struct ethtool_rxnfc {\n  struct ioam6_schema {\n  struct poll_list {\n  struct posix_acl {\n  struct proc_dir_entry {\n  struct scsi_vpd {\n  struct xsk_buff_pool {\n  struct ieee80211_regdomain {\n  struct watch_filter {\n  struct landlock_rule {\n  struct ghes_vendor_record_entry {\n  struct packet_fanout {\n  struct name_cache_entry {\n  struct workqueue_struct {\n  struct svc_deferred_req {\n  struct cis_cache_entry {\n  struct sem_undo {\n  struct sidtab_str_cache {\n  struct pcpu_chunk {\n  struct pericom8250 {\n  struct dm_name_list {\n  struct linux_dirent64 {\n  struct old_linux_dirent {\n  struct linux_dirent {\n  $\n\nAcked-by: \"Gustavo A. R. Silva\" \u003cgustavoars@kernel.org\u003e\nAcked-by: Willy Tarreau \u003cw@1wt.eu\u003e\nLink: https://lore.kernel.org/dwarves/20240927185958.37310-2-acme@kernel.org\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "b56cf57f25daf8806966944240a86bfb19cc0275",
      "tree": "c2e3733973e536822ac1c50b0d2bbec4f8acca4e",
      "parents": [
        "6b199c39c9320fc2ee2b2ea65aa3c64e79d78180"
      ],
      "author": {
        "name": "Alan Maguire",
        "email": "alan.maguire@oracle.com",
        "time": "Mon Sep 16 14:49:46 2024 +0100"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Sep 30 12:34:07 2024 -0300"
      },
      "message": "tests: Add test validating BTF encoding, reasons we skip functions\n\nuse pahole to encode BTF and pfunct to check that\n\n- DWARF functions that made it into BTF match signatures\n- for functions we say we skipped, we did indeed skip them in BTF\n  encoding; and\n- it was correct to skip these functions\n\nIt is not possible to check everything, as pfunct does not\nprint \".\"-suffixed optimized representations, and it does not\nanalyze location calling conventions.  As a starting point we check\nfor\n\n- functions encoded in BTF match signatures with DWARF\n- functions with multiple incompatible return values\n- functions with incompatible parameter count/type\n\nThis test automates manual validation of encoding/skipping,\nand as such will be useful to ensure regressions are not\nintroduced, for comparing gcc/LLVM-based DWARF representations\netc.\n\nThe test takes ~5 minutes to run in all; output looks like this:\n\n  $ vmlinux\u003d~/kbuild/bpf-next/vmlinux bash ./btf_functions.sh\n  Validation of BTF encoding of functions; this may take some time...\n  Matched 55969 functions exactly.\n  Matched 239 functions with inlines.\n  Matched 1 functions with multiple const/non-const instances.\n  Ok\n  Validation of skipped function logic...\n  Validating skipped functions are absent from BTF...\n  Skipped encoding 748 functions in BTF.\n  Ok\n  Validating skipped functions have incompatible return values...\n  Found 8 functions with multiple incompatible return values.\n  Ok\n  Validating skipped functions have incompatible params/counts...\n  Found 116 instances with multiple instances with incompatible parameters.\n  Found 2 instances where inline functions were not inlined and had incompatible parameters.\n  Found 351 instances where the function name suggests optimizations led to inconsistent parameters.\n  Ok\n\nSuggested-by: Jiri Olsa \u003cjolsa@kernel.org\u003e\nSigned-off-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nTested-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nCc: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nCc: Jiri Slaby \u003cjirislaby@kernel.org\u003e\nCc: Shung-Hsi Yu \u003cshung-hsi.yu@suse.com\u003e\nLink: https://lore.kernel.org/r/20240916134946.3893204-4-alan.maguire@oracle.com\n[ Use \u0027grep -e\u0027 instead of the deprecated \u0027egrep\u0027 command, avoding one warning per invocation ]\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "6b199c39c9320fc2ee2b2ea65aa3c64e79d78180",
      "tree": "f9b8c8f5c4a9ef584dcce4a309e304411f7164e2",
      "parents": [
        "4bff1141bb48ae58074e39d8e6774da39015fcec"
      ],
      "author": {
        "name": "Alan Maguire",
        "email": "alan.maguire@oracle.com",
        "time": "Mon Sep 16 14:49:45 2024 +0100"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Sep 30 12:34:07 2024 -0300"
      },
      "message": "pfunct: Show all functions that match filter criteria\n\nCurrently, \"pfunct --function \u003cname\u003e vmlinux\" will bail once it finds\nan instance of a function; add an option\n\n  -A, --all                  show all functions that match filter, or show all\n                             function prototypes if no filter is specified\n\n..that allows us to see all instances of a function.  It will be\nuseful in testing functions skipped by BTF encoding.\n\nWhen --function is not specified, all prototypes are displayed but\nwe make use of the pfunct_stealer for this case as it massively\nspeeds up processing from ~6min to ~12sec.\n\nIt will be useful in tests to be able to collect prototypes quickly.\n\nSigned-off-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nTested-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nCc: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nCc: Jiri Olsa \u003cjolsa@kernel.org\u003e\nCc: Jiri Slaby \u003cjirislaby@kernel.org\u003e\nCc: Shung-Hsi Yu \u003cshung-hsi.yu@suse.com\u003e\nLink: https://lore.kernel.org/r/20240916134946.3893204-3-alan.maguire@oracle.com\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "4bff1141bb48ae58074e39d8e6774da39015fcec",
      "tree": "60281149d0c92e52f55068a13633dd104c5fc712",
      "parents": [
        "84ab4532efe4e263f59f89e4c0a13c49b55361b8"
      ],
      "author": {
        "name": "Alan Maguire",
        "email": "alan.maguire@oracle.com",
        "time": "Mon Sep 16 14:49:44 2024 +0100"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Sep 30 12:34:02 2024 -0300"
      },
      "message": "btf_encoder: Record BTF-centric function state instead of DWARF-centric\n\nWhen recording function information for later comparison (as we do when\nskipping inconsistent function descriptions), we utilize DWARF-based\nrepresentations because we do not want to jump the gun and add BTF\nrepresentations for functions that have inconsistent representations\nacross CUs (and across encoders in parallel mode).\n\nSo to handle this, we save info about functions, and we can then add\nthem later once we have ensured their various representations are in\nfact consistent.  However to ensure that the function info is still\nvalid, we need to specify LSK__KEEPIT for CUs, which bloats memory usage\n(in some cases to ~4Gb).  This is not a good approach, mea culpa.\n\nInstead, store a BTF-centric representation where we\n\n- store the number of parameters\n- store the BTF ids of return type and parameters\n- store the name of the parameters where present\n- store any LLVM annotation values, component idxs if present\n\nSo in summary, store everything we need to add the BTF_KIND_FUNC and\nBTF_KIND_FUNC_PROTO and any associated annotations.  This will allow us\nto free CUs as we go but make it possible to add functions later.\n\nFor name storage we can take advantage of the fact that BTF will avoid\nre-adding a name string so we btf__add_str() to add the parameter name\nand store the string offset instead; this prevents duplicate name\nstorage while ensuring the parameter name is in BTF.\n\nWhen we cross-compare functions for consistency, do a shallow analysis\nakin to what was done with DWARF prototype comparisons; compare base\ntypes by name, reference types by target type, match loosely between\nfwds, structs and unions etc.\n\nWhen this is done, memory consumption peaks at 1Gb rather than ~4Gb for\nvmlinux generation.  Time taken appears to be approximately the same for\n-j1, but slightly faster for multiple threads; for example:\n\nBaseline\n\n$ time pahole -J vmlinux -j1 --btf_features\u003ddefault\n\nreal\t0m17.268s\nuser\t0m15.808s\nsys\t0m1.415s\n\n$ time pahole -J vmlinux -j8 --btf_features\u003ddefault\n\nreal\t0m10.768s\nuser\t0m30.793s\nsys\t0m4.199s\n\nWith these changes:\n\n$ time pahole -J vmlinux -j1 --btf_features\u003ddefault\n\nreal\t0m16.564s\nuser\t0m16.029s\nsys\t0m0.492s\n\n$ time pahole -J vmlinux -j8 --btf_features\u003ddefault\n\nreal\t0m8.332s\nuser\t0m30.627s\nsys\t0m0.714s\n\nIn terms of functions encoded, 360 fewer functions make it into BTF due\nto the different approach in consistency checking, but after examining\nthese cases, they do appear to be legitimately inconsistent functions\nwhere the optimized versions have parameter mismatches with the\nnon-optimized expectations.\n\nMileage may vary of course, and any testing folks could do would be\ngreatly appreciated!\n\nMore future work would involve sharing the ELF representation across\nencoders; this is the logical next step and judging by single-threaded\nperformance should get us down to ~500Mb peak memory utilization;\nhowever it is better to approach this by taking smaller steps (we would\nalso need to think about handling synchronous read/writes from multiple\nthreads of function state).\n\nSigned-off-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nCc: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nCc: Jiri Olsa \u003cjolsa@kernel.org\u003e\nCc: Jiri Slaby \u003cjirislaby@kernel.org\u003e\nCc: Shung-Hsi Yu \u003cshung-hsi.yu@suse.com\u003e\nLink: https://lore.kernel.org/r/20240916134946.3893204-2-alan.maguire@oracle.com\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "84ab4532efe4e263f59f89e4c0a13c49b55361b8",
      "tree": "c42871b68bac9852b0344ebd098af0257a50cbe4",
      "parents": [
        "a4f5f07ea0f3ba92bf4a11afdafce62dedcd54d4"
      ],
      "author": {
        "name": "Viktor Malik",
        "email": "vmalik@redhat.com",
        "time": "Tue Sep 03 08:23:52 2024 +0200"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Sep 03 11:10:10 2024 -0300"
      },
      "message": "dwarf_loader: Fix memleaks in creating cus\n\nCoverity reports a possible memleak in dwarf_cus__create_cu() due to CU\nnot being freed for the case when it was allocated but cu__set_common()\nfailed. The same situation occurs in __cus_load_debug_types().\n\nFix the leaks.\n\nReviewed-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nSigned-off-by: Viktor Malik \u003cvmalik@redhat.com\u003e\nTested-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nLink: https://lore.kernel.org/r/20240903062352.763644-1-vmalik@redhat.com\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "a4f5f07ea0f3ba92bf4a11afdafce62dedcd54d4",
      "tree": "6b6cd5cc28288d3c7330f9317c080828f1132a3a",
      "parents": [
        "fd14dc67cb6aaead553074afb4a1ddad10209892"
      ],
      "author": {
        "name": "Alan Maguire",
        "email": "alan.maguire@oracle.com",
        "time": "Mon Sep 02 15:10:43 2024 +0100"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Sep 02 11:17:36 2024 -0300"
      },
      "message": "pahole: Sync with latest in-progress libbpf-1.5\n\nThis will pull in fixes to BTF support for distilled base BTF.\n\nSigned-off-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nCc: Alexei Starovoitov \u003cast@kernel.org\u003e\nCc: Andrii Nakryiko \u003candrii@kernel.org\u003e\nCc: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nCc: Jiri Olsa \u003cjolsa@kernel.org\u003e\nCc: Martin KaFai Lau \u003cmartin.lau@linux.dev\u003e\nCc: Song Liu \u003csongliubraving@meta.com\u003e\nCc: Tony Ambardar \u003ctony.ambardar@gmail.com\u003e\nLink: https://lore.kernel.org/r/20240902141043.177815-1-alan.maguire@oracle.com\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "fd14dc67cb6aaead553074afb4a1ddad10209892",
      "tree": "874e6793d779a06e567d662537aff59087ed92c6",
      "parents": [
        "2282d7df4d99cfdd9bab3d1afdc9a33381947aea"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Wed Aug 28 16:54:46 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Wed Aug 28 19:24:17 2024 -0300"
      },
      "message": "tests prettify_perf.data: Add regression test for \u0027pahole --prettify\u0027\n\nThis feature is documented in the pahole manpage, plenty of examples\nthere, basically uses DWARF or BTF type info to parse raw data, for\ninstance a perf.data file and from type info go on pretty printing it,\nfinding out about offsets, record types, record sizes found in its\nheaders, etc.\n\nAdd a regression test for this set of features, where enums are joined\ntogether to find out about record types and from there to parse\ndifferent kinds of records, etc.\n\nIt checks if perf is available and has debugging info needed, and since\npahole has support for debuginfod, it may even fetch the perf debuginfo\ndata needed.\n\nTesting it:\n\n  acme@number:~/git/pahole$ tests/tests\n    1: Pretty printing of files using DWARF type information: Ok\n    2: Parallel reproducible DWARF Loading/Serial BTF encoding: Ok\n  acme@number:~/git/pahole$ tests/tests\n\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "2282d7df4d99cfdd9bab3d1afdc9a33381947aea",
      "tree": "c733440a3fd671c8ee0db31fb475e25f313151ba",
      "parents": [
        "ba38e1567bc43f7a8d912896e50b1134f516e239"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Wed Aug 28 16:53:00 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Wed Aug 28 16:53:59 2024 -0300"
      },
      "message": "tests: Add script to enumerate and run regression tests in the tests/ dir\n\nIt\u0027ll just enumerate tests/*.sh and all of them:\n\n  acme@number:~/git/pahole$ tests/tests\n    1: Pretty printing of files using DWARF type information: Ok\n    2: Parallel reproducible DWARF Loading/Serial BTF encoding: Ok\n  acme@number:~/git/pahole$\n\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "ba38e1567bc43f7a8d912896e50b1134f516e239",
      "tree": "65f3a0e5bb1034555cde735da206e4682e4b9e75",
      "parents": [
        "ea1865cf7a109806c007d9e893c8b41908fbbb2e"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Wed Aug 28 16:49:08 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Wed Aug 28 16:49:08 2024 -0300"
      },
      "message": "tests reproducible_build: Try to find the running kernel vmlinux if ran without args\n\nUsing the new \u0027pahole --running_kernel_vmlinux\" option, this way we\u0027ll\nbe able to use it in the upcoming tests/tests script that will run all\n.sh regression tests in the tests/ directory.\n\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "ea1865cf7a109806c007d9e893c8b41908fbbb2e",
      "tree": "b79f6f849924113a2b3c065130a296f717d9eced",
      "parents": [
        "c08046f98a3f84881133f9172f6bb417add61879"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Wed Aug 28 16:30:59 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Wed Aug 28 16:33:20 2024 -0300"
      },
      "message": "pahole: Add option to obtain a vmlinux matching the running kernel\n\nTo use in regression tests scripts, but in general its a nice utility to\nuse in other kinds of scripts.\n\nAll this matches:\n\n  $ pahole --running_kernel_vmlinux\n  /lib/modules/6.11.0-rc5+/build/vmlinux\n  $ file `pahole --running_kernel_vmlinux`\n  /lib/modules/6.11.0-rc5+/build/vmlinux: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, BuildID[sha1]\u003d4dd7f9c4507b82a5bf90671d524e5bb308104ffa, with debug_info, not stripped\n  $ perf buildid-list -k\n  4dd7f9c4507b82a5bf90671d524e5bb308104ffa\n  $ perf buildid-list -i /lib/modules/6.11.0-rc5+/build/vmlinux\n  4dd7f9c4507b82a5bf90671d524e5bb308104ffa\n  $\n\nCc: Alan Maguire \u003calan.maguire@oracle.com\u003e\nCc: Andrii Nakryiko \u003candrii@kernel.org\u003e\nCc: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nCc: Jiri Olsa \u003cjolsa@kernel.org\u003e\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "c08046f98a3f84881133f9172f6bb417add61879",
      "tree": "21b07508a4dca2e9f2a81f3b1c4bfff2e0155272",
      "parents": [
        "1dfd141fafd40d63653a6fd6da8ba331f2099d2c"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Wed Aug 28 16:19:17 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Wed Aug 28 16:19:17 2024 -0300"
      },
      "message": "core: Add function to return the path to the running kernel vmlinux\n\nIt reads the running kernel buildid from /sys/kernel/notes, then looks\nat usual places (debuginfo packages, /lib/modules/`uname\n-r`/build/vmlinux, etc) to try and find a matching vmlinux where to try\ngetting DWARF and/or BTF from.\n\nWe\u0027ll use it in a new pahole command line option to use in regression\ntests.\n\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "1dfd141fafd40d63653a6fd6da8ba331f2099d2c",
      "tree": "906daafa2297bacbc9e4d2e2736e5b585ce5076e",
      "parents": [
        "e3fda2668a8cebf02dd7bff6273673b3c942db5a"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Aug 26 20:20:49 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Aug 27 11:09:50 2024 -0300"
      },
      "message": "pfunct: Print DW_AT_external\u003d1 functions once\n\nNamhyung mentioned that \u0027set_task_cpu\u0027 wasn\u0027t being printed with pfunct,\nthat was because those functions (with DW_AT_external\u003d1) were not being\nprinted at all, out of some wrong expectations, this was added to avoid\nprinting it multiple times to allow for things like --compile to work,\nbut that was too much of a big hammer.\n\nSo add fn_stats-\u003eprinted and use it to determine if functions were\nalready printed.\n\nAlso don\u0027t print definitions for functions marked as declarations, as it\nclashes with the ones in system headers, like __builtin_memcpy, etc.\n\nThis all needs a more thorough love and care, but at least for now\n--compile works with \u0027fullcircle tcp.o\u0027 (generating the functions and\nthe types it uses and then compiling it to get the original types and\nfunctions and prints the external functions:\n\n  $ pfunct -F dwarf -f set_task_cpu vmlinux\n  void set_task_cpu(struct task_struct * p, unsigned int new_cpu);\n  $ pfunct -F btf -f set_task_cpu vmlinux\n  void set_task_cpu(struct task_struct * p, unsigned int new_cpu);\n  $\n\nReported-by: Namhyung Kim \u003cnamhyung@kernel.org\u003e\nTested-by: Namhyung Kim \u003cnamhyung@kernel.org\u003e\nCc: Alan Maguire \u003calan.maguire@oracle.com\u003e\nCc: Jiri Olsa \u003cjolsa@kernel.org\u003e\nLink: https://lore.kernel.org/all/Zs0QVVZZfN9H7wQC@x1\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "e3fda2668a8cebf02dd7bff6273673b3c942db5a",
      "tree": "53f63980f48319f858555572d4e3650acc38ad61",
      "parents": [
        "c7b1f6a29ba15a5dfd3de506dda85cc2fb3ad846"
      ],
      "author": {
        "name": "Alan Maguire",
        "email": "alan.maguire@oracle.com",
        "time": "Mon Aug 26 12:01:48 2024 +0100"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Aug 27 10:49:21 2024 -0300"
      },
      "message": "pahole: Reduce memory usage by smarter deleting of CUs\n\npahole uses a lot of memory when doing DWARF-\u003eBTF encoding.  While some\nof this is inevitable there are some cases where we can improve things.\n\nWhen doing BTF encoding, we sometimes need to keep CUs around to compare\nfunctions to spot optimized/inconsistent functions.  Currently we decide\nthis on a per-encoder basis (saved_func_cnt) where we count how many\ntimes we save a function, and if any functions are saved for the\n_encoder_, we keep all CUs.\n\nInstead we can have a per-CU count of saved functions, and if none are\nsaved for the _CU_ it is safe to delete it.\n\nThis leads to deleting ~90 CUs during parallel vmlinux BTF generation\nversus deleting just 1 prior to this change.\n\nSigned-off-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nLink: https://lore.kernel.org/r/20240826110148.790124-1-alan.maguire@oracle.com\nCc: dwarves@vger.kernel.org\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "c7b1f6a29ba15a5dfd3de506dda85cc2fb3ad846",
      "tree": "b9739f6e0ac916c2c03515e73f272767a42c3de9",
      "parents": [
        "b6def578aa4a631f870568e13bfd647312718e7f"
      ],
      "author": {
        "name": "Alan Maguire",
        "email": "alan.maguire@oracle.com",
        "time": "Mon Jul 29 12:13:17 2024 +0100"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Aug 27 10:49:14 2024 -0300"
      },
      "message": "btf_encoder: Add \"distilled_base\" BTF feature to split BTF generation\n\nAdding \"distilled_base\" to --btf_features when generating split BTF will\ncreate split and .BTF.base BTF - the latter allows us to map references\nfrom split BTF to base BTF, even if that base BTF has changed.  It does\nthis by providing just enough information about the base types in the\n.BTF.base section. See [1] for more.\n\nOne note - with non-embedded libbpf, we need to guard against versions\nof libbpf (\u003c1.5) which do not have btf__distill_base(); in such a case,\nsilently skip distillation in line with other unrecognized BTF features.\n\n[1] https://lore.kernel.org/bpf/20240613095014.357981-1-alan.maguire@oracle.com/\n\nSigned-off-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nCc: Alexei Starovoitov \u003cast@kernel.org\u003e\nCc: Andrii Nakryiko \u003candrii@kernel.org\u003e\nCc: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nCc: Jiri Olsa \u003cjolsa@kernel.org\u003e\nCc: bpf@vger.kernel.org\nCc: dwarves@vger.kernel.org\nLink: https://lore.kernel.org/r/20240729111317.140816-3-alan.maguire@oracle.com\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "b6def578aa4a631f870568e13bfd647312718e7f",
      "tree": "36ea4609205b2da0043aa9e110ce148f220de655",
      "parents": [
        "d744d859768d6951cacd146604891c108b39f6a1"
      ],
      "author": {
        "name": "Alan Maguire",
        "email": "alan.maguire@oracle.com",
        "time": "Mon Jul 29 12:13:16 2024 +0100"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Aug 27 10:49:07 2024 -0300"
      },
      "message": "pahole: Sync with libbpf-1.5\n\nThis will pull in BTF support for distilled base BTF.\n\nSigned-off-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nCc: Alexei Starovoitov \u003cast@kernel.org\u003e\nCc: Andrii Nakryiko \u003candrii@kernel.org\u003e\nCc: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nCc: Jiri Olsa \u003cjolsa@kernel.org\u003e\nCc: bpf@vger.kernel.org\nCc: dwarves@vger.kernel.org\nLink: https://lore.kernel.org/r/20240729111317.140816-2-alan.maguire@oracle.com\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "d744d859768d6951cacd146604891c108b39f6a1",
      "tree": "a30becbe7f0fc22dcba459209b99480c8ff70fbd",
      "parents": [
        "81661fa60f83c7f1f388ffb518db869107d0dacc"
      ],
      "author": {
        "name": "Matthew Maurer",
        "email": "mmaurer@google.com",
        "time": "Thu Aug 01 18:50:54 2024 +0000"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Aug 27 10:49:00 2024 -0300"
      },
      "message": "pahole: Do --lang_exclude CU filtering earlier\n\nWith this, we can avoid warnings for unsupported DWARF tags like:\n\n  die__process_function: tag not supported 0x2f (template_type_parameter)!\n\nwhen processing object files generated from languages such as Rust, for\ninstance when building the Linux kernel with `CONFIG_RUST`, after\napplying the next patch in this series.\n\nAs an added bonus, this should speed up processing of large objects with\nfiltered CUs, as their details will no longer be walked.\n\nCommitter testing:\n\nTested building a kernel with CONFIG_RUST, no warnings (that\ntemplate_type_param wouldn\u0027t appear anyway as I added initial support\nfor it, at least for creating some structs out of its DWARF info, so no\nmore warnings), but:\n\n  ⬢[acme@toolbox linux]$ pahole -C \u0027\u003ckernel::str::RawFormatter as core::fmt::Write\u003e::{vtable_type}\u0027 ../build/rust-kernel/rust/kernel.o\n  die__process_class: tag not supported 0x33 (variant_part) at \u003c14f43\u003e!\n  struct \u003ckernel::str::RawFormatter as core::fmt::Write\u003e::{vtable_type} {\n          () *                       drop_in_place __attribute__((__aligned__(8))); /*     0     8 */\n          usize                      size __attribute__((__aligned__(8))); /*     8     8 */\n          usize                      align __attribute__((__aligned__(8))); /*    16     8 */\n          () *                       __method3 __attribute__((__aligned__(8))); /*    24     8 */\n          () *                       __method4 __attribute__((__aligned__(8))); /*    32     8 */\n          () *                       __method5 __attribute__((__aligned__(8))); /*    40     8 */\n\n          /* size: 48, cachelines: 1, members: 6 */\n          /* forced alignments: 6 */\n          /* last cacheline: 48 bytes */\n  } __attribute__((__aligned__(8)));\n\n  ⬢[acme@toolbox linux]$\n\nThat DW_TAG_variant_part warning would show up without this series, so\nseems to be working as expected :-)\n\nReviewed-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nSigned-off-by: Matthew Maurer \u003cmmaurer@google.com\u003e\nTested-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nTested-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nCc: Alice Ryhl \u003caliceryhl@google.com\u003e\nCc: rust-for-linux@vger.kernel.org\nLink: https://lore.kernel.org/r/20240801185054.2518383-1-mmaurer@google.com\n[ Split from a larger patch ]\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "81661fa60f83c7f1f388ffb518db869107d0dacc",
      "tree": "6418703db13757a5dc9ecce93a76b419f60e0c48",
      "parents": [
        "52ac9a728dc1c5759b533aef42fe9724b3611eb7"
      ],
      "author": {
        "name": "Matthew Maurer",
        "email": "mmaurer@google.com",
        "time": "Thu Aug 01 18:50:54 2024 +0000"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Aug 27 10:48:52 2024 -0300"
      },
      "message": "dwarf_loader: Allow filtering CUs early in loading\n\nWith this, we can avoid warnings for unsupported DWARF tags like:\n\n  die__process_function: tag not supported 0x2f (template_type_parameter)!\n\nwhen processing object files generated from languages such as Rust, for\ninstance when building the Linux kernel with `CONFIG_RUST`, after\napplying the next patch in this series.\n\nAs an added bonus, this should speed up processing of large objects with\nfiltered CUs, as their details will no longer be walked.\n\nReviewed-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nSigned-off-by: Matthew Maurer \u003cmmaurer@google.com\u003e\nTested-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nCc: Alice Ryhl \u003caliceryhl@google.com\u003e\nCc: rust-for-linux@vger.kernel.org\nLink: https://lore.kernel.org/r/20240801185054.2518383-1-mmaurer@google.com\n[ Split from a larger patch ]\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "52ac9a728dc1c5759b533aef42fe9724b3611eb7",
      "tree": "ff7f301e28cf3152fb5954fbde5952391e60ca50",
      "parents": [
        "97de8fb828c198cd9e69d46badfdfdf91d85eb28"
      ],
      "author": {
        "name": "Alan Maguire",
        "email": "alan.maguire@oracle.com",
        "time": "Thu Aug 01 10:50:58 2024 +0100"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Aug 27 10:48:47 2024 -0300"
      },
      "message": "pahole: Only warn about multithreading not being available with older versions of elfutils in verbose mode\n\nFor kernel builds, pahole is called with -j to specify multithreading\nas long as it is \u003e\u003d 1.22.\n\nHowever, if elfutils are older than 0.178 at compile time,\nmultithreading is not supported and we emit a warning to stderr.\n\nThe problem is this message will be emitted each time pahole is run, and\nthis translates to thousands of times in a kernel build (once for\nvmlinux and once for each module).\n\nOften users who are not familiar with BTF generation or pahole\nreasonably assume this is an error, whereas it is actually fine; it just\nmeans that pahole is a bit slower to generate BTF.\n\nMove the message to verbose mode only, as in debugging cases it is\nimportant to know if pahole is running in parallel.\n\nSigned-off-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nLink: https://lore.kernel.org/r/20240801095058.1946790-1-alan.maguire@oracle.com\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "97de8fb828c198cd9e69d46badfdfdf91d85eb28",
      "tree": "860c63d8d8490a3cd90b98af5954c79f09d4b1a8",
      "parents": [
        "bc50242950bb89758dc6569190e48c87a4756340"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Fri Aug 02 09:58:13 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Aug 27 10:48:40 2024 -0300"
      },
      "message": "dwarf_loader: Simplify the tag__alloc() routine\n\nAs it uses cu__zalloc() we don\u0027t need to zero anything, its all zeroed\nat allocation time.\n\nAlso don\u0027t do the direct pointer arithtmetic, just use the\ndtag__tag(dtag) helper that does just that.\n\nThis way tag__alloc() gets really small.\n\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "bc50242950bb89758dc6569190e48c87a4756340",
      "tree": "202ab55187be074ae1ff06b6d54c35997e7c04a6",
      "parents": [
        "799cbfb7d8297b8496d08ff1acf091fa2d17a814"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Wed Jul 24 13:31:52 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Aug 27 10:48:34 2024 -0300"
      },
      "message": "dwarf_loader: Do just one alloc for \u0027struct dwarf_tag + struct tag\u0027\n\nWe can get one from the other by simple pointer arithmetic, so just do\nit and avoid two alloc plus two backpointers.\n\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "799cbfb7d8297b8496d08ff1acf091fa2d17a814",
      "tree": "475e3c2ba4832a7eb642ab300c1d9de011566907",
      "parents": [
        "cb3ce1212903aca231d29fa75c7d7a464baa8ee4"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Aug 27 10:45:45 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Aug 27 10:48:26 2024 -0300"
      },
      "message": "dwarf_loader: All tags loaded from DWARF must be accompanied by a \u0027struct dwarf_tag\u0027\n\nAs the DWARF specific cu-\u003edfops-\u003etag__free() will free a tag__dtag() in\ncu__tag_free(), the counterpart of cu__tag_alloc().\n\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "cb3ce1212903aca231d29fa75c7d7a464baa8ee4",
      "tree": "32f1016de192be733c13bdf421b3dd2b09be3653",
      "parents": [
        "c2f89dab3f2b0ebb53bab3ed8be32f41cb743c37"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Jul 29 17:39:39 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Aug 27 10:48:21 2024 -0300"
      },
      "message": "core: Cloning classes should use the CU specific allocator\n\nThe class__clone() method should use the CU specific allocator,\notherwise at delete time we\u0027ll free the wrong area.\n\nThis isn\u0027t used in the main usage of pahole, the BTF encoder and also\nwhen just using pahole for dumping types, but lets get the expectations\nsatisfied.\n\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "c2f89dab3f2b0ebb53bab3ed8be32f41cb743c37",
      "tree": "9a3d136060c5b6a815556d45c91e20ad70615271",
      "parents": [
        "e42b8738a5063696c5b2d37b7dfba7d36c19551d"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Jul 29 17:33:44 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Jul 29 17:35:17 2024 -0300"
      },
      "message": "core: Introduce per tag alloc method\n\nTo allow for the core bits to allocate what is expected by each type\ninformation format, i.e. simple types like CTF and BTF don\u0027t need it and\ndefault to zalloc/free, but the DWARF loader needs to have a \u0027struct\ndwarf_tag\u0027 associated with each \u0027struct tag\u0027, so allow for a an\nallocator that somehow allocates that when a \u0027struct tag\u0027 needs to be\nallocated.\n\nNormally this is all done by the type-specific code, but sometimes, like\nwhen doing a class__clone, we better let the type-specific code that\nwe\u0027re creating tags.\n\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "e42b8738a5063696c5b2d37b7dfba7d36c19551d",
      "tree": "9bdb0299e0185cf0cb15762f2382cbc3bf10a0f3",
      "parents": [
        "d349997698d7698ca8e496d198e633a7303b59d4"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Jul 29 17:08:20 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Jul 29 17:26:04 2024 -0300"
      },
      "message": "dwarf_loader: Provide a tag__free() callback\n\nThat knows that there is a \u0027struct dwarf_tag\u0027 associated with every\n\u0027struct tag\u0027 loaded by the DWARF loader.\n\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    }
  ],
  "next": "d349997698d7698ca8e496d198e633a7303b59d4"
}
