All of lore.kernel.org
 help / color / mirror / Atom feed
From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Vitaly Chikunov <vt@altlinux.org>
Cc: dwarves@vger.kernel.org, bpf@vger.kernel.org,
	"Dmitry V. Levin" <ldv@altlinux.org>
Subject: Re: pahole 1.25 SIGSEGV when building kernel (-j when cores > 81)
Date: Mon, 10 Jul 2023 10:42:43 -0300	[thread overview]
Message-ID: <ZKwK049Hg7taAxv9@kernel.org> (raw)
In-Reply-To: <20230705020040.bqhtd3yxpntk44q5@altlinux.org>

Em Wed, Jul 05, 2023 at 05:00:40AM +0300, Vitaly Chikunov escreveu:
> Hi,
> 
> After updating Dwarves to v1.25 we are getting SIGSEGV while building
> kernel on 32-bit x86 architecture. It looks like this:

128 cores, 32-bit system? Interesting :-)
 
>     BTF     .btf.vmlinux.bin.o
>   scripts/link-vmlinux.sh: line 111: 395728 Segmentation fault      LLVM_OBJCOPY="${OBJCOPY}" ${PAHOLE} -J ${PAHOLE_FLAGS} ${1}
>     LD      .tmp_vmlinux.kallsyms1
>     NM      .tmp_vmlinux.kallsyms1.syms
>     KSYMS   .tmp_vmlinux.kallsyms1.S
>     AS      .tmp_vmlinux.kallsyms1.S
>     LD      .tmp_vmlinux.kallsyms2
>     NM      .tmp_vmlinux.kallsyms2.syms
>     KSYMS   .tmp_vmlinux.kallsyms2.S
>     AS      .tmp_vmlinux.kallsyms2.S
>     LD      vmlinux
>     BTFIDS  vmlinux
>   libbpf: failed to find '.BTF' ELF section in vmlinux
>   FAILED: load BTF from vmlinux: No data available
> 
> What crashes is this command:
> 
>   pahole -J --btf_gen_floats -j --lang_exclude=rust .tmp_vmlinux.btf
> 
> I found that cause of the crash is that build box having 128 cores. By
> experiment I found that with -j81 pahole works OK, but with -j82 or
> greater it crashes.
> 
>   $ gdb -q --args pahole -J --btf_gen_floats -j111 --lang_exclude=rust .tmp_vmlinux.btf
>   Thread 15 "pahole" received signal SIGSEGV, Segmentation fault.
>   [Switching to Thread 0xda5ffb40 (LWP 3102466)]
>   0xf7f3c944 in btf_encoder__btf (encoder=0x0) at /usr/src/debug/dwarves-1.25/btf_encoder.c:1890
>   1890            return encoder->btf;
>   (gdb) bt
>   #0  0xf7f3c944 in btf_encoder__btf (encoder=0x0) at /usr/src/debug/dwarves-1.25/btf_encoder.c:1890
>   #1  0x5655c25d in pahole_stealer (cu=0xd9a01f80, conf_load=0x565640c0 <conf_load>, thr_data=0x56567c18) at /usr/src/debug/dwarves-1.25/pahole.c:3100
>   #2  0xf7f452d7 in cu__finalize (cu=cu@entry=0xd9a01f80, conf=0x565640c0 <conf_load>, thr_data=thr_data@entry=0x56567c18)
>       at /usr/src/debug/dwarves-1.25/dwarf_loader.c:3001
>   #3  0xf7f4541d in cus__finalize (thr_data=0x56567c18, conf=<optimized out>, cu=0xd9a01f80, cus=0x565651c0) at /usr/src/debug/dwarves-1.25/dwarf_loader.c:3008
>   #4  dwarf_cus__create_and_process_cu (dcus=dcus@entry=0xffffd19c, cu_die=cu_die@entry=0xda5ff38c, pointer_size=<optimized out>, thr_data=0x56567c18)
>       at /usr/src/debug/dwarves-1.25/dwarf_loader.c:3207
>   #5  0xf7f461af in dwarf_cus__process_cu_thread (arg=0xffffcbf8) at /usr/src/debug/dwarves-1.25/dwarf_loader.c:3250
>   #6  0xf7db4258 in start_thread (arg=<optimized out>) at pthread_create.c:444
>   #7  0xf7e3a878 in clone3 () from /lib/libc.so.6
>   (gdb) p encoder
>   $1 = (struct btf_encoder *) 0x0
>   (gdb) f 1
>   #1  0x5655c25d in pahole_stealer (cu=0xd9a01f80, conf_load=0x565640c0 <conf_load>, thr_data=0x56567c18) at /usr/src/debug/dwarves-1.25/pahole.c:3100
>   3100                                    thread->btf = btf_encoder__btf(thread->encoder);
>   (gdb) list -2
>   3093                                    thread->encoder =
>   3094                                            btf_encoder__new(cu, detached_btf_filename,
>   3095                                                             NULL,
>   3096                                                             skip_encoding_btf_vars,
>   3097                                                             btf_encode_force,
>   3098                                                             btf_gen_floats,
>   3099                                                             global_verbose);
>   3100                                    thread->btf = btf_encoder__btf(thread->encoder);
>   3101                            }
>   3102                            encoder = thread->encoder;
> 
> I think that return value of btf_encoder__new is not checked. But did
> not investigate further why is this happening. It would be great to have
> this fixed.

Can you try with this minimal patch? Maybe we can with some more work
auto-limit the number of threads or make the threads without a
btf_encoder be processed at the end, reusing the main btf_encoder, but
this first patch would at least help diagnosing the problem more
quickly.

- Arnaldo

diff --git a/pahole.c b/pahole.c
index e843999fde2a8a37..887b3403dcff18c0 100644
--- a/pahole.c
+++ b/pahole.c
@@ -3097,6 +3097,15 @@ static enum load_steal_kind pahole_stealer(struct cu *cu,
 							 btf_encode_force,
 							 btf_gen_floats,
 							 global_verbose);
+				if (thread->encoder == NULL) {
+					fprintf(stderr, "Not enough memory to instantiate new BTF encoder.\n");
+
+					if (conf_load->nr_jobs > 1)
+						fprintf(stderr, "HINT: Maybe reduce the -j/--jobs command line value?.\n");
+
+					ret = LSK__STOP_LOADING;
+					goto out_btf;
+				}
 				thread->btf = btf_encoder__btf(thread->encoder);
 			}
 			encoder = thread->encoder;

  reply	other threads:[~2023-07-10 13:42 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-07-05  2:00 pahole 1.25 SIGSEGV when building kernel (-j when cores > 81) Vitaly Chikunov
2023-07-10 13:42 ` Arnaldo Carvalho de Melo [this message]
2023-07-10 20:00   ` Vitaly Chikunov
2023-09-14  3:37     ` Vitaly Chikunov
2023-09-15  2:02       ` Vitaly Chikunov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ZKwK049Hg7taAxv9@kernel.org \
    --to=acme@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=dwarves@vger.kernel.org \
    --cc=ldv@altlinux.org \
    --cc=vt@altlinux.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.