)]}'
{
  "log": [
    {
      "commit": "bd664d9efa0826ade58e5cd68da92c2961dcd5dc",
      "tree": "38fd68d2866da5b9eccdf7aa870d78ee2738b0a5",
      "parents": [
        "deac00a65703828d50efb23f5826ee78a950f77d"
      ],
      "author": {
        "name": "Sid Nayyar",
        "email": "sidnayyar@google.com",
        "time": "Tue Mar 03 03:19:57 2026 -0800"
      },
      "committer": {
        "name": "Sid Nayyar",
        "email": "sidnayyar@google.com",
        "time": "Tue Mar 03 03:22:34 2026 -0800"
      },
      "message": "Fix minor version number\n\nBug: 477549297\nChange-Id: I34c3fca57dec1922fe467206af5ea7fc9dd5d178\n"
    },
    {
      "commit": "deac00a65703828d50efb23f5826ee78a950f77d",
      "tree": "095fd34429bf198a74c11d00caebbbc09566482f",
      "parents": [
        "bf0de0398e895d58630f9eeab90cfa4075e221dd"
      ],
      "author": {
        "name": "HONG Yifan",
        "email": "elsk@google.com",
        "time": "Fri May 02 02:47:08 2025 +0000"
      },
      "committer": {
        "name": "Yifan Hong",
        "email": "elsk@google.com",
        "time": "Fri May 02 17:04:50 2025 -0700"
      },
      "message": "Use libargp-musl to build musl variant.\n\nBug: 335898063\nChange-Id: Ice919b35727a076de223a94bb3f976795a8e5acd\n"
    },
    {
      "commit": "bf0de0398e895d58630f9eeab90cfa4075e221dd",
      "tree": "2646d04e7aa4dd434e56a381c73dbb309eff8744",
      "parents": [
        "8e3d7e75cd4b290777ca903df318da96cd95e49c",
        "fd14dc67cb6aaead553074afb4a1ddad10209892"
      ],
      "author": {
        "name": "Matthew Maurer",
        "email": "mmaurer@google.com",
        "time": "Fri Aug 30 17:08:12 2024 +0000"
      },
      "committer": {
        "name": "Matthew Maurer",
        "email": "mmaurer@google.com",
        "time": "Fri Aug 30 17:15:03 2024 +0000"
      },
      "message": "Merge remote-tracking branch \u0027aosp/upstream-master\u0027\n\nBug: 363264194\n\n* aosp/upstream-master: (124 commits)\n  tests prettify_perf.data: Add regression test for \u0027pahole --prettify\u0027\n  tests: Add script to enumerate and run regression tests in the tests/ dir\n  tests reproducible_build: Try to find the running kernel vmlinux if ran without args\n  pahole: Add option to obtain a vmlinux matching the running kernel\n  core: Add function to return the path to the running kernel vmlinux\n  pfunct: Print DW_AT_external\u003d1 functions once\n  pahole: Reduce memory usage by smarter deleting of CUs\n  btf_encoder: Add \"distilled_base\" BTF feature to split BTF generation\n  pahole: Sync with libbpf-1.5\n  pahole: Do --lang_exclude CU filtering earlier\n  dwarf_loader: Allow filtering CUs early in loading\n  pahole: Only warn about multithreading not being available with older versions of elfutils in verbose mode\n  dwarf_loader: Simplify the tag__alloc() routine\n  dwarf_loader: Do just one alloc for \u0027struct dwarf_tag + struct tag\u0027\n  dwarf_loader: All tags loaded from DWARF must be accompanied by a \u0027struct dwarf_tag\u0027\n  core: Cloning classes should use the CU specific allocator\n  core: Introduce per tag alloc method\n  dwarf_loader: Provide a tag__free() callback\n  core: Introduce per-type tag free callback\n  core: Make destructors receive the \u0027struct cu\u0027 their object may have been allocated from\n  ...\n\nChange-Id: I9a960bdecbf69dbba7ad9746a333f3a2371bc2ac\nSigned-off-by: Matthew Maurer \u003cmmaurer@google.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"
    },
    {
      "commit": "d349997698d7698ca8e496d198e633a7303b59d4",
      "tree": "3b7528254fa2f3cf33f25965bcf7af2bab204b65",
      "parents": [
        "6dfb51cb87c9474cac729a408b5e75fca4199235"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Jul 29 16:36:09 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Jul 29 17:25:23 2024 -0300"
      },
      "message": "core: Introduce per-type tag free callback\n\nIf not specified, use cu__free(), that mostly will just be free() unless\nthe cu uses obstacks, when it becomes a no-op that defers freeing of\nmemory until that obstack is freed.\n\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "6dfb51cb87c9474cac729a408b5e75fca4199235",
      "tree": "528f175c604d360587e0d81a1c225c0856d6ed57",
      "parents": [
        "ce3540e995605d8040a23b8c123dbf02831a8b47"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Jul 29 14:36:33 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Jul 29 17:11:53 2024 -0300"
      },
      "message": "core: Make destructors receive the \u0027struct cu\u0027 their object may have been allocated from\n\nThe default, most simple way of freeing memory associated with tags is\nto just call free(), but the DWARF loader is a bit more involved in\nwhich it needs extra info to keep its large data structures around for\nfurther processing after loading.\n\nThis way we need to provide a way for the DWARF loader to find the real\npointer to release.\n\nSo far it was just freeing the tag, which ended up leaking the\ntag-\u003epriv part, i.e. the associated \u0027struct dwarf_tag\u0027, which wasn\u0027t\nthat much of a problem as the bulk of freeing takes place at tool exit,\nbut since we want to avoid two allocations and get the \u0027struct\ndwarf_tag\u0027 out of pointer arithmetic from the \u0027struct tag\u0027 pointer\nassociated with it in a single allocation, we have to catch all free()\ncalls with a \u0027struct cu\u0027 specific tag destructor so that we do that\npointer arithmetic and find the right pointer to feed free().\n\nThat or just do nothing when we use obstacks, as in the BTF encoder\ncase.\n\nSo this is all for consistency and correctness, it _shouldn\u0027t_ affect\nthe most critical use case which is BTF encoding, where no such use of\ndestructors take place.\n\nIn the process of getting the codebase more correct we are indeed\ncatching cases where we, in error paths, were calling free() on obstack\nallocated memory, which, again, is a corner case, but lets plug all\nthese to avoid surprises, that, we know, appear from time to time.\n\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "ce3540e995605d8040a23b8c123dbf02831a8b47",
      "tree": "20a7393cacfb395a30563c74616557fad86aea77",
      "parents": [
        "ca764e65ffbc74ca9cd29ed6bfeddf297d848683"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Jul 29 11:35:56 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Jul 29 17:11:49 2024 -0300"
      },
      "message": "dwarf_loader: Things allocated with tag__alloc() must be freed with tag__free()\n\nThat takes into account that the real allocated pointer is before the\n\u0027struct tag\u0027, i.e. the DWARF specific bits are before that pointer.\n\nNoticed with a warning from gcc 14.1.1 on Fedora:40.\n\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "ca764e65ffbc74ca9cd29ed6bfeddf297d848683",
      "tree": "2fe6c6aa194417022b332fd83f0d443be69a2c67",
      "parents": [
        "3ef508ad9401293378b312558a66209bb2ab4c48"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Jul 29 11:31:28 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Jul 29 13:49:01 2024 -0300"
      },
      "message": "dwarf_loader: Memory allocated with cu__zalloc() should be freed with cu__free()\n\nIf we alloc with cu__zalloc() it may end up coming from an obstack, so\nthe right way to free it is with cu__free() so that case is taken into\naccount.\n\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "3ef508ad9401293378b312558a66209bb2ab4c48",
      "tree": "92bf01efc65a505ac4a2c8eaaf6a7d2a92428f5d",
      "parents": [
        "70febc88585883484880d4ad7d40820993ddd561"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Wed Jul 24 13:13:35 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Jul 29 13:48:30 2024 -0300"
      },
      "message": "dwarf_loader: Make \u0027struct dwarf_tag\u0027 more compact by getting rid of \u0027struct dwarf_off_ref\u0027\n\nWe had that to figure out if we got a type from the DWARF4\n\".debug_types\" section, but that ended up wasting space for the type,\nabstract_origin, specification, etc. So just keep the info about\nsomething coming from that section (\".debug_types\") in a separate\nbitfield.\n\nWith this the only thing in the second cache line for \u0027struct dwarf_tag\u0027\nis the backpointer to the associated \u0027struct tag\u0027, that will go away in\nthe following patches when we do a single allocation for \u0027struct\ndwarf_tag + struct tag\u0027:\n\n  $ pahole -C dwarf_tag build/libdwarves.so.1.0.0\n  struct dwarf_tag {\n  \tstruct hlist_node          hash_node;            /*     0    16 */\n  \tDwarf_Off                  type;                 /*    16     8 */\n  \tDwarf_Off                  id;                   /*    24     8 */\n  \tunion {\n  \t\tDwarf_Off          abstract_origin;      /*    32     8 */\n  \t\tDwarf_Off          containing_type;      /*    32     8 */\n  \t};                                               /*    32     8 */\n  \tDwarf_Off                  specification;        /*    40     8 */\n  \tstruct {\n  \t\t_Bool              type:1;               /*    48: 0  1 */\n  \t\t_Bool              abstract_origin:1;    /*    48: 1  1 */\n  \t\t_Bool              containing_type:1;    /*    48: 2  1 */\n  \t\t_Bool              specification:1;      /*    48: 3  1 */\n  \t} from_types_section;                            /*    48     1 */\n\n  \t/* XXX last struct has 4 bits of padding */\n  \t/* XXX 1 byte hole, try to pack */\n\n  \tuint16_t                   decl_line;            /*    50     2 */\n  \tuint32_t                   small_id;             /*    52     4 */\n  \tconst char  *              decl_file;            /*    56     8 */\n  \t/* --- cacheline 1 boundary (64 bytes) --- */\n  \tstruct tag *               tag;                  /*    64     8 */\n\n  \t/* size: 72, cachelines: 2, members: 10 */\n  \t/* sum members: 71, holes: 1, sum holes: 1 */\n  \t/* member types with bit paddings: 1, total: 4 bits */\n  \t/* last cacheline: 8 bytes */\n  };\n  $\n\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "70febc88585883484880d4ad7d40820993ddd561",
      "tree": "96ff10ca11da415beb85b24d0efa75548066a065",
      "parents": [
        "76bcb88a67556468290b6295011c90b283f25fd4"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Fri Jul 26 09:20:36 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Jul 29 13:48:30 2024 -0300"
      },
      "message": "core: Reorganize \u0027struct class_member\u0027 to save 8 bytes\n\nBefore:\n\n\t/* size: 88, cachelines: 2, members: 18 */\n\t/* sum members: 79, holes: 1, sum holes: 4 */\n\t/* sum bitfield members: 8 bits, bit holes: 1, sum bit holes: 7 bits */\n\t/* padding: 3 */\n\t/* member types with bit holes: 1, total: 1 */\n\t/* bit_padding: 1 bits */\n\t/* last cacheline: 24 bytes */\n\nAfter:\n\n\t/* size: 80, cachelines: 2, members: 18 */\n\t/* member types with bit holes: 1, total: 1 */\n\t/* last cacheline: 16 bytes */\n\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "76bcb88a67556468290b6295011c90b283f25fd4",
      "tree": "005603d73bd77745bccc1baf72ec02c9602d3aac",
      "parents": [
        "b8b9e04d177d8eb7092afd3aec077af302b03aff"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Thu Jul 25 11:54:56 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Jul 29 13:48:30 2024 -0300"
      },
      "message": "core: Make tag-\u003erecursivity_level a uint8_t\n\nIts only used when expanding types, using an uint8_t is enough for\navoiding recursive fprintf loops.\n\nWith this sizeof(struct tag) is reduced to 32 bytes.\n\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "b8b9e04d177d8eb7092afd3aec077af302b03aff",
      "tree": "4705cf37691923dbeea438121058f7083a83c800",
      "parents": [
        "539acefcdd5b0f71e760d300302dfcf5e7bbb156"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Thu Jul 25 11:46:32 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Jul 29 13:48:30 2024 -0300"
      },
      "message": "core: Make tag-\u003etop_level a single bit flag\n\nShrinking \u0027struct tag\u0027 while keeping the code more easily bisectable in\ncase someone has branches that maybe use this as a 8-bit bool.\n\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "539acefcdd5b0f71e760d300302dfcf5e7bbb156",
      "tree": "8a7bf747fa542880e043ca0a24ca76c9e7cb6f1d",
      "parents": [
        "dba2c2c1aa5dfa052bb0e77b7ecb5a89b91a1e5e"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Thu Jul 25 11:46:32 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Jul 29 13:48:30 2024 -0300"
      },
      "message": "core: Make tag-\u003ehas_btf_type_tag a single bit flag\n\nShrinking \u0027struct tag\u0027 while keeping the code more easily bisectable in\ncase someone has branches that maybe use this as a 8-bit bool.\n\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "dba2c2c1aa5dfa052bb0e77b7ecb5a89b91a1e5e",
      "tree": "f18cc1adb0a287709d6e845a57f31f5066b240e4",
      "parents": [
        "7409cfadcae0253b8ee4ab964b77f52037818374"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Thu Jul 25 11:46:32 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Jul 29 13:48:30 2024 -0300"
      },
      "message": "core: Make tag-\u003evisited a single bit flag\n\nShrinking \u0027struct tag\u0027 while keeping the code more easily bisectable in\ncase someone has branches that maybe use this as a 8-bit bool.\n\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "7409cfadcae0253b8ee4ab964b77f52037818374",
      "tree": "be35a242891f9afda1a57b754e40641035486e30",
      "parents": [
        "01646d9df0ca40e2750ade0822a5803392e3ac12"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Thu Jul 25 11:44:06 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Jul 29 13:48:30 2024 -0300"
      },
      "message": "core: Shrink \u0027struct namespace\u0027 a bit by using a hole in its embedded \u0027tag\u0027\n\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "01646d9df0ca40e2750ade0822a5803392e3ac12",
      "tree": "973910b9dc3c5d0b52920f74f9fbcd29768d278e",
      "parents": [
        "811a5499b11bd5fa7351b54c320bfaa0abdaa9bd"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Thu Jul 25 11:38:26 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Jul 29 13:48:30 2024 -0300"
      },
      "message": "core: Add namespace__shared_tags() method\n\nWe\u0027ll move this single bit to namespace-\u003etags.shared_tags to use free\nbits in there to make \u0027struct namespace\u0027 smaller.\n\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "811a5499b11bd5fa7351b54c320bfaa0abdaa9bd",
      "tree": "61c03949a685ebdab796c4fed6aa2ca4641a07e9",
      "parents": [
        "39a28ea592075f0e589af533288e6d8008b65747"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Thu Jul 25 11:28:03 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Jul 29 13:48:30 2024 -0300"
      },
      "message": "core: type-\u003esuffix_disambiguation can be part of a bitfield\n\nIts just a simple flag.\n\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "39a28ea592075f0e589af533288e6d8008b65747",
      "tree": "a480e6586d7162c617d23d0d5ac37fa1619ed1f1",
      "parents": [
        "15f4a8363dfcb7d4577a85462a50343d1210ecd4"
      ],
      "author": {
        "name": "Alan Maguire",
        "email": "alan.maguire@oracle.com",
        "time": "Thu Jul 25 08:55:20 2024 +0100"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Jul 29 13:48:30 2024 -0300"
      },
      "message": "btf_encoder: Log libbpf errors when they cause encoding errors\n\nlibbpf returns a negative error code when adding types fails.\n\nPass it into btf__log_err() and display the libbpf error when negative.\nNearly all use cases of btf__log_err() happen as a result of a\nlibbpf-returned error, pass 0 for the exceptions.\n\nReviewed-by: Jiri Olsa \u003cjolsa@kernel.org\u003e\nSigned-off-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nCc: Ben Hutchings \u003cben@decadent.org.uk\u003e\nCc: Domenico Andreoli \u003ccavok@debian.org\u003e\nCc: bpf@vger.kernel.org\nCc: dwarves@vger.kernel.org\nLink: https://lore.kernel.org/r/20240725075520.1281905-1-alan.maguire@oracle.com\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "15f4a8363dfcb7d4577a85462a50343d1210ecd4",
      "tree": "ff1eb75f2005b798f51377e5c9409d6234ad529c",
      "parents": [
        "638c000bd64456d6f16959fd8b798ad7631f53ee"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Wed Jul 24 13:33:49 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Jul 29 13:48:30 2024 -0300"
      },
      "message": "core: \u0027struct namespaces\u0027-\u003enr_tags isn\u0027t used, ditch it\n\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "638c000bd64456d6f16959fd8b798ad7631f53ee",
      "tree": "8785183a37db66858efdbaece27105c8cb6dbd6d",
      "parents": [
        "7aae38999c2ce54851aa8e446aacfc9fb8a720f9"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Wed Jul 24 11:34:20 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Fri Jul 26 16:08:38 2024 -0300"
      },
      "message": "dwarf_loader: Replace the dtag specific method with tag__set_spec()\n\nTo shorten an open coded common pattern.\n\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "7aae38999c2ce54851aa8e446aacfc9fb8a720f9",
      "tree": "5763de672cbce4efa5d08f532faf2a5b13a87778",
      "parents": [
        "c0a78bcfd628302bd3ec536443f387ce1fbceb86"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Wed Jul 24 11:25:14 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Fri Jul 26 16:08:38 2024 -0300"
      },
      "message": "dwarf_loader: Ditch dwarf_tag__spec() as we have dtag-\u003especification\n\nDirectly, no need for the accessor, simplify the code.\n\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "c0a78bcfd628302bd3ec536443f387ce1fbceb86",
      "tree": "2d9a52fdeb6d4768d683ecc847dd8e6b6641cdaf",
      "parents": [
        "0364eb68d3802d4c75b7d24335851e8022557a1f"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Fri Jul 19 17:28:22 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Fri Jul 26 16:08:38 2024 -0300"
      },
      "message": "dwarf_loader: Remove \u0027struct dwarf_tag\u0027 variable size\n\nWe would allocate the extra dwarf_off_ref for the DW_AT_specification\nconditionally, if the DWARF tag had that attribute, but that complicates\nthings and gets in the way of having just one allocation for \u0027struct tag\n+ struct dwarf_tag\u0027, so ditch it.\n\nAnd anyway we can optimize a group of two dwarf_off_ref to use just 16\nbytes instead of 32 by moving the single bit from_types to another hole\nin the only data structure that uses dwarf_off_ref: \u0027struct dwarf_tag\u0027:\n\n  $ pahole -C dwarf_off_ref build/libdwarves.so.1.0.0\n  struct dwarf_off_ref {\n  \tunsigned int               from_types:1;         /*     0: 0  4 */\n\n  \t/* XXX 31 bits hole, try to pack */\n  \t/* XXX 4 bytes hole, try to pack */\n\n  \tDwarf_Off                  off;                  /*     8     8 */\n\n  \t/* size: 16, cachelines: 1, members: 2 */\n  \t/* sum members: 8, holes: 1, sum holes: 4 */\n  \t/* sum bitfield members: 1 bits, bit holes: 1, sum bit holes: 31 bits */\n  \t/* last cacheline: 16 bytes */\n  };\n\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "0364eb68d3802d4c75b7d24335851e8022557a1f",
      "tree": "5765570532ddc878772e822c1b81b61254522dee",
      "parents": [
        "745db05e36546d9aee43ff74e5364f3463aca91b"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Fri Jul 19 16:53:41 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Fri Jul 26 16:08:38 2024 -0300"
      },
      "message": "core: Add accessor to the tag associated with a dwarf_tag\n\nTo isolate dwarf_tag-\u003etag so that at some point we can avoid two\nallocations for tag + dwarf_tag and instead get just one chunk of memory\nthat we can go from one to the other and thus elliminate the tag-\u003epriv\nand dwarf_tag-\u003etag pointers.\n\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "745db05e36546d9aee43ff74e5364f3463aca91b",
      "tree": "3094b09e2092e4cd680bc5bf84c2bc1ce14936d2",
      "parents": [
        "7c59cbdf149a1b45dc42d8e13b655b6c671f988a"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Fri Jul 19 16:53:41 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Fri Jul 26 16:08:38 2024 -0300"
      },
      "message": "core: Add accessor to the dwarf_tag associated with a tag\n\nTo isolate tag-\u003epriv so that at some point we can avoid two allocations\nfor tag + dwarf_tag and instead get just one chunk of memory that we can\ngo from one to the other and thus elliminate the tag-\u003epriv and\ndwarf_tag-\u003etag pointers.\n\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "7c59cbdf149a1b45dc42d8e13b655b6c671f988a",
      "tree": "f5f035fc656979834d2b4241e350635680050902",
      "parents": [
        "fbf77d8d44e507a25cc57ec655337c9a1102b568"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Thu Jul 18 15:20:15 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Fri Jul 26 16:08:38 2024 -0300"
      },
      "message": "fprintf: Fix identation in closing } on namespace fprintf\n\nWe were not respecting conf_fprintf-\u003eindent when printing nested\nnamespaces, fix it.\n\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "fbf77d8d44e507a25cc57ec655337c9a1102b568",
      "tree": "46e7d263e84458a73d523b4daad03d506364bb71",
      "parents": [
        "2a5ea3e4e5e0606f2654703db52ca3d41e44640d"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Thu Jul 18 13:35:18 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Fri Jul 26 16:08:38 2024 -0300"
      },
      "message": "pdwtags: Print namespaces and its contents\n\nPreviously we were not printing all namespaces and more importantly, the\ntypes inside it, do it now.\n\nWe need to look if the namespaces are top level, i.e. the outermost\nnamespaces before calling tag__fprintf() to print them, otherwise we\nwould end up printing some multiple times, with that check:\n\n  ⬢[acme@toolbox zzam@gentoo.org]$ pdwtags -V popup.cpp.o  | grep namespace\n  namespace std {\n  \tnamespace __swappable_details {\n  \tnamespace __swappable_with_details {\n  \tnamespace __debug {\n  \tnamespace __cxx11 {\n  \tnamespace pmr {\n  \tnamespace __exception_ptr {\n  \tnamespace _V2 {\n  \tnamespace chrono {\n  \t\tnamespace _V2 {\n  \t\tusing namespace chrono_literals;\n  \tnamespace literals {\n  \t\tnamespace chrono_literals {\n  \tnamespace filesystem {\n  \t\tnamespace __cxx11 {\n  \t\t\tnamespace __detail {\n  \tnamespace __detail {\n  \t\tnamespace __variant {\n  \tnamespace placeholders {\n  namespace __gnu_cxx {\n  \tnamespace __ops {\n  namespace __gnu_debug {\n  \tusing namespace __debug;\n  namespace __pstl {\n  \tnamespace execution {\n  \t\tnamespace v1 {\n  namespace sdl2 {\n  namespace gcn {\n  ⬢[acme@toolbox zzam@gentoo.org]$\n\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "2a5ea3e4e5e0606f2654703db52ca3d41e44640d",
      "tree": "d91ce5baaba88321697a5b25af7df4089c93fe9f",
      "parents": [
        "5563b1c0e31c7e29f88b8df8647126ca2fad1a70"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Thu Jul 18 13:34:48 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Fri Jul 26 16:08:38 2024 -0300"
      },
      "message": "core: Add namespace iterator\n\nWe\u0027ll use it in pdwtags to print all namespaces and its classes, etc.\n\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "5563b1c0e31c7e29f88b8df8647126ca2fad1a70",
      "tree": "f695c96d5140e1829f67a6db874175f3976c63bb",
      "parents": [
        "1ecb5bd1a60a85e66c9b58a7a436b5943f36b410"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Wed Jul 17 16:10:00 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Fri Jul 26 16:08:38 2024 -0300"
      },
      "message": "dwarf_loader: Add support for DW_TAG_GNU_formal_parameter_pack\n\nThe representation for formal parameter packs, such as in this\nexample, taken from Stack Overflow [1]:\n\n  $ cat template_parameter_pack.cpp\n  #include \u003ciostream\u003e\n\n  template \u003cclass... Args\u003e\n  void printAll(Args\u0026\u0026... args)\n  {\n  \tusing swallow \u003d int[];\n  \tswallow{ 0, (std::cout \u003c\u003c args, 0)... };\n  }\n\n  int main()\n  {\n  \tprintAll(1, \"23\", 4);\n  \tstd::cout \u003c\u003c \u0027\\n\u0027;\n  }\n  $ g++ -g template_parameter_pack.cpp -o template_parameter_pack\n  $ ./template_parameter_pack\n  1234\n  $\n\nThat generates:\n\n  $ readelf -wi template_parameter_pack | grep DW_AT_name.*printAll -B2 -A34\n   \u003c1\u003e\u003c1fca\u003e: Abbrev Number: 82 (DW_TAG_subprogram)\n      \u003c1fcb\u003e   DW_AT_external    : 1\n      \u003c1fcb\u003e   DW_AT_name        : (indirect string, offset: 0xf15): printAll\u003cint, char const (\u0026)[3], int\u003e\n      \u003c1fcf\u003e   DW_AT_decl_file   : 1\n      \u003c1fd0\u003e   DW_AT_decl_line   : 4\n      \u003c1fd1\u003e   DW_AT_decl_column : 6\n      \u003c1fd2\u003e   DW_AT_linkage_name: (indirect string, offset: 0x3ef): _Z8printAllIJiRA3_KciEEvDpOT_\n      \u003c1fd6\u003e   DW_AT_low_pc      : 0x401187\n      \u003c1fde\u003e   DW_AT_high_pc     : 0x8e\n      \u003c1fe6\u003e   DW_AT_frame_base  : 1 byte block: 9c \t(DW_OP_call_frame_cfa)\n      \u003c1fe8\u003e   DW_AT_call_all_tail_calls: 1\n      \u003c1fe8\u003e   DW_AT_sibling     : \u003c0x2023\u003e\n\u003cSNIP DW_TAG_GNU_template_parameter_pack block\u003e\n   \u003c2\u003e\u003c2005\u003e: Abbrev Number: 84 (DW_TAG_GNU_formal_parameter_pack)\n      \u003c2006\u003e   DW_AT_decl_file   : 1\n      \u003c2007\u003e   DW_AT_decl_line   : 4\n      \u003c2008\u003e   DW_AT_decl_column : 21\n   \u003c3\u003e\u003c2009\u003e: Abbrev Number: 33 (DW_TAG_formal_parameter)\n      \u003c200a\u003e   DW_AT_type        : \u003c0x2038\u003e\n      \u003c200e\u003e   DW_AT_location    : 2 byte block: 91 58 \t(DW_OP_fbreg: -40)\n   \u003c3\u003e\u003c2011\u003e: Abbrev Number: 33 (DW_TAG_formal_parameter)\n      \u003c2012\u003e   DW_AT_type        : \u003c0x2023\u003e\n      \u003c2016\u003e   DW_AT_location    : 2 byte block: 91 50 \t(DW_OP_fbreg: -48)\n   \u003c3\u003e\u003c2019\u003e: Abbrev Number: 33 (DW_TAG_formal_parameter)\n      \u003c201a\u003e   DW_AT_type        : \u003c0x2038\u003e\n      \u003c201e\u003e   DW_AT_location    : 2 byte block: 91 48 \t(DW_OP_fbreg: -56)\n   \u003c3\u003e\u003c2021\u003e: Abbrev Number: 0\n   \u003c2\u003e\u003c2022\u003e: Abbrev Number: 0\n  $\n\nWe\u0027ll be able to add queries to ask for how many template usage there\nis, etc. For now just record these, no logic gets changed for things\nlike C, BTF generation, just a small memory usage increase.\n\n[1] https://stackoverflow.com/questions/36407941/inspect-template-parameter-pack-in-gdb\n\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "1ecb5bd1a60a85e66c9b58a7a436b5943f36b410",
      "tree": "c080be6dcf05ffc0d53e4ea9499d6d3063992eed",
      "parents": [
        "f524f2ed5873e664f6fd5ff6f20a0bb659b5a27a"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Wed Jul 17 16:10:00 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Fri Jul 26 16:08:35 2024 -0300"
      },
      "message": "dwarf_loader: Add support for DW_TAG_GNU_template_parameter_pack\n\nThe representation for template parameter packs, such as in this\nexample, taken from Stack Overflow [1]:\n\n  $ cat template_parameter_pack.cpp\n  #include \u003ciostream\u003e\n\n  template \u003cclass... Args\u003e\n  void printAll(Args\u0026\u0026... args)\n  {\n  \tusing swallow \u003d int[];\n  \tswallow{ 0, (std::cout \u003c\u003c args, 0)... };\n  }\n\n  int main()\n  {\n  \tprintAll(1, \"23\", 4);\n  \tstd::cout \u003c\u003c \u0027\\n\u0027;\n  }\n  $ g++ -g template_parameter_pack.cpp -o template_parameter_pack\n  $ ./template_parameter_pack\n  1234\n  $\n\nThat generates:\n\n  $ readelf -wi template_parameter_pack | grep DW_AT_name.*printAll -B2 -A20\n   \u003c1\u003e\u003c1fca\u003e: Abbrev Number: 82 (DW_TAG_subprogram)\n      \u003c1fcb\u003e   DW_AT_external    : 1\n      \u003c1fcb\u003e   DW_AT_name        : (indirect string, offset: 0xf15): printAll\u003cint, char const (\u0026)[3], int\u003e\n      \u003c1fcf\u003e   DW_AT_decl_file   : 1\n      \u003c1fd0\u003e   DW_AT_decl_line   : 4\n      \u003c1fd1\u003e   DW_AT_decl_column : 6\n      \u003c1fd2\u003e   DW_AT_linkage_name: (indirect string, offset: 0x3ef): _Z8printAllIJiRA3_KciEEvDpOT_\n      \u003c1fd6\u003e   DW_AT_low_pc      : 0x401187\n      \u003c1fde\u003e   DW_AT_high_pc     : 0x8e\n      \u003c1fe6\u003e   DW_AT_frame_base  : 1 byte block: 9c \t(DW_OP_call_frame_cfa)\n      \u003c1fe8\u003e   DW_AT_call_all_tail_calls: 1\n      \u003c1fe8\u003e   DW_AT_sibling     : \u003c0x2023\u003e\n   \u003c2\u003e\u003c1fec\u003e: Abbrev Number: 83 (DW_TAG_GNU_template_parameter_pack)\n      \u003c1fed\u003e   DW_AT_name        : (indirect string, offset: 0x2ef): Args\n      \u003c1ff1\u003e   DW_AT_sibling     : \u003c0x2005\u003e\n   \u003c3\u003e\u003c1ff5\u003e: Abbrev Number: 32 (DW_TAG_template_type_param)\n      \u003c1ff6\u003e   DW_AT_type        : \u003c0xeb\u003e\n   \u003c3\u003e\u003c1ffa\u003e: Abbrev Number: 32 (DW_TAG_template_type_param)\n      \u003c1ffb\u003e   DW_AT_type        : \u003c0x2023\u003e\n   \u003c3\u003e\u003c1fff\u003e: Abbrev Number: 32 (DW_TAG_template_type_param)\n      \u003c2000\u003e   DW_AT_type        : \u003c0xeb\u003e\n   \u003c3\u003e\u003c2004\u003e: Abbrev Number: 0\n   \u003c2\u003e\u003c2005\u003e: Abbrev Number: 84 (DW_TAG_GNU_formal_parameter_pack)\n  $\n\nThat for the current pahole use need some massaging, as it already puts\ninto the DW_TAG_subprogram the whole template signature, we need to chop\noff that \"\u003cint, char const (\u0026)[3], int\u003e\" when trying to use it for\n--compile, i.e. to regenerate the original source code from the DWARF\ninfo, so we will need to assume that for DW_TAG_subprogram that has a\nDW_TAG_GNU_template_parameter_pack we need to remove whatever suffix\nsurrounded by \u003c\u003e is after the initial string to get its name.\n\nLets do this piecemeal tho and land this first, and yeah, there is that\nDW_TAG_GNU_formal_parameter_pack thing as well that needs the exact same\ntreatment...\n\nFrom a quick look it will expand all those actual concrete template\nusages into a pair of DW_TAG_GNU_template_parameter_pack and\nDW_TAG_GNU_formal_parameter_pack, or that is subject to compiler\noptimizations, unsure at this point as I\u0027m just looking at the output of\nreadelf for one sample program.\n\n[1] https://stackoverflow.com/questions/36407941/inspect-template-parameter-pack-in-gdb\n\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "f524f2ed5873e664f6fd5ff6f20a0bb659b5a27a",
      "tree": "2f26459d47b01b45e75383c7229eb19863323fa2",
      "parents": [
        "3b637ea23ee81872f7071ccc80e47b45447ac4dd"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Wed Jul 17 15:57:04 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Thu Jul 18 12:40:37 2024 -0300"
      },
      "message": "dwarf_loader: Make cu__tag_not_handled() generally available\n\nBy moving it to the start of dwarf_loader.c, as we\u0027ll need to use it\nbefore where it was being defined.\n\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "3b637ea23ee81872f7071ccc80e47b45447ac4dd",
      "tree": "3e4f402c056d1cb9d5028ad033a5bf9789aeac8c",
      "parents": [
        "ab31cd26d44e3619e151ed96f8921479c76a7935"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Jul 16 15:39:38 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Thu Jul 18 12:40:32 2024 -0300"
      },
      "message": "dwarf_loader: Initial support for DW_TAG_template_value_param tag\n\nWe don\u0027t really need to pretty print these, as the names of the classes\nalready come with it, for instance see the \u0027true\u0027 on the\n\u0027integral_constant\u0027 cases:\n\n  ⬢[acme@toolbox zzam@gentoo.org]$ pdwtags popup.cpp.o  | grep ^\u0027struct integral_constant\u0027 -A11\n  die__process_class: tag not supported 0x4107 (GNU_template_parameter_pack) at \u003cf1d8\u003e!\n  die__process_function: tag not supported 0x4108 (GNU_formal_parameter_pack) at \u003c69aea\u003e!\n  struct integral_constant\u003cbool, true\u003e {\n  \ttypedef bool value_type;\n\n  \tvalue_type operator std::integral_constant\u003cbool, true\u003e::value_type(const struct integral_constant\u003cbool, true\u003e  *);\n\n  \tvalue_type operator()(const struct integral_constant\u003cbool, true\u003e  *);\n\n  \t/* size: 1, cachelines: 0, members: 0 */\n  \t/* padding: 1 */\n  \t/* last cacheline: 1 bytes */\n  }; /* size: 0 */\n  --\n  struct integral_constant\u003cbool, false\u003e {\n  \ttypedef bool value_type;\n\n  \tvalue_type operator std::integral_constant\u003cbool, false\u003e::value_type(const struct integral_constant\u003cbool, false\u003e  *);\n\n  \tvalue_type operator()(const struct integral_constant\u003cbool, false\u003e  *);\n\n  \t/* size: 1, cachelines: 0, members: 0 */\n  \t/* padding: 1 */\n  \t/* last cacheline: 1 bytes */\n  }; /* size: 0 */\n  ⬢[acme@toolbox zzam@gentoo.org]$\n\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "ab31cd26d44e3619e151ed96f8921479c76a7935",
      "tree": "c342fdf2155bca463a7a6337dae102c3ac99d566",
      "parents": [
        "8a1e0238ee4005a6e164fb930692f7d4d095128c"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Jul 16 15:39:38 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Thu Jul 18 12:39:40 2024 -0300"
      },
      "message": "dwarf_loader: Initial support for DW_TAG_template_type_param tag on DW_TAG_subprogram\n\nWe don\u0027t really need to pretty print these, as the names of the classes\nalready come with it, for instance see the operators on the following\ncases:\n\n  ⬢[acme@toolbox zzam@gentoo.org]$ pdwtags popup.cpp.o  | grep ^\u0027struct integral_constant\u0027 -A11\n  die__process_class: tag not supported 0x4107 (GNU_template_parameter_pack) at \u003cf1d8\u003e!\n  die__process_function: tag not supported 0x4108 (GNU_formal_parameter_pack) at \u003c69aea\u003e!\n  struct integral_constant\u003cbool, true\u003e {\n  \ttypedef bool value_type;\n\n  \tvalue_type operator std::integral_constant\u003cbool, true\u003e::value_type(const struct integral_constant\u003cbool, true\u003e  *);\n\n  \tvalue_type operator()(const struct integral_constant\u003cbool, true\u003e  *);\n\n  \t/* size: 1, cachelines: 0, members: 0 */\n  \t/* padding: 1 */\n  \t/* last cacheline: 1 bytes */\n  }; /* size: 0 */\n  --\n  struct integral_constant\u003cbool, false\u003e {\n  \ttypedef bool value_type;\n\n  \tvalue_type operator std::integral_constant\u003cbool, false\u003e::value_type(const struct integral_constant\u003cbool, false\u003e  *);\n\n  \tvalue_type operator()(const struct integral_constant\u003cbool, false\u003e  *);\n\n  \t/* size: 1, cachelines: 0, members: 0 */\n  \t/* padding: 1 */\n  \t/* last cacheline: 1 bytes */\n  }; /* size: 0 */\n  ⬢[acme@toolbox zzam@gentoo.org]$\n\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "8a1e0238ee4005a6e164fb930692f7d4d095128c",
      "tree": "b7a9190c9670958377a8827817cd024c4b6447c6",
      "parents": [
        "24009d1fa48ce381c54684a08f43e3b9991c7416"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Jul 16 15:39:38 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Thu Jul 18 12:39:01 2024 -0300"
      },
      "message": "dwarf_loader: Initial support for DW_TAG_template_type_param tag\n\nWe don\u0027t really need to pretty print these, as the names of the classes\nalready come with it, for instance:\n\n  ⬢[acme@toolbox zzam@gentoo.org]$ pdwtags popup.cpp.o  | grep ^\u0027struct integral_constant\u0027 -A11\n  die__process_class: tag not supported 0x30 (template_value_parameter) at \u003c5f0\u003e!\n  die__process_function: tag not supported 0x2f (template_type_parameter) at \u003c1417\u003e!\n  die__process_class: tag not supported 0x4107 (GNU_template_parameter_pack) at \u003cf1d8\u003e!\n  die__process_function: tag not supported 0x4108 (GNU_formal_parameter_pack) at \u003c69aea\u003e!\n  struct integral_constant\u003cbool, true\u003e {\n  \ttypedef bool value_type;\n\n  \tvalue_type operator std::integral_constant\u003cbool, true\u003e::value_type(const struct integral_constant\u003cbool, true\u003e  *);\n\n  \tvalue_type operator()(const struct integral_constant\u003cbool, true\u003e  *);\n\n  \t/* size: 1, cachelines: 0, members: 0 */\n  \t/* padding: 1 */\n  \t/* last cacheline: 1 bytes */\n  }; /* size: 0 */\n  --\n  struct integral_constant\u003cbool, false\u003e {\n  \ttypedef bool value_type;\n\n  \tvalue_type operator std::integral_constant\u003cbool, false\u003e::value_type(const struct integral_constant\u003cbool, false\u003e  *);\n\n  \tvalue_type operator()(const struct integral_constant\u003cbool, false\u003e  *);\n\n  \t/* size: 1, cachelines: 0, members: 0 */\n  \t/* padding: 1 */\n  \t/* last cacheline: 1 bytes */\n  }; /* size: 0 */\n  ⬢[acme@toolbox zzam@gentoo.org]$\n\nBut lets collect this info, that only shows up in C++ (maybe other\nlanguages, Rust?), we\u0027ll end up using it maybe for using them for\nlooking up all templates, or all templates of a given type or value,\netc.\n\nI\u0027ll do the same for DW_TAG_template_value_parameter and support both in\nDW_TAG_subprogram.\n\nDW_TAG_GNU_template_parameter_pack must be some variation on this\ntheme...\n\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "24009d1fa48ce381c54684a08f43e3b9991c7416",
      "tree": "7ba75d166fd71820438c65e5c13e0414429048dc",
      "parents": [
        "693522ee3a947d732d26506ee133773b125d422a"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Jul 16 11:45:16 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Jul 16 11:45:16 2024 -0300"
      },
      "message": "dwarf_loader: Hash DW_TAG_enumerator entries\n\nAs they are referenced by DW_TAG_imported_declaration, as we can see\nfrom these warnings:\n\n  ⬢[acme@toolbox zzam@gentoo.org]$ pdwtags popup.cpp.o \u003e /dev/null\n  die__process_class: tag not supported 0x2f (template_type_parameter)!\n  die__process_class: tag not supported 0x30 (template_value_parameter)!\n  die__process_class: tag not supported 0x4107 (GNU_template_parameter_pack)!\n  die__process_function: tag not supported 0x4108 (GNU_formal_parameter_pack)!\n  tag__recode_dwarf_type: couldn\u0027t find 0x5706e type for 0xedb9 (imported_declaration)!\n  tag__recode_dwarf_type: couldn\u0027t find 0x57074 type for 0xedc1 (imported_declaration)!\n  tag__recode_dwarf_type: couldn\u0027t find 0x5707a type for 0xedc9 (imported_declaration)!\n  namespace__recode_dwarf_types: couldn\u0027t find 0x5706e type for 0xedb9 (imported_declaration)!\n  namespace__recode_dwarf_types: couldn\u0027t find 0x57074 type for 0xedc1 (imported_declaration)!\n  namespace__recode_dwarf_types: couldn\u0027t find 0x5707a type for 0xedc9 (imported_declaration)!\n  ⬢[acme@toolbox zzam@gentoo.org]$\n\nLooking at the DWARF info for one of those types not found:\n\n  ⬢[acme@toolbox zzam@gentoo.org]$ readelf -wi popup.cpp.o | grep -w edb9 -A5\n   \u003c2\u003e\u003cedb9\u003e: Abbrev Number: 14 (DW_TAG_imported_declaration)\n      \u003cedba\u003e   DW_AT_decl_file   : 64\n      \u003cedbb\u003e   DW_AT_decl_line   : 100\n      \u003cedbc\u003e   DW_AT_decl_column : 20\n      \u003cedbd\u003e   DW_AT_import      : \u003c0x5706e\u003e\t[Abbrev Number: 51 (DW_TAG_enumerator)]\n   \u003c2\u003e\u003cedc1\u003e: Abbrev Number: 14 (DW_TAG_imported_declaration)\n  ⬢[acme@toolbox zzam@gentoo.org]$\n\nAnd then:\n\n  ⬢[acme@toolbox zzam@gentoo.org]$ readelf -wi popup.cpp.o | grep -w 5706e -A3\n   \u003c3\u003e\u003c5706e\u003e: Abbrev Number: 51 (DW_TAG_enumerator)\n      \u003c5706f\u003e   DW_AT_name        : (indirect string, offset: 0xaec05): _S_single\n      \u003c57073\u003e   DW_AT_const_value : 0\n   \u003c3\u003e\u003c57074\u003e: Abbrev Number: 51 (DW_TAG_enumerator)\n  ⬢[acme@toolbox zzam@gentoo.org]$\n\nSo we need to hash those DW_TAG_enumerator and not just the\nDW_TAG_enumerator_type containing them.\n\nThis way tag__recode_dwarf_type() and namespace__recode_dwarf_types()\nwill find them when looking them up using dwarf_cu__find_type_by_ref().\n\nThis was found first on the stratagus codebase (C++) at\nhttps://github.com/Wargus/stratagus.git.\n\nThis didn\u0027t generate any difference in output from pahole, not\ninfluenced BTF generation as tested using tests/reproducible_build.sh.\n\nReported-by: Matthias Schwarzott \u003czzam@gentoo.org\u003e\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "8e3d7e75cd4b290777ca903df318da96cd95e49c",
      "tree": "31f875bfa58e307a37bceab7d9cd488052abf1d1",
      "parents": [
        "82a6e19c8e8a4f0c6fe065e8d4b0f67ee122551b"
      ],
      "author": {
        "name": "HONG Yifan",
        "email": "elsk@google.com",
        "time": "Tue Jun 25 16:43:49 2024 -0700"
      },
      "committer": {
        "name": "HONG Yifan",
        "email": "elsk@google.com",
        "time": "Wed Jun 26 12:02:30 2024 -0700"
      },
      "message": "Add libobstack to musl builds.\n\nUse a copy of obstack from libiberty from external/obstack.\n\nBug: 335898063\nChange-Id: Ie247cb525223b3f261cf4af4aa2a18a60ab8a79b\n"
    },
    {
      "commit": "693522ee3a947d732d26506ee133773b125d422a",
      "tree": "60a11fa100eb8f68a23a68f209b5807e3fc360bf",
      "parents": [
        "43f9515d82114987f092cc294f615bafdc4cb31c"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Wed Jun 19 17:36:19 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Wed Jun 19 17:36:19 2024 -0300"
      },
      "message": "core: Ignore DW_TAG_inheritance with byte_size zero when finding holes\n\nFirst noticed in this report:\n\n ---\n\n  Testing with attached popup.cpp.o from stratagus:\n\n  1. I observe that this command shows interesting results:\n  pahole -M -C PopupConditionPanel -E popup.cpp.o\n\n  The message about 8 bytes of padding in the 8 bytes of class\n  optional\u003cButtonCmd\u003e ButtonAction at offset 4 sounds strange (last struct has 8\n  bytes of padding).\n\n  class PopupConditionPanel {\n  public:\n\n          bool                       HasHint;              /*     0     1 */\n          bool                       HasDescription;       /*     1     1 */\n          bool                       HasDependencies;      /*     2     1 */\n\n          /* XXX 1 byte hole, try to pack */\n\n          class optional\u003cButtonCmd\u003e ButtonAction;          /*     4     8 */\n\n          /* XXX last struct has 8 bytes of padding */\n          /* XXX 4 bytes hole, try to pack */\n\n          string                     ButtonValue;          /*    16    32 */\n          class vector\u003cECondition, std::allocator\u003cECondition\u003e \u003e BoolFlags; /*\n ---\n\nSo just skip those tags, with that in place we don\u0027t end up calculating\nthat bogus padding for that \u0027optional\u003cButtonCmd\u003e\u0027 class.\n\nReported-by: Matthias Schwarzott \u003czzam@gentoo.org\u003e\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "43f9515d82114987f092cc294f615bafdc4cb31c",
      "tree": "8e621229d6916d7a096b99f09fe2c1504a3d965c",
      "parents": [
        "e82a0fdcfb8ea0ce2b3d324d9de63bbbb163363d"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Wed Jun 19 17:35:02 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Wed Jun 19 17:35:02 2024 -0300"
      },
      "message": "dwarf_loader: Print the DWARF offset in tag__print_unsupported_tag()\n\nTo help with debugging when looking up that DWARF offset in the \u0027readelf -wi\u0027\noutput.\n\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "e82a0fdcfb8ea0ce2b3d324d9de63bbbb163363d",
      "tree": "1d7b1cd811a43e07fea26a6d3802cf58ac4e9987",
      "parents": [
        "f7e3f0942fedb9454a174020b65486116d4ee240"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Wed Jun 19 16:59:42 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Wed Jun 19 16:59:42 2024 -0300"
      },
      "message": "dwarf_loader: Simplify tag__print_not_supported()\n\nIt is always used with dwarf_tag(die) as its argument, so just pass\n\u0027die\u0027 and do the dwarf_tag(die) conversion when passing to\n__tag__print_not_supported().\n\nThis paves the way to print the die offset, helpful in debugging.\n\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "f7e3f0942fedb9454a174020b65486116d4ee240",
      "tree": "6d5e015c650394c61e1656fd57b49020267096d4",
      "parents": [
        "94a01bde592c555b3eb526aeb4c2ad695c5660d8"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Jun 18 11:44:01 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Jun 18 11:44:01 2024 -0300"
      },
      "message": "pahole: Bail out when not finding debug anywhere\n\nOn a system where neither DWARF nor BTF can be found anywhere (in\n/sys/kernel/btf, installed debuginfo files, /lib/modules/, etc) we were\nsegfaulting by passing NULL to access() when checking if the last\nargument was a file or a class name, but when calling just \u0027pahole\u0027 on\nsuch a system, there are no arguments, so we should just check if the\n\"remaining\" (non-existent) argument is NULL and state that no debug info\nwas found and just bail out.\n\nReported-by: Matthias Schwarzott \u003czzam@gentoo.org\u003e\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "94a01bde592c555b3eb526aeb4c2ad695c5660d8",
      "tree": "c44fbba6fb2ee9239e034574e1225159d8876041",
      "parents": [
        "6a2b27c0f512619b0e7a769a18a0fb05bb3789a5"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Jun 18 11:14:09 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Jun 18 11:30:21 2024 -0300"
      },
      "message": "dwarf_loader: Add missing cus__add(cus, cu) to cus__merge_and_process_cu()\n\nIn cus__finalize() if cu__finalize() returns LSK__DELETE, i.e. if the\ntool processing the cu is done with it, we will assume that it is in the\ncus list of cu instances, remove it and then delete it.\n\nThis was not being done by cus__merge_and_process_cu(), used when\nmerging all DWARF CUs into a single \u0027struct cu\u0027, such as when processing\nbinaries generated by clang using LTO.\n\nAdd the missing cus__add() to keep cus-\u003enr_entries consistent.\n\nCc: Alan Maguire \u003calan.maguire@oracle.com\u003e\nCc: Daniel Xu \u003cdxu@dxuuu.xyz\u003e\nCc: Domenico Andreoli \u003ccavok@debian.org\u003e\nCc: Dominique Leuenberger \u003cdimstar@opensuse.org\u003e\nCc: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nCc: Jan Alexander Steffens \u003cheftig@archlinux.org\u003e\nCc: Jan Engelhardt \u003cjengelh@inai.de\u003e\nCc: Jiri Olsa \u003cjolsa@kernel.org\u003e\nCc: Matthias Schwarzott \u003czzam@gentoo.org\u003e\nCc: Nathan Chancellor \u003cnathan@kernel.org\u003e\nCc: Viktor Malik \u003cvmalik@redhat.com\u003e\nCc: Yonghong Song \u003cyonghong.song@linux.dev\u003e\nLink: https://lore.kernel.org/all/ZnGZ71a4E29kPrvS@x1\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "6a2b27c0f512619b0e7a769a18a0fb05bb3789a5",
      "tree": "1ccfce4ec96cfdcc6660b681d3efee89ed33cc35",
      "parents": [
        "0ce7745fa46da0ff2b8883854bd1f162d1237145"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Jun 18 10:37:30 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Jun 18 10:37:30 2024 -0300"
      },
      "message": "core: Initialize cu-\u003enode with INIT_LIST_HEAD()\n\nIn cu__new() zalloc() is used defensively, and that helped catch this\nproblem where we assume that a cu us in the cus list of cu instances,\nbut that is not the case when we use cus__merge_and_process_cu(), for\ninstance when loading files created by clang with LTO, as reported by\nPeter Jung and narrowed down by Nathan Chancellor.\n\nIf we use INIT_LIST_HEAD() in cu__new() to initialize cu-\u003enode, which is\nwhat we do with other lists and nodes there, then the unconditional\nremoval using list_del_init() will be a no-op and removing something not\non the cus list of cu instances will not cause problems, just keep an\nunconsistent cus-\u003enr_entries field.\n\nSo lets just have this fix in first, keeping Nathan\u0027s Tested-by and then\ndo the a bit more involved fix of either adding that cu to the cus list\nor checking at removal time if it is there.\n\n  Program received signal SIGSEGV, Segmentation fault.\n  0x00007ffff7f1e13e in __list_del (prev\u003d0x0, next\u003d0x0) at /home/acme/git/pahole/list.h:106\n  106\t\tnext-\u003eprev \u003d prev;\n  (gdb) bt\n  #0  0x00007ffff7f1e13e in __list_del (prev\u003d0x0, next\u003d0x0) at /home/acme/git/pahole/list.h:106\n  #1  0x00007ffff7f1e176 in list_del_init (entry\u003d0x417980) at /home/acme/git/pahole/list.h:165\n  #2  0x00007ffff7f1f8f9 in __cus__remove (cus\u003d0x4142a0, cu\u003d0x417980) at /home/acme/git/pahole/dwarves.c:527\n  #3  0x00007ffff7f1f92b in cus__remove (cus\u003d0x4142a0, cu\u003d0x417980) at /home/acme/git/pahole/dwarves.c:533\n  #4  0x00007ffff7f3d01c in cus__finalize (cus\u003d0x4142a0, cu\u003d0x417980, conf\u003d0x4133c0 \u003cconf_load\u003e, thr_data\u003d0x0)\n      at /home/acme/git/pahole/dwarf_loader.c:3040\n  #5  0x00007ffff7f3e05c in cus__merge_and_process_cu (cus\u003d0x4142a0, conf\u003d0x4133c0 \u003cconf_load\u003e, mod\u003d0x415cf0, dw\u003d0x416110, elf\u003d0x414380,\n      filename\u003d0x7fffffffe3f7 \"cast_common.ko\", build_id\u003d0x416680 \"\\265D\\371U\\213\\373u|\\037\\250\\242\\032\\271\\365⒜]y\\023\", build_id_len\u003d20,\n      type_dcu\u003d0x0) at /home/acme/git/pahole/dwarf_loader.c:3482\n  #6  0x00007ffff7f3e218 in cus__load_module (cus\u003d0x4142a0, conf\u003d0x4133c0 \u003cconf_load\u003e, mod\u003d0x415cf0, dw\u003d0x416110, elf\u003d0x414380,\n      filename\u003d0x7fffffffe3f7 \"cast_common.ko\") at /home/acme/git/pahole/dwarf_loader.c:3521\n  #7  0x00007ffff7f3e396 in cus__process_dwflmod (dwflmod\u003d0x415cf0, userdata\u003d0x415d00, name\u003d0x415ea0 \"cast_common.ko\", base\u003d65536,\n      arg\u003d0x7fffffffde40) at /home/acme/git/pahole/dwarf_loader.c:3581\n  #8  0x00007ffff7eb4609 in dwfl_getmodules (dwfl\u003d0x414300, callback\u003d0x7ffff7f3e2ec \u003ccus__process_dwflmod\u003e, arg\u003d0x7fffffffde40, offset\u003d0)\n      at ../libdwfl/dwfl_getmodules.c:86\n  #9  0x00007ffff7f3e4c5 in cus__process_file (cus\u003d0x4142a0, conf\u003d0x4133c0 \u003cconf_load\u003e, fd\u003d3, filename\u003d0x7fffffffe3f7 \"cast_common.ko\")\n      at /home/acme/git/pahole/dwarf_loader.c:3647\n  #10 0x00007ffff7f3e5cd in dwarf__load_file (cus\u003d0x4142a0, conf\u003d0x4133c0 \u003cconf_load\u003e, filename\u003d0x7fffffffe3f7 \"cast_common.ko\")\n      at /home/acme/git/pahole/dwarf_loader.c:3684\n  #11 0x00007ffff7f232df in cus__load_file (cus\u003d0x4142a0, conf\u003d0x4133c0 \u003cconf_load\u003e, filename\u003d0x7fffffffe3f7 \"cast_common.ko\")\n      at /home/acme/git/pahole/dwarves.c:2134\n  #12 0x00007ffff7f23e8b in cus__load_files (cus\u003d0x4142a0, conf\u003d0x4133c0 \u003cconf_load\u003e, filenames\u003d0x7fffffffe0f0)\n      at /home/acme/git/pahole/dwarves.c:2637\n  #13 0x000000000040aec0 in main (argc\u003d2, argv\u003d0x7fffffffe0e8) at /home/acme/git/pahole/pahole.c:3805\n  (gdb) fr 1\n  #1  0x00007ffff7f1e176 in list_del_init (entry\u003d0x417980) at /home/acme/git/pahole/list.h:165\n  165\t\t__list_del(entry-\u003eprev, entry-\u003enext);\n  (gdb) p entry\n  $1 \u003d (struct list_head *) 0x417980\n  (gdb) p entry-\u003enext\n  $2 \u003d (struct list_head *) 0x0\n  (gdb) p entry-\u003eprev\n  $3 \u003d (struct list_head *) 0x0\n\nCloses: https://github.com/acmel/dwarves/issues/53\nCloses: https://gitlab.archlinux.org/archlinux/packaging/packages/pahole/-/issues/1\nTested-by: Nathan Chancellor \u003cnathan@kernel.org\u003e\nLink: https://lore.kernel.org/all/20240617210810.GA1877676@thelio-3990X\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "0ce7745fa46da0ff2b8883854bd1f162d1237145",
      "tree": "3cd2f95791216ed297e9d1527abd9663c6fc8d85",
      "parents": [
        "3e265dac5ec85b956c664464072196c37d2af4f3"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Wed Jun 12 13:11:56 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Wed Jun 12 13:11:56 2024 -0300"
      },
      "message": "PKG-MAINTAINERS: Add maintainer for nixpkgs package\n\nAcked-by: Dominique Martinet \u003casmadeus@codewreck.org\u003e\nLink: https://lore.kernel.org/lkml/Zmjh2GER_MBB_dgT@codewreck.org\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "3e265dac5ec85b956c664464072196c37d2af4f3",
      "tree": "38c076892ccc5fb7bf186257d6114c9f3f9c52d0",
      "parents": [
        "f62409e1190c2cb42321a4360377f002f1fe3d0d"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Thu Jun 06 16:51:04 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Jun 11 16:27:14 2024 -0300"
      },
      "message": "Prep 1.27\n\nTested-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nTested-by: Daniel Xu \u003cdxu@dxuuu.xyz\u003e\nTested-by: Jiri Olsa \u003colsajiri@gmail.com\u003e\nLink: https://lore.kernel.org/all/ZmIXxgbfIJGWmXer@x1/T/#u\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "f62409e1190c2cb42321a4360377f002f1fe3d0d",
      "tree": "a63a324addf16dbd55bd6bf764b389a9a1863ccb",
      "parents": [
        "a9ae414fef421bdeb13ff7ffe13271e1e4f58993"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Jun 03 14:42:02 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Jun 03 14:42:02 2024 -0300"
      },
      "message": "dwarf_loader: Show the DIE offset when finding unexpected tag in die__process()\n\nTo help debugging.\n\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "a9ae414fef421bdeb13ff7ffe13271e1e4f58993",
      "tree": "7b1d149c9a1ae7f4d44b6e7948e5c82eff27b616",
      "parents": [
        "d08776019ef6a561e58047b071371e4e8c381d89"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Sun May 12 20:46:10 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Sun May 12 20:46:10 2024 -0300"
      },
      "message": "btf_loader: Initial support for BTF_KIND_DECL_TAG\n\nFor now for just the first one found for a given tag (function,\nclass_member, etc).\n\nPretty print it initially just on functions, with it we can test the\nkfunc decl tags:\n\n  $ pfunct --prototypes -F btf vmlinux.btf.decl_tag,decl_tag_kfuncs | grep ^bpf_kfunc | head\n  bpf_kfunc void cubictcp_init(struct sock * sk);\n  bpf_kfunc void cubictcp_cwnd_event(struct sock * sk, enum tcp_ca_event event);\n  bpf_kfunc void cubictcp_cong_avoid(struct sock * sk, u32 ack, u32 acked);\n  bpf_kfunc u32 cubictcp_recalc_ssthresh(struct sock * sk);\n  bpf_kfunc void cubictcp_state(struct sock * sk, u8 new_state);\n  bpf_kfunc void cubictcp_acked(struct sock * sk, const struct ack_sample  * sample);\n  bpf_kfunc int bpf_iter_css_new(struct bpf_iter_css * it, struct cgroup_subsys_state * start, unsigned int flags);\n  bpf_kfunc struct cgroup_subsys_state * bpf_iter_css_next(struct bpf_iter_css * it);\n  bpf_kfunc void bpf_iter_css_destroy(struct bpf_iter_css * it);\n  bpf_kfunc s64 bpf_map_sum_elem_count(const struct bpf_map  * map);\n  $ pfunct --prototypes -F btf vmlinux.btf.decl_tag,decl_tag_kfuncs | grep ^bpf_kfunc | wc -l\n  116\n  $\n\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "d08776019ef6a561e58047b071371e4e8c381d89",
      "tree": "47f5fca17478c74dc593d654569d2289d116e7ba",
      "parents": [
        "72e88f29c6f7e14201756e65bd66157427a61aaf"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Sun May 12 20:44:47 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Sun May 12 20:44:47 2024 -0300"
      },
      "message": "pfunct: Disable collecting fn_stats when processing BTF\n\nThere is just one \"CU\" and we don\u0027t have that many constructs in BTF as\nin DWARF, so disable it for now, we can get it back if needed.\n\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "72e88f29c6f7e14201756e65bd66157427a61aaf",
      "tree": "a41d2a23e2a9e1bec492ec7015bbb00f589e7ef5",
      "parents": [
        "ce4d0bc0200e322bb919d2a4a52055c4ebb31b4f"
      ],
      "author": {
        "name": "Daniel Xu",
        "email": "dxu@dxuuu.xyz",
        "time": "Mon Apr 29 16:46:00 2024 -0600"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Apr 30 16:57:37 2024 -0300"
      },
      "message": "pahole: Inject kfunc decl tags into BTF\n\nThis commit teaches pahole to parse symbols in .BTF_ids section in\nvmlinux and discover exported kfuncs. Pahole then takes the list of\nkfuncs and injects a BTF_KIND_DECL_TAG for each kfunc.\n\nExample of encoding:\n\n  $ bpftool btf dump file .tmp_vmlinux.btf | rg \"DECL_TAG \u0027bpf_kfunc\u0027\" | wc -l\n  121\n\n  $ bpftool btf dump file .tmp_vmlinux.btf | rg 56337\n  [56337] FUNC \u0027bpf_ct_change_timeout\u0027 type_id\u003d56336 linkage\u003dstatic\n  [127861] DECL_TAG \u0027bpf_kfunc\u0027 type_id\u003d56337 component_idx\u003d-1\n\nThis enables downstream users and tools to dynamically discover which\nkfuncs are available on a system by parsing vmlinux or module BTF, both\navailable in /sys/kernel/btf.\n\nThis feature is enabled with --btf_features\u003ddecl_tag,decl_tag_kfuncs.\n\nSigned-off-by: Daniel Xu \u003cdxu@dxuuu.xyz\u003e\nCc: Alan Maguire \u003calan.maguire@oracle.com\u003e\nCc: Alexei Starovoitov \u003cast@kernel.org\u003e\nCc: Andrii Nakryiko \u003candrii.nakryiko@gmail.com\u003e\nCc: Daniel Borkmann \u003cdaniel@iogearbox.net\u003e\nCc: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nCc: Jiri Olsa \u003cjolsa@kernel.org\u003e\nCc: Quentin Monnet \u003cquentin@isovalent.com\u003e\nLink: https://lore.kernel.org/r/26ec519a00aa47f25bc6b4c7e4e15e5191ba4d45.1714430735.git.dxu@dxuuu.xyz\n[ \u0027decl_tag_kfuncs\u0027 isn\u0027t enabled with --btf_features\u003ddefault, so reflect that in the man page ]\n[ Check strdup in get_func_name(), defer strdup() to after initial validation after prefix ]\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "ce4d0bc0200e322bb919d2a4a52055c4ebb31b4f",
      "tree": "81080322f2ce34541c2460f21ccd3f39ed062b4f",
      "parents": [
        "e3b1c322503269d3838ae1bdb50f08a85deadd26"
      ],
      "author": {
        "name": "Daniel Xu",
        "email": "dxu@dxuuu.xyz",
        "time": "Mon Apr 29 16:45:59 2024 -0600"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Apr 30 15:42:16 2024 -0300"
      },
      "message": "pahole: Add --btf_feature\u003ddecl_tag_kfuncs feature\n\nAdd a feature flag to guard tagging of kfuncs. The next commit will\nimplement the actual tagging.\n\nReviewed-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nSigned-off-by: Daniel Xu \u003cdxu@dxuuu.xyz\u003e\nCc: Alexei Starovoitov \u003cast@kernel.org\u003e\nCc: Andrii Nakryiko \u003candrii.nakryiko@gmail.com\u003e\nCc: Daniel Borkmann \u003cdaniel@iogearbox.net\u003e\nCc: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nCc: Jiri Olsa \u003cjolsa@kernel.org\u003e\nCc: Quentin Monnet \u003cquentin@isovalent.com\u003e\nLink: https://lore.kernel.org/r/6d69d6dce917475ffe9c1bd7bc53358904f60915.1714430735.git.dxu@dxuuu.xyz\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "e3b1c322503269d3838ae1bdb50f08a85deadd26",
      "tree": "dd11633baa6337498f5da4227fadc36202c61667",
      "parents": [
        "d5847615d0a5c082b1d61bdefc4683109c49de67"
      ],
      "author": {
        "name": "Daniel Xu",
        "email": "dxu@dxuuu.xyz",
        "time": "Mon Apr 29 16:45:58 2024 -0600"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Apr 30 15:41:23 2024 -0300"
      },
      "message": "pahole: Save input filename separate from output\n\nDuring detached BTF encoding, the input file is not necessarily the same\nas the output file. So save them separately. This matters when we need\nto look at the input file again, such as for kfunc tagging.\n\nSigned-off-by: Daniel Xu \u003cdxu@dxuuu.xyz\u003e\nCc: Alan Maguire \u003calan.maguire@oracle.com\u003e\nCc: Alexei Starovoitov \u003cast@kernel.org\u003e\nCc: Andrii Nakryiko \u003candrii.nakryiko@gmail.com\u003e\nCc: Daniel Borkmann \u003cdaniel@iogearbox.net\u003e\nCc: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nCc: Jiri Olsa \u003cjolsa@kernel.org\u003e\nCc: Quentin Monnet \u003cquentin@isovalent.com\u003e\nLink: https://lore.kernel.org/r/1728b8d941d2658b310457b6c59d97f102aaf66d.1714430735.git.dxu@dxuuu.xyz\n[ Check if the encoder-\u003esource_filename with strdup() succeeded, just like is done for encoder-\u003efilename */\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "d5847615d0a5c082b1d61bdefc4683109c49de67",
      "tree": "0e9fafdaf61dc4ad3381607b48b9836da2093843",
      "parents": [
        "912a8e3f3d19fa76405ddcbb687f8eab9c9afb62"
      ],
      "author": {
        "name": "Alan Maguire",
        "email": "alan.maguire@oracle.com",
        "time": "Tue Apr 30 10:55:01 2024 +0100"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Apr 30 11:39:37 2024 -0300"
      },
      "message": "pahole: Describe expected use of \u0027default\u0027 in the man page\n\nthe \u0027default\u0027 --btf_features option is useful for testing the latest set\nof standard features used for BTF encoding, but will not be used in the\nkernel Makefile.btf.  It functions as a useful shortcut for testing the\nlatest set of standard features.  Describe this in the manual page.\n\nSuggested-by: Arnaldo Carvalho de Melo \u003cacme@kernel.org\u003e\nSigned-off-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nCc: Andrii Nakryiko \u003candrii.nakryiko@gmail.com\u003e\nCc: Clark Williams \u003cwilliams@redhat.com\u003e\nCc: Daniel Xu \u003cdxu@dxuuu.xyz\u003e\nCc: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nCc: Jiri Olsa \u003cjolsa@kernel.org\u003e\nCc: Kate Carcia Poulin \u003ckcarcia@redhat.com\u003e\nLink: https://lore.kernel.org/r/20240430095501.1959359-1-alan.maguire@oracle.com\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "912a8e3f3d19fa76405ddcbb687f8eab9c9afb62",
      "tree": "871da7dac59aa0ce4e293badce9fa64d079ca5c4",
      "parents": [
        "a1f684fa018ddbfaf99690f343b33ff364f2cd37"
      ],
      "author": {
        "name": "Yonghong Song",
        "email": "yonghong.song@linux.dev",
        "time": "Wed Apr 24 15:35:38 2024 -0700"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Thu Apr 25 11:16:21 2024 -0300"
      },
      "message": "btf_encoder: Fix DWARF int type with greater-than-16 byte issue\n\nNick Desaulniers and Xin Liu separately reported that int type might\nhave greater-than-16 byte size ([1] and [2]). More specifically, the\nreported int type sizes are 1024 and 64 bytes.\n\nThe libbpf and BPF programs does not really support any int type greater\nthan 16 bytes. Therefore, with current pahole, BTF encoding will fail\nwith greater-than-16 byte int types.\n\nSince for now BPF does not support \u0027\u003e 16\u0027 bytes int type, the simplest\nway is to sanitize such types, similar to existing conditions like\n\u0027!byte_sz\u0027 and \u0027byte_sz \u0026 (byte_sz - 1)\u0027. This way, pahole won\u0027t\ncall libbpf with an unsupported int type size. The patch [3] was\nproposed before. Now I resubmitted this patch as there are another\nfailure due to the same issue.\n\n  [1] https://github.com/libbpf/libbpf/pull/680\n  [2] https://lore.kernel.org/bpf/20240422144538.351722-1-liuxin350@huawei.com/\n  [3] https://lore.kernel.org/bpf/20230426055030.3743074-1-yhs@fb.com/\n\nReported-by: Nick Desaulniers \u003cndesaulniers@google.com\u003e\nReported-by: Xin Liu \u003cliuxin350@huawei.com\u003e\nReviewed-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nReviewed-by: Xin Liu \u003cliuxin350@huawei.com\u003e\nSigned-off-by: Yonghong Song \u003cyonghong.song@linux.dev\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\nLink: https://lore.kernel.org/r/20240424223538.2682496-1-yonghong.song@linux.dev\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "a1f684fa018ddbfaf99690f343b33ff364f2cd37",
      "tree": "bb5f7e5f623115677e8c3d3a1bed8f8b511dd57c",
      "parents": [
        "31c6ec74952898a6d98b27a219dce218f6133a9a"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Fri Apr 19 17:46:08 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Apr 23 14:41:13 2024 -0300"
      },
      "message": "pahole: Allow asking for extra features using the \u0027+\u0027 prefix in --btf_features\n\nInstead of the more verbose form:\n\n  --btf_features\u003ddefault,reproducible_build\n\nThat means \"the set of default BTF features plus the \u0027reproducible_build\u0027\nextra BTF feature\", use + directly, making it more compact:\n\n  --btf_features\u003d+reproducible_build\n\nIn the future we may want the \u0027-\u0027 counterpart as a way to _remove_ some\nof the default set of BTF features.\n\nCc: Alan Maguire \u003calan.maguire@oracle.com\u003e\nCc: Andrii Nakryiko \u003candrii.nakryiko@gmail.com\u003e\nCc: Daniel Xu \u003cdxu@dxuuu.xyz\u003e\nCc: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nCc: Jiri Olsa \u003cjolsa@kernel.org\u003e\nLink: https://lore.kernel.org/dwarves/20240419205747.1102933-2-acme@kernel.org\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "31c6ec74952898a6d98b27a219dce218f6133a9a",
      "tree": "2da5413238349f40d0c1b229ce6a66ef876bcde7",
      "parents": [
        "2046cc50578beb4409bde5492f606fab23039932"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Fri Apr 19 11:34:11 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Apr 23 14:36:53 2024 -0300"
      },
      "message": "pahole: Factor out routine to process \"--btf_features\u003ddefault\"\n\nAs we\u0027ll use it to process \"--btf_features\u003d+reproducible_build\" meaning\n\"default + reproducible_build\", as a more compact way to express that,\none that follows a command line syntax also present in \u0027perf report\n--fields\".\n\nCc: Alan Maguire \u003calan.maguire@oracle.com\u003e\nCc: Andrii Nakryiko \u003candrii.nakryiko@gmail.com\u003e\nCc: Daniel Xu \u003cdxu@dxuuu.xyz\u003e\nCc: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nCc: Jiri Olsa \u003cjolsa@kernel.org\u003e\nLink: https://lore.kernel.org/lkml/20240419205747.1102933-2-acme@kernel.org\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "2046cc50578beb4409bde5492f606fab23039932",
      "tree": "201726bc61738861bda9012bc78d71a4d216d75c",
      "parents": [
        "9aba4c9220eebf81986dfc680964ba59578e55bd"
      ],
      "author": {
        "name": "Daniel Xu",
        "email": "dxu@dxuuu.xyz",
        "time": "Mon Mar 25 11:53:37 2024 -0600"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Apr 23 14:27:32 2024 -0300"
      },
      "message": "gobuffer: Add gobuffer__sort() helper\n\nAdd a helper to sort the gobuffer. Trivial wrapper around qsort().\n\nCommitter notes:\n\nAs pointed out by Alan Maguire, there is no need to cast the first\nqsort() argument to void, remove that cast.\n\nReviewed-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nSigned-off-by: Daniel Xu \u003cdxu@dxuuu.xyz\u003e\nCc: Alexei Starovoitov \u003cast@kernel.org\u003e\nCc: Andrii Nakryiko \u003candrii.nakryiko@gmail.com\u003e\nCc: Daniel Borkmann \u003cdaniel@iogearbox.net\u003e\nCc: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nCc: Jiri Olsa \u003cjolsa@kernel.org\u003e\nCc: Quentin Monnet \u003cquentin@isovalent.com\u003e\nLink: https://lore.kernel.org/r/ba9ff49e099583ab854d3d3c8c215c3ca1b6f930.1711389163.git.dxu@dxuuu.xyz\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "9aba4c9220eebf81986dfc680964ba59578e55bd",
      "tree": "60915f863b2265ffe89652f8ae75fa845a9c7fa8",
      "parents": [
        "0a9eceb3e5453aee29c03ba6ed05bd60694ed8fa"
      ],
      "author": {
        "name": "Alan Maguire",
        "email": "alan.maguire@oracle.com",
        "time": "Tue Apr 23 17:02:00 2024 +0100"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Apr 23 14:27:03 2024 -0300"
      },
      "message": "tests: update reproducible_build test to use \"default\"\n\nThe test should use --btf_features\u003ddefault in place of the\nremoved \"all\".\n\nSigned-off-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nCc: Andrii Nakryiko \u003candrii.nakryiko@gmail.com\u003e\nCc: Daniel Xu \u003cdxu@dxuuu.xyz\u003e\nCc: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nCc: Jiri Olsa \u003cjolsa@kernel.org\u003e\nLink: https://lore.kernel.org/r/20240423160200.3139270-3-alan.maguire@oracle.com\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "0a9eceb3e5453aee29c03ba6ed05bd60694ed8fa",
      "tree": "bf874818b96a7a4fa211518c1ed193c653b464cd",
      "parents": [
        "2a6b7ec7ce981c3debf85f890c9db6e3d03c0025"
      ],
      "author": {
        "name": "Alan Maguire",
        "email": "alan.maguire@oracle.com",
        "time": "Tue Apr 23 17:01:59 2024 +0100"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Apr 23 14:25:30 2024 -0300"
      },
      "message": "pahole: Replace use of \"all\" with \"default\" for --btf_features\n\nIt is confusing that --btf_features allows specification of \"all\"\nfeatures and additional non-standard features like \"reproducible_build\"\nso rename \"all\" to \"default\".  To make the code clearer, avoid other\nreferences to default values of --btf_features values, replacing these\nwith references to the initial value.\n\nSigned-off-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nCc: Andrii Nakryiko \u003candrii.nakryiko@gmail.com\u003e\nCc: Daniel Xu \u003cdxu@dxuuu.xyz\u003e\nCc: Eduard Zingerman \u003ceddyz87@gmail.com\u003e\nCc: Jiri Olsa \u003cjolsa@kernel.org\u003e\nLink: https://lore.kernel.org/r/20240423160200.3139270-2-alan.maguire@oracle.com\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "2a6b7ec7ce981c3debf85f890c9db6e3d03c0025",
      "tree": "d9501d16a739c555a9b0cbaa1efe53a51c9c51ad",
      "parents": [
        "43bd3efa85656565129063cdd6dd7499e44a7867"
      ],
      "author": {
        "name": "Alan Maguire",
        "email": "alan.maguire@oracle.com",
        "time": "Tue Apr 16 15:37:18 2024 +0100"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Apr 16 17:46:28 2024 -0300"
      },
      "message": "tests/reproducible_build: use --btf_features\u003dall,reproducible_build\n\n...as this will test enabling all standard features plus a non-standard\none.\n\nSigned-off-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nTested-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nCc: Jiri Olsa \u003cjolsa@kernel.org\u003e\nCc: Kui-Feng Lee \u003ckuifeng@fb.com\u003e\nCc: Thomas Weißschuh \u003clinux@weissschuh.net\u003e\nLink: https://lore.kernel.org/r/20240416143718.2857981-4-alan.maguire@oracle.com\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "43bd3efa85656565129063cdd6dd7499e44a7867",
      "tree": "55f3054c39ebc377a2f5cedd90b44a1a27f5a898",
      "parents": [
        "e78c82db744eab777555d52f20e2cfa701f69695"
      ],
      "author": {
        "name": "Alan Maguire",
        "email": "alan.maguire@oracle.com",
        "time": "Tue Apr 16 15:37:17 2024 +0100"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Apr 16 17:46:16 2024 -0300"
      },
      "message": "pahole: Add reproducible_build to --btf_features\n\n...as a non-standard feature, so it will not be enabled for\n\"--btf_features\u003dall\"\n\nSigned-off-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nTested-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nCc: Clark Williams \u003cwilliams@redhat.com\u003e\nCc: Jiri Olsa \u003cjolsa@kernel.org\u003e\nCc: Kui-Feng Lee \u003ckuifeng@fb.com\u003e\nCc: Thomas Weißschuh \u003clinux@weissschuh.net\u003e\nLink: https://lore.kernel.org/r/20240416143718.2857981-3-alan.maguire@oracle.com\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "e78c82db744eab777555d52f20e2cfa701f69695",
      "tree": "aae51bd5f49229c88ecac41545b13a89c98be240",
      "parents": [
        "a9738ddc828d5ea0bc1d0817efa7f7b58d1e2841"
      ],
      "author": {
        "name": "Alan Maguire",
        "email": "alan.maguire@oracle.com",
        "time": "Tue Apr 16 15:37:16 2024 +0100"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Apr 16 17:46:11 2024 -0300"
      },
      "message": "pahole: Allow --btf_features to not participate in \"all\"\n\nSpecifying --btf_features\u003dall enables all supported BTF features.\n\nHowever there are some features that are non-standard, so we should\nsupport a way to use them in --btf_features but not participate in the\nset of features enabled by \"--btf_features\u003dall\".  As part of this, also\nsupport all used in a list of --btf_features, i.e.\n\n  --btf_features\u003dall,nonstandard_feature\n\nSigned-off-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nTested-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\nCc: Jiri Olsa \u003cjolsa@kernel.org\u003e\nCc: Kui-Feng Lee \u003ckuifeng@fb.com\u003e\nCc: Thomas Weißschuh \u003clinux@weissschuh.net\u003e\nLink: https://lore.kernel.org/r/20240416143718.2857981-2-alan.maguire@oracle.com\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "a9738ddc828d5ea0bc1d0817efa7f7b58d1e2841",
      "tree": "8dbf91341ff8f0430210cdc7211b4b23bd0964c2",
      "parents": [
        "d7edf9ae0388fb973f7c6a7328a975a7dbd51b91"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Apr 15 14:26:33 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Apr 15 14:51:21 2024 -0300"
      },
      "message": "tests/reproducible_build: Use --btf_features\u003dall when encoding\n\nAlan suggested:\n\n\"What about adding --btf_features\u003dall as this would mean we\u0027d be\nencoding all the standard kernel features? we\u0027d need to do the same\nbelow in the thread loop. without that we\u0027re missing out on a few\nfeatures that the kernel builds use in BTF encoding, and we probably\nwant to ensure that we\u0027re testing as close to a real kernel BTF encoding\nscenario as possible.\"\n\nDo it.\n\nSuggested-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nCc: Jiri Olsa \u003cjolsa@kernel.org\u003e\nCc: Kui-Feng Lee \u003ckuifeng@fb.com\u003e\nCc: Thomas Weißschuh \u003clinux@weissschuh.net\u003e\nLink: https://lore.kernel.org/lkml/3817fa6d-122f-4cbc-92be-616355ec04c2@oracle.com\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "d7edf9ae0388fb973f7c6a7328a975a7dbd51b91",
      "tree": "2b65bef04234efc66daebabefbcd28227db56652",
      "parents": [
        "c933676ce2780325a20b67dececf9616d6e610bf"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Apr 15 14:26:33 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Apr 15 14:51:21 2024 -0300"
      },
      "message": "tests/reproducible_build: Validate the vmlinux file\n\nCheck if a vmlinux file was specified and if it exists when specified.,\n\n  $ tests/reproducible_build.sh\n  Please specify a vmlinux file to operate on\n  $ tests/reproducible_build.sh vmlinuxi\n  vmlinuxi file not available, please specify another\n  $ tests/reproducible_build.sh vmlinux\n  Parallel reproducible DWARF Loading/Serial BTF encoding: ^C\n  $\n\nSuggested-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nCc: Jiri Olsa \u003cjolsa@kernel.org\u003e\nCc: Kui-Feng Lee \u003ckuifeng@fb.com\u003e\nCc: Thomas Weißschuh \u003clinux@weissschuh.net\u003e\nLink: https://lore.kernel.org/lkml/3817fa6d-122f-4cbc-92be-616355ec04c2@oracle.com\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "c933676ce2780325a20b67dececf9616d6e610bf",
      "tree": "e3597f8cb52064f3e5bf100aea5f8bb03ba33210",
      "parents": [
        "dba7b5e847529cded71c6f46b8e281bad71c9fb7"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Apr 02 14:35:51 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Apr 15 14:51:21 2024 -0300"
      },
      "message": "tests: Add a BTF reproducible generation test\n\n  $ time tests/reproducible_build.sh vmlinux\n  Parallel reproducible DWARF Loading/Serial BTF encoding: Ok\n\n  real  1m13.844s\n  user  3m3.601s\n  sys   0m9.049s\n  $\n\nIf the number of threads started by pahole is different than what was\nrequests via its -j command line option, it will fail as well as if the\noutput of \u0027bpftool btf dump\u0027 differs from the BTF encoded totally\nserially to one of the detached BTF encoded using reproducible DWARF\nloading/BTF encoding.\n\nReviewed-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nTested-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nCc: Kui-Feng Lee \u003ckuifeng@fb.com\u003e\nCc: Thomas Weißschuh \u003clinux@weissschuh.net\u003e\nLink: https://lore.kernel.org/lkml/20240412211604.789632-13-acme@kernel.org\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "dba7b5e847529cded71c6f46b8e281bad71c9fb7",
      "tree": "acef0697d49b557974b2c7fbf49e336e33058f36",
      "parents": [
        "edc23a0dae4f8996e0b48bb376f9bd6d8c88acba"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Wed Mar 27 17:44:28 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Apr 15 14:51:10 2024 -0300"
      },
      "message": "pahole: Encode BTF serially in a reproducible build\n\nNow we will ask the cus instance for the next processable CU, i.e. one\nthat is loaded and is in the same CU order as in the original DWARF\nfile, under the BTF lock.\n\nWith this we can go on loading the DWARF file in parallel and only\nserialize the BTF encoding, keeping that order, with this the BTF ids\nend up the same both for a serial encoding:\n\nAnd here are some numbers with a Release build:\n\n  $ cat buildcmd.sh\n  mkdir build\n  cd build\n  cmake -DCMAKE_BUILD_TYPE\u003dRelease ..\n  cd ..\n  make -j $(getconf _NPROCESSORS_ONLN) -C build\n  $ rm -rf build\n  $ ./buildcmd.sh\n\nIts an Intel Hybrid system, and migrates to/from efficiency/perfomance\ncores:\n\n  $ getconf _NPROCESSORS_ONLN\n  28\n  $ grep -m1 \u0027model name\u0027 /proc/cpuinfo\n  model name\t: Intel(R) Core(TM) i7-14700K\n  $\n\n8 performance cores (16 threads), 12 efficiency cores.\n\nSerial encoding:\n\n  $ time perf stat -e cycles -r5 pahole --btf_encode_detached\u003dvmlinux.btf.serial vmlinux\n\n   Performance counter stats for \u0027pahole --btf_encode_detached\u003dvmlinux.btf.serial vmlinux\u0027 (5 runs):\n\n      13,313,169,305      cpu_atom/cycles:u/     ( +- 30.61% )  (0.00%)\n      27,985,776,096      cpu_core/cycles:u/     ( +-  0.17% )  (100.00%)\n\n             5.18276 +- 0.00952 seconds time elapsed  ( +-  0.18% )\n\n  real\t0m25.937s\n  user\t0m25.337s\n  sys\t0m0.533s\n  $\n\nParallel, but non-reproducible:\n\n  $ time perf stat -e cycles -r5 pahole -j --btf_encode_detached\u003dvmlinux.btf.parallel vmlinux\n\n   Performance counter stats for \u0027pahole -j --btf_encode_detached\u003dvmlinux.btf.parallel vmlinux\u0027 (5 runs):\n\n      73,112,892,822      cpu_atom/cycles:u/     ( +-  0.60% )  (43.16%)\n      99,124,802,605      cpu_core/cycles:u/     ( +-  0.72% )  (59.01%)\n\n              1.9501 +- 0.0111 seconds time elapsed  ( +-  0.57% )\n\n  real\t0m9.778s\n  user\t1m30.700s\n  sys\t0m13.114s\n  $\n\nNow what we want, a reproducible build done using parallel DWARF loading\n+ CUs-ordered-as-in-vmlinux serial BTF encoding:\n\n  $ time perf stat -e cycles -r5 pahole -j --reproducible_build --btf_encode_detached\u003dvmlinux.btf.parallel.reproducible vmlinux\n\n   Performance counter stats for \u0027pahole -j --reproducible_build --btf_encode_detached\u003dvmlinux.btf.parallel.reproducible vmlinux\u0027 (5 runs):\n\n      21,263,444,208      cpu_atom/cycles:u/     ( +-  1.95% )  (29.18%)\n      35,881,074,547      cpu_core/cycles:u/     ( +-  0.64% )  (75.60%)\n\n              2.5354 +- 0.0221 seconds time elapsed  ( +-  0.87% )\n\n  real\t0m12.709s\n  user\t0m35.001s\n  sys\t0m9.017s\n  $\n\nFastest is off course the unreproducible, fully parallel DWARF loading/\nBTF encoding at 1.9501 +- 0.0111 seconds, but doing a reproducible build\nin 2.5354 +- 0.0221 seconds is better than completely disabling -j/full\nserial at 5.18276 +- 0.00952 seconds.\n\nComparing the BTF generated:\n\n  $ bpftool btf dump file vmlinux.btf.serial \u003e output.vmlinux.btf.serial\n  $ bpftool btf dump file vmlinux.btf.parallel \u003e output.vmlinux.btf.parallel\n  $ bpftool btf dump file vmlinux.btf.parallel.reproducible \u003e output.vmlinux.btf.parallel.reproducible\n\n  $ wc -l output.vmlinux.btf.serial output.vmlinux.btf.parallel output.vmlinux.btf.parallel.reproducible\n    313404 output.vmlinux.btf.serial\n    314345 output.vmlinux.btf.parallel\n    313404 output.vmlinux.btf.parallel.reproducible\n    941153 total\n  $\n\nNon reproducible parallel BTF encoding:\n\n  $ diff -u output.vmlinux.btf.serial output.vmlinux.btf.parallel | head\n  --- output.vmlinux.btf.serial\t2024-04-02 11:11:56.665027947 -0300\n  +++ output.vmlinux.btf.parallel\t2024-04-02 11:12:38.490895460 -0300\n  @@ -1,1708 +1,2553 @@\n   [1] INT \u0027long unsigned int\u0027 size\u003d8 bits_offset\u003d0 nr_bits\u003d64 encoding\u003d(none)\n  -[2] CONST \u0027(anon)\u0027 type_id\u003d1\n  -[3] VOLATILE \u0027(anon)\u0027 type_id\u003d2\n  -[4] ARRAY \u0027(anon)\u0027 type_id\u003d1 index_type_id\u003d21 nr_elems\u003d2\n  -[5] PTR \u0027(anon)\u0027 type_id\u003d8\n  -[6] CONST \u0027(anon)\u0027 type_id\u003d5\n  -[7] INT \u0027char\u0027 size\u003d1 bits_offset\u003d0 nr_bits\u003d8 encoding\u003d(none)\n  $\n\nReproducible:\n\n  $ diff -u output.vmlinux.btf.serial output.vmlinux.btf.parallel.reproducible\n  $\n\nAnd using a test script that I\u0027ll add to a nascent repository of\nregression tests:\n\n  $ time tests/reproducible_build.sh vmlinux\n  Parallel reproducible DWARF Loading/Serial BTF encoding: Ok\n\n  real\t1m13.844s\n  user\t3m3.601s\n  sys\t0m9.049s\n  $\n\nIf the number of threads started by pahole is different than what was\nrequests via its -j command line option, it will fail as well as if the\noutput of \u0027bpftool btf dump\u0027 differs from the BTF encoded totally\nserially to one of the detached BTF encoded using reproducible DWARF\nloading/BTF encoding.\n\nIn verbose mode:\n\n  $ time VERBOSE\u003d1 tests/reproducible_build.sh vmlinux\n  Parallel reproducible DWARF Loading/Serial BTF encoding:\n  serial encoding...\n  1 threads encoding\n  1 threads started\n  diff from serial encoding:\n  -----------------------------\n  2 threads encoding\n  2 threads started\n  diff from serial encoding:\n  -----------------------------\n  3 threads encoding\n  3 threads started\n  diff from serial encoding:\n  -----------------------------\n  4 threads encoding\n  4 threads started\n  diff from serial encoding:\n  -----------------------------\n  5 threads encoding\n  5 threads started\n  diff from serial encoding:\n  -----------------------------\n  6 threads encoding\n  6 threads started\n   diff from serial encoding:\n  -----------------------------\n  7 threads encoding\n  7 threads started\n  diff from serial encoding:\n  -----------------------------\n  8 threads encoding\n  8 threads started\n  diff from serial encoding:\n  -----------------------------\n  9 threads encoding\n  9 threads started\n  diff from serial encoding:\n  -----------------------------\n  10 threads encoding\n  10 threads started\n  diff from serial encoding:\n  -----------------------------\n  11 threads encoding\n  11 threads started\n  diff from serial encoding:\n  -----------------------------\n  12 threads encoding\n  12 threads started\n  diff from serial encoding:\n  -----------------------------\n  13 threads encoding\n  13 threads started\n  diff from serial encoding:\n  -----------------------------\n  14 threads encoding\n  14 threads started\n  diff from serial encoding:\n  -----------------------------\n  15 threads encoding\n  15 threads started\n  diff from serial encoding:\n  -----------------------------\n  16 threads encoding\n  16 threads started\n  diff from serial encoding:\n  -----------------------------\n  17 threads encoding\n  17 threads started\n  diff from serial encoding:\n  -----------------------------\n  18 threads encoding\n  18 threads started\n  diff from serial encoding:\n  -----------------------------\n  19 threads encoding\n  19 threads started\n  diff from serial encoding:\n  -----------------------------\n  20 threads encoding\n  20 threads started\n  diff from serial encoding:\n  -----------------------------\n  21 threads encoding\n  21 threads started\n  diff from serial encoding:\n  -----------------------------\n  22 threads encoding\n  22 threads started\n  diff from serial encoding:\n  -----------------------------\n  23 threads encoding\n  23 threads started\n  diff from serial encoding:\n  -----------------------------\n  24 threads encoding\n  24 threads started\n  diff from serial encoding:\n  -----------------------------\n  25 threads encoding\n  25 threads started\n  diff from serial encoding:\n  -----------------------------\n  26 threads encoding\n  26 threads started\n  diff from serial encoding:\n  -----------------------------\n  27 threads encoding\n  27 threads started\n  diff from serial encoding:\n  -----------------------------\n  28 threads encoding\n  28 threads started\n  diff from serial encoding:\n  -----------------------------\n  Ok\n\n  real\t1m14.800s\n  user\t3m4.315s\n  sys\t0m8.977s\n  $\n\nReviewed-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nTested-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nCc: Jiri Olsa \u003cjolsa@kernel.org\u003e\nCc: Kui-Feng Lee \u003ckuifeng@fb.com\u003e\nCc: Thomas Weißschuh \u003clinux@weissschuh.net\u003e\nLink: https://lore.kernel.org/all/ZhQBpAGIDU_koQnp@x1\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "edc23a0dae4f8996e0b48bb376f9bd6d8c88acba",
      "tree": "56067b08f055197e7a25956995ba6b285787f580",
      "parents": [
        "f632e757f7ba3f2111e785a9408c076a34ee8f0f"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Wed Mar 27 13:55:23 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Apr 15 14:50:25 2024 -0300"
      },
      "message": "core/dwarf_loader: Add functions to set state of CU processing\n\nWhen doing reproducible builds we\u0027ll process loaded CUs in\npahole_stealer in the same order as the CUs are in the DWARF file\n(vmlinux), so sometimes when we may finish loading a CU out of order and\nthus will have to either busy loop (to use a hot cache?) to way for its\nturn or simply leave it in the ordered queue waiting its turn (may use\ntoo much memory with a pile of CUs waiting to be processed (converted to\nBTF)?), so we need to mark its state:\n\n   unprocessed, loaded, processing\n\nSo when pahole has pahole_stealer called, it will not use necessarily\nthe handed cu, because it may be out of order, say if the first CU that\npahole gets in one of its threads is a big one and takes longer to\nprocess than one of the other handed to the otherd DWARF loading\nthreads, then it will have to wait for the first one to be processed by\nthe, so far, non reproducible BTF encoder.\n\nWe will instead allow tools such as pahole to ask for the next CU do be\nprocessed, i.e. in order, if the first one is still not loaded, then\nit\u0027ll just return NULL and the encoder will return so that its DWARF\nloading thread can go load one more CU and then ask pahole to encode one\nmore CU, rinse repeat.\n\nWe\u0027ll see if this ends up using too much memory due to unconstrained\nloading of CUs that pile up waiting for BTF encoding.\n\nAt the end the tool will need to flush the queue.\n\nWhen a CU is processed it gets deleted, which goes on freeing memory.\n\nReviewed-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nTested-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nCc: Kui-Feng Lee \u003ckuifeng@fb.com\u003e\nCc: Thomas Weißschuh \u003clinux@weissschuh.net\u003e\nLink: https://lore.kernel.org/lkml/20240412211604.789632-11-acme@kernel.org\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "f632e757f7ba3f2111e785a9408c076a34ee8f0f",
      "tree": "3d41ac9ca9ad212283640223d1a6f6e7d6312f27",
      "parents": [
        "7ddb9cfb91cd3d65d233207c3dde1f78527e2900"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Wed Mar 27 13:42:37 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Apr 15 14:50:24 2024 -0300"
      },
      "message": "dwarf_loader: Add the cu to the cus list early, remove on LSK_DELETE\n\nWe want to keep it in the same order as in the original DWARF file we\u0027re\nloading (e.g. vmlinux), we\u0027ll only remove it after we load and process\n(e.g. convert to BTF).\n\nReviewed-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nTested-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nCc: Kui-Feng Lee \u003ckuifeng@fb.com\u003e\nCc: Thomas Weißschuh \u003clinux@weissschuh.net\u003e\nLink: https://lore.kernel.org/lkml/20240412211604.789632-10-acme@kernel.org\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "7ddb9cfb91cd3d65d233207c3dde1f78527e2900",
      "tree": "01885cc00ab52de26c24edf82405bcc1fde8dcda",
      "parents": [
        "6fa064b96853897c71e4e6ca6dbd82d9a0e85fbd"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Wed Mar 27 09:55:05 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Apr 15 14:50:22 2024 -0300"
      },
      "message": "core: Add cus__remove(), counterpart of cus__add()\n\nWe\u0027ll switch to adding the \u0027struct cu\u0027 instance to the \u0027struct cus\u0027 list\nearly, under the lock, to keep the order from the original DWARF file\nand then LSK_KEEPIT will just leave it there while LSK_DELETE will first\nremove it from the cus list, under cus lock, to then call cu__delete().\n\nReviewed-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nTested-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nCc: Kui-Feng Lee \u003ckuifeng@fb.com\u003e\nCc: Thomas Weißschuh \u003clinux@weissschuh.net\u003e\nLink: https://lore.kernel.org/lkml/20240412211604.789632-9-acme@kernel.org\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "6fa064b96853897c71e4e6ca6dbd82d9a0e85fbd",
      "tree": "3494f084458936ff8374a8db0f80cf76934e59a2",
      "parents": [
        "a7dee0e323ac5eeff9dc798754e764b944f6dc2c"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Wed Mar 27 09:51:22 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Apr 15 14:50:21 2024 -0300"
      },
      "message": "core: Add unlocked cus__add() variant\n\nAs we\u0027ll use with the cus lock already held when getting the next CU\nfrom vmlinux to keep the order in the original DWARF file.\n\nReviewed-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nTested-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nCc: Kui-Feng Lee \u003ckuifeng@fb.com\u003e\nCc: Thomas Weißschuh \u003clinux@weissschuh.net\u003e\nLink: https://lore.kernel.org/lkml/20240412211604.789632-8-acme@kernel.org\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "a7dee0e323ac5eeff9dc798754e764b944f6dc2c",
      "tree": "8191f5421ae6aa752eb19197c39579ec60185633",
      "parents": [
        "620d419a430f8fd87f981e60215498a91411662b"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Apr 01 11:11:46 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Apr 15 14:50:19 2024 -0300"
      },
      "message": "dwarf_loader: Remove unused \u0027thr_data\u0027 arg from dwarf_cus__create_and_process_cu()\n\nThe only caller for dwarf_cus__create_and_process_cu() now is serial\nloading of DWARF, so no point in passing the perf thread data, that is\nalways NULL, so remove that parameter.\n\nReviewed-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nTested-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nCc: Kui-Feng Lee \u003ckuifeng@fb.com\u003e\nCc: Thomas Weißschuh \u003clinux@weissschuh.net\u003e\nLink: https://lore.kernel.org/lkml/20240412211604.789632-7-acme@kernel.org\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "620d419a430f8fd87f981e60215498a91411662b",
      "tree": "b984e33f06faf758064d9a096b01298c1c1d2141",
      "parents": [
        "941cd9a15d09dd3c15f6f47c7b02cc2740e8b014"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Mar 26 16:35:46 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Apr 15 14:50:18 2024 -0300"
      },
      "message": "dwarf_loader: Create the cu/dcu pair in dwarf_cus__nextcu()\n\ndwarf_cus__nextcu() is only used in parallel DWARF loading, and we want\nto make sure that we preserve the order of the CUs in the DWARF file\nbeing loaded, so move creating the cu/dcu to under that lock.\n\nReviewed-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nTested-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nCc: Kui-Feng Lee \u003ckuifeng@fb.com\u003e\nCc: Thomas Weißschuh \u003clinux@weissschuh.net\u003e\nLink: https://lore.kernel.org/lkml/20240412211604.789632-6-acme@kernel.org\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "941cd9a15d09dd3c15f6f47c7b02cc2740e8b014",
      "tree": "3dc543fa2675a15db22fadad8c5a2177b343c30a",
      "parents": [
        "7a2509e7ea639014d653fcbd1c32bcf7b71306f2"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Mar 26 15:28:05 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Apr 15 14:50:17 2024 -0300"
      },
      "message": "dwarf_loader: Introduce dwarf_cus__process_cu()\n\nFinishing the separation of creating a dcu/cu pair from processing it,\nas we\u0027ll need to add the new dcu/cu pair to the list under cus__lock(),\nso that we process it in order to keep a reproducible BTF encoding.\n\nReviewed-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nTested-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nCc: Kui-Feng Lee \u003ckuifeng@fb.com\u003e\nCc: Thomas Weißschuh \u003clinux@weissschuh.net\u003e\nLink: https://lore.kernel.org/lkml/20240412211604.789632-5-acme@kernel.org\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "7a2509e7ea639014d653fcbd1c32bcf7b71306f2",
      "tree": "776aedc551c51ea48c4f7cf4de9c41b7465419e4",
      "parents": [
        "2d633d93cd4faf19b49c60696f0faaa414b73abd"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Mar 26 15:20:40 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Apr 15 14:50:14 2024 -0300"
      },
      "message": "dwarf_loader: Separate creating the cu/dcu pair from processing it\n\nWe will need it so that we add the dcu to a list in the same order as\nthe CUs are in the DWARF file (vmlinux mostly).\n\nReviewed-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nTested-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nCc: Kui-Feng Lee \u003ckuifeng@fb.com\u003e\nCc: Thomas Weißschuh \u003clinux@weissschuh.net\u003e\nLink: https://lore.kernel.org/lkml/20240412211604.789632-4-acme@kernel.org\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "2d633d93cd4faf19b49c60696f0faaa414b73abd",
      "tree": "53aaa7b787216f8a3c5f5067e27ab105d99af750",
      "parents": [
        "d6e05fd33cb9dc5211289b1e826b8acae4d0dc1d"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Mar 26 11:40:35 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Apr 15 14:50:10 2024 -0300"
      },
      "message": "pahole: Disable BTF multithreaded encoded when doing reproducible builds\n\nReproducible builds need to produce BTF that have the same ids, which is\nnot possible at the moment to do in parallel with libbpf, so serialize\nthe encoding.\n\nThe next patches will also make sure that DWARF while being read in\nparallel into internal representation for later BTF encoding has its CU\n(Compile Units) fed to the BTF encoder in the same order as it is in the\nDWARF file, this way we\u0027ll produce the same BTF output no matter how\nmany threads are used to read BTF.\n\nThen we\u0027ll make sure we have tests in place that compare the output of\nparallel BTF encoding (well, just the DWARF loading part, maybe the BTF\nin the future), i.e. when using \u0027pahole -j\u0027 with the one obtained when\ndoing single threaded encoding.\n\nTesting it on a:\n\n  # grep -m1 \"model name\" /proc/cpuinfo\n  model name\t: 13th Gen Intel(R) Core(TM) i7-1365U\n  ~#\n\nI.e. 2 performance cores (4 threads) + 8 efficiency cores.\n\nFrom:\n\n  $ perf stat -r5 pahole -j --btf_encode_detached\u003dvmlinux.btf.parallel vmlinux\n\n   Performance counter stats for \u0027pahole -j --btf_encode_detached\u003dvmlinux.btf.parallel vmlinux\u0027 (5 runs):\n\n         17,187.27 msec task-clock:u       #    6.153 CPUs utilized   ( +-  0.34% )\n  \u003cSNIP\u003e\n            2.7931 +- 0.0336 seconds time elapsed  ( +-  1.20% )\n\n  $\n\nTo:\n\n  $ perf stat -r5 pahole -j --reproducible_build --btf_encode_detached\u003dvmlinux.btf.parallel.reproducible_build vmlinux\n\n   Performance counter stats for \u0027pahole -j --reproducible_build --btf_encode_detached\u003dvmlinux.btf.parallel.reproducible_build vmlinux\u0027 (5 runs):\n\n         14,654.06 msec task-clock:u       #    3.507 CPUs utilized   ( +-  0.45% )\n  \u003cSNIP\u003e\n            4.1787 +- 0.0344 seconds time elapsed  ( +-  0.82% )\n\n  $\n\nWhich is still a nice improvement over doing it completely serially:\n\n  $ perf stat -r5 pahole --btf_encode_detached\u003dvmlinux.btf.serial vmlinux\n\n   Performance counter stats for \u0027pahole --btf_encode_detached\u003dvmlinux.btf.serial vmlinux\u0027 (5 runs):\n\n          7,506.93 msec task-clock:u       #    1.000 CPUs utilized   ( +-  0.13% )\n  \u003cSNIP\u003e\n            7.5106 +- 0.0115 seconds time elapsed  ( +-  0.15% )\n\n  $\n\n  $ pahole vmlinux.btf.parallel \u003e /tmp/parallel\n  $ pahole vmlinux.btf.parallel.reproducible_build \u003e /tmp/parallel.reproducible_build\n  $ diff -u /tmp/parallel /tmp/parallel.reproducible_build | wc -l\n  269920\n  $ pahole --sort vmlinux.btf.parallel \u003e /tmp/parallel.sorted\n  $ pahole --sort vmlinux.btf.parallel.reproducible_build \u003e /tmp/parallel.reproducible_build.sorted\n  $ diff -u /tmp/parallel.sorted /tmp/parallel.reproducible_build.sorted | wc -l\n  0\n  $\n\nThe BTF ids continue to be undeterministic, as we need to process the\nCUs (compile unites) in the same order that they are on vmlinux:\n\n  $ bpftool btf dump file vmlinux.btf.serial \u003e btfdump.serial\n  $ bpftool btf dump file vmlinux.btf.parallel.reproducible_build \u003e btfdump.parallel.reproducible_build\n  $ bpftool btf dump file vmlinux.btf.parallel \u003e btfdump.parallel\n  $ diff -u btfdump.serial btfdump.parallel | wc -l\n  624144\n  $ diff -u btfdump.serial btfdump.parallel.reproducible_build | wc -l\n  594622\n  $ diff -u btfdump.parallel.reproducible_build btfdump.parallel | wc -l\n  623355\n  $\n\nThe BTF ids don\u0027t match, we\u0027ll get them to match at the end of this\npatch series:\n\n  $ tail -5 btfdump.serial\n  \ttype_id\u003d127124 offset\u003d219200 size\u003d40 (VAR \u0027rt6_uncached_list\u0027)\n  \ttype_id\u003d11760 offset\u003d221184 size\u003d64 (VAR \u0027vmw_steal_time\u0027)\n  \ttype_id\u003d13533 offset\u003d221248 size\u003d8 (VAR \u0027kvm_apic_eoi\u0027)\n  \ttype_id\u003d13532 offset\u003d221312 size\u003d64 (VAR \u0027steal_time\u0027)\n  \ttype_id\u003d13531 offset\u003d221376 size\u003d68 (VAR \u0027apf_reason\u0027)\n  $ tail -5 btfdump.parallel.reproducible_build\n  \ttype_id\u003d113812 offset\u003d219200 size\u003d40 (VAR \u0027rt6_uncached_list\u0027)\n  \ttype_id\u003d87979 offset\u003d221184 size\u003d64 (VAR \u0027vmw_steal_time\u0027)\n  \ttype_id\u003d127391 offset\u003d221248 size\u003d8 (VAR \u0027kvm_apic_eoi\u0027)\n  \ttype_id\u003d127390 offset\u003d221312 size\u003d64 (VAR \u0027steal_time\u0027)\n  \ttype_id\u003d127389 offset\u003d221376 size\u003d68 (VAR \u0027apf_reason\u0027)\n  $\n\nNow to make it process the CUs in order, that should get everything\nstraight without hopefully not degrading it further too much.\n\nReviewed-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nTested-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nCc: Kui-Feng Lee \u003ckuifeng@fb.com\u003e\nCc: Thomas Weißschuh \u003clinux@weissschuh.net\u003e\nLink: https://lore.kernel.org/lkml/20240412211604.789632-3-acme@kernel.org\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "d6e05fd33cb9dc5211289b1e826b8acae4d0dc1d",
      "tree": "012211e4d024acb7a87cb65c739633ccc4045a1e",
      "parents": [
        "4faf35b97c3427d1e2eebd6d7c6d900813d8c73c"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Mar 26 11:46:51 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Apr 15 14:50:06 2024 -0300"
      },
      "message": "core: Allow asking for a reproducible build\n\nThis is initially about BTF encoding, we want to load DWARF and encode\nBTF from it in a way that is reproducible, i.e. no matter how many\nthreads we use for the loading/encoding process, the output will be the\nsame, i.e. the BTF ids produced will be the same for all builds.\n\nThis first path just adds the conf_load field and allows it to be asked\nfor with the \u0027--reproducible_build\u0027 option in pahole.\n\nAt some point we\u0027ll use with --btf_features\u003d+reproducible_build or\n\u0027--btf_features\u003ddefault --btf_features\u003dreproducible_build\u0027 to keep the\ndefault set of BTF features and be able to use this in the Linux kernel\nbuild system without doing an extra pahole version check for the\navailability of --reproducible_build with pahole versions that already\nsupport --btf_features and thus would ignore \"reproducible_build\".\n\nReviewed-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nTested-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nCc: Kui-Feng Lee \u003ckuifeng@fb.com\u003e\nCc: Thomas Weißschuh \u003clinux@weissschuh.net\u003e\nLink: https://lore.kernel.org/lkml/20240412211604.789632-2-acme@kernel.org\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "4faf35b97c3427d1e2eebd6d7c6d900813d8c73c",
      "tree": "571ea8f4130125edaab68849251a66efd05f4fe6",
      "parents": [
        "47e83035c12c153b579db2e5fabd306a0d6f2d29"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Mar 11 12:09:53 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Mar 11 12:09:53 2024 -0300"
      },
      "message": "fprintf: Remove bogus deduction of negative hole from size of previous field\n\nIn the previous fix for the usage of padding from ancestor classes the\nnegative hole was being deducted from the calculation of the previous\nmember/ancestor that is done purely using the offsets of the current and\nprevious fields, where it makes no sense to consider the hole, so revert\nthat specific hunk, with it the \"Bitfield combined with next fields\"\ncomment, which is wrong, is removed.\n\nBefore:\n\n  $ pahole -C Spell_AdjustVital objects/spell_adjustvital.cpp.o\n  class Spell_AdjustVital : public SpellActionType {\n  public:\n\n          /* class SpellActionType     \u003cancestor\u003e; */      /*     0    16 */\n\n          /* XXX last struct has 4 bytes of padding */\n          void Spell_AdjustVital(class Spell_AdjustVital *);\n\n          virtual int Cast(class Spell_AdjustVital *, class CUnit \u0026, const class SpellType  \u0026, class CUnit * \u0026, const Vec2i  \u0026);\n\n          virtual void Parse(class Spell_AdjustVital *, lua_State *, int, int);\n\n          /* Bitfield combined with next fields */\n\n          int                        HP;                   /*    12     4 */\n          int                        Mana;                 /*    16     4 */\n          int                        Shield;               /*    20     4 */\n          int                        MaxMultiCast;         /*    24     4 */\n          virtual void ~Spell_AdjustVital(class Spell_AdjustVital *, int);\n\n          /* vtable has 2 entries: {\n             [2] \u003d Cast((null)),\n             [3] \u003d Parse((null)),\n          } */\n          /* size: 32, cachelines: 1, members: 5 */\n          /* padding: 4 */\n          /* paddings: 1, sum paddings: 4 */\n          /* last cacheline: 32 bytes */\n  };\n\nAfter:\n\n  $ pahole -C Spell_AdjustVital objects/spell_adjustvital.cpp.o\n  class Spell_AdjustVital : public SpellActionType {\n  public:\n\n          /* class SpellActionType     \u003cancestor\u003e; */      /*     0    16 */\n\n          /* XXX last struct has 4 bytes of padding */\n          void Spell_AdjustVital(class Spell_AdjustVital *);\n\n          virtual int Cast(class Spell_AdjustVital *, class CUnit \u0026, const class SpellType  \u0026, class CUnit * \u0026, const Vec2i  \u0026);\n\n          virtual void Parse(class Spell_AdjustVital *, lua_State *, int, int);\n\n          int                        HP;                   /*    12     4 */\n          int                        Mana;                 /*    16     4 */\n          int                        Shield;               /*    20     4 */\n          int                        MaxMultiCast;         /*    24     4 */\n          virtual void ~Spell_AdjustVital(class Spell_AdjustVital *, int);\n\n          /* vtable has 2 entries: {\n             [2] \u003d Cast((null)),\n             [3] \u003d Parse((null)),\n          } */\n          /* size: 32, cachelines: 1, members: 5 */\n          /* padding: 4 */\n          /* paddings: 1, sum paddings: 4 */\n          /* last cacheline: 32 bytes */\n  };\n\n  $\n\nReported-by: Matthias Schwarzott \u003czzam@gentoo.org\u003e\nFixes: 47e83035c12c153b (\"core: The padding in ancestor classes may be used in descendants\")\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "47e83035c12c153b579db2e5fabd306a0d6f2d29",
      "tree": "828ec2dda45fb29ee2359556793362fbe8dc8416",
      "parents": [
        "9442420a8c2044601b95f0f36447c79cf07bfacd"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Thu Mar 07 16:50:43 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Thu Mar 07 17:00:52 2024 -0300"
      },
      "message": "core: The padding in ancestor classes may be used in descendants\n\nThis appeared on the radar, in an expanded type:\n\nclass Spell_AdjustVital : public SpellActionType {\npublic:\n\n        /* class SpellActionType {\n        public:\n\n               \tvoid SpellActionType(class SpellActionType *, const class SpellActionType  \u0026);\n\n                int ()(void) * *   _vptr.SpellActionType;              /*   0  8 */\n          \tvoid SpellActionType(class SpellActionType *, int);\n\n                virtual void ~SpellActionType(class SpellActionType *, int);\n\n                virtual int Cast(class SpellActionType *, class CUnit \u0026, const class SpellType  \u0026, class CUnit * \u0026, const Vec2i  \u0026);\n\n                virtual void Parse(class SpellActionType *, struct lua_State *, int, int);\n\n             \tconst int          ModifyManaCaster;                   /*   8   4 */\n                /* vtable has 2 entries: {\n                   [2] \u003d Cast((null)),\n                   [3] \u003d Parse((null)),\n                } */    } \u003cancestor\u003e; */ /*     0    16 */\n\n        /* XXX last struct has 4 bytes of padding */\n        /* XXX 65532 bytes hole, try to pack */\n        void Spell_AdjustVital(class Spell_AdjustVital *);\n\n        virtual int Cast(class Spell_AdjustVital *, class CUnit \u0026, const class SpellType  \u0026, class CUnit * \u0026, const Vec2i  \u0026);\n\n        virtual void Parse(class Spell_AdjustVital *, lua_State *, int, int);\n\n        int                        HP;                  /*    12   4 */\n        int                        Mana;                /*    16   4 */\n        int                        Shield;              /*    20   4 */\n        int                        MaxMultiCast;        /*    24   4 */\n    \tvirtual void ~Spell_AdjustVital(class Spell_AdjustVital *, int);\n\n        /* vtable has 2 entries: {\n           [2] \u003d Cast((null)),\n           [3] \u003d Parse((null)),\n        } */\n\t/* size: 32, cachelines: 1, members: 5 */\n        /* sum members: 32, holes: 1, sum holes: 65532 */\n        /* padding: 4 */\n        /* paddings: 1, sum paddings: 4 */\n        /* last cacheline: 32 bytes */\n\n        /* BRAIN FART ALERT! 32 bytes !\u003d 32 (member bytes) + 0 (member bits) + 65532 (byte holes) + 0 (bit holes), diff \u003d -524288 bits */\n};\n\nSo the ancestor class (DW_TAG_inheritance) \u0027class SpellActionType\u0027 has 4\nbytes of padding (the sum of its members is 12 bytes but its sizeof is\n16) and then the first DW_TAG_member in the descendant, \u0027class Spell_AdjustVital\u0027\nis at offset 12, meaning it is using the padding from the ancestor.\n\nTake that into account, with it now we have, unexpanded:\n\n  $ pahole -C Spell_AdjustVital objects/spell_adjustvital.cpp.o\n  class Spell_AdjustVital : public SpellActionType {\n  public:\n\n          /* class SpellActionType     \u003cancestor\u003e; */      /*     0    16 */\n\n          /* XXX last struct has 4 bytes of padding */\n          void Spell_AdjustVital(class Spell_AdjustVital *);\n\n          virtual int Cast(class Spell_AdjustVital *, class CUnit \u0026, const class SpellType  \u0026, class CUnit * \u0026, const Vec2i  \u0026);\n\n          virtual void Parse(class Spell_AdjustVital *, lua_State *, int, int);\n\n          /* Bitfield combined with next fields */\n\n          int                        HP;                   /*    12     4 */\n          int                        Mana;                 /*    16     4 */\n          int                        Shield;               /*    20     4 */\n          int                        MaxMultiCast;         /*    24     4 */\n          virtual void ~Spell_AdjustVital(class Spell_AdjustVital *, int);\n\n          /* vtable has 2 entries: {\n             [2] \u003d Cast((null)),\n             [3] \u003d Parse((null)),\n          } */\n          /* size: 32, cachelines: 1, members: 5 */\n          /* padding: 4 */\n          /* paddings: 1, sum paddings: 4 */\n          /* last cacheline: 32 bytes */\n  };\n\n  $\n\nReported-by: Matthias Schwarzott \u003czzam@gentoo.org\u003e\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "9442420a8c2044601b95f0f36447c79cf07bfacd",
      "tree": "3dd46aea6f84381b2c6e8e358e7148472ce7d2d4",
      "parents": [
        "c52e4b7af88da5ab7c55f0fa643c31cb7a1c896f"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Mar 05 17:16:13 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Thu Mar 07 17:00:52 2024 -0300"
      },
      "message": "fprintf: Update \u0027last\u0027 variable for DW_TAG_inheritance as well\n\nSo that we can look when processing the first DW_TAG_member if the last\nentry was a DW_TAG_inheritance and if it has padding that is being used\nby the first member, which was observed and will be documented in the\nnext cset.\n\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "c52e4b7af88da5ab7c55f0fa643c31cb7a1c896f",
      "tree": "ad05f47917cca0c38ab7ea48dcfc05dd325226f1",
      "parents": [
        "1ecde473f9a07ac8c8d225119eac2192413f3271"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Mar 05 17:14:15 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Thu Mar 07 17:00:52 2024 -0300"
      },
      "message": "fprintf: Update the \u0027last\u0027 member when not finding the type for the current member\n\nThe logic expects that, even with this being an extreme case of broken\ntype info, as the types _should_ be resolved.\n\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "1ecde473f9a07ac8c8d225119eac2192413f3271",
      "tree": "2a76b28e54891b7545150b43c8dced5ca02d4f5e",
      "parents": [
        "f32ec0c79f3e8065e5b0e4aced65cba4cdf6675b"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Mon Mar 04 10:19:21 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Thu Mar 07 17:00:43 2024 -0300"
      },
      "message": "fprintf: Don\u0027t ignore DW_TAG_inheritance in the sum of members check\n\nOtherwise we end up with BFAs like this:\n\n  $ pahole -C StaticParticle objects/staticparticle.cpp.o\n  class StaticParticle : public CParticle {\n  public:\n\n  \t/* class CParticle           \u003cancestor\u003e; */      /*     0    24 */\n\n  \t/* XXX last struct has 1 hole */\n  \tvoid StaticParticle(class StaticParticle *, const class StaticParticle  \u0026);\n\n  \tvoid StaticParticle(class StaticParticle *, struct CPosition, class GraphicAnimation *, int);\n\n  \tvirtual void ~StaticParticle(class StaticParticle *, int);\n\n  \tvirtual class CParticle * clone(class StaticParticle *);\n\n  \tvirtual void draw(class StaticParticle *);\n\n  \tvirtual bool isVisible(const class StaticParticle  *, const class CViewport  \u0026);\n\n  \tvirtual void update(class StaticParticle *, int);\n\n  protected:\n\n  \tclass GraphicAnimation *   animation;            /*    24     8 */\n  \t/* vtable has 4 entries: {\n  \t   [2] \u003d clone((null)),\n  \t   [3] \u003d draw((null)),\n  \t   [4] \u003d isVisible((null)),\n  \t   [5] \u003d update((null)),\n  \t} */\n  \t/* size: 32, cachelines: 1, members: 2 */\n  \t/* member types with holes: 1, total: 1 */\n  \t/* last cacheline: 32 bytes */\n\n  \t/* BRAIN FART ALERT! 32 bytes !\u003d 8 (member bytes) + 0 (member bits) + 0 (byte holes) + 0 (bit holes), diff \u003d 192 bits */\n  };\n\nNow we end up with:\n\n  $ pahole -C StaticParticle objects/staticparticle.cpp.o  | tail -5\n  \t/* size: 32, cachelines: 1, members: 2 */\n  \t/* member types with holes: 1, total: 1 */\n  \t/* last cacheline: 32 bytes */\n  };\n\n  $\n\nReported-by: Matthias Schwarzott \u003czzam@gentoo.org\u003e\nTested-by: Matthias Schwarzott \u003czzam@gentoo.org\u003e\nCloses: https://github.com/acmel/dwarves/issues/47\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "f32ec0c79f3e8065e5b0e4aced65cba4cdf6675b",
      "tree": "f2b1c15c7efeb99aff108d7b102cb19d0632abda",
      "parents": [
        "554c5e6a2736e0b6108077c7697637f6542dd2ed"
      ],
      "author": {
        "name": "Alan Maguire",
        "email": "alan.maguire@oracle.com",
        "time": "Fri Mar 01 12:41:06 2024 +0000"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Fri Mar 01 15:04:08 2024 -0300"
      },
      "message": "btf_encoder: Dynamically allocate the vars array for percpu variables\n\nUse consistent method across allocating function and per-cpu variable\nrepresentations, based around (re)allocating the arrays based on demand.\n\nThis avoids issues where the number of per-CPU variables exceeds the\nhardcoded limit.\n\nReported-by: John Hubbard \u003cjhubbard@nvidia.com\u003e\nSuggested-by: Jiri Olsa \u003cjolsa@kernel.org\u003e\nSigned-off-by: Alan Maguire \u003calan.maguire@oracle.com\u003e\nTested-by: Jiri Olsa \u003cjolsa@kernel.org\u003e\nTested-by: John Hubbard \u003cjhubbard@nvidia.com\u003e\nAcked-by: Jiri Olsa \u003cjolsa@kernel.org\u003e\nLink: https://lore.kernel.org/r/20240301124106.735693-1-alan.maguire@oracle.com\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "554c5e6a2736e0b6108077c7697637f6542dd2ed",
      "tree": "c55ec2197352e6a870be6d43b37603c52670eb95",
      "parents": [
        "922085e3cff7e976cbb97b2e15c7f866956728ae"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Thu Feb 29 15:58:04 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Thu Feb 29 15:58:04 2024 -0300"
      },
      "message": "PKG-MAINTAINERS: Add file with known pahole distro package maintainers\n\nPlease let me know about changes I need to do on this file.\n\nAnd please consider renaming the name of the package to \u0027pahole\u0027, that,\nin the end, is the most well known of the 7 dwarves, and DWARF was just\nthe beginning, now it is bigger, supporting more formats ;-)\n\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "922085e3cff7e976cbb97b2e15c7f866956728ae",
      "tree": "14d02fe0560fe01ded4b7f98c22633a74d49b05d",
      "parents": [
        "ba8f6eb0b6b67c6e387f2cfbdeebe84466d11ed5"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Feb 27 13:40:10 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Feb 27 15:57:09 2024 -0300"
      },
      "message": "pahole: Prep 1.26\n\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "ba8f6eb0b6b67c6e387f2cfbdeebe84466d11ed5",
      "tree": "19c0aff30416b8147d0d88971829d25efd17927a",
      "parents": [
        "90201c2bde4b0ca83cb07b7cc500885444ecef05"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Feb 27 10:33:50 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Feb 27 10:33:50 2024 -0300"
      },
      "message": "NEWS: Add missing list of changes for v1.25\n\nNoticed while preparing the 1.26 release.\n\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    },
    {
      "commit": "90201c2bde4b0ca83cb07b7cc500885444ecef05",
      "tree": "d308e17876406fe1668e423fb3dd48f4c13e7f60",
      "parents": [
        "f86ed770b5396cd510660fb455415ac92083c7f6"
      ],
      "author": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Feb 27 10:19:45 2024 -0300"
      },
      "committer": {
        "name": "Arnaldo Carvalho de Melo",
        "email": "acme@redhat.com",
        "time": "Tue Feb 27 10:31:07 2024 -0300"
      },
      "message": "prefcnt: cus__load_files() requires a non NULL conf_load\n\nSince ff7bd7083f36db80 (\"core: Allow sizing the loader hash table\")\ndwarf__load_files(), called by cus__load_files() needs a non-NULL\nconf_load argument, add one to avoid a core dump.\n\nJ B reported this for syscse, which led me to do a quick audit to find\nthis other case.\n\nReported-by: J B \u003cjb.1234abcd@gmail.com\u003e\nLink: https://lore.kernel.org/dwarves/CAJXMFhFbv5MccigKvmQt9MhYwKv2iyigEG3Bhs64BZ\u003dPMWc0WQ@mail.gmail.com\nSigned-off-by: Arnaldo Carvalho de Melo \u003cacme@redhat.com\u003e\n"
    }
  ],
  "next": "f86ed770b5396cd510660fb455415ac92083c7f6"
}
