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.