All of lore.kernel.org
 help / color / mirror / Atom feed
diff for duplicates of <YbC5MC+h+PkDZten@kernel.org>

diff --git a/a/1.txt b/N1/1.txt
index e890a37..b08ec4d 100644
--- a/a/1.txt
+++ b/N1/1.txt
@@ -1,11 +1,10 @@
 Hi,
  
-	The v1.23 release of pahole and its friends is out, this time
-the main new features are the ability to encode BTF tags, to carry
-attributes to the kernel BPF verifier for further checks and the
-inference of struct member unnatural alignment (__attribute__(__aligned__(N)))
-to help in generating compileable headers matching the original type
-layout from BTF data.
+	The v1.26 release of pahole and its friends is out, showing more
+holes (the ones in contained types) the ability to express the BTF
+features to encode, to simplify the addition of new BTF features in the
+Linux kernel build infrastructure, a way to find the enumeration with
+some enumerator and various fixes.
 
 Main git repo:
 
@@ -17,9 +16,9 @@ Mirror git repo:
 
 tarball + gpg signature:
 
-   https://fedorapeople.org/~acme/dwarves/dwarves-1.23.tar.xz
-   https://fedorapeople.org/~acme/dwarves/dwarves-1.23.tar.bz2
-   https://fedorapeople.org/~acme/dwarves/dwarves-1.23.tar.sign
+   https://fedorapeople.org/~acme/dwarves/dwarves-1.26.tar.xz
+   https://fedorapeople.org/~acme/dwarves/dwarves-1.26.tar.bz2
+   https://fedorapeople.org/~acme/dwarves/dwarves-1.26.tar.sign
 
 	Thanks a lot to all the contributors and distro packagers, you're on the
 CC list, I appreciate a lot the work you put into these tools,
@@ -28,57 +27,229 @@ Best Regards,
 
 - Arnaldo
 
+pahole:
+
+- When expanding types using 'pahole -E' do it for union and struct typedefs and for enums too.
+
+  E.g: that 'state' field in 'struct module':
+
+    $ pahole module | head
+    struct module {
+            enum module_state          state;                /*     0     4 */
+
+            /* XXX 4 bytes hole, try to pack */
+
+            struct list_head           list;                 /*     8    16 */
+            char                       name[56];             /*    24    56 */
+            /* --- cacheline 1 boundary (64 bytes) was 16 bytes ago --- */
+            struct module_kobject      mkobj;                /*    80    96 */
+            /* --- cacheline 2 boundary (128 bytes) was 48 bytes ago --- */
+    $
+
+  now gets expanded:
+
+    $ pahole -E module | head
+    struct module {
+            enum module_state {
+                    MODULE_STATE_LIVE     = 0,
+                    MODULE_STATE_COMING   = 1,
+                    MODULE_STATE_GOING    = 2,
+                    MODULE_STATE_UNFORMED = 3,
+            } state; /*     0     4 */
+
+            /* XXX 4 bytes hole, try to pack */
+
+    $
+
+- Print number of holes, bit holes and bit paddings in class member types.
+
+  Doing this recursively to show how much waste a complex data structure has
+  is something that still needs to be done, there were the low hanging fruits
+  on the path to having that feature.
+
+  For instance, for 'struct task_struct' in the Linux kernel we get this
+  extra info:
+
+    --- task_struct.before.c      2024-02-09 11:38:39.249638750 -0300
+    +++ task_struct.after.c       2024-02-09 16:19:34.221134835 -0300
+    @@ -29,6 +29,12 @@
+
+          /* --- cacheline 2 boundary (128 bytes) --- */
+          struct sched_entity        se;                   /*   128   256 */
+    +
+    +     /* XXX last struct has 3 holes */
+    +
+          /* --- cacheline 6 boundary (384 bytes) --- */
+          struct sched_rt_entity     rt;                   /*   384    48 */
+          struct sched_dl_entity     dl;                   /*   432   224 */
+    +
+    +       /* XXX last struct has 1 bit hole */
+    +
+          /* --- cacheline 10 boundary (640 bytes) was 16 bytes ago --- */
+          const struct sched_class  * sched_class;         /*   656     8 */
+          struct rb_node             core_node;            /*   664    24 */
+    @@ -100,6 +103,9 @@
+          /* --- cacheline 35 boundary (2240 bytes) was 16 bytes ago --- */
+          struct list_head           tasks;                /*  2256    16 */
+          struct plist_node          pushable_tasks;       /*  2272    40 */
+    +
+    +     /* XXX last struct has 1 hole */
+    +
+          /* --- cacheline 36 boundary (2304 bytes) was 8 bytes ago --- */
+          struct rb_node             pushable_dl_tasks;    /*  2312    24 */
+          struct mm_struct *         mm;                   /*  2336     8 */
+    @@ -172,6 +178,9 @@
+          /* XXX last struct has 4 bytes of padding */
+
+          struct vtime               vtime;                /*  2744    48 */
+    +
+    +     /* XXX last struct has 1 hole */
+    +
+          /* --- cacheline 43 boundary (2752 bytes) was 40 bytes ago --- */
+          atomic_t                   tick_dep_mask;        /*  2792     4 */
+
+    @@ -396,9 +405,12 @@
+          /* --- cacheline 145 boundary (9280 bytes) --- */
+          struct thread_struct       thread __attribute__((__aligned__(64))); /*  9280  4416 */
+
+    +       /* XXX last struct has 1 hole, 1 bit hole */
+    +
+          /* size: 13696, cachelines: 214, members: 262 */
+          /* sum members: 13518, holes: 21, sum holes: 162 */
+          /* sum bitfield members: 82 bits, bit holes: 2, sum bit holes: 46 bits */
+          /* member types with holes: 4, total: 6, bit holes: 2, total: 2 */
+          /* paddings: 6, sum paddings: 49 */
+          /* forced alignments: 2, forced holes: 2, sum forced holes: 88 */
+     };
+
+- Introduce --contains_enumerator=ENUMERATOR_NAME:
+
+  E.g.:
+
+      $ pahole --contains_enumerator S_VERSION
+      enum file_time_flags {
+             S_ATIME   = 1,
+             S_MTIME   = 2,
+             S_CTIME   = 4,
+             S_VERSION = 8,
+      }
+      $
+
+  The shorter form --contains_enum is also accepted.
+
+- Fix pretty printing when using DWARF, where sometimes the class (-C) and a specified "type_enum",
+  may not be present on the same CU, so wait till both are found.
+
+  Now this example that reads the 'struct perf_event_header' and 'enum perf_event_type'
+  from the DWARF info in ~/bin/perf to pretty print records in the perf.data file works
+  just like when using type info from BTF in ~/bin/perf:
+
+      $ pahole -F dwarf -V ~/bin/perf \
+                --header=perf_file_header \
+                --seek_bytes '$header.data.offset' \
+                --size_bytes='$header.data.size' \
+                -C 'perf_event_header(sizeof,type,type_enum=perf_event_type,filter=type==PERF_RECORD_MMAP2)' \
+                --prettify perf.data --count 1
+      pahole: sizeof_operator for 'perf_event_header' is 'size'
+      pahole: type member for 'perf_event_header' is 'type'
+      pahole: type enum for 'perf_event_header' is 'perf_event_type'
+      pahole: filter for 'perf_event_header' is 'type==PERF_RECORD_MMAP2'
+      pahole: seek bytes evaluated from --seek_bytes=$header.data.offset is 0x3f0
+      pahole: size bytes evaluated from --size_bytes=$header.data.size is 0xd10
+      // type=perf_event_header, offset=0xc20, sizeof=8, real_sizeof=112
+      {
+            .header = {
+                    .type = PERF_RECORD_MMAP2,
+                    .misc = 2,
+                    .size = 112,
+            },
+            .pid = 1533617,
+            .tid = 1533617,
+            .start = 94667542700032,
+            .len = 90112,
+            .pgoff = 16384,{
+                    .maj = 0,
+                    .min = 33,
+                    .ino = 35914923,
+                    .ino_generation = 26870,
+            },{
+                    .build_id_size = 0,
+                    .__reserved_1 = 0,
+                    .__reserved_2 = 0,
+                    .build_id = { 33, 0, 0, 0, -85, 4, 36, 2, 0, 0, 0, 0, -10, 104, 0, 0, 0, 0, 0, 0 },
+            },
+            .prot = 5,
+            .flags = 2,
+            .filename = "/usr/bin/ls",
+      },
+      $
+
 DWARF loader:
 
-- Read DW_TAG_LLVM_annotation tags, associating it with variables, functions,
-  types. So far this is only being used by the BTF encoder, but the pretty
-  printer should use this as well in a future release, printing these
-  attributes when available.
+- Add support for DW_TAG_constant, first seen in Go DWARF.
 
-- Initial support for DW_TAG_skeleton_unit, so far just suggest looking up a
-  matching .dwo file to be used instead. Automagically doing this is in the
-  plans for a future release.
+- Fix loading DW_TAG_subroutine_type generated by the Go compiler, where it may
+  have a DW_AT_byte_size. Go DWARF. And pretty print it as if
+  it was from C, this helped in writing BPF programs to attach to Go binaries, using
+  uprobes.
 
-- Fix heap overflow when accessing variable specification.
+BTF loader:
 
-BTF encoder:
+- Fix loading of 32-bit signed enums.
 
-- Support the new BTF type tag attribute, encoding DW_TAG_LLVM_annotation DWARF
-  tags as BTF_KIND_TYPE_TAG and BTF_KIND_DECL_TAG.
+BTF encoder:
 
-  This allows __attribute__((btf_type_tag("tag1"))) to be used for variables,
-  functions, typedefs, so that contextual information can be stored in BTF and
-  used by the kernel BPF verifier for more checks.
+- Add 'pahole --btf_features' to allow consumers to specify an opt-in set of
+  features they want to use in BTF encoding.
 
-  The --skip_encoding_btf_type_tag option can be used to suppress this.
+  Supported features are a comma-separated combination of
 
-- Fix handling of percpu symbols on s390.
+          encode_force    Ignore invalid symbols when encoding BTF.
+          var             Encode variables using BTF_KIND_VAR in BTF.
+          float           Encode floating-point types in BTF.
+          decl_tag        Encode declaration tags using BTF_KIND_DECL_TAG.
+          type_tag        Encode type tags using BTF_KIND_TYPE_TAG.
+          enum64          Encode enum64 values with BTF_KIND_ENUM64.
+          optimized_func  Encode representations of optimized functions
+                          with suffixes like ".isra.0" etc
+          consistent_func Avoid encoding inconsistent static functions.
+                          These occur when a parameter is optimized out
+                          in some CUs and not others, or when the same
+                          function name has inconsistent BTF descriptions
+                          in different CUs.
 
-BTF loader:
+  Specifying "--btf_features=all" is the equivalent to setting all of the
+  above.  If pahole does not know about a feature specified in
+  --btf_features it silently ignores it.
 
-- Use cacheline size to infer alignment.
+  The --btf_features can either be specified via a single comma-separated
+  list
+          --btf_features=enum64,float
 
-btfdiff:
+  ...or via multiple --btf_features values
 
-- Now that the BTF loader infers struct member alingment, and as that is just
-  an heuristic, suppress printing the alignment when pretty printing from BTF
-  info like is done when printing from DWARF.
+          --btf_features=enum64 --btf_features=float
 
-pahole:
+  These properties allow us to use the --btf_features option in the kernel
+  scripts/pahole_flags.sh script to specify the desired set of BTF
+  features.
 
-- Add --skip_missing so that we don't stop when not finding one of the types passed
-  to -C.
+  If a feature named in --btf_features is not present in the version of
+  pahole used, BTF encoding will not complain.  This is desired because it
+  means we no longer have to tie new features to a specific pahole
+  version.
 
-Pretty printer:
+  Use --btf_features_strict to change that behaviour and bail out if one of
+  the requested features isn't present.
 
-- Fix __attribute__((__aligned__(N)) printing alignment for struct members.
+  To see the supported features, use:
 
-- Fix nested __attribute__(__aligned__(N)) struct printing order, so that
-  rebuilding from the printed source circles back to the original source code
-  alignment semantics.
+    $ pahole --supported_btf_features
+    encode_force,var,float,decl_tag,type_tag,enum64,optimized_func,consistent_func
+    $
 
-Build:
+btfdiff:
 
-- No need to download libbpf source when using the system library (libbpf-devel).
+- Parallelize loading BTF and DWARF, speeding up a bit.
 
-- Make python optional
+- Do type expansion to cover "private" types and enumerations.
diff --git a/a/content_digest b/N1/content_digest
index 43a6ac4..1a9cadd 100644
--- a/a/content_digest
+++ b/N1/content_digest
@@ -1,28 +1,27 @@
- "ref\0YSQSZQnnlIWAQ06v@kernel.org\0"
  "From\0Arnaldo Carvalho de Melo <acme@kernel.org>\0"
- "Subject\0ANNOUNCE: pahole v1.23 (BTF tags and alignment inference)\0"
- "Date\0Wed, 8 Dec 2021 10:54:56 -0300\0"
+ "Subject\0ANNOUNCE: pahole v1.26 (more holes, --bpf_features, --contains_enum)\0"
+ "Date\0Wed, 28 Feb 2024 16:39:21 -0300\0"
  "To\0dwarves@vger.kernel.org\0"
  "Cc\0Linux Kernel Mailing List <linux-kernel@vger.kernel.org>"
   bpf@vger.kernel.org
+  Alan Maguire <alan.maguire@oracle.com>
+  Andrii Nakryiko <andrii@kernel.org>
   Jiri Olsa <jolsa@kernel.org>
   Jan Engelhardt <jengelh@inai.de>
   Domenico Andreoli <domenico.andreoli@linux.com>
   Matthias Schwarzott <zzam@gentoo.org>
-  Yonghong Song <yhs@fb.com>
-  Douglas RAILLARD <douglas.raillard@arm.com>
-  Ilya Leoshkevich <iii@linux.ibm.com>
- " Matteo Croce <mcroce@microsoft.com>\0"
+  Viktor Malik <vmalik@redhat.com>
+  Eduard Zingerman <eddyz87@gmail.com>
+ " J B <jb.1234abcd@gmail.com>\0"
  "\00:1\0"
  "b\0"
  "Hi,\n"
  " \n"
- "\tThe v1.23 release of pahole and its friends is out, this time\n"
- "the main new features are the ability to encode BTF tags, to carry\n"
- "attributes to the kernel BPF verifier for further checks and the\n"
- "inference of struct member unnatural alignment (__attribute__(__aligned__(N)))\n"
- "to help in generating compileable headers matching the original type\n"
- "layout from BTF data.\n"
+ "\tThe v1.26 release of pahole and its friends is out, showing more\n"
+ "holes (the ones in contained types) the ability to express the BTF\n"
+ "features to encode, to simplify the addition of new BTF features in the\n"
+ "Linux kernel build infrastructure, a way to find the enumeration with\n"
+ "some enumerator and various fixes.\n"
  "\n"
  "Main git repo:\n"
  "\n"
@@ -34,9 +33,9 @@
  "\n"
  "tarball + gpg signature:\n"
  "\n"
- "   https://fedorapeople.org/~acme/dwarves/dwarves-1.23.tar.xz\n"
- "   https://fedorapeople.org/~acme/dwarves/dwarves-1.23.tar.bz2\n"
- "   https://fedorapeople.org/~acme/dwarves/dwarves-1.23.tar.sign\n"
+ "   https://fedorapeople.org/~acme/dwarves/dwarves-1.26.tar.xz\n"
+ "   https://fedorapeople.org/~acme/dwarves/dwarves-1.26.tar.bz2\n"
+ "   https://fedorapeople.org/~acme/dwarves/dwarves-1.26.tar.sign\n"
  "\n"
  "\tThanks a lot to all the contributors and distro packagers, you're on the\n"
  "CC list, I appreciate a lot the work you put into these tools,\n"
@@ -45,59 +44,231 @@
  "\n"
  "- Arnaldo\n"
  "\n"
- "DWARF loader:\n"
+ "pahole:\n"
  "\n"
- "- Read DW_TAG_LLVM_annotation tags, associating it with variables, functions,\n"
- "  types. So far this is only being used by the BTF encoder, but the pretty\n"
- "  printer should use this as well in a future release, printing these\n"
- "  attributes when available.\n"
+ "- When expanding types using 'pahole -E' do it for union and struct typedefs and for enums too.\n"
  "\n"
- "- Initial support for DW_TAG_skeleton_unit, so far just suggest looking up a\n"
- "  matching .dwo file to be used instead. Automagically doing this is in the\n"
- "  plans for a future release.\n"
+ "  E.g: that 'state' field in 'struct module':\n"
  "\n"
- "- Fix heap overflow when accessing variable specification.\n"
+ "    $ pahole module | head\n"
+ "    struct module {\n"
+ "            enum module_state          state;                /*     0     4 */\n"
  "\n"
- "BTF encoder:\n"
+ "            /* XXX 4 bytes hole, try to pack */\n"
+ "\n"
+ "            struct list_head           list;                 /*     8    16 */\n"
+ "            char                       name[56];             /*    24    56 */\n"
+ "            /* --- cacheline 1 boundary (64 bytes) was 16 bytes ago --- */\n"
+ "            struct module_kobject      mkobj;                /*    80    96 */\n"
+ "            /* --- cacheline 2 boundary (128 bytes) was 48 bytes ago --- */\n"
+ "    $\n"
+ "\n"
+ "  now gets expanded:\n"
+ "\n"
+ "    $ pahole -E module | head\n"
+ "    struct module {\n"
+ "            enum module_state {\n"
+ "                    MODULE_STATE_LIVE     = 0,\n"
+ "                    MODULE_STATE_COMING   = 1,\n"
+ "                    MODULE_STATE_GOING    = 2,\n"
+ "                    MODULE_STATE_UNFORMED = 3,\n"
+ "            } state; /*     0     4 */\n"
+ "\n"
+ "            /* XXX 4 bytes hole, try to pack */\n"
+ "\n"
+ "    $\n"
+ "\n"
+ "- Print number of holes, bit holes and bit paddings in class member types.\n"
+ "\n"
+ "  Doing this recursively to show how much waste a complex data structure has\n"
+ "  is something that still needs to be done, there were the low hanging fruits\n"
+ "  on the path to having that feature.\n"
+ "\n"
+ "  For instance, for 'struct task_struct' in the Linux kernel we get this\n"
+ "  extra info:\n"
+ "\n"
+ "    --- task_struct.before.c      2024-02-09 11:38:39.249638750 -0300\n"
+ "    +++ task_struct.after.c       2024-02-09 16:19:34.221134835 -0300\n"
+ "    @@ -29,6 +29,12 @@\n"
+ "\n"
+ "          /* --- cacheline 2 boundary (128 bytes) --- */\n"
+ "          struct sched_entity        se;                   /*   128   256 */\n"
+ "    +\n"
+ "    +     /* XXX last struct has 3 holes */\n"
+ "    +\n"
+ "          /* --- cacheline 6 boundary (384 bytes) --- */\n"
+ "          struct sched_rt_entity     rt;                   /*   384    48 */\n"
+ "          struct sched_dl_entity     dl;                   /*   432   224 */\n"
+ "    +\n"
+ "    +       /* XXX last struct has 1 bit hole */\n"
+ "    +\n"
+ "          /* --- cacheline 10 boundary (640 bytes) was 16 bytes ago --- */\n"
+ "          const struct sched_class  * sched_class;         /*   656     8 */\n"
+ "          struct rb_node             core_node;            /*   664    24 */\n"
+ "    @@ -100,6 +103,9 @@\n"
+ "          /* --- cacheline 35 boundary (2240 bytes) was 16 bytes ago --- */\n"
+ "          struct list_head           tasks;                /*  2256    16 */\n"
+ "          struct plist_node          pushable_tasks;       /*  2272    40 */\n"
+ "    +\n"
+ "    +     /* XXX last struct has 1 hole */\n"
+ "    +\n"
+ "          /* --- cacheline 36 boundary (2304 bytes) was 8 bytes ago --- */\n"
+ "          struct rb_node             pushable_dl_tasks;    /*  2312    24 */\n"
+ "          struct mm_struct *         mm;                   /*  2336     8 */\n"
+ "    @@ -172,6 +178,9 @@\n"
+ "          /* XXX last struct has 4 bytes of padding */\n"
+ "\n"
+ "          struct vtime               vtime;                /*  2744    48 */\n"
+ "    +\n"
+ "    +     /* XXX last struct has 1 hole */\n"
+ "    +\n"
+ "          /* --- cacheline 43 boundary (2752 bytes) was 40 bytes ago --- */\n"
+ "          atomic_t                   tick_dep_mask;        /*  2792     4 */\n"
+ "\n"
+ "    @@ -396,9 +405,12 @@\n"
+ "          /* --- cacheline 145 boundary (9280 bytes) --- */\n"
+ "          struct thread_struct       thread __attribute__((__aligned__(64))); /*  9280  4416 */\n"
+ "\n"
+ "    +       /* XXX last struct has 1 hole, 1 bit hole */\n"
+ "    +\n"
+ "          /* size: 13696, cachelines: 214, members: 262 */\n"
+ "          /* sum members: 13518, holes: 21, sum holes: 162 */\n"
+ "          /* sum bitfield members: 82 bits, bit holes: 2, sum bit holes: 46 bits */\n"
+ "          /* member types with holes: 4, total: 6, bit holes: 2, total: 2 */\n"
+ "          /* paddings: 6, sum paddings: 49 */\n"
+ "          /* forced alignments: 2, forced holes: 2, sum forced holes: 88 */\n"
+ "     };\n"
+ "\n"
+ "- Introduce --contains_enumerator=ENUMERATOR_NAME:\n"
  "\n"
- "- Support the new BTF type tag attribute, encoding DW_TAG_LLVM_annotation DWARF\n"
- "  tags as BTF_KIND_TYPE_TAG and BTF_KIND_DECL_TAG.\n"
+ "  E.g.:\n"
  "\n"
- "  This allows __attribute__((btf_type_tag(\"tag1\"))) to be used for variables,\n"
- "  functions, typedefs, so that contextual information can be stored in BTF and\n"
- "  used by the kernel BPF verifier for more checks.\n"
+ "      $ pahole --contains_enumerator S_VERSION\n"
+ "      enum file_time_flags {\n"
+ "             S_ATIME   = 1,\n"
+ "             S_MTIME   = 2,\n"
+ "             S_CTIME   = 4,\n"
+ "             S_VERSION = 8,\n"
+ "      }\n"
+ "      $\n"
  "\n"
- "  The --skip_encoding_btf_type_tag option can be used to suppress this.\n"
+ "  The shorter form --contains_enum is also accepted.\n"
  "\n"
- "- Fix handling of percpu symbols on s390.\n"
+ "- Fix pretty printing when using DWARF, where sometimes the class (-C) and a specified \"type_enum\",\n"
+ "  may not be present on the same CU, so wait till both are found.\n"
+ "\n"
+ "  Now this example that reads the 'struct perf_event_header' and 'enum perf_event_type'\n"
+ "  from the DWARF info in ~/bin/perf to pretty print records in the perf.data file works\n"
+ "  just like when using type info from BTF in ~/bin/perf:\n"
+ "\n"
+ "      $ pahole -F dwarf -V ~/bin/perf \\\n"
+ "                --header=perf_file_header \\\n"
+ "                --seek_bytes '$header.data.offset' \\\n"
+ "                --size_bytes='$header.data.size' \\\n"
+ "                -C 'perf_event_header(sizeof,type,type_enum=perf_event_type,filter=type==PERF_RECORD_MMAP2)' \\\n"
+ "                --prettify perf.data --count 1\n"
+ "      pahole: sizeof_operator for 'perf_event_header' is 'size'\n"
+ "      pahole: type member for 'perf_event_header' is 'type'\n"
+ "      pahole: type enum for 'perf_event_header' is 'perf_event_type'\n"
+ "      pahole: filter for 'perf_event_header' is 'type==PERF_RECORD_MMAP2'\n"
+ "      pahole: seek bytes evaluated from --seek_bytes=$header.data.offset is 0x3f0\n"
+ "      pahole: size bytes evaluated from --size_bytes=$header.data.size is 0xd10\n"
+ "      // type=perf_event_header, offset=0xc20, sizeof=8, real_sizeof=112\n"
+ "      {\n"
+ "            .header = {\n"
+ "                    .type = PERF_RECORD_MMAP2,\n"
+ "                    .misc = 2,\n"
+ "                    .size = 112,\n"
+ "            },\n"
+ "            .pid = 1533617,\n"
+ "            .tid = 1533617,\n"
+ "            .start = 94667542700032,\n"
+ "            .len = 90112,\n"
+ "            .pgoff = 16384,{\n"
+ "                    .maj = 0,\n"
+ "                    .min = 33,\n"
+ "                    .ino = 35914923,\n"
+ "                    .ino_generation = 26870,\n"
+ "            },{\n"
+ "                    .build_id_size = 0,\n"
+ "                    .__reserved_1 = 0,\n"
+ "                    .__reserved_2 = 0,\n"
+ "                    .build_id = { 33, 0, 0, 0, -85, 4, 36, 2, 0, 0, 0, 0, -10, 104, 0, 0, 0, 0, 0, 0 },\n"
+ "            },\n"
+ "            .prot = 5,\n"
+ "            .flags = 2,\n"
+ "            .filename = \"/usr/bin/ls\",\n"
+ "      },\n"
+ "      $\n"
+ "\n"
+ "DWARF loader:\n"
+ "\n"
+ "- Add support for DW_TAG_constant, first seen in Go DWARF.\n"
+ "\n"
+ "- Fix loading DW_TAG_subroutine_type generated by the Go compiler, where it may\n"
+ "  have a DW_AT_byte_size. Go DWARF. And pretty print it as if\n"
+ "  it was from C, this helped in writing BPF programs to attach to Go binaries, using\n"
+ "  uprobes.\n"
  "\n"
  "BTF loader:\n"
  "\n"
- "- Use cacheline size to infer alignment.\n"
+ "- Fix loading of 32-bit signed enums.\n"
  "\n"
- "btfdiff:\n"
+ "BTF encoder:\n"
  "\n"
- "- Now that the BTF loader infers struct member alingment, and as that is just\n"
- "  an heuristic, suppress printing the alignment when pretty printing from BTF\n"
- "  info like is done when printing from DWARF.\n"
+ "- Add 'pahole --btf_features' to allow consumers to specify an opt-in set of\n"
+ "  features they want to use in BTF encoding.\n"
  "\n"
- "pahole:\n"
+ "  Supported features are a comma-separated combination of\n"
+ "\n"
+ "          encode_force    Ignore invalid symbols when encoding BTF.\n"
+ "          var             Encode variables using BTF_KIND_VAR in BTF.\n"
+ "          float           Encode floating-point types in BTF.\n"
+ "          decl_tag        Encode declaration tags using BTF_KIND_DECL_TAG.\n"
+ "          type_tag        Encode type tags using BTF_KIND_TYPE_TAG.\n"
+ "          enum64          Encode enum64 values with BTF_KIND_ENUM64.\n"
+ "          optimized_func  Encode representations of optimized functions\n"
+ "                          with suffixes like \".isra.0\" etc\n"
+ "          consistent_func Avoid encoding inconsistent static functions.\n"
+ "                          These occur when a parameter is optimized out\n"
+ "                          in some CUs and not others, or when the same\n"
+ "                          function name has inconsistent BTF descriptions\n"
+ "                          in different CUs.\n"
+ "\n"
+ "  Specifying \"--btf_features=all\" is the equivalent to setting all of the\n"
+ "  above.  If pahole does not know about a feature specified in\n"
+ "  --btf_features it silently ignores it.\n"
+ "\n"
+ "  The --btf_features can either be specified via a single comma-separated\n"
+ "  list\n"
+ "          --btf_features=enum64,float\n"
  "\n"
- "- Add --skip_missing so that we don't stop when not finding one of the types passed\n"
- "  to -C.\n"
+ "  ...or via multiple --btf_features values\n"
  "\n"
- "Pretty printer:\n"
+ "          --btf_features=enum64 --btf_features=float\n"
  "\n"
- "- Fix __attribute__((__aligned__(N)) printing alignment for struct members.\n"
+ "  These properties allow us to use the --btf_features option in the kernel\n"
+ "  scripts/pahole_flags.sh script to specify the desired set of BTF\n"
+ "  features.\n"
  "\n"
- "- Fix nested __attribute__(__aligned__(N)) struct printing order, so that\n"
- "  rebuilding from the printed source circles back to the original source code\n"
- "  alignment semantics.\n"
+ "  If a feature named in --btf_features is not present in the version of\n"
+ "  pahole used, BTF encoding will not complain.  This is desired because it\n"
+ "  means we no longer have to tie new features to a specific pahole\n"
+ "  version.\n"
  "\n"
- "Build:\n"
+ "  Use --btf_features_strict to change that behaviour and bail out if one of\n"
+ "  the requested features isn't present.\n"
+ "\n"
+ "  To see the supported features, use:\n"
+ "\n"
+ "    $ pahole --supported_btf_features\n"
+ "    encode_force,var,float,decl_tag,type_tag,enum64,optimized_func,consistent_func\n"
+ "    $\n"
+ "\n"
+ "btfdiff:\n"
  "\n"
- "- No need to download libbpf source when using the system library (libbpf-devel).\n"
+ "- Parallelize loading BTF and DWARF, speeding up a bit.\n"
  "\n"
- - Make python optional
+ "- Do type expansion to cover \"private\" types and enumerations."
 
-3ad4a2a111db5342b18146452304a3bf51eb5d641ce8bfc4c4e6a5f66a4bb40d
+256429d4c736338edf7e18088e71ca87ce77f2ee2eced54abb39e5724f4f93d1

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.