1/* 2 Copyright 2009-2020 Free Software Foundation, Inc. 3 4 This program is free software; you can redistribute it and/or modify 5 it under the terms of the GNU General Public License as published by 6 the Free Software Foundation; either version 3 of the License, or 7 (at your option) any later version. 8 9 This program is distributed in the hope that it will be useful, 10 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 GNU General Public License for more details. 13 14 You should have received a copy of the GNU General Public License 15 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 16 17/* This was compiled from a trivial program just to test the 18 DW_OP_stack_value and DW_OP_implicit_value operators: 19 20 unsigned int func (unsigned int arg) __attribute__ ((__noinline__)); 21 22 unsigned int func (unsigned int arg) 23 { 24 unsigned int uses_stack_op = 23; 25 unsigned int uses_lit_op = 0x7fffffff; 26 unsigned int result = arg; 27 28 if (arg % 2) 29 result += uses_lit_op + uses_stack_op; 30 else 31 { 32 ++uses_stack_op; 33 ++uses_lit_op; 34 35 result -= uses_stack_op + uses_lit_op; 36 } 37 38 return result * uses_stack_op; // line 19, see the .exp file 39 } 40 41 int main (int argc, char *argv[]) 42 { 43 return func (1024); 44 } 45 46 Then it was compiled with: 47 48 gcc -fvar-tracking{,-assignments} -gdwarf-3 49 -fno-inline{,-functions,-small-functions,-functions-called-once} 50 -O2 51 52*/ 53 54 .file "valop.c" 55 .section .debug_abbrev,"",@progbits 56.Ldebug_abbrev0: 57 .section .debug_info,"",@progbits 58.Ldebug_info0: 59 .section .debug_line,"",@progbits 60.Ldebug_line0: 61 .text 62.Ltext0: 63 .p2align 4,,15 64.globl func 65 .type func, @function 66func: 67.LFB0: 68 .file 1 "valop.c" 69 .loc 1 4 0 70 .cfi_startproc 71.LVL0: 72 pushl %ebp 73 .cfi_def_cfa_offset 8 74 movl %esp, %ebp 75 .cfi_offset 5, -8 76 .cfi_def_cfa_register 5 77 .loc 1 4 0 78 movl 8(%ebp), %eax 79.LVL1: 80 .loc 1 9 0 81 testb $1, %al 82 jne .L5 83.LVL2: 84 .loc 1 16 0 85 addl $2147483624, %eax 86.LVL3: 87 .loc 1 13 0 88 movl $24, %edx 89.LVL4: 90 .loc 1 16 0 91 imull %edx, %eax 92.LVL5: 93 .loc 1 20 0 94 popl %ebp 95 .cfi_remember_state 96 .cfi_restore 5 97 .cfi_def_cfa 4, 4 98 ret 99.LVL6: 100 .p2align 4,,7 101 .p2align 3 102.L5: 103 .cfi_restore_state 104 .loc 1 10 0 105 subl $2147483626, %eax 106.LVL7: 107 .loc 1 5 0 108 movl $23, %edx 109.LVL8: 110 .loc 1 16 0 111 imull %edx, %eax 112.LVL9: 113 .loc 1 20 0 114 popl %ebp 115 .cfi_def_cfa 4, 4 116 .cfi_restore 5 117 ret 118 .cfi_endproc 119.LFE0: 120 .size func, .-func 121 .p2align 4,,15 122.globl _start 123 .type _start, @function 124_start: 125.LFB1: 126 .loc 1 23 0 127 .cfi_startproc 128.LVL10: 129 pushl %ebp 130 .cfi_def_cfa_offset 8 131 movl %esp, %ebp 132 .cfi_offset 5, -8 133 .cfi_def_cfa_register 5 134 subl $4, %esp 135 .loc 1 24 0 136 movl $1024, (%esp) 137 call func 138.LVL11: 139 .loc 1 25 0 140 leave 141 .cfi_restore 5 142 .cfi_def_cfa 4, 4 143 ret 144 .cfi_endproc 145.LFE1: 146 .size _start, .-_start 147.Letext0: 148 .section .debug_loc,"",@progbits 149.Ldebug_loc0: 150.LLST0: 151 .long .LVL0-.Ltext0 152 .long .LVL2-.Ltext0 153 .value 0x4 154 .byte 0x47 155 .byte 0x9f 156 .byte 0x93 157 .uleb128 0x4 158 .long .LVL2-.Ltext0 159 .long .LVL4-.Ltext0 160 .value 0x4 161 .byte 0x48 162 .byte 0x9f 163 .byte 0x93 164 .uleb128 0x4 165 .long .LVL4-.Ltext0 166 .long .LVL6-.Ltext0 167 .value 0x1 168 .byte 0x52 169 .long .LVL6-.Ltext0 170 .long .LVL8-.Ltext0 171 .value 0x4 172 .byte 0x47 173 .byte 0x9f 174 .byte 0x93 175 .uleb128 0x4 176 .long .LVL8-.Ltext0 177 .long .LFE0-.Ltext0 178 .value 0x1 179 .byte 0x52 180 .long 0x0 181 .long 0x0 182.LLST1: 183 .long .LVL0-.Ltext0 184 .long .LVL2-.Ltext0 185 .value 0x6 186 .byte 0x9e 187 .uleb128 0x4 188 .long 0x7fffffff 189 .long .LVL2-.Ltext0 190 .long .LVL6-.Ltext0 191 .value 0x6 192 .byte 0x9e 193 .uleb128 0x4 194 .long 0x80000000 195 .long .LVL6-.Ltext0 196 .long .LFE0-.Ltext0 197 .value 0x6 198 .byte 0x9e 199 .uleb128 0x4 200 .long 0x7fffffff 201 .long 0x0 202 .long 0x0 203.LLST2: 204 .long .LVL1-.Ltext0 205 .long .LVL3-.Ltext0 206 .value 0x1 207 .byte 0x50 208 .long .LVL3-.Ltext0 209 .long .LVL5-.Ltext0 210 .value 0x1 211 .byte 0x50 212 .long .LVL6-.Ltext0 213 .long .LVL7-.Ltext0 214 .value 0x1 215 .byte 0x50 216 .long .LVL7-.Ltext0 217 .long .LVL9-.Ltext0 218 .value 0x1 219 .byte 0x50 220 .long 0x0 221 .long 0x0 222.LLST3: 223 .long .LVL10-.Ltext0 224 .long .LVL11-1-.Ltext0 225 .value 0x2 226 .byte 0x91 227 .sleb128 0 228 .long 0x0 229 .long 0x0 230.LLST4: 231 .long .LVL10-.Ltext0 232 .long .LVL11-1-.Ltext0 233 .value 0x2 234 .byte 0x91 235 .sleb128 4 236 .long 0x0 237 .long 0x0 238 .section .debug_info 239 .long 0xd4 240 .value 0x3 241 .long .Ldebug_abbrev0 242 .byte 0x4 243 .uleb128 0x1 244 .long .LASF9 245 .byte 0x1 246 .long .LASF10 247 .long .LASF11 248 .long .Ltext0 249 .long .Letext0 250 .long .Ldebug_line0 251 .uleb128 0x2 252 .byte 0x1 253 .long .LASF3 254 .byte 0x1 255 .byte 0x3 256 .byte 0x1 257 .long 0x7c 258 .long .LFB0 259 .long .LFE0 260 .byte 0x1 261 .byte 0x9c 262 .long 0x7c 263 .uleb128 0x3 264 .string "arg" 265 .byte 0x1 266 .byte 0x3 267 .long 0x7c 268 .byte 0x2 269 .byte 0x91 270 .sleb128 0 271 .uleb128 0x4 272 .long .LASF0 273 .byte 0x1 274 .byte 0x5 275 .long 0x7c 276 .long .LLST0 277 .uleb128 0x4 278 .long .LASF1 279 .byte 0x1 280 .byte 0x6 281 .long 0x7c 282 .long .LLST1 283 .uleb128 0x4 284 .long .LASF2 285 .byte 0x1 286 .byte 0x7 287 .long 0x7c 288 .long .LLST2 289 .byte 0x0 290 .uleb128 0x5 291 .byte 0x4 292 .byte 0x7 293 .long .LASF7 294 .uleb128 0x2 295 .byte 0x1 296 .long .LASF4 297 .byte 0x1 298 .byte 0x16 299 .byte 0x1 300 .long 0xbd 301 .long .LFB1 302 .long .LFE1 303 .byte 0x1 304 .byte 0x9c 305 .long 0xbd 306 .uleb128 0x6 307 .long .LASF5 308 .byte 0x1 309 .byte 0x16 310 .long 0xbd 311 .long .LLST3 312 .uleb128 0x6 313 .long .LASF6 314 .byte 0x1 315 .byte 0x16 316 .long 0xc4 317 .long .LLST4 318 .byte 0x0 319 .uleb128 0x7 320 .byte 0x4 321 .byte 0x5 322 .string "int" 323 .uleb128 0x8 324 .byte 0x4 325 .long 0xca 326 .uleb128 0x8 327 .byte 0x4 328 .long 0xd0 329 .uleb128 0x5 330 .byte 0x1 331 .byte 0x6 332 .long .LASF8 333 .byte 0x0 334 .section .debug_abbrev 335 .uleb128 0x1 336 .uleb128 0x11 337 .byte 0x1 338 .uleb128 0x25 339 .uleb128 0xe 340 .uleb128 0x13 341 .uleb128 0xb 342 .uleb128 0x3 343 .uleb128 0xe 344 .uleb128 0x1b 345 .uleb128 0xe 346 .uleb128 0x11 347 .uleb128 0x1 348 .uleb128 0x12 349 .uleb128 0x1 350 .uleb128 0x10 351 .uleb128 0x6 352 .byte 0x0 353 .byte 0x0 354 .uleb128 0x2 355 .uleb128 0x2e 356 .byte 0x1 357 .uleb128 0x3f 358 .uleb128 0xc 359 .uleb128 0x3 360 .uleb128 0xe 361 .uleb128 0x3a 362 .uleb128 0xb 363 .uleb128 0x3b 364 .uleb128 0xb 365 .uleb128 0x27 366 .uleb128 0xc 367 .uleb128 0x49 368 .uleb128 0x13 369 .uleb128 0x11 370 .uleb128 0x1 371 .uleb128 0x12 372 .uleb128 0x1 373 .uleb128 0x40 374 .uleb128 0xa 375 .uleb128 0x1 376 .uleb128 0x13 377 .byte 0x0 378 .byte 0x0 379 .uleb128 0x3 380 .uleb128 0x5 381 .byte 0x0 382 .uleb128 0x3 383 .uleb128 0x8 384 .uleb128 0x3a 385 .uleb128 0xb 386 .uleb128 0x3b 387 .uleb128 0xb 388 .uleb128 0x49 389 .uleb128 0x13 390 .uleb128 0x2 391 .uleb128 0xa 392 .byte 0x0 393 .byte 0x0 394 .uleb128 0x4 395 .uleb128 0x34 396 .byte 0x0 397 .uleb128 0x3 398 .uleb128 0xe 399 .uleb128 0x3a 400 .uleb128 0xb 401 .uleb128 0x3b 402 .uleb128 0xb 403 .uleb128 0x49 404 .uleb128 0x13 405 .uleb128 0x2 406 .uleb128 0x6 407 .byte 0x0 408 .byte 0x0 409 .uleb128 0x5 410 .uleb128 0x24 411 .byte 0x0 412 .uleb128 0xb 413 .uleb128 0xb 414 .uleb128 0x3e 415 .uleb128 0xb 416 .uleb128 0x3 417 .uleb128 0xe 418 .byte 0x0 419 .byte 0x0 420 .uleb128 0x6 421 .uleb128 0x5 422 .byte 0x0 423 .uleb128 0x3 424 .uleb128 0xe 425 .uleb128 0x3a 426 .uleb128 0xb 427 .uleb128 0x3b 428 .uleb128 0xb 429 .uleb128 0x49 430 .uleb128 0x13 431 .uleb128 0x2 432 .uleb128 0x6 433 .byte 0x0 434 .byte 0x0 435 .uleb128 0x7 436 .uleb128 0x24 437 .byte 0x0 438 .uleb128 0xb 439 .uleb128 0xb 440 .uleb128 0x3e 441 .uleb128 0xb 442 .uleb128 0x3 443 .uleb128 0x8 444 .byte 0x0 445 .byte 0x0 446 .uleb128 0x8 447 .uleb128 0xf 448 .byte 0x0 449 .uleb128 0xb 450 .uleb128 0xb 451 .uleb128 0x49 452 .uleb128 0x13 453 .byte 0x0 454 .byte 0x0 455 .byte 0x0 456 .section .debug_pubnames,"",@progbits 457 .long 0x20 458 .value 0x2 459 .long .Ldebug_info0 460 .long 0xd8 461 .long 0x25 462 .string "func" 463 .long 0x83 464 .string "main" 465 .long 0x0 466 .section .debug_aranges,"",@progbits 467 .long 0x1c 468 .value 0x2 469 .long .Ldebug_info0 470 .byte 0x4 471 .byte 0x0 472 .value 0x0 473 .value 0x0 474 .long .Ltext0 475 .long .Letext0-.Ltext0 476 .long 0x0 477 .long 0x0 478 .section .debug_str,"MS",@progbits,1 479.LASF7: 480 .string "unsigned int" 481.LASF3: 482 .string "func" 483.LASF0: 484 .string "uses_stack_op" 485.LASF5: 486 .string "argc" 487.LASF10: 488 .string "valop.c" 489.LASF2: 490 .string "result" 491.LASF8: 492 .string "char" 493.LASF9: 494 .string "GNU C 4.5.0 20090818 (experimental) [var-tracking-assignments-branch revision 150964]" 495.LASF4: 496 .string "main" 497.LASF11: 498 .string "/tmp" 499.LASF1: 500 .string "uses_lit_op" 501.LASF6: 502 .string "argv" 503 .ident "GCC: (GNU) 4.5.0 20090818 (experimental) [var-tracking-assignments-branch revision 150964]" 504 .section .note.GNU-stack,"",@progbits 505