Brian Silverman | 8649792 | 2018-02-10 19:28:39 -0500 | [diff] [blame] | 1 | #! /bin/sh |
| 2 | # Copyright (C) 2013 Red Hat, Inc. |
| 3 | # This file is part of elfutils. |
| 4 | # |
| 5 | # This file is free software; you can redistribute it and/or modify |
| 6 | # it under the terms of the GNU General Public License as published by |
| 7 | # the Free Software Foundation; either version 3 of the License, or |
| 8 | # (at your option) any later version. |
| 9 | # |
| 10 | # elfutils is distributed in the hope that it will be useful, but |
| 11 | # WITHOUT ANY WARRANTY; without even the implied warranty of |
| 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 13 | # GNU General Public License for more details. |
| 14 | # |
| 15 | # You should have received a copy of the GNU General Public License |
| 16 | # along with this program. If not, see <http://www.gnu.org/licenses/>. |
| 17 | |
| 18 | . $srcdir/test-subr.sh |
| 19 | |
| 20 | # Tests readelf --debug-dump=line and --debug-dump=decodedline |
| 21 | # See run-readelf-aranges for testfiles. |
| 22 | |
| 23 | testfiles testfilefoobarbaz |
| 24 | |
| 25 | testrun_compare ${abs_top_builddir}/src/readelf --debug-dump=line testfilefoobarbaz <<EOF |
| 26 | |
| 27 | DWARF section [30] '.debug_line' at offset 0x15f6: |
| 28 | |
| 29 | Table at offset 0: |
| 30 | |
| 31 | Length: 83 |
| 32 | DWARF version: 2 |
| 33 | Prologue length: 43 |
| 34 | Minimum instruction length: 1 |
| 35 | Maximum operations per instruction: 1 |
| 36 | Initial value if 'is_stmt': 1 |
| 37 | Line base: -5 |
| 38 | Line range: 14 |
| 39 | Opcode base: 13 |
| 40 | |
| 41 | Opcodes: |
| 42 | [ 1] 0 arguments |
| 43 | [ 2] 1 argument |
| 44 | [ 3] 1 argument |
| 45 | [ 4] 1 argument |
| 46 | [ 5] 1 argument |
| 47 | [ 6] 0 arguments |
| 48 | [ 7] 0 arguments |
| 49 | [ 8] 0 arguments |
| 50 | [ 9] 1 argument |
| 51 | [10] 0 arguments |
| 52 | [11] 0 arguments |
| 53 | [12] 1 argument |
| 54 | |
| 55 | Directory table: |
| 56 | |
| 57 | File name table: |
| 58 | Entry Dir Time Size Name |
| 59 | 1 0 0 0 foo.c |
| 60 | 2 0 0 0 foobarbaz.h |
| 61 | |
| 62 | Line number statements: |
| 63 | [ 35] extended opcode 2: set address to 0x80482f0 <main> |
| 64 | [ 3c] advance line by constant 15 to 16 |
| 65 | [ 3e] copy |
| 66 | [ 3f] special opcode 159: address+10 = 0x80482fa <main+0xa>, line+1 = 17 |
| 67 | [ 40] special opcode 117: address+7 = 0x8048301 <main+0x11>, line+1 = 18 |
| 68 | [ 41] advance line by constant -9 to 9 |
| 69 | [ 43] special opcode 200: address+13 = 0x804830e <main+0x1e>, line+0 = 9 |
| 70 | [ 44] special opcode 48: address+2 = 0x8048310 <main+0x20>, line+2 = 11 |
| 71 | [ 45] special opcode 58: address+3 = 0x8048313 <main+0x23>, line-2 = 9 |
| 72 | [ 46] special opcode 48: address+2 = 0x8048315 <main+0x25>, line+2 = 11 |
| 73 | [ 47] special opcode 44: address+2 = 0x8048317 <main+0x27>, line-2 = 9 |
| 74 | [ 48] advance line by constant 13 to 22 |
| 75 | [ 4a] special opcode 46: address+2 = 0x8048319 <main+0x29>, line+0 = 22 |
| 76 | [ 4b] advance line by constant -13 to 9 |
| 77 | [ 4d] special opcode 60: address+3 = 0x804831c <main+0x2c>, line+0 = 9 |
| 78 | [ 4e] advance line by constant 12 to 21 |
| 79 | [ 50] special opcode 60: address+3 = 0x804831f <main+0x2f>, line+0 = 21 |
| 80 | [ 51] special opcode 61: address+3 = 0x8048322 <main+0x32>, line+1 = 22 |
| 81 | [ 52] advance address by 2 to 0x8048324 |
| 82 | [ 54] extended opcode 1: end of sequence |
| 83 | |
| 84 | Table at offset 87: |
| 85 | |
| 86 | Length: 72 |
| 87 | DWARF version: 2 |
| 88 | Prologue length: 28 |
| 89 | Minimum instruction length: 1 |
| 90 | Maximum operations per instruction: 1 |
| 91 | Initial value if 'is_stmt': 1 |
| 92 | Line base: -5 |
| 93 | Line range: 14 |
| 94 | Opcode base: 13 |
| 95 | |
| 96 | Opcodes: |
| 97 | [ 1] 0 arguments |
| 98 | [ 2] 1 argument |
| 99 | [ 3] 1 argument |
| 100 | [ 4] 1 argument |
| 101 | [ 5] 1 argument |
| 102 | [ 6] 0 arguments |
| 103 | [ 7] 0 arguments |
| 104 | [ 8] 0 arguments |
| 105 | [ 9] 1 argument |
| 106 | [10] 0 arguments |
| 107 | [11] 0 arguments |
| 108 | [12] 1 argument |
| 109 | |
| 110 | Directory table: |
| 111 | |
| 112 | File name table: |
| 113 | Entry Dir Time Size Name |
| 114 | 1 0 0 0 bar.c |
| 115 | |
| 116 | Line number statements: |
| 117 | [ 7d] extended opcode 2: set address to 0x8048330 <nobar> |
| 118 | [ 84] advance line by constant 12 to 13 |
| 119 | [ 86] copy |
| 120 | [ 87] special opcode 19: address+0 = 0x8048330 <nobar>, line+1 = 14 |
| 121 | [ 88] advance address by 11 to 0x804833b |
| 122 | [ 8a] extended opcode 1: end of sequence |
| 123 | [ 8d] extended opcode 2: set address to 0x8048440 <bar> |
| 124 | [ 94] advance line by constant 18 to 19 |
| 125 | [ 96] copy |
| 126 | [ 97] special opcode 19: address+0 = 0x8048440 <bar>, line+1 = 20 |
| 127 | [ 98] advance line by constant -12 to 8 |
| 128 | [ 9a] special opcode 200: address+13 = 0x804844d <bar+0xd>, line+0 = 8 |
| 129 | [ 9b] advance line by constant 14 to 22 |
| 130 | [ 9d] special opcode 74: address+4 = 0x8048451 <bar+0x11>, line+0 = 22 |
| 131 | [ 9e] advance address by 1 to 0x8048452 |
| 132 | [ a0] extended opcode 1: end of sequence |
| 133 | |
| 134 | Table at offset 163: |
| 135 | |
| 136 | Length: 106 |
| 137 | DWARF version: 2 |
| 138 | Prologue length: 43 |
| 139 | Minimum instruction length: 1 |
| 140 | Maximum operations per instruction: 1 |
| 141 | Initial value if 'is_stmt': 1 |
| 142 | Line base: -5 |
| 143 | Line range: 14 |
| 144 | Opcode base: 13 |
| 145 | |
| 146 | Opcodes: |
| 147 | [ 1] 0 arguments |
| 148 | [ 2] 1 argument |
| 149 | [ 3] 1 argument |
| 150 | [ 4] 1 argument |
| 151 | [ 5] 1 argument |
| 152 | [ 6] 0 arguments |
| 153 | [ 7] 0 arguments |
| 154 | [ 8] 0 arguments |
| 155 | [ 9] 1 argument |
| 156 | [10] 0 arguments |
| 157 | [11] 0 arguments |
| 158 | [12] 1 argument |
| 159 | |
| 160 | Directory table: |
| 161 | |
| 162 | File name table: |
| 163 | Entry Dir Time Size Name |
| 164 | 1 0 0 0 baz.c |
| 165 | 2 0 0 0 foobarbaz.h |
| 166 | |
| 167 | Line number statements: |
| 168 | [ d8] extended opcode 2: set address to 0x8048340 <nobaz> |
| 169 | [ df] advance line by constant 12 to 13 |
| 170 | [ e1] copy |
| 171 | [ e2] special opcode 19: address+0 = 0x8048340 <nobaz>, line+1 = 14 |
| 172 | [ e3] advance address by 11 to 0x804834b |
| 173 | [ e5] extended opcode 1: end of sequence |
| 174 | [ e8] extended opcode 2: set address to 0x8048460 <baz> |
| 175 | [ ef] advance line by constant 18 to 19 |
| 176 | [ f1] copy |
| 177 | [ f2] special opcode 74: address+4 = 0x8048464 <baz+0x4>, line+0 = 19 |
| 178 | [ f3] special opcode 75: address+4 = 0x8048468 <baz+0x8>, line+1 = 20 |
| 179 | [ f4] extended opcode 4: set discriminator to 1 |
| 180 | [ f8] special opcode 78: address+4 = 0x804846c <baz+0xc>, line+4 = 24 |
| 181 | [ f9] special opcode 187: address+12 = 0x8048478 <baz+0x18>, line+1 = 25 |
| 182 | [ fa] special opcode 87: address+5 = 0x804847d <baz+0x1d>, line-1 = 24 |
| 183 | [ fb] special opcode 61: address+3 = 0x8048480 <baz+0x20>, line+1 = 25 |
| 184 | [ fc] special opcode 101: address+6 = 0x8048486 <baz+0x26>, line-1 = 24 |
| 185 | [ fd] special opcode 61: address+3 = 0x8048489 <baz+0x29>, line+1 = 25 |
| 186 | [ fe] special opcode 87: address+5 = 0x804848e <baz+0x2e>, line-1 = 24 |
| 187 | [ ff] advance line by constant -16 to 8 |
| 188 | [ 101] special opcode 46: address+2 = 0x8048490 <baz+0x30>, line+0 = 8 |
| 189 | [ 102] advance line by constant 20 to 28 |
| 190 | [ 104] special opcode 186: address+12 = 0x804849c <baz+0x3c>, line+0 = 28 |
| 191 | [ 105] advance line by constant -20 to 8 |
| 192 | [ 107] special opcode 88: address+5 = 0x80484a1 <baz+0x41>, line+0 = 8 |
| 193 | [ 108] advance line by constant 13 to 21 |
| 194 | [ 10a] advance address by constant 17 to 0x80484b2 <baz+0x52> |
| 195 | [ 10b] special opcode 32: address+1 = 0x80484b3 <baz+0x53>, line+0 = 21 |
| 196 | [ 10c] advance address by 9 to 0x80484bc |
| 197 | [ 10e] extended opcode 1: end of sequence |
| 198 | EOF |
| 199 | |
| 200 | testrun_compare ${abs_top_builddir}/src/readelf --debug-dump=decodedline testfilefoobarbaz <<\EOF |
| 201 | |
| 202 | DWARF section [30] '.debug_line' at offset 0x15f6: |
| 203 | |
| 204 | CU [b] foo.c |
| 205 | line:col SBPE* disc isa op address (Statement Block Prologue Epilogue *End) |
| 206 | /home/mark/src/tests/foobarbaz/foo.c (mtime: 0, length: 0) |
| 207 | 16:0 S 0 0 0 0x080482f0 <main> |
| 208 | 17:0 S 0 0 0 0x080482fa <main+0xa> |
| 209 | 18:0 S 0 0 0 0x08048301 <main+0x11> |
| 210 | 9:0 S 0 0 0 0x0804830e <main+0x1e> |
| 211 | 11:0 S 0 0 0 0x08048310 <main+0x20> |
| 212 | 9:0 S 0 0 0 0x08048313 <main+0x23> |
| 213 | 11:0 S 0 0 0 0x08048315 <main+0x25> |
| 214 | 9:0 S 0 0 0 0x08048317 <main+0x27> |
| 215 | 22:0 S 0 0 0 0x08048319 <main+0x29> |
| 216 | 9:0 S 0 0 0 0x0804831c <main+0x2c> |
| 217 | 21:0 S 0 0 0 0x0804831f <main+0x2f> |
| 218 | 22:0 S 0 0 0 0x08048322 <main+0x32> |
| 219 | 22:0 S * 0 0 0 0x08048323 <main+0x33> |
| 220 | |
| 221 | CU [141] bar.c |
| 222 | line:col SBPE* disc isa op address (Statement Block Prologue Epilogue *End) |
| 223 | /home/mark/src/tests/foobarbaz/bar.c (mtime: 0, length: 0) |
| 224 | 13:0 S 0 0 0 0x08048330 <nobar> |
| 225 | 14:0 S 0 0 0 0x08048330 <nobar> |
| 226 | 14:0 S * 0 0 0 0x0804833a <nobar+0xa> |
| 227 | |
| 228 | 19:0 S 0 0 0 0x08048440 <bar> |
| 229 | 20:0 S 0 0 0 0x08048440 <bar> |
| 230 | 8:0 S 0 0 0 0x0804844d <bar+0xd> |
| 231 | 22:0 S 0 0 0 0x08048451 <bar+0x11> |
| 232 | 22:0 S * 0 0 0 0x08048451 <bar+0x11> |
| 233 | |
| 234 | CU [1dc] baz.c |
| 235 | line:col SBPE* disc isa op address (Statement Block Prologue Epilogue *End) |
| 236 | /home/mark/src/tests/foobarbaz/baz.c (mtime: 0, length: 0) |
| 237 | 13:0 S 0 0 0 0x08048340 <nobaz> |
| 238 | 14:0 S 0 0 0 0x08048340 <nobaz> |
| 239 | 14:0 S * 0 0 0 0x0804834a <nobaz+0xa> |
| 240 | |
| 241 | 19:0 S 0 0 0 0x08048460 <baz> |
| 242 | 19:0 S 0 0 0 0x08048464 <baz+0x4> |
| 243 | 20:0 S 0 0 0 0x08048468 <baz+0x8> |
| 244 | 24:0 S 1 0 0 0x0804846c <baz+0xc> |
| 245 | 25:0 S 0 0 0 0x08048478 <baz+0x18> |
| 246 | 24:0 S 0 0 0 0x0804847d <baz+0x1d> |
| 247 | 25:0 S 0 0 0 0x08048480 <baz+0x20> |
| 248 | 24:0 S 0 0 0 0x08048486 <baz+0x26> |
| 249 | 25:0 S 0 0 0 0x08048489 <baz+0x29> |
| 250 | 24:0 S 0 0 0 0x0804848e <baz+0x2e> |
| 251 | 8:0 S 0 0 0 0x08048490 <baz+0x30> |
| 252 | 28:0 S 0 0 0 0x0804849c <baz+0x3c> |
| 253 | 8:0 S 0 0 0 0x080484a1 <baz+0x41> |
| 254 | 21:0 S 0 0 0 0x080484b3 <baz+0x53> |
| 255 | 21:0 S * 0 0 0 0x080484bb <baz+0x5b> |
| 256 | |
| 257 | EOF |
| 258 | |
| 259 | exit 0 |