Squashed 'third_party/elfutils/' content from commit 555e15e

Change-Id: I61cde98949e47e5c8c09c33260de17f30921be79
git-subtree-dir: third_party/elfutils
git-subtree-split: 555e15ebe8bf1eb33d00747173cfc80cc65648a4
diff --git a/tests/run-readelf-line.sh b/tests/run-readelf-line.sh
new file mode 100755
index 0000000..32bcf9d
--- /dev/null
+++ b/tests/run-readelf-line.sh
@@ -0,0 +1,259 @@
+#! /bin/sh
+# Copyright (C) 2013 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 <http://www.gnu.org/licenses/>.
+
+. $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 <<EOF
+
+DWARF section [30] '.debug_line' at offset 0x15f6:
+
+Table at offset 0:
+
+ Length:                     83
+ DWARF version:              2
+ Prologue length:            43
+ Minimum instruction length: 1
+ Maximum 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         foo.c
+ 2     0     0         0         foobarbaz.h
+
+Line number statements:
+ [    35] extended opcode 2:  set address to 0x80482f0 <main>
+ [    3c] advance line by constant 15 to 16
+ [    3e] copy
+ [    3f] special opcode 159: address+10 = 0x80482fa <main+0xa>, line+1 = 17
+ [    40] special opcode 117: address+7 = 0x8048301 <main+0x11>, line+1 = 18
+ [    41] advance line by constant -9 to 9
+ [    43] special opcode 200: address+13 = 0x804830e <main+0x1e>, line+0 = 9
+ [    44] special opcode 48: address+2 = 0x8048310 <main+0x20>, line+2 = 11
+ [    45] special opcode 58: address+3 = 0x8048313 <main+0x23>, line-2 = 9
+ [    46] special opcode 48: address+2 = 0x8048315 <main+0x25>, line+2 = 11
+ [    47] special opcode 44: address+2 = 0x8048317 <main+0x27>, line-2 = 9
+ [    48] advance line by constant 13 to 22
+ [    4a] special opcode 46: address+2 = 0x8048319 <main+0x29>, line+0 = 22
+ [    4b] advance line by constant -13 to 9
+ [    4d] special opcode 60: address+3 = 0x804831c <main+0x2c>, line+0 = 9
+ [    4e] advance line by constant 12 to 21
+ [    50] special opcode 60: address+3 = 0x804831f <main+0x2f>, line+0 = 21
+ [    51] special opcode 61: address+3 = 0x8048322 <main+0x32>, 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
+ Minimum instruction length: 1
+ Maximum 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 <nobar>
+ [    84] advance line by constant 12 to 13
+ [    86] copy
+ [    87] special opcode 19: address+0 = 0x8048330 <nobar>, 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 <bar>
+ [    94] advance line by constant 18 to 19
+ [    96] copy
+ [    97] special opcode 19: address+0 = 0x8048440 <bar>, line+1 = 20
+ [    98] advance line by constant -12 to 8
+ [    9a] special opcode 200: address+13 = 0x804844d <bar+0xd>, line+0 = 8
+ [    9b] advance line by constant 14 to 22
+ [    9d] special opcode 74: address+4 = 0x8048451 <bar+0x11>, 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
+ Minimum instruction length: 1
+ Maximum 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 <nobaz>
+ [    df] advance line by constant 12 to 13
+ [    e1] copy
+ [    e2] special opcode 19: address+0 = 0x8048340 <nobaz>, 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 <baz>
+ [    ef] advance line by constant 18 to 19
+ [    f1] copy
+ [    f2] special opcode 74: address+4 = 0x8048464 <baz+0x4>, line+0 = 19
+ [    f3] special opcode 75: address+4 = 0x8048468 <baz+0x8>, line+1 = 20
+ [    f4] extended opcode 4:  set discriminator to 1
+ [    f8] special opcode 78: address+4 = 0x804846c <baz+0xc>, line+4 = 24
+ [    f9] special opcode 187: address+12 = 0x8048478 <baz+0x18>, line+1 = 25
+ [    fa] special opcode 87: address+5 = 0x804847d <baz+0x1d>, line-1 = 24
+ [    fb] special opcode 61: address+3 = 0x8048480 <baz+0x20>, line+1 = 25
+ [    fc] special opcode 101: address+6 = 0x8048486 <baz+0x26>, line-1 = 24
+ [    fd] special opcode 61: address+3 = 0x8048489 <baz+0x29>, line+1 = 25
+ [    fe] special opcode 87: address+5 = 0x804848e <baz+0x2e>, line-1 = 24
+ [    ff] advance line by constant -16 to 8
+ [   101] special opcode 46: address+2 = 0x8048490 <baz+0x30>, line+0 = 8
+ [   102] advance line by constant 20 to 28
+ [   104] special opcode 186: address+12 = 0x804849c <baz+0x3c>, line+0 = 28
+ [   105] advance line by constant -20 to 8
+ [   107] special opcode 88: address+5 = 0x80484a1 <baz+0x41>, line+0 = 8
+ [   108] advance line by constant 13 to 21
+ [   10a] advance address by constant 17 to 0x80484b2 <baz+0x52>
+ [   10b] special opcode 32: address+1 = 0x80484b3 <baz+0x53>, 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 <main>
+    17:0   S        0   0  0 0x080482fa <main+0xa>
+    18:0   S        0   0  0 0x08048301 <main+0x11>
+     9:0   S        0   0  0 0x0804830e <main+0x1e>
+    11:0   S        0   0  0 0x08048310 <main+0x20>
+     9:0   S        0   0  0 0x08048313 <main+0x23>
+    11:0   S        0   0  0 0x08048315 <main+0x25>
+     9:0   S        0   0  0 0x08048317 <main+0x27>
+    22:0   S        0   0  0 0x08048319 <main+0x29>
+     9:0   S        0   0  0 0x0804831c <main+0x2c>
+    21:0   S        0   0  0 0x0804831f <main+0x2f>
+    22:0   S        0   0  0 0x08048322 <main+0x32>
+    22:0   S   *    0   0  0 0x08048323 <main+0x33>
+
+ 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 <nobar>
+    14:0   S        0   0  0 0x08048330 <nobar>
+    14:0   S   *    0   0  0 0x0804833a <nobar+0xa>
+
+    19:0   S        0   0  0 0x08048440 <bar>
+    20:0   S        0   0  0 0x08048440 <bar>
+     8:0   S        0   0  0 0x0804844d <bar+0xd>
+    22:0   S        0   0  0 0x08048451 <bar+0x11>
+    22:0   S   *    0   0  0 0x08048451 <bar+0x11>
+
+ 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 <nobaz>
+    14:0   S        0   0  0 0x08048340 <nobaz>
+    14:0   S   *    0   0  0 0x0804834a <nobaz+0xa>
+
+    19:0   S        0   0  0 0x08048460 <baz>
+    19:0   S        0   0  0 0x08048464 <baz+0x4>
+    20:0   S        0   0  0 0x08048468 <baz+0x8>
+    24:0   S        1   0  0 0x0804846c <baz+0xc>
+    25:0   S        0   0  0 0x08048478 <baz+0x18>
+    24:0   S        0   0  0 0x0804847d <baz+0x1d>
+    25:0   S        0   0  0 0x08048480 <baz+0x20>
+    24:0   S        0   0  0 0x08048486 <baz+0x26>
+    25:0   S        0   0  0 0x08048489 <baz+0x29>
+    24:0   S        0   0  0 0x0804848e <baz+0x2e>
+     8:0   S        0   0  0 0x08048490 <baz+0x30>
+    28:0   S        0   0  0 0x0804849c <baz+0x3c>
+     8:0   S        0   0  0 0x080484a1 <baz+0x41>
+    21:0   S        0   0  0 0x080484b3 <baz+0x53>
+    21:0   S   *    0   0  0 0x080484bb <baz+0x5b>
+
+EOF
+
+exit 0