Training courses

Kernel and Embedded Linux

Bootlin training courses

Embedded Linux, kernel,
Yocto Project, Buildroot, real-time,
graphics, boot time, debugging...

Bootlin logo

Elixir Cross Referencer

Contents of the .debug_info section:

  Compilation Unit @ offset 0x0:
   Length:        0x160 \(32-bit\)
   Version:       5
   Abbrev Offset: 0x0
   Pointer Size:  8
 <0><c>: Abbrev Number: 6 \(DW_TAG_compile_unit\)
    <d>   DW_AT_producer    : \(indirect string, offset: 0x43\): GNU C11 7.0.1 20170218 \(experimental\) -mtune=generic -march=x86-64 -gdwarf-5 -O2
    <11>   DW_AT_language    : 29	\(C11\)
    <12>   DW_AT_name        : \(indirect line string, offset: 0x14\): main.c
    <16>   DW_AT_comp_dir    : \(indirect line string, offset: 0x0\): 
    <1a>   DW_AT_ranges      : 0xc
    <1e>   DW_AT_low_pc      : 0x0
    <26>   DW_AT_stmt_list   : 0x0
 <1><2a>: Abbrev Number: 1 \(DW_TAG_base_type\)
    <2b>   DW_AT_byte_size   : 1
    <2c>   DW_AT_encoding    : 8	\(unsigned char\)
    <2d>   DW_AT_name        : \(indirect string, offset: 0x94\): unsigned char
 <1><31>: Abbrev Number: 1 \(DW_TAG_base_type\)
    <32>   DW_AT_byte_size   : 2
    <33>   DW_AT_encoding    : 7	\(unsigned\)
    <34>   DW_AT_name        : \(indirect string, offset: 0xbc\): short unsigned int
 <1><38>: Abbrev Number: 1 \(DW_TAG_base_type\)
    <39>   DW_AT_byte_size   : 4
    <3a>   DW_AT_encoding    : 7	\(unsigned\)
    <3b>   DW_AT_name        : \(indirect string, offset: 0x0\): unsigned int
 <1><3f>: Abbrev Number: 1 \(DW_TAG_base_type\)
    <40>   DW_AT_byte_size   : 8
    <41>   DW_AT_encoding    : 7	\(unsigned\)
    <42>   DW_AT_name        : \(indirect string, offset: 0x2a\): long unsigned int
 <1><46>: Abbrev Number: 1 \(DW_TAG_base_type\)
    <47>   DW_AT_byte_size   : 1
    <48>   DW_AT_encoding    : 6	\(signed char\)
    <49>   DW_AT_name        : \(indirect string, offset: 0x19\): signed char
 <1><4d>: Abbrev Number: 1 \(DW_TAG_base_type\)
    <4e>   DW_AT_byte_size   : 2
    <4f>   DW_AT_encoding    : 5	\(signed\)
    <50>   DW_AT_name        : \(indirect string, offset: 0xef\): short int
 <1><54>: Abbrev Number: 7 \(DW_TAG_base_type\)
    <55>   DW_AT_byte_size   : 4
    <56>   DW_AT_encoding    : 5	\(signed\)
    <57>   DW_AT_name        : int
 <1><5b>: Abbrev Number: 1 \(DW_TAG_base_type\)
    <5c>   DW_AT_byte_size   : 8
    <5d>   DW_AT_encoding    : 5	\(signed\)
    <5e>   DW_AT_name        : \(indirect string, offset: 0xae\): long int
 <1><62>: Abbrev Number: 1 \(DW_TAG_base_type\)
    <63>   DW_AT_byte_size   : 8
    <64>   DW_AT_encoding    : 7	\(unsigned\)
    <65>   DW_AT_name        : \(indirect string, offset: 0xff\): sizetype
 <1><69>: Abbrev Number: 3 \(DW_TAG_pointer_type\)
    <6a>   DW_AT_byte_size   : 8
    <6a>   DW_AT_type        : <0x6e>
 <1><6e>: Abbrev Number: 1 \(DW_TAG_base_type\)
    <6f>   DW_AT_byte_size   : 1
    <70>   DW_AT_encoding    : 6	\(signed char\)
    <71>   DW_AT_name        : \(indirect string, offset: 0xa2\): char
 <1><75>: Abbrev Number: 8 \(DW_TAG_variable\)
    <76>   DW_AT_name        : \(indirect string, offset: 0xd9\): __environ
    <7a>   DW_AT_decl_file   : 2
    <7b>   DW_AT_decl_line   : 546
    <7d>   DW_AT_type        : <0x81>
    <81>   DW_AT_external    : 1
    <81>   DW_AT_declaration : 1
 <1><81>: Abbrev Number: 3 \(DW_TAG_pointer_type\)
    <82>   DW_AT_byte_size   : 8
    <82>   DW_AT_type        : <0x69>
 <1><86>: Abbrev Number: 2 \(DW_TAG_variable\)
    <87>   DW_AT_name        : \(indirect string, offset: 0xe8\): optarg
    <8b>   DW_AT_decl_file   : 3
    <8b>   DW_AT_decl_line   : 57
    <8c>   DW_AT_type        : <0x69>
    <90>   DW_AT_external    : 1
    <90>   DW_AT_declaration : 1
 <1><90>: Abbrev Number: 2 \(DW_TAG_variable\)
    <91>   DW_AT_name        : \(indirect string, offset: 0xa7\): optind
    <95>   DW_AT_decl_file   : 3
    <95>   DW_AT_decl_line   : 71
    <96>   DW_AT_type        : <0x54>
    <9a>   DW_AT_external    : 1
    <9a>   DW_AT_declaration : 1
 <1><9a>: Abbrev Number: 2 \(DW_TAG_variable\)
    <9b>   DW_AT_name        : \(indirect string, offset: 0x3c\): opterr
    <9f>   DW_AT_decl_file   : 3
    <9f>   DW_AT_decl_line   : 76
    <a0>   DW_AT_type        : <0x54>
    <a4>   DW_AT_external    : 1
    <a4>   DW_AT_declaration : 1
 <1><a4>: Abbrev Number: 2 \(DW_TAG_variable\)
    <a5>   DW_AT_name        : \(indirect string, offset: 0xd\): optopt
    <a9>   DW_AT_decl_file   : 3
    <a9>   DW_AT_decl_line   : 80
    <aa>   DW_AT_type        : <0x54>
    <ae>   DW_AT_external    : 1
    <ae>   DW_AT_declaration : 1
 <1><ae>: Abbrev Number: 4 \(DW_TAG_variable\)
    <af>   DW_AT_name        : \(indirect string, offset: 0x25\): xvar
    <b3>   DW_AT_decl_file   : 1
    <b3>   DW_AT_decl_line   : 2
    <b4>   DW_AT_type        : <0x54>
    <b8>   DW_AT_external    : 1
    <b8>   DW_AT_location    : 9 byte block: 3 (0|34) (0|12) 0 0 0 0 (0|12) (0|34) 	\(DW_OP_addr: 1234\)
 <1><c2>: Abbrev Number: 4 \(DW_TAG_variable\)
    <c3>   DW_AT_name        : \(indirect string, offset: 0xcf\): yvar
    <c7>   DW_AT_decl_file   : 1
    <c7>   DW_AT_decl_line   : 3
    <c8>   DW_AT_type        : <0x54>
    <cc>   DW_AT_external    : 1
    <cc>   DW_AT_location    : 9 byte block: 3 (0|34) (0|12) 0 0 0 0 (0|12) (0|34) 	\(DW_OP_addr: 1234\)
 <1><d6>: Abbrev Number: 4 \(DW_TAG_variable\)
    <d7>   DW_AT_name        : \(indirect string, offset: 0xd4\): pvar
    <db>   DW_AT_decl_file   : 1
    <db>   DW_AT_decl_line   : 4
    <dc>   DW_AT_type        : <0xea>
    <e0>   DW_AT_external    : 1
    <e0>   DW_AT_location    : 9 byte block: 3 (0|34) (0|12) 0 0 0 0 (0|12) (0|34) 	\(DW_OP_addr: 1234\)
 <1><ea>: Abbrev Number: 3 \(DW_TAG_pointer_type\)
    <eb>   DW_AT_byte_size   : 8
    <eb>   DW_AT_type        : <0x54>
 <1><ef>: Abbrev Number: 9 \(DW_TAG_subprogram\)
    <f0>   DW_AT_external    : 1
    <f0>   DW_AT_name        : \(indirect string, offset: 0x14\): main
    <f4>   DW_AT_decl_file   : 1
    <f5>   DW_AT_decl_line   : 6
    <f6>   DW_AT_prototyped  : 1
    <f6>   DW_AT_type        : <0x54>
    <fa>   DW_AT_low_pc      : 0x1234
    <102>   DW_AT_high_pc     : 0x5678
    <10a>   DW_AT_frame_base  : 1 byte block: 9c 	\(DW_OP_call_frame_cfa\)
    <10c>   DW_AT_call_all_calls: 1
    <10c>   DW_AT_sibling     : <0x13e>
 <2><110>: Abbrev Number: 5 \(DW_TAG_formal_parameter\)
    <111>   DW_AT_name        : \(indirect string, offset: 0xb7\): argc
    <115>   DW_AT_decl_file   : 1
    <115>   DW_AT_decl_line   : 6
    <115>   DW_AT_type        : <0x54>
    <119>   DW_AT_location    : 0xc \(location list\)
 <2><11d>: Abbrev Number: 5 \(DW_TAG_formal_parameter\)
    <11e>   DW_AT_name        : \(indirect string, offset: 0x108\): argv
    <122>   DW_AT_decl_file   : 1
    <122>   DW_AT_decl_line   : 6
    <122>   DW_AT_type        : <0x81>
    <126>   DW_AT_location    : 0x23 \(location list\)
 <2><12a>: Abbrev Number: 10 \(DW_TAG_call_site\)
    <12b>   DW_AT_call_return_pc: 0x12345
    <133>   DW_AT_call_origin : <0x157>
 <3><137>: Abbrev Number: 11 \(DW_TAG_call_site_parameter\)
    <138>   DW_AT_location    : 1 byte block: 55 	\(DW_OP_reg5 \([^()]*\)\)
    <13a>   DW_AT_call_value  : 1 byte block: 30 	\(DW_OP_lit0\)
 <3><13c>: Abbrev Number: 0
 <2><13d>: Abbrev Number: 0
 <1><13e>: Abbrev Number: 12 \(DW_TAG_subprogram\)
    <13f>   DW_AT_external    : 1
    <13f>   DW_AT_name        : \(indirect string, offset: 0xe3\): func
    <143>   DW_AT_decl_file   : 1
    <144>   DW_AT_decl_line   : 5
    <145>   DW_AT_prototyped  : 1
    <145>   DW_AT_low_pc      : 0x1234
    <14d>   DW_AT_high_pc     : 0x5678
    <155>   DW_AT_frame_base  : 1 byte block: 9c 	\(DW_OP_call_frame_cfa\)
    <157>   DW_AT_call_all_calls: 1
 <1><157>: Abbrev Number: 13 \(DW_TAG_subprogram\)
    <158>   DW_AT_external    : 1
    <158>   DW_AT_declaration : 1
    <158>   DW_AT_linkage_name: \(indirect string, offset: 0xf9\): alarm
    <15c>   DW_AT_name        : \(indirect string, offset: 0xf9\): alarm
    <160>   DW_AT_decl_file   : 2
    <161>   DW_AT_decl_line   : 435
 <1><163>: Abbrev Number: 0

Contents of the .debug_abbrev section:

  Number TAG \(0x0\)
   1      DW_TAG_base_type    \[no children\]
    DW_AT_byte_size    DW_FORM_data1
    DW_AT_encoding     DW_FORM_data1
    DW_AT_name         DW_FORM_strp
    DW_AT value: 0     DW_FORM value: 0
   2      DW_TAG_variable    \[no children\]
    DW_AT_name         DW_FORM_strp
    DW_AT_decl_file    DW_FORM_implicit_const: 3
    DW_AT_decl_line    DW_FORM_data1
    DW_AT_type         DW_FORM_ref4
    DW_AT_external     DW_FORM_flag_present
    DW_AT_declaration  DW_FORM_flag_present
    DW_AT value: 0     DW_FORM value: 0
   3      DW_TAG_pointer_type    \[no children\]
    DW_AT_byte_size    DW_FORM_implicit_const: 8
    DW_AT_type         DW_FORM_ref4
    DW_AT value: 0     DW_FORM value: 0
   4      DW_TAG_variable    \[no children\]
    DW_AT_name         DW_FORM_strp
    DW_AT_decl_file    DW_FORM_implicit_const: 1
    DW_AT_decl_line    DW_FORM_data1
    DW_AT_type         DW_FORM_ref4
    DW_AT_external     DW_FORM_flag_present
    DW_AT_location     DW_FORM_exprloc
    DW_AT value: 0     DW_FORM value: 0
   5      DW_TAG_formal_parameter    \[no children\]
    DW_AT_name         DW_FORM_strp
    DW_AT_decl_file    DW_FORM_implicit_const: 1
    DW_AT_decl_line    DW_FORM_implicit_const: 6
    DW_AT_type         DW_FORM_ref4
    DW_AT_location     DW_FORM_sec_offset
    DW_AT value: 0     DW_FORM value: 0
   6      DW_TAG_compile_unit    \[has children\]
    DW_AT_producer     DW_FORM_strp
    DW_AT_language     DW_FORM_data1
    DW_AT_name         DW_FORM_line_strp
    DW_AT_comp_dir     DW_FORM_line_strp
    DW_AT_ranges       DW_FORM_sec_offset
    DW_AT_low_pc       DW_FORM_addr
    DW_AT_stmt_list    DW_FORM_sec_offset
    DW_AT value: 0     DW_FORM value: 0
   7      DW_TAG_base_type    \[no children\]
    DW_AT_byte_size    DW_FORM_data1
    DW_AT_encoding     DW_FORM_data1
    DW_AT_name         DW_FORM_string
    DW_AT value: 0     DW_FORM value: 0
   8      DW_TAG_variable    \[no children\]
    DW_AT_name         DW_FORM_strp
    DW_AT_decl_file    DW_FORM_data1
    DW_AT_decl_line    DW_FORM_data2
    DW_AT_type         DW_FORM_ref4
    DW_AT_external     DW_FORM_flag_present
    DW_AT_declaration  DW_FORM_flag_present
    DW_AT value: 0     DW_FORM value: 0
   9      DW_TAG_subprogram    \[has children\]
    DW_AT_external     DW_FORM_flag_present
    DW_AT_name         DW_FORM_strp
    DW_AT_decl_file    DW_FORM_data1
    DW_AT_decl_line    DW_FORM_data1
    DW_AT_prototyped   DW_FORM_flag_present
    DW_AT_type         DW_FORM_ref4
    DW_AT_low_pc       DW_FORM_addr
    DW_AT_high_pc      DW_FORM_data8
    DW_AT_frame_base   DW_FORM_exprloc
    DW_AT_call_all_calls DW_FORM_flag_present
    DW_AT_sibling      DW_FORM_ref4
    DW_AT value: 0     DW_FORM value: 0
   10      DW_TAG_call_site    \[has children\]
    DW_AT_call_return_pc DW_FORM_addr
    DW_AT_call_origin  DW_FORM_ref4
    DW_AT value: 0     DW_FORM value: 0
   11      DW_TAG_call_site_parameter    \[no children\]
    DW_AT_location     DW_FORM_exprloc
    DW_AT_call_value   DW_FORM_exprloc
    DW_AT value: 0     DW_FORM value: 0
   12      DW_TAG_subprogram    \[no children\]
    DW_AT_external     DW_FORM_flag_present
    DW_AT_name         DW_FORM_strp
    DW_AT_decl_file    DW_FORM_data1
    DW_AT_decl_line    DW_FORM_data1
    DW_AT_prototyped   DW_FORM_flag_present
    DW_AT_low_pc       DW_FORM_addr
    DW_AT_high_pc      DW_FORM_data8
    DW_AT_frame_base   DW_FORM_exprloc
    DW_AT_call_all_calls DW_FORM_flag_present
    DW_AT value: 0     DW_FORM value: 0
   13      DW_TAG_subprogram    \[no children\]
    DW_AT_external     DW_FORM_flag_present
    DW_AT_declaration  DW_FORM_flag_present
    DW_AT_linkage_name DW_FORM_strp
    DW_AT_name         DW_FORM_strp
    DW_AT_decl_file    DW_FORM_data1
    DW_AT_decl_line    DW_FORM_data2
    DW_AT value: 0     DW_FORM value: 0
#...
Contents of the .debug_loclists section:
#...
    Offset   Begin            End              Expression
    0000000c 0000000000001234 \(base address\)
    00000015 0000000000001234 0000000000001236 \(DW_OP_reg5 \([^()]*\)\)
    0000001a 0000000000001236 0000000000001239 \(DW_OP_entry_value: \(DW_OP_reg5 \([^()]*\)\); DW_OP_stack_value\)
    00000022 <End of list>
    00000023 0000000000001234 \(base address\)
    0000002c 0000000000001234 0000000000001236 \(DW_OP_reg4 \([^()]*\)\)
    00000031 0000000000001236 0000000000001239 \(DW_OP_entry_value: \(DW_OP_reg4 \([^()]*\)\); DW_OP_stack_value\)
    00000039 <End of list>

Contents of the .debug_rnglists section:

    Offset   Begin    End
    0000000c 0000000000001234 0000000000001236 
    00000016 0000000000001234 0000000000001239 
    00000020 <End of list>

Raw dump of debug contents of section .debug_line:

  Offset:                      0x0
  Length:                      144
  DWARF Version:               5
  Address size \(bytes\):        8
  Segment selector \(bytes\):    0
  Prologue Length:             60
  Minimum Instruction Length:  1
  Maximum Ops per Instruction: 1
  Initial value of 'is_stmt':  1
  Line Base:                   -10
  Line Range:                  242
  Opcode Base:                 13

 Opcodes:
  Opcode 1 has 0 args
  Opcode 2 has 1 arg
  Opcode 3 has 1 arg
  Opcode 4 has 1 arg
  Opcode 5 has 1 arg
  Opcode 6 has 0 args
  Opcode 7 has 0 args
  Opcode 8 has 0 args
  Opcode 9 has 1 arg
  Opcode 10 has 0 args
  Opcode 11 has 0 args
  Opcode 12 has 1 arg

 The Directory Table \(offset 0x22, lines 3, columns 1\):
  Entry	Name
  0	\(indirect line string, offset: 0x0\): 
  1	\(indirect line string, offset: 0x1\): 
  2	\(indirect line string, offset: 0x22\): /usr/include

 The File Name Table \(offset 0x34, lines 4, columns 2\):
  Entry	Dir	Name
  0	0	\(indirect line string, offset: 0x14\): main.c
  1	1	\(indirect line string, offset: 0x1b\): main.c
  2	2	\(indirect line string, offset: 0xb\): unistd.h
  3	2	\(indirect line string, offset: 0x2\): getopt.h

 Line Number Statements:
  \[0x00000048\]  Extended opcode 2: set Address to 0x1234
  \[0x00000053\]  Special opcode 15: advance Address by 0 to 0x1234 and Line by 5 to 6
  \[0x00000054\]  Extended opcode 2: set Address to 0x12346
  \[0x0000005f\]  Copy
  \[0x00000060\]  Extended opcode 2: set Address to 0x1234
  \[0x0000006b\]  Extended opcode 1: End of Sequence

  \[0x0000006e\]  Extended opcode 2: set Address to 0x1234
  \[0x00000079\]  Special opcode 14: advance Address by 0 to 0x1234 and Line by 4 to 5
  \[0x0000007a\]  Extended opcode 2: set Address to 0x1234
  \[0x00000085\]  Copy
  \[0x00000086\]  Extended opcode 2: set Address to 0x1234
  \[0x00000091\]  Extended opcode 1: End of Sequence


Contents of the .debug_line section:

CU: ./main.c:
File name                            Line number    Starting address    View    Stmt
main.c                                         6              0x1234               x
main.c                                         6             0x12346               x
main.c                                         -              0x1234

main.c                                         5              0x1234               x
main.c                                         5              0x1234               x
main.c                                         -              0x1234