Mirror of the gdb mailing list
 help / color / mirror / Atom feed
From: Jan Vrany <jan.vrany@fit.cvut.cz>
To: "gdb@sourceware.org" <gdb@sourceware.org>
Subject: Debugging jitted code
Date: Mon, 29 Aug 2016 22:26:00 -0000	[thread overview]
Message-ID: <1472509579.13311.23.camel@fit.cvut.cz> (raw)

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









             reply	other threads:[~2016-08-29 22:26 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-08-29 22:26 Jan Vrany [this message]
2016-08-30 19:51 ` Jan Vrany

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=1472509579.13311.23.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