From: Jan Vrany <jan.vrany@fit.cvut.cz>
To: gdb@sourceware.org
Subject: Re: Debugging jitted code
Date: Tue, 30 Aug 2016 19:51:00 -0000 [thread overview]
Message-ID: <1472586654.3877.5.camel@fit.cvut.cz> (raw)
In-Reply-To: <1472509579.13311.23.camel@fit.cvut.cz>
Hi all,Â
just for the record: the problem was, of course, in
my code. Due to an unspotted change in LLVM, there
was a missing DIE for the function itself (DW_TAG_Subprogram).Â
Once fixed, it started to work as expected.Â
Many thanks to Keith Seitz for his comment, it saved me a
lot of time! Thanks a lot!
Jan
On Mon, 2016-08-29 at 23:26 +0100, Jan Vrany wrote:
> Hi all,Â
>
> I'd like to debug jitted code using GDB and it's jit interface.Â
> The code is generated by LLVM's MCJIT the jitter generates DWARF
> debug info using LLVM's DIBuilder. I'd expect GDB to make use of
> this info, but all I can see is name of the jitted function.Â
> GDB seems not to be aware of all the rest such as filenames andÂ
> line numbers.Â
>
> Below you may find more details - I just try to give as much
> information as possible:
>
> I run x86_64 Linux and compiled most recent GDB myself:
> gdb --version
> GNU gdb (GDB) 7.12.50.20160829-git
> Copyright (C) 2016 Free Software Foundation, Inc.
> ...
>
> I'm using most recent LLVM 4.0 compiled from SVN tree,Â
> if that matters.Â
>
> To me it looks like the in-memory object ELF file generated byÂ
> LLVM is fine and contain all the DWARF info. I checked this
> by breaking on '__jit_debug_register_code'. Then I used gdb's
> dump command:
>
> (gdb) p * JITCodeEntry
> $1 = {next_entry = 0x13bbcc0, prev_entry = 0x0, symfile_addr =
> 0x1442850 "\177ELF\002\001\001", symfile_size = 2960}
> (gdb) dump binary memory /tmp/m.o 0x1442850 (0x1442850 + 2960)
>
> and the used objdump /tmp/m.o to look what's inside. LooksÂ
> good to me:
>
> jv@sao:~/Projects/gdb/sources1/gdb$ objdump -x /tmp/m.oÂ
>
> /tmp/m.o:Â Â Â Â Â file format elf64-x86-64
> /tmp/m.o
> architecture: i386:x86-64, flags 0x00000011:
> HAS_RELOC, HAS_SYMS
> start address 0x0000000000000000
>
> Sections:
> Idx Name          Size      VMA               LMA               File
> off  Algn
> Â 0
> .text         000001e4  0000000028000210  0000000028000210  00000040Â
> Â 2
> **4
> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE
> Â 1
> .data         00000008  00000000013ba788  00000000013ba788  00000228Â
> Â 2
> **3
> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â CONTENTS, ALLOC, LOAD, DATA
> Â 2
> .debug_str    0000009a  0000000000000000  0000000000000000  00000230Â
> Â 2
> **0
> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â CONTENTS, READONLY, DEBUGGING
> Â 3
> .debug_loc    00000000  0000000000000000  0000000000000000  000002caÂ
> Â 2
> **0
> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â CONTENTS, READONLY, DEBUGGING
> Â 4 .debug_abbrev
> 00000010  0000000000000000  0000000000000000  000002ca  2**0
> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â CONTENTS, READONLY, DEBUGGING
> Â 5
> .debug_info   0000001e  0000000000000000  0000000000000000  000002daÂ
> Â 2
> **0
> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â CONTENTS, RELOC, READONLY, DEBUGGING
> Â 6 .debug_ranges
> 00000000Â Â 0000000000000000Â Â 0000000000000000Â Â 000002f8Â Â 2**0
> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â CONTENTS, READONLY, DEBUGGING
> Â 7 .debug_macinfo
> 00000001Â Â 0000000000000000Â Â 0000000000000000Â Â 000002f8Â Â 2**0
> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â CONTENTS, READONLY, DEBUGGING
> Â 8 .note.GNU-stack
> 00000000Â Â 0000000000000000Â Â 0000000000000000Â Â 000002f9Â Â 2**0
> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â CONTENTS, READONLY
> Â 9
> .eh_frame     00000040  00000000013df908  00000000013df908  00000300Â
> Â 2
> **3
> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA
> Â 10
> .debug_line   0000005e  0000000000000000  0000000000000000  00000340Â
> Â 2
> **0
> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â CONTENTS, RELOC, READONLY, DEBUGGING
>
> ...rest ommited...
>
> 0x28000210 is address of the beginning of generatedÂ
> machine code.Â
>
> By quick look at jit.c, jit_bfd_try_read_symtab(), line ~ 941
> it looks that gdb only reads / considers .text, .data and .eh_frame
> sections, ignoring the rest including those containing DWARD debugÂ
> info. This confuses me a little, but I have a very little knowledge
> of DWARF / GDB internals.Â
>
> I'd appreciate if anyone can shed a bit of a light into this.Â
> It'd be really cool if I can see source line numbers or even
> print variable names for jitted code from GDB.
>
> Thanks a lot!Â
>
> Best, Jan
>
>
>
>
>
>
>
>
prev parent reply other threads:[~2016-08-30 19:51 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-08-29 22:26 Jan Vrany
2016-08-30 19:51 ` Jan Vrany [this message]
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=1472586654.3877.5.camel@fit.cvut.cz \
--to=jan.vrany@fit.cvut.cz \
--cc=gdb@sourceware.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox