#! /bin/sh
# Copyright (C) 2013, 2018 Red Hat, Inc.
# This file is part of elfutils.
#
# This file is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# elfutils is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see .
. $srcdir/test-subr.sh
# Tests readelf --debug-dump=line and --debug-dump=decodedline
# See run-readelf-aranges for testfiles.
testfiles testfilefoobarbaz
testrun_compare ${abs_top_builddir}/src/readelf --debug-dump=line testfilefoobarbaz <
 [    3c] advance line by constant 15 to 16
 [    3e] copy
 [    3f] special opcode 159: address+10 = 0x80482fa , line+1 = 17
 [    40] special opcode 117: address+7 = 0x8048301 , line+1 = 18
 [    41] advance line by constant -9 to 9
 [    43] special opcode 200: address+13 = 0x804830e , line+0 = 9
 [    44] special opcode 48: address+2 = 0x8048310 , line+2 = 11
 [    45] special opcode 58: address+3 = 0x8048313 , line-2 = 9
 [    46] special opcode 48: address+2 = 0x8048315 , line+2 = 11
 [    47] special opcode 44: address+2 = 0x8048317 , line-2 = 9
 [    48] advance line by constant 13 to 22
 [    4a] special opcode 46: address+2 = 0x8048319 , line+0 = 22
 [    4b] advance line by constant -13 to 9
 [    4d] special opcode 60: address+3 = 0x804831c , line+0 = 9
 [    4e] advance line by constant 12 to 21
 [    50] special opcode 60: address+3 = 0x804831f , line+0 = 21
 [    51] special opcode 61: address+3 = 0x8048322 , line+1 = 22
 [    52] advance address by 2 to 0x8048324
 [    54] extended opcode 1:  end of sequence
Table at offset 87:
 Length:                         72
 DWARF version:                  2
 Prologue length:                28
 Address size:                   4
 Segment selector size:          0
 Min instruction length:         1
 Max operations per instruction: 1
 Initial value if 'is_stmt':     1
 Line base:                      -5
 Line range:                     14
 Opcode base:                    13
Opcodes:
  [ 1]  0 arguments
  [ 2]  1 argument
  [ 3]  1 argument
  [ 4]  1 argument
  [ 5]  1 argument
  [ 6]  0 arguments
  [ 7]  0 arguments
  [ 8]  0 arguments
  [ 9]  1 argument
  [10]  0 arguments
  [11]  0 arguments
  [12]  1 argument
Directory table:
File name table:
 Entry Dir   Time      Size      Name
 1     0     0         0         bar.c
Line number statements:
 [    7d] extended opcode 2:  set address to 0x8048330 
 [    84] advance line by constant 12 to 13
 [    86] copy
 [    87] special opcode 19: address+0 = 0x8048330 , line+1 = 14
 [    88] advance address by 11 to 0x804833b
 [    8a] extended opcode 1:  end of sequence
 [    8d] extended opcode 2:  set address to 0x8048440 
 [    94] advance line by constant 18 to 19
 [    96] copy
 [    97] special opcode 19: address+0 = 0x8048440 , line+1 = 20
 [    98] advance line by constant -12 to 8
 [    9a] special opcode 200: address+13 = 0x804844d , line+0 = 8
 [    9b] advance line by constant 14 to 22
 [    9d] special opcode 74: address+4 = 0x8048451 , line+0 = 22
 [    9e] advance address by 1 to 0x8048452
 [    a0] extended opcode 1:  end of sequence
Table at offset 163:
 Length:                         106
 DWARF version:                  2
 Prologue length:                43
 Address size:                   4
 Segment selector size:          0
 Min instruction length:         1
 Max operations per instruction: 1
 Initial value if 'is_stmt':     1
 Line base:                      -5
 Line range:                     14
 Opcode base:                    13
Opcodes:
  [ 1]  0 arguments
  [ 2]  1 argument
  [ 3]  1 argument
  [ 4]  1 argument
  [ 5]  1 argument
  [ 6]  0 arguments
  [ 7]  0 arguments
  [ 8]  0 arguments
  [ 9]  1 argument
  [10]  0 arguments
  [11]  0 arguments
  [12]  1 argument
Directory table:
File name table:
 Entry Dir   Time      Size      Name
 1     0     0         0         baz.c
 2     0     0         0         foobarbaz.h
Line number statements:
 [    d8] extended opcode 2:  set address to 0x8048340 
 [    df] advance line by constant 12 to 13
 [    e1] copy
 [    e2] special opcode 19: address+0 = 0x8048340 , line+1 = 14
 [    e3] advance address by 11 to 0x804834b
 [    e5] extended opcode 1:  end of sequence
 [    e8] extended opcode 2:  set address to 0x8048460 
 [    ef] advance line by constant 18 to 19
 [    f1] copy
 [    f2] special opcode 74: address+4 = 0x8048464 , line+0 = 19
 [    f3] special opcode 75: address+4 = 0x8048468 , line+1 = 20
 [    f4] extended opcode 4:  set discriminator to 1
 [    f8] special opcode 78: address+4 = 0x804846c , line+4 = 24
 [    f9] special opcode 187: address+12 = 0x8048478 , line+1 = 25
 [    fa] special opcode 87: address+5 = 0x804847d , line-1 = 24
 [    fb] special opcode 61: address+3 = 0x8048480 , line+1 = 25
 [    fc] special opcode 101: address+6 = 0x8048486 , line-1 = 24
 [    fd] special opcode 61: address+3 = 0x8048489 , line+1 = 25
 [    fe] special opcode 87: address+5 = 0x804848e , line-1 = 24
 [    ff] advance line by constant -16 to 8
 [   101] special opcode 46: address+2 = 0x8048490 , line+0 = 8
 [   102] advance line by constant 20 to 28
 [   104] special opcode 186: address+12 = 0x804849c , line+0 = 28
 [   105] advance line by constant -20 to 8
 [   107] special opcode 88: address+5 = 0x80484a1 , line+0 = 8
 [   108] advance line by constant 13 to 21
 [   10a] advance address by constant 17 to 0x80484b2 
 [   10b] special opcode 32: address+1 = 0x80484b3 , line+0 = 21
 [   10c] advance address by 9 to 0x80484bc
 [   10e] extended opcode 1:  end of sequence
EOF
testrun_compare ${abs_top_builddir}/src/readelf --debug-dump=decodedline testfilefoobarbaz <<\EOF
DWARF section [30] '.debug_line' at offset 0x15f6:
 CU [b] foo.c
  line:col SBPE* disc isa op address (Statement Block Prologue Epilogue *End)
  /home/mark/src/tests/foobarbaz/foo.c (mtime: 0, length: 0)
    16:0   S        0   0  0 0x080482f0 
    17:0   S        0   0  0 0x080482fa 
    18:0   S        0   0  0 0x08048301 
     9:0   S        0   0  0 0x0804830e 
    11:0   S        0   0  0 0x08048310 
     9:0   S        0   0  0 0x08048313 
    11:0   S        0   0  0 0x08048315 
     9:0   S        0   0  0 0x08048317 
    22:0   S        0   0  0 0x08048319 
     9:0   S        0   0  0 0x0804831c 
    21:0   S        0   0  0 0x0804831f 
    22:0   S        0   0  0 0x08048322 
    22:0   S   *    0   0  0 0x08048323 
 CU [141] bar.c
  line:col SBPE* disc isa op address (Statement Block Prologue Epilogue *End)
  /home/mark/src/tests/foobarbaz/bar.c (mtime: 0, length: 0)
    13:0   S        0   0  0 0x08048330 
    14:0   S        0   0  0 0x08048330 
    14:0   S   *    0   0  0 0x0804833a 
    19:0   S        0   0  0 0x08048440 
    20:0   S        0   0  0 0x08048440 
     8:0   S        0   0  0 0x0804844d 
    22:0   S        0   0  0 0x08048451 
    22:0   S   *    0   0  0 0x08048451 
 CU [1dc] baz.c
  line:col SBPE* disc isa op address (Statement Block Prologue Epilogue *End)
  /home/mark/src/tests/foobarbaz/baz.c (mtime: 0, length: 0)
    13:0   S        0   0  0 0x08048340 
    14:0   S        0   0  0 0x08048340 
    14:0   S   *    0   0  0 0x0804834a 
    19:0   S        0   0  0 0x08048460 
    19:0   S        0   0  0 0x08048464 
    20:0   S        0   0  0 0x08048468 
    24:0   S        1   0  0 0x0804846c 
    25:0   S        0   0  0 0x08048478 
    24:0   S        0   0  0 0x0804847d 
    25:0   S        0   0  0 0x08048480 
    24:0   S        0   0  0 0x08048486 
    25:0   S        0   0  0 0x08048489 
    24:0   S        0   0  0 0x0804848e 
     8:0   S        0   0  0 0x08048490 
    28:0   S        0   0  0 0x0804849c 
     8:0   S        0   0  0 0x080484a1 
    21:0   S        0   0  0 0x080484b3 
    21:0   S   *    0   0  0 0x080484bb 
EOF
# A .debug_line table with minimum instruction length > 1.
#
# = hello.c
# #include 
#
# int
# main (int argc, char **argv)
# {
#   printf ("Hello, %s\n", (argc > 0
# 			  ? argv[1]: "World"));
#   return 0;
# }
#
# clang version 5.0.1 (tags/RELEASE_501/final)
# Target: powerpc64-unknown-linux-gnu
# clang -g -O2 -o testfile-ppc64-min-instr hello.c
testfiles testfile-ppc64-min-instr
testrun_compare ${abs_top_builddir}/src/readelf --debug-dump=line testfile-ppc64-min-instr <<\EOF
DWARF section [29] '.debug_line' at offset 0xdf6:
Table at offset 0:
 Length:                         69
 DWARF version:                  2
 Prologue length:                30
 Address size:                   8
 Segment selector size:          0
 Min instruction length:         4
 Max operations per instruction: 1
 Initial value if 'is_stmt':     1
 Line base:                      -5
 Line range:                     14
 Opcode base:                    13
Opcodes:
  [ 1]  0 arguments
  [ 2]  1 argument
  [ 3]  1 argument
  [ 4]  1 argument
  [ 5]  1 argument
  [ 6]  0 arguments
  [ 7]  0 arguments
  [ 8]  0 arguments
  [ 9]  1 argument
  [10]  0 arguments
  [11]  0 arguments
  [12]  1 argument
Directory table:
File name table:
 Entry Dir   Time      Size      Name
 1     0     0         0         hello.c
Line number statements:
 [    28] extended opcode 2:  set address to 0x100005a4 
 [    33] special opcode 22: address+0 = 0x100005a4 , line+4 = 5
 [    34] set column to 27
 [    36] set prologue end flag
 [    37] special opcode 19: address+0 = 0x100005a4 , line+1 = 6
 [    38] set column to 8
 [    3a] special opcode 47: address+8 = 0x100005ac , line+1 = 7
 [    3b] set 'is_stmt' to 0
 [    3c] advance line by constant -7 to 0
 [    3e] special opcode 32: address+4 = 0x100005b0 , line+0 = 0
 [    3f] set column to 3
 [    41] set 'is_stmt' to 1
 [    42] special opcode 108: address+24 = 0x100005c8 , line+6 = 6
 [    43] special opcode 76: address+16 = 0x100005d8 , line+2 = 8
 [    44] advance address by 32 to 0x100005f8
 [    46] extended opcode 1:  end of sequence
EOF
testrun_compare ${abs_top_builddir}/src/readelf --debug-dump=decodedline testfile-ppc64-min-instr <<\EOF
DWARF section [29] '.debug_line' at offset 0xdf6:
 CU [b] hello.c
  line:col SBPE* disc isa op address (Statement Block Prologue Epilogue *End)
  /home/fedora/mjw/hello.c (mtime: 0, length: 0)
     5:0   S        0   0  0 0x00000000100005a4 
     6:27  S P      0   0  0 0x00000000100005a4 
     7:8   S        0   0  0 0x00000000100005ac 
     0:8            0   0  0 0x00000000100005b0 
     6:3   S        0   0  0 0x00000000100005c8 
     8:3   S        0   0  0 0x00000000100005d8 
     8:3   S   *    0   0  0 0x00000000100005f7 
EOF
# Two tests for the same code but encoded using DWARF4 or DWARF5.
# Output is identical except for the section offset and CU numbers.
# See tests/testfile-dwarf-45.source.
testfiles testfile-dwarf-4 testfile-dwarf-5
testrun_compare ${abs_top_builddir}/src/readelf --debug-dump=decodedline testfile-dwarf-4 << \EOF
DWARF section [29] '.debug_line' at offset 0x1734:
 CU [b] hello.c
  line:col SBPE* disc isa op address (Statement Block Prologue Epilogue *End)
  /var/tmp/hello/hello.c (mtime: 0, length: 0)
    21:0   S        0   0  0 0x0000000000400510 
    22:1   S        0   0  0 0x0000000000400510 
    22:3            0   0  0 0x0000000000400510 
    25:6            0   0  0 0x0000000000400514 
    25:34  S        0   0  0 0x000000000040051a 
    25:3            0   0  0 0x000000000040051a 
    26:34           0   0  0 0x000000000040051e 
    25:1            1   0  0 0x0000000000400528 
  /var/tmp/hello/hello.h (mtime: 0, length: 0)
     7:18  S        0   0  0 0x000000000040052b 
     9:3   S        0   0  0 0x000000000040052b 
     9:3            0   0  0 0x000000000040052b 
    10:6   S        0   0  0 0x000000000040052f 
    10:5            0   0  0 0x000000000040052f 
    12:7   S        0   0  0 0x0000000000400531 
  /var/tmp/hello/hello.c (mtime: 0, length: 0)
    10:3   S        0   0  0 0x0000000000400531 
    12:3   S        0   0  0 0x0000000000400531 
    12:3            0   0  0 0x0000000000400531 
    13:6   S        0   0  0 0x0000000000400535 
    13:5            0   0  0 0x0000000000400535 
    15:7   S        0   0  0 0x0000000000400539 
    22:3   S        0   0  0 0x0000000000400539 
    22:3            0   0  0 0x0000000000400539 
    23:6   S        0   0  0 0x000000000040053d 
    23:5            0   0  0 0x000000000040053d 
     9:12  S        0   0  0 0x0000000000400550 
    10:1   S        0   0  0 0x0000000000400550 
    12:3   S        0   0  0 0x0000000000400550 
    12:3            0   0  0 0x0000000000400550 
    13:9            0   0  0 0x0000000000400556 
    15:7   S        0   0  0 0x000000000040055f 
    15:3            0   0  0 0x000000000040055f 
    15:7       *    0   0  0 0x0000000000400560 
 CU [21c] world.c
  line:col SBPE* disc isa op address (Statement Block Prologue Epilogue *End)
  /var/tmp/hello/world.c (mtime: 0, length: 0)
    15:0   S        0   0  0 0x0000000000400410 
    16:1   S        0   0  0 0x0000000000400410 
    17:3   S        0   0  0 0x0000000000400410 
    15:3            0   0  0 0x0000000000400410 
    17:1            0   0  0 0x0000000000400419 
    18:6   S        0   0  0 0x000000000040041e 
    18:5            0   0  0 0x000000000040041e 
    22:7   S        0   0  0 0x0000000000400421 
    22:3   S   *    0   0  0 0x000000000040042f 
     6:0   S        0   0  0 0x0000000000400570 
     7:1   S        0   0  0 0x0000000000400570 
     7:3            0   0  0 0x0000000000400570 
     7:6            1   0  0 0x0000000000400575 
     7:24           0   0  0 0x0000000000400578 
    10:17  S        0   0  0 0x000000000040057d 
    10:3            0   0  0 0x000000000040057d 
  /var/tmp/hello/hello.h (mtime: 0, length: 0)
    10:10           0   0  0 0x0000000000400583 
  /var/tmp/hello/world.c (mtime: 0, length: 0)
    10:7            0   0  0 0x0000000000400585 
  /var/tmp/hello/hello.h (mtime: 0, length: 0)
     7:10  S        0   0  0 0x0000000000400588 
     9:3   S        0   0  0 0x0000000000400588 
    10:3            0   0  0 0x0000000000400588 
    12:7   S        0   0  0 0x000000000040058f 
    12:3            0   0  0 0x000000000040058f 
  /var/tmp/hello/world.c (mtime: 0, length: 0)
    11:10           0   0  0 0x0000000000400598 
    11:1       *    0   0  0 0x000000000040059a 
EOF
testrun_compare ${abs_top_builddir}/src/readelf --debug-dump=decodedline testfile-dwarf-5 << \EOF
DWARF section [29] '.debug_line' at offset 0x171f:
 CU [c] hello.c
  line:col SBPE* disc isa op address (Statement Block Prologue Epilogue *End)
  /var/tmp/hello/hello.c (mtime: 0, length: 0)
    21:0   S        0   0  0 0x0000000000400510 
    22:1   S        0   0  0 0x0000000000400510 
    22:3            0   0  0 0x0000000000400510 
    25:6            0   0  0 0x0000000000400514 
    25:34  S        0   0  0 0x000000000040051a 
    25:3            0   0  0 0x000000000040051a 
    26:34           0   0  0 0x000000000040051e 
    25:1            1   0  0 0x0000000000400528 
  /var/tmp/hello/hello.h (mtime: 0, length: 0)
     7:18  S        0   0  0 0x000000000040052b 
     9:3   S        0   0  0 0x000000000040052b 
     9:3            0   0  0 0x000000000040052b 
    10:6   S        0   0  0 0x000000000040052f 
    10:5            0   0  0 0x000000000040052f 
    12:7   S        0   0  0 0x0000000000400531 
  /var/tmp/hello/hello.c (mtime: 0, length: 0)
    10:3   S        0   0  0 0x0000000000400531 
    12:3   S        0   0  0 0x0000000000400531 
    12:3            0   0  0 0x0000000000400531 
    13:6   S        0   0  0 0x0000000000400535 
    13:5            0   0  0 0x0000000000400535 
    15:7   S        0   0  0 0x0000000000400539 
    22:3   S        0   0  0 0x0000000000400539 
    22:3            0   0  0 0x0000000000400539 
    23:6   S        0   0  0 0x000000000040053d 
    23:5            0   0  0 0x000000000040053d 
     9:12  S        0   0  0 0x0000000000400550 
    10:1   S        0   0  0 0x0000000000400550 
    12:3   S        0   0  0 0x0000000000400550 
    12:3            0   0  0 0x0000000000400550 
    13:9            0   0  0 0x0000000000400556 
    15:7   S        0   0  0 0x000000000040055f 
    15:3            0   0  0 0x000000000040055f 
    15:7       *    0   0  0 0x0000000000400560 
 CU [218] world.c
  line:col SBPE* disc isa op address (Statement Block Prologue Epilogue *End)
  /var/tmp/hello/world.c (mtime: 0, length: 0)
    15:0   S        0   0  0 0x0000000000400410 
    16:1   S        0   0  0 0x0000000000400410 
    17:3   S        0   0  0 0x0000000000400410 
    15:3            0   0  0 0x0000000000400410 
    17:1            0   0  0 0x0000000000400419 
    18:6   S        0   0  0 0x000000000040041e 
    18:5            0   0  0 0x000000000040041e 
    22:7   S        0   0  0 0x0000000000400421 
    22:3   S   *    0   0  0 0x000000000040042f 
     6:0   S        0   0  0 0x0000000000400570 
     7:1   S        0   0  0 0x0000000000400570 
     7:3            0   0  0 0x0000000000400570 
     7:6            1   0  0 0x0000000000400575 
     7:24           0   0  0 0x0000000000400578 
    10:17  S        0   0  0 0x000000000040057d 
    10:3            0   0  0 0x000000000040057d 
  /var/tmp/hello/hello.h (mtime: 0, length: 0)
    10:10           0   0  0 0x0000000000400583 
  /var/tmp/hello/world.c (mtime: 0, length: 0)
    10:7            0   0  0 0x0000000000400585 
  /var/tmp/hello/hello.h (mtime: 0, length: 0)
     7:10  S        0   0  0 0x0000000000400588 
     9:3   S        0   0  0 0x0000000000400588 
    10:3            0   0  0 0x0000000000400588 
    12:7   S        0   0  0 0x000000000040058f 
    12:3            0   0  0 0x000000000040058f 
  /var/tmp/hello/world.c (mtime: 0, length: 0)
    11:10           0   0  0 0x0000000000400598 
    11:1       *    0   0  0 0x000000000040059a 
EOF
# After discarding the different offsets in the line number statements,
# the remaining difference between 4 and 5 is (besides the header/length)
# Just the representation of the directory and line tables:
#  Directory table:
# - /opt/local/install/gcc/lib/gcc/x86_64-pc-linux-gnu/9.0.0/include
# +      [path(line_strp)]
# + 0     /var/tmp/hello (90)
# + 1     /opt/local/install/gcc/lib/gcc/x86_64-pc-linux-gnu/9.0.0/include (17)
#
#  File name table:
# - Entry Dir   Time      Size      Name
# - 1     0     0         0         hello.c
# - 2     0     0         0         hello.h
# - 3     1     0         0         stddef.h
# +      [path(line_strp), directory_index(data1)]
# + 0     hello.c (9),  0
# + 1     hello.c (9),  0
# + 2     hello.h (82),  0
# + 3     stddef.h (0),  1
#
#  Directory table:
# - /usr/include
# +      [path(line_strp)]
# + 0     /var/tmp/hello (90)
# + 1     /usr/include (122)
#
#  File name table:
# - Entry Dir   Time      Size      Name
# - 1     0     0         0         world.c
# - 2     0     0         0         hello.h
# - 3     1     0         0         stdlib.h
# +      [path(line_strp), directory_index(data1)]
# + 0     world.c (114),  0
# + 1     world.c (114),  0
# + 2     hello.h (82),  0
# + 3     stdlib.h (105),  1
testrun_compare ${abs_top_builddir}/src/readelf --debug-dump=line testfile-dwarf-4 << \EOF
DWARF section [29] '.debug_line' at offset 0x1734:
Table at offset 0:
 Length:                         608
 DWARF version:                  4
 Prologue length:                119
 Address size:                   8
 Segment selector size:          0
 Min instruction length:         1
 Max operations per instruction: 1
 Initial value if 'is_stmt':     1
 Line base:                      -10
 Line range:                     242
 Opcode base:                    13
Opcodes:
  [ 1]  0 arguments
  [ 2]  1 argument
  [ 3]  1 argument
  [ 4]  1 argument
  [ 5]  1 argument
  [ 6]  0 arguments
  [ 7]  0 arguments
  [ 8]  0 arguments
  [ 9]  1 argument
  [10]  0 arguments
  [11]  0 arguments
  [12]  1 argument
Directory table:
 /opt/local/install/gcc/lib/gcc/x86_64-pc-linux-gnu/9.0.0/include
File name table:
 Entry Dir   Time      Size      Name
 1     0     0         0         hello.c
 2     0     0         0         hello.h
 3     1     0         0         stddef.h
Line number statements:
 [    81] extended opcode 2:  set address to 0x400510 
 [    8c] special opcode 43: address+0 = 0x400510 , line+20 = 21
 [    8d] set column to 1
 [    8f] extended opcode 2:  set address to 0x400510 
 [    9a] special opcode 24: address+0 = 0x400510 , line+1 = 22
 [    9b] set column to 3
 [    9d] extended opcode 2:  set address to 0x400510 
 [    a8] set 'is_stmt' to 0
 [    a9] copy
 [    aa] set column to 6
 [    ac] extended opcode 2:  set address to 0x400514 
 [    b7] special opcode 26: address+0 = 0x400514 , line+3 = 25
 [    b8] set column to 34
 [    ba] extended opcode 2:  set address to 0x40051a 
 [    c5] set 'is_stmt' to 1
 [    c6] copy
 [    c7] set column to 3
 [    c9] extended opcode 2:  set address to 0x40051a 
 [    d4] set 'is_stmt' to 0
 [    d5] copy
 [    d6] set column to 34
 [    d8] extended opcode 2:  set address to 0x40051e 
 [    e3] special opcode 24: address+0 = 0x40051e , line+1 = 26
 [    e4] set column to 1
 [    e6] extended opcode 2:  set address to 0x400528 
 [    f1] extended opcode 4:  set discriminator to 1
 [    f5] special opcode 22: address+0 = 0x400528 , line-1 = 25
 [    f6] set column to 18
 [    f8] extended opcode 2:  set address to 0x40052b 
 [   103] set file to 2
 [   105] set 'is_stmt' to 1
 [   106] advance line by constant -18 to 7
 [   108] copy
 [   109] set column to 3
 [   10b] extended opcode 2:  set address to 0x40052b 
 [   116] special opcode 25: address+0 = 0x40052b , line+2 = 9
 [   117] set column to 3
 [   119] extended opcode 2:  set address to 0x40052b 
 [   124] set 'is_stmt' to 0
 [   125] copy
 [   126] set column to 6
 [   128] extended opcode 2:  set address to 0x40052f 
 [   133] extended opcode 4:  set discriminator to 0
 [   137] set 'is_stmt' to 1
 [   138] special opcode 24: address+0 = 0x40052f , line+1 = 10
 [   139] set column to 5
 [   13b] extended opcode 2:  set address to 0x40052f 
 [   146] set 'is_stmt' to 0
 [   147] copy
 [   148] set column to 7
 [   14a] extended opcode 2:  set address to 0x400531 
 [   155] set 'is_stmt' to 1
 [   156] special opcode 25: address+0 = 0x400531 , line+2 = 12
 [   157] set column to 3
 [   159] extended opcode 2:  set address to 0x400531 
 [   164] set file to 1
 [   166] special opcode 21: address+0 = 0x400531 , line-2 = 10
 [   167] set column to 3
 [   169] extended opcode 2:  set address to 0x400531 
 [   174] special opcode 25: address+0 = 0x400531 , line+2 = 12
 [   175] set column to 3
 [   177] extended opcode 2:  set address to 0x400531 
 [   182] set 'is_stmt' to 0
 [   183] copy
 [   184] set column to 6
 [   186] extended opcode 2:  set address to 0x400535 
 [   191] set 'is_stmt' to 1
 [   192] special opcode 24: address+0 = 0x400535 , line+1 = 13
 [   193] set column to 5
 [   195] extended opcode 2:  set address to 0x400535 
 [   1a0] set 'is_stmt' to 0
 [   1a1] copy
 [   1a2] set column to 7
 [   1a4] extended opcode 2:  set address to 0x400539 
 [   1af] set 'is_stmt' to 1
 [   1b0] special opcode 25: address+0 = 0x400539 , line+2 = 15
 [   1b1] set column to 3
 [   1b3] extended opcode 2:  set address to 0x400539 
 [   1be] special opcode 30: address+0 = 0x400539 , line+7 = 22
 [   1bf] set column to 3
 [   1c1] extended opcode 2:  set address to 0x400539 
 [   1cc] set 'is_stmt' to 0
 [   1cd] copy
 [   1ce] set column to 6
 [   1d0] extended opcode 2:  set address to 0x40053d 
 [   1db] set 'is_stmt' to 1
 [   1dc] special opcode 24: address+0 = 0x40053d , line+1 = 23
 [   1dd] set column to 5
 [   1df] extended opcode 2:  set address to 0x40053d 
 [   1ea] set 'is_stmt' to 0
 [   1eb] copy
 [   1ec] set column to 12
 [   1ee] extended opcode 2:  set address to 0x400550 
 [   1f9] set 'is_stmt' to 1
 [   1fa] advance line by constant -14 to 9
 [   1fc] copy
 [   1fd] set column to 1
 [   1ff] extended opcode 2:  set address to 0x400550 
 [   20a] special opcode 24: address+0 = 0x400550 , line+1 = 10
 [   20b] set column to 3
 [   20d] extended opcode 2:  set address to 0x400550 
 [   218] special opcode 25: address+0 = 0x400550 , line+2 = 12
 [   219] set column to 3
 [   21b] extended opcode 2:  set address to 0x400550 
 [   226] set 'is_stmt' to 0
 [   227] copy
 [   228] set column to 9
 [   22a] extended opcode 2:  set address to 0x400556 
 [   235] special opcode 24: address+0 = 0x400556 , line+1 = 13
 [   236] set column to 7
 [   238] extended opcode 2:  set address to 0x40055f 
 [   243] set 'is_stmt' to 1
 [   244] special opcode 25: address+0 = 0x40055f , line+2 = 15
 [   245] set column to 3
 [   247] extended opcode 2:  set address to 0x40055f 
 [   252] set 'is_stmt' to 0
 [   253] copy
 [   254] set column to 7
 [   256] extended opcode 2:  set address to 0x400561
 [   261] extended opcode 1:  end of sequence
Table at offset 612:
 Length:                         450
 DWARF version:                  4
 Prologue length:                67
 Address size:                   8
 Segment selector size:          0
 Min instruction length:         1
 Max operations per instruction: 1
 Initial value if 'is_stmt':     1
 Line base:                      -10
 Line range:                     242
 Opcode base:                    13
Opcodes:
  [ 1]  0 arguments
  [ 2]  1 argument
  [ 3]  1 argument
  [ 4]  1 argument
  [ 5]  1 argument
  [ 6]  0 arguments
  [ 7]  0 arguments
  [ 8]  0 arguments
  [ 9]  1 argument
  [10]  0 arguments
  [11]  0 arguments
  [12]  1 argument
Directory table:
 /usr/include
File name table:
 Entry Dir   Time      Size      Name
 1     0     0         0         world.c
 2     0     0         0         hello.h
 3     1     0         0         stdlib.h
Line number statements:
 [   2b1] extended opcode 2:  set address to 0x400410 
 [   2bc] special opcode 37: address+0 = 0x400410 , line+14 = 15
 [   2bd] set column to 1
 [   2bf] extended opcode 2:  set address to 0x400410