Em Thu, Apr 01, 2021 at 12:35:45PM -0700, Bill Wendling escreveu: > On Wed, Mar 31, 2021 at 7:58 PM Yonghong Song <yhs@xxxxxx> wrote: > > Function cus__merging_cu() is introduced in Commit 39227909db3c > > ("dwarf_loader: Permit merging all DWARF CU's for clang LTO built > > binary") to test whether cross-cu references may happen. > > The original implementation anticipates compilation flags > > in dwarf, but later some concerns about binary size surfaced > > and the decision is to scan .debug_abbrev as a faster way > > to check cross-cu references. Also putting a note in vmlinux > > to indicate whether lto is enabled for built or not can > > provide a much faster way. > > This patch set implemented this two approaches, first > > checking the note (in Patch #2), if not found, then > > check .debug_abbrev (in Patch #1). > > Yonghong Song (2): > > dwarf_loader: check .debug_abbrev for cross-cu references > > dwarf_loader: check .notes section for lto build info > > dwarf_loader.c | 76 ++++++++++++++++++++++++++++++++++++-------------- > > 1 file changed, 55 insertions(+), 21 deletions(-) > With this series of patches, the compilation passes for me with > ThinLTO. You may add this if you like: > Tested-by: Bill Wendling <morbo@xxxxxxxxxx> Thanks, added, and also this "Committer testing" section: Committer testing: Using a thin-LTO built vmlinux that doesn't have the LINUX_ELFNOTE_BUILD_LTO note: $ readelf --notes vmlinux.clang.thin.LTO Displaying notes found in: .notes Owner Data size Description Xen 0x00000006 Unknown note type: (0x00000006) description data: 6c 69 6e 75 78 00 Xen 0x00000004 Unknown note type: (0x00000007) description data: 32 2e 36 00 Xen 0x00000008 Unknown note type: (0x00000005) description data: 78 65 6e 2d 33 2e 30 00 Xen 0x00000008 Unknown note type: (0x00000003) description data: 00 00 00 80 ff ff ff ff Xen 0x00000008 Unknown note type: (0x0000000f) description data: 00 00 00 00 80 00 00 00 Xen 0x00000008 NT_VERSION (version) description data: c0 e1 33 83 ff ff ff ff Xen 0x00000008 NT_ARCH (architecture) description data: 00 20 00 81 ff ff ff ff Xen 0x00000029 Unknown note type: (0x0000000a) description data: 21 77 72 69 74 61 62 6c 65 5f 70 61 67 65 5f 74 61 62 6c 65 73 7c 70 61 65 5f 70 67 64 69 72 5f 61 62 6f 76 65 5f 34 67 62 Xen 0x00000004 Unknown note type: (0x00000011) description data: 01 88 00 00 Xen 0x00000004 Unknown note type: (0x00000009) description data: 79 65 73 00 Xen 0x00000008 Unknown note type: (0x00000008) description data: 67 65 6e 65 72 69 63 00 Xen 0x00000010 Unknown note type: (0x0000000d) description data: 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 Xen 0x00000004 Unknown note type: (0x0000000e) description data: 01 00 00 00 Xen 0x00000004 Unknown note type: (0x00000010) description data: 01 00 00 00 Xen 0x00000008 Unknown note type: (0x0000000c) description data: 00 00 00 00 00 80 ff ff Xen 0x00000008 Unknown note type: (0x00000004) description data: 00 00 00 00 00 00 00 00 Xen 0x00000008 Unknown note type: (0x00000012) description data: e0 02 00 01 00 00 00 00 Linux 0x00000017 OPEN description data: 34 2e 31 39 2e 34 2d 33 30 30 2e 66 63 32 39 2e 78 38 36 5f 36 34 00 GNU 0x00000014 NT_GNU_BUILD_ID (unique build ID bitstring) Build ID: 354f81317b1b3c35f3f81f8d9f04d0c8caccb09a $ Then with one with the new ELF note stating that this binary was built with LTO: [acme@five pahole]$ readelf --notes vmlinux.clang.thin.LTO+ELF_note Displaying notes found in: .notes Owner Data size Description Xen 0x00000006 Unknown note type: (0x00000006) description data: 6c 69 6e 75 78 00 Xen 0x00000004 Unknown note type: (0x00000007) description data: 32 2e 36 00 Xen 0x00000008 Unknown note type: (0x00000005) description data: 78 65 6e 2d 33 2e 30 00 Xen 0x00000008 Unknown note type: (0x00000003) description data: 00 00 00 80 ff ff ff ff Xen 0x00000008 Unknown note type: (0x0000000f) description data: 00 00 00 00 80 00 00 00 Xen 0x00000008 NT_VERSION (version) description data: c0 e1 33 83 ff ff ff ff Xen 0x00000008 NT_ARCH (architecture) description data: 00 20 00 81 ff ff ff ff Xen 0x00000029 Unknown note type: (0x0000000a) description data: 21 77 72 69 74 61 62 6c 65 5f 70 61 67 65 5f 74 61 62 6c 65 73 7c 70 61 65 5f 70 67 64 69 72 5f 61 62 6f 76 65 5f 34 67 62 Xen 0x00000004 Unknown note type: (0x00000011) description data: 01 88 00 00 Xen 0x00000004 Unknown note type: (0x00000009) description data: 79 65 73 00 Xen 0x00000008 Unknown note type: (0x00000008) description data: 67 65 6e 65 72 69 63 00 Xen 0x00000010 Unknown note type: (0x0000000d) description data: 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 Xen 0x00000004 Unknown note type: (0x0000000e) description data: 01 00 00 00 Xen 0x00000004 Unknown note type: (0x00000010) description data: 01 00 00 00 Xen 0x00000008 Unknown note type: (0x0000000c) description data: 00 00 00 00 00 80 ff ff Xen 0x00000008 Unknown note type: (0x00000004) description data: 00 00 00 00 00 00 00 00 Xen 0x00000008 Unknown note type: (0x00000012) description data: e0 02 00 01 00 00 00 00 Linux 0x00000017 OPEN description data: 34 2e 31 39 2e 34 2d 33 30 30 2e 66 63 32 39 2e 78 38 36 5f 36 34 00 Linux 0x00000004 func description data: 01 00 00 00 GNU 0x00000014 NT_GNU_BUILD_ID (unique build ID bitstring) Build ID: aeba9ffc929acd3cd573b4d1afc8df9af4f3694d $ Now to see the diff: $ readelf --notes vmlinux.clang.thin.LTO+ELF_note > with-note $ readelf --notes vmlinux.clang.thin.LTO > without-note $ diff -u without-note with-note --- without-note 2021-04-02 10:23:57.545349084 -0300 +++ with-note 2021-04-02 10:23:50.690196102 -0300 @@ -37,5 +37,7 @@ description data: e0 02 00 01 00 00 00 00 Linux 0x00000017 OPEN description data: 34 2e 31 39 2e 34 2d 33 30 30 2e 66 63 32 39 2e 78 38 36 5f 36 34 00 + Linux 0x00000004 func + description data: 01 00 00 00 GNU 0x00000014 NT_GNU_BUILD_ID (unique build ID bitstring) - Build ID: 354f81317b1b3c35f3f81f8d9f04d0c8caccb09a + Build ID: aeba9ffc929acd3cd573b4d1afc8df9af4f3694d $ Signed-off-by: Yonghong Song <yhs@xxxxxx> Suggested-by: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx> Tested-by: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx> Tested-by: Bill Wendling <morbo@xxxxxxxxxx> Cc: Alexei Starovoitov <ast@xxxxxxxxxx> Cc: Andrii Nakryiko <andrii@xxxxxxxxxx> Cc: David Blaikie <dblaikie@xxxxxxxxx> Cc: Fāng-ruì Sòng <maskray@xxxxxxxxxx> Cc: Nick Desaulniers <ndesaulniers@xxxxxxxxxx> Cc: bpf@xxxxxxxxxxxxxxx Cc: dwarves@xxxxxxxxxxxxxxx Cc: kernel-team@xxxxxx Signed-off-by: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx>