Re: llvm-objdump bpf coredump

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Sep 17, 2021 at 8:00 PM Yonghong Song <yhs@xxxxxx> wrote:
>
>
>
> On 9/17/21 6:34 PM, Vincent Li wrote:
> > Hi,
> >
> > I am supposed to file a bug report in https://bugs.llvm.org/  but the
> > site requires account login, while waiting for my account setup, and
> > since this is related to BPF, I will try my luck here :)
> >
> > This is cilium environment, when I use llvm-objdump to disassemble the
> > bpf_lxc.o like below, it core dumps
> >
> > #llvm-objdump -S -D  /var/run/cilium/state/2799/bpf_lxc.o >
> > /home/bpf_lxc-5.4.txt
>
> Any particular reason you are using '-D' here?
>
> "llvm-objdump --help" gives:
>
>    --disassemble-all       Display assembler mnemonics for the machine
> instructions
>
>    --disassemble           Display assembler mnemonics for the machine
> instructions
>
>
>    -D                      Alias for --disassemble-all
>
>
>    -d                      Alias for --disassemble
>
> It gives the same description about -D and -d but actually -D tries to
> disassemble *all* sections and -d tries to disassemble *only* executable
> sections.
>
> The following is an example to disassemble a selftest bpf program
> bpf_iter_tcp4.o:
>
> [yhs@devbig003.ftw2 ~/work/bpf-next/tools/testing/selftests/bpf]
> llvm-objdump -D bpf_iter_tcp4.o >& ~/log
> [yhs@devbig003.ftw2 ~/work/bpf-next/tools/testing/selftests/bpf] grep
> "Disassembly of section" ~/log
> Disassembly of section .strtab:
> Disassembly of section iter/tcp:
> Disassembly of section .reliter/tcp:
> Disassembly of section license:
> Disassembly of section .rodata:
> Disassembly of section .debug_loc:
> Disassembly of section .debug_abbrev:
> Disassembly of section .debug_info:
> Disassembly of section .rel.debug_info:
> Disassembly of section .debug_ranges:
> Disassembly of section .debug_str:
> Disassembly of section .BTF:
> Disassembly of section .rel.BTF:
> Disassembly of section .BTF.ext:
> Disassembly of section .rel.BTF.ext:
> Disassembly of section .debug_frame:
> Disassembly of section .rel.debug_frame:
> Disassembly of section .debug_line:
> Disassembly of section .rel.debug_line:
> Disassembly of section .llvm_addrsig:
> Disassembly of section .symtab:
> [yhs@devbig003.ftw2 ~/work/bpf-next/tools/testing/selftests/bpf]
> llvm-objdump -d bpf_iter_tcp4.o >& ~/log
> [yhs@devbig003.ftw2 ~/work/bpf-next/tools/testing/selftests/bpf] grep
> "Disassembly of section" ~/log
> Disassembly of section iter/tcp:
> [yhs@devbig003.ftw2 ~/work/bpf-next/tools/testing/selftests/bpf]
>
> You can see, "-D" tries to disassemble *all* sections and "-d" only
> tries to disassemble "iter/tcp" section which is the *text* section.
>
> I suspect llvm BPF backend may have some loose end which didn't handle
> well for illegal insn, which I will put up a task so we can fix it.
>
> I guess you tries to disassemble for non-text sections because you want
> to compare contents of sections with text file? If this is the case,
> you may want to compare section data directly, because disassemble
> illegal insn will result in "<unknown>" insn which may hide the
> actual data difference. In any case, it would be good to know what you
> try to do with "-D" result so we may discuss to find a proper solution.
>

Yonghong, thank you for the detail explanation, it is me not clear
about the usage of
llvm-objdump, should have read the manual or try different argument
before this post,
thought better reporting the crash dump than doing nothing :)

Vincent


> >
> > PLEASE submit a bug report to https://bugs.llvm.org/  and include the
> > crash backtrace.
> >
> > Stack dump:
> >
> > 0. Program arguments: llvm-objdump -S -D /var/run/cilium/state/2799/bpf_lxc.o
> >
> >   #0 0x00000000006336bc llvm::sys::PrintStackTrace(llvm::raw_ostream&,
> > int) (/usr/local/bin/llvm-objdump+0x6336bc)
> >
> >   #1 0x00000000006318a4 llvm::sys::RunSignalHandlers()
> > (/usr/local/bin/llvm-objdump+0x6318a4)
> >
> >   #2 0x0000000000631efd SignalHandler(int) (/usr/local/bin/llvm-objdump+0x631efd)
> >
> >   #3 0x00007f9f39a7fb20 __restore_rt (/lib64/libpthread.so.0+0x12b20)
> >
> >   #4 0x0000000000492e8b
> > llvm::BPFInstPrinter::printMemOperand(llvm::MCInst const*, int,
> > llvm::raw_ostream&, char const*)
> > (/usr/local/bin/llvm-objdump+0x492e8b)
> >
> >   #5 0x00000000004946c0 llvm::BPFInstPrinter::printInst(llvm::MCInst
> > const*, unsigned long, llvm::StringRef, llvm::MCSubtargetInfo const&,
> > llvm::raw_ostream&) (/usr/local/bin/llvm-objdump+0x4946c0)
> >
> >   #6 0x0000000000432351 (anonymous
> > namespace)::BPFPrettyPrinter::printInst(llvm::MCInstPrinter&,
> > llvm::MCInst const*, llvm::ArrayRef<unsigned char>,
> > llvm::object::SectionedAddress, llvm::formatted_raw_ostream&,
> > llvm::StringRef, llvm::MCSubtargetInfo const&, (anonymous
> > namespace)::SourcePrinter*, llvm::StringRef,
> > std::vector<llvm::object::RelocationRef,
> > std::allocator<llvm::object::RelocationRef> >*, (anonymous
> > namespace)::LiveVariablePrinter&)
> > (/usr/local/bin/llvm-objdump+0x432351)
> >
> >   #7 0x00000000004400b8 disassembleObject(llvm::Target const*,
> > llvm::object::ObjectFile const*, llvm::MCContext&,
> > llvm::MCDisassembler*, llvm::MCDisassembler*, llvm::MCInstrAnalysis
> > const*, llvm::MCInstPrinter*, llvm::MCSubtargetInfo const*,
> > llvm::MCSubtargetInfo const*, (anonymous namespace)::PrettyPrinter&,
> > (anonymous namespace)::SourcePrinter&, bool)
> > (/usr/local/bin/llvm-objdump+0x4400b8)
> >
> >   #8 0x000000000044444e disassembleObject(llvm::object::ObjectFile
> > const*, bool) (/usr/local/bin/llvm-objdump+0x44444e)
> >
> >   #9 0x00000000004454e2 dumpObject(llvm::object::ObjectFile*,
> > llvm::object::Archive const*, llvm::object::Archive::Child const*)
> > (/usr/local/bin/llvm-objdump+0x4454e2)
> >
> > #10 0x0000000000409910 main (/usr/local/bin/llvm-objdump+0x409910)
> >
> > #11 0x00007f9f3854c493 __libc_start_main (/lib64/libc.so.6+0x23493)
> >
> > #12 0x000000000042384e _start (/usr/local/bin/llvm-objdump+0x42384e)
> >
> > Segmentation fault (core dumped)
> >
> > I compiled and installed llvm and clang 12.0.1 myself
> >



[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux